From eb061f5119325e666f0dff40d4089e5c1df58e17 Mon Sep 17 00:00:00 2001 From: cvs2git Date: Sun, 16 Mar 2008 19:58:34 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'TRIXBOX_2_6'. --- AGPL | 662 - CREDITS | 178 - FS/Changes | 5 - FS/FS.pm | 428 - FS/FS/AccessRight.pm | 295 - FS/FS/CGI.pm | 425 - FS/FS/ClientAPI.pm | 37 - FS/FS/ClientAPI/Agent.pm | 125 - FS/FS/ClientAPI/MyAccount.pm | 1291 -- FS/FS/ClientAPI/Signup.pm | 514 - FS/FS/ClientAPI/passwd.pm | 46 - FS/FS/ClientAPI_SessionCache.pm | 78 - FS/FS/Conf.pm | 2207 -- FS/FS/ConfDefaults.pm | 73 - FS/FS/ConfItem.pm | 63 - FS/FS/Conf_compat17.pm | 2196 -- FS/FS/Cron/backup.pm | 43 - FS/FS/Cron/bill.pm | 150 - FS/FS/Cron/expire_user_pref.pm | 20 - FS/FS/Cron/notify.pm | 149 - FS/FS/Cron/vacuum.pm | 23 - FS/FS/CurrentUser.pm | 67 - FS/FS/Daemon.pm | 92 - FS/FS/InitHandler.pm | 91 - FS/FS/Misc.pm | 576 - FS/FS/Misc/prune.pm | 126 - FS/FS/Msgcat.pm | 98 - FS/FS/Pony.pm | 23 - FS/FS/Record.pm | 2351 -- FS/FS/Report.pm | 46 - FS/FS/Report/Table.pm | 27 - FS/FS/Report/Table/Monthly.pm | 378 - FS/FS/Schema.pm | 1962 -- FS/FS/SearchCache.pm | 96 - FS/FS/Setup.pm | 525 - FS/FS/TicketSystem.pm | 30 - FS/FS/TicketSystem/RT_External.pm | 353 - FS/FS/TicketSystem/RT_Internal.pm | 29 - FS/FS/TicketSystem/RT_Libs.pm | 10 - FS/FS/UI/Web.pm | 573 - FS/FS/UI/bytecount.pm | 96 - FS/FS/UID.pm | 390 - FS/FS/Upgrade.pm | 117 - FS/FS/XMLRPC.pm | 166 - FS/FS/access_group.pm | 162 - FS/FS/access_groupagent.pm | 134 - FS/FS/access_right.pm | 127 - FS/FS/access_user.pm | 433 - FS/FS/access_user_pref.pm | 129 - FS/FS/access_usergroup.pm | 145 - FS/FS/acct_rt_transaction.pm | 316 - FS/FS/acct_snarf.pm | 128 - FS/FS/addr_block.pm | 341 - FS/FS/agent.pm | 445 - FS/FS/agent_payment_gateway.pm | 139 - FS/FS/agent_type.pm | 191 - FS/FS/banned_pay.pm | 136 - FS/FS/cdr.pm | 672 - FS/FS/cdr_calltype.pm | 115 - FS/FS/cdr_carrier.pm | 116 - FS/FS/cdr_type.pm | 119 - FS/FS/cdr_upstream_rate.pm | 138 - FS/FS/clientapi_session.pm | 121 - FS/FS/clientapi_session_field.pm | 126 - FS/FS/conf.pm | 114 - FS/FS/cust_bill.pm | 2888 --- FS/FS/cust_bill_ApplicationCommon.pm | 390 - FS/FS/cust_bill_event.pm | 380 - FS/FS/cust_bill_pay.pm | 164 - FS/FS/cust_bill_pay_batch.pm | 120 - FS/FS/cust_bill_pay_pkg.pm | 141 - FS/FS/cust_bill_pkg.pm | 320 - FS/FS/cust_bill_pkg_detail.pm | 124 - FS/FS/cust_credit.pm | 595 - FS/FS/cust_credit_bill.pm | 168 - FS/FS/cust_credit_bill_pkg.pm | 141 - FS/FS/cust_credit_refund.pm | 186 - FS/FS/cust_event.pm | 408 - FS/FS/cust_main.pm | 6250 ----- FS/FS/cust_main_Mixin.pm | 269 - FS/FS/cust_main_county.pm | 291 - FS/FS/cust_main_invoice.pm | 173 - FS/FS/cust_main_note.pm | 131 - FS/FS/cust_pay.pm | 888 - FS/FS/cust_pay_batch.pm | 277 - FS/FS/cust_pay_pending.pm | 229 - FS/FS/cust_pay_refund.pm | 188 - FS/FS/cust_pay_void.pm | 225 - FS/FS/cust_pkg.pm | 2091 -- FS/FS/cust_pkg_option.pm | 115 - FS/FS/cust_pkg_reason.pm | 122 - FS/FS/cust_refund.pm | 353 - FS/FS/cust_svc.pm | 709 - FS/FS/cust_tax_exempt.pm | 151 - FS/FS/cust_tax_exempt_pkg.pm | 136 - FS/FS/domain_record.pm | 438 - FS/FS/export_svc.pm | 322 - FS/FS/h_Common.pm | 124 - FS/FS/h_cust_bill.pm | 33 - FS/FS/h_cust_credit.pm | 33 - FS/FS/h_cust_pay.pm | 33 - FS/FS/h_cust_svc.pm | 161 - FS/FS/h_cust_tax_exempt.pm | 40 - FS/FS/h_domain_record.pm | 33 - FS/FS/h_svc_acct.pm | 78 - FS/FS/h_svc_broadband.pm | 33 - FS/FS/h_svc_domain.pm | 33 - FS/FS/h_svc_external.pm | 33 - FS/FS/h_svc_forward.pm | 85 - FS/FS/h_svc_phone.pm | 33 - FS/FS/h_svc_www.pm | 67 - FS/FS/inventory_class.pm | 164 - FS/FS/inventory_item.pm | 204 - FS/FS/m2m_Common.pm | 144 - FS/FS/m2name_Common.pm | 177 - FS/FS/msgcat.pm | 133 - FS/FS/nas.pm | 150 - FS/FS/option_Common.pm | 345 - FS/FS/part_bill_event.pm | 363 - FS/FS/part_event.pm | 428 - FS/FS/part_event/Action.pm | 224 - FS/FS/part_event/Action/addpost.pm | 24 - FS/FS/part_event/Action/apply.pm | 28 - FS/FS/part_event/Action/bill.pm | 30 - FS/FS/part_event/Action/cancel.pm | 35 - FS/FS/part_event/Action/collect.pm | 30 - FS/FS/part_event/Action/cust_bill_batch.pm | 31 - FS/FS/part_event/Action/cust_bill_comp.pm | 34 - FS/FS/part_event/Action/cust_bill_fee_percent.pm | 40 - FS/FS/part_event/Action/cust_bill_realtime_card.pm | 32 - .../part_event/Action/cust_bill_realtime_check.pm | 32 - FS/FS/part_event/Action/cust_bill_realtime_lec.pm | 32 - FS/FS/part_event/Action/cust_bill_send.pm | 27 - FS/FS/part_event/Action/cust_bill_send_agent.pm | 44 - .../part_event/Action/cust_bill_send_alternate.pm | 35 - FS/FS/part_event/Action/cust_bill_send_csv_ftp.pm | 56 - .../part_event/Action/cust_bill_send_if_newest.pm | 40 - FS/FS/part_event/Action/cust_bill_spool_csv.pm | 64 - .../Action/cust_bill_suspend_if_balance.pm | 48 - FS/FS/part_event/Action/fee.pm | 33 - FS/FS/part_event/Action/suspend.pm | 36 - FS/FS/part_event/Action/suspend_if_pkgpart.pm | 42 - FS/FS/part_event/Action/suspend_unless_pkgpart.pm | 42 - FS/FS/part_event/Condition.pm | 412 - FS/FS/part_event/Condition/agent.pm | 37 - FS/FS/part_event/Condition/agent_type.pm | 40 - FS/FS/part_event/Condition/balance.pm | 48 - FS/FS/part_event/Condition/balance_age.pm | 77 - FS/FS/part_event/Condition/balance_under.pm | 42 - FS/FS/part_event/Condition/cust_bill_age.pm | 75 - .../part_event/Condition/cust_bill_has_service.pm | 54 - FS/FS/part_event/Condition/cust_bill_owed.pm | 54 - FS/FS/part_event/Condition/cust_bill_owed_under.pm | 49 - .../Condition/cust_pay_batch_declined.pm | 51 - FS/FS/part_event/Condition/cust_status.pm | 32 - FS/FS/part_event/Condition/every.pm | 67 - FS/FS/part_event/Condition/once.pm | 55 - FS/FS/part_event/Condition/payby.pm | 50 - FS/FS/part_event/Condition/pkg_class.pm | 38 - FS/FS/part_event/Condition/pkg_status.pm | 37 - FS/FS/part_event_condition.pm | 352 - FS/FS/part_event_condition_option.pm | 151 - FS/FS/part_event_condition_option_option.pm | 129 - FS/FS/part_event_option.pm | 213 - FS/FS/part_export.pm | 469 - FS/FS/part_export/acct_plesk.pm | 121 - FS/FS/part_export/acct_sql.pm | 310 - FS/FS/part_export/apache.pm | 47 - FS/FS/part_export/artera_turbo.pm | 181 - FS/FS/part_export/bind.pm | 35 - FS/FS/part_export/bind_slave.pm | 28 - FS/FS/part_export/bsdshell.pm | 25 - FS/FS/part_export/communigate_pro.pm | 178 - FS/FS/part_export/communigate_pro_singledomain.pm | 37 - FS/FS/part_export/cp.pm | 161 - FS/FS/part_export/cpanel.pm | 192 - FS/FS/part_export/cyrus.pm | 120 - FS/FS/part_export/domain_shellcommands.pm | 165 - FS/FS/part_export/domain_sql.pm | 238 - FS/FS/part_export/everyone_net.pm | 132 - FS/FS/part_export/forward_shellcommands.pm | 182 - FS/FS/part_export/http.pm | 134 - FS/FS/part_export/infostreet.pm | 277 - FS/FS/part_export/ldap.pm | 294 - FS/FS/part_export/nas_wrapper.pm | 311 - FS/FS/part_export/null.pm | 13 - FS/FS/part_export/passwdfile.pm | 18 - FS/FS/part_export/postfix.pm | 32 - FS/FS/part_export/prizm.pm | 540 - FS/FS/part_export/radiator.pm | 167 - FS/FS/part_export/router.pm | 375 - FS/FS/part_export/shellcommands.pm | 399 - FS/FS/part_export/shellcommands_withdomain.pm | 112 - FS/FS/part_export/snmp.pm | 256 - FS/FS/part_export/sqlmail.pm | 220 - FS/FS/part_export/sqlradius.pm | 722 - FS/FS/part_export/sqlradius_withdomain.pm | 28 - FS/FS/part_export/sysvshell.pm | 25 - FS/FS/part_export/textradius.pm | 191 - FS/FS/part_export/trango.pm | 434 - FS/FS/part_export/vpopmail.pm | 254 - FS/FS/part_export/www_plesk.pm | 138 - FS/FS/part_export/www_shellcommands.pm | 190 - FS/FS/part_export_option.pm | 134 - FS/FS/part_pkg.pm | 896 - FS/FS/part_pkg/base_delayed.pm | 51 - FS/FS/part_pkg/base_rate.pm | 93 - FS/FS/part_pkg/bulk.pm | 96 - FS/FS/part_pkg/flat.pm | 168 - FS/FS/part_pkg/flat_comission.pm | 66 - FS/FS/part_pkg/flat_comission_cust.pm | 64 - FS/FS/part_pkg/flat_comission_pkg.pm | 57 - FS/FS/part_pkg/flat_delayed.pm | 68 - FS/FS/part_pkg/flat_introrate.pm | 67 - FS/FS/part_pkg/incomplete/billoneday.pm | 48 - FS/FS/part_pkg/prepaid.pm | 38 - FS/FS/part_pkg/prorate.pm | 122 - FS/FS/part_pkg/prorate_delayed.pm | 61 - FS/FS/part_pkg/sesmon_hour.pm | 56 - FS/FS/part_pkg/sesmon_minute.pm | 55 - FS/FS/part_pkg/sql_external.pm | 76 - FS/FS/part_pkg/sql_generic.pm | 87 - FS/FS/part_pkg/sqlradacct_hour.pm | 170 - FS/FS/part_pkg/subscription.pm | 108 - FS/FS/part_pkg/voip_cdr.pm | 375 - FS/FS/part_pkg/voip_sqlradacct.pm | 192 - FS/FS/part_pkg_option.pm | 131 - FS/FS/part_pkg_taxclass.pm | 158 - FS/FS/part_pop_local.pm | 113 - FS/FS/part_referral.pm | 204 - FS/FS/part_svc.pm | 825 - FS/FS/part_svc_column.pm | 120 - FS/FS/part_svc_router.pm | 33 - FS/FS/part_virtual_field.pm | 301 - FS/FS/pay_batch.pm | 538 - FS/FS/payby.pm | 185 - FS/FS/payinfo_Mixin.pm | 249 - FS/FS/payment_gateway.pm | 200 - FS/FS/payment_gateway_option.pm | 126 - FS/FS/pkg_class.pm | 113 - FS/FS/pkg_referral.pm | 126 - FS/FS/pkg_svc.pm | 160 - FS/FS/port.pm | 154 - FS/FS/prepay_credit.pm | 202 - FS/FS/queue.pm | 465 - FS/FS/queue_arg.pm | 117 - FS/FS/queue_depend.pm | 121 - FS/FS/raddb.pm | 1912 -- FS/FS/radius_usergroup.pm | 131 - FS/FS/rate.pm | 379 - FS/FS/rate_detail.pm | 202 - FS/FS/rate_prefix.pm | 139 - FS/FS/rate_region.pm | 313 - FS/FS/reason.pm | 184 - FS/FS/reason_type.pm | 211 - FS/FS/reg_code.pm | 223 - FS/FS/reg_code_pkg.pm | 139 - FS/FS/registrar.pm | 119 - FS/FS/router.pm | 140 - FS/FS/session.pm | 265 - FS/FS/svc_Common.pm | 828 - FS/FS/svc_External_Common.pm | 199 - FS/FS/svc_Parent_Mixin.pm | 103 - FS/FS/svc_acct.pm | 2664 --- FS/FS/svc_acct_pop.pm | 206 - FS/FS/svc_broadband.pm | 301 - FS/FS/svc_domain.pm | 478 - FS/FS/svc_external.pm | 204 - FS/FS/svc_forward.pm | 371 - FS/FS/svc_phone.pm | 190 - FS/FS/svc_www.pm | 312 - FS/FS/type_pkgs.pm | 125 - FS/MANIFEST | 396 - FS/MANIFEST.SKIP | 1 - FS/Makefile.PL | 10 - FS/bin/freeside-addgroup | 50 - FS/bin/freeside-addoutsource | 32 - FS/bin/freeside-addoutsourceuser | 18 - FS/bin/freeside-adduser | 119 - FS/bin/freeside-apply-credits | 21 - FS/bin/freeside-count-active-customers | 17 - FS/bin/freeside-daily | 104 - FS/bin/freeside-dbdef-create | 47 - FS/bin/freeside-delete-addr_blocks | 31 - FS/bin/freeside-deloutsource | 14 - FS/bin/freeside-deloutsourceuser | 6 - FS/bin/freeside-deluser | 64 - FS/bin/freeside-disable-reasons | 64 - FS/bin/freeside-email | 55 - FS/bin/freeside-expiration-alerter | 226 - FS/bin/freeside-fetch | 89 - FS/bin/freeside-history-requeue | 100 - FS/bin/freeside-init-config | 45 - FS/bin/freeside-monthly | 91 - FS/bin/freeside-prepaidd | 106 - FS/bin/freeside-prune-applications | 63 - FS/bin/freeside-queued | 250 - FS/bin/freeside-radgroup | 76 - FS/bin/freeside-reexport | 71 - FS/bin/freeside-reset-fixed | 69 - FS/bin/freeside-selfservice-server | 240 - FS/bin/freeside-setinvoice | 42 - FS/bin/freeside-setup | 160 - FS/bin/freeside-sqlradius-dedup-group | 82 - FS/bin/freeside-sqlradius-radacctd | 150 - FS/bin/freeside-sqlradius-reset | 104 - FS/bin/freeside-sqlradius-seconds | 58 - FS/bin/freeside-sqlradius-set-lastlog | 102 - FS/bin/freeside-upgrade | 175 - FS/t/AccessRight.t | 5 - FS/t/CGI.t | 5 - FS/t/ClientAPI.t | 5 - FS/t/ClientAPI_SessionCache.t | 5 - FS/t/Conf.t | 5 - FS/t/ConfDefaults.t | 5 - FS/t/ConfItem.t | 5 - FS/t/Cron-backup.t | 5 - FS/t/Cron-bill.t | 5 - FS/t/Cron-vacuum.t | 5 - FS/t/Daemon.t | 5 - FS/t/InitHandler.t | 5 - FS/t/Misc.t | 5 - FS/t/Msgcat.t | 5 - FS/t/Record.t | 5 - FS/t/Report-Table-Monthly.t | 5 - FS/t/Report-Table.t | 5 - FS/t/Report.t | 5 - FS/t/SearchCache.t | 5 - FS/t/UID.t | 5 - FS/t/access_group.t | 5 - FS/t/access_groupagent.t | 5 - FS/t/access_right.t | 5 - FS/t/access_user.t | 5 - FS/t/access_user_pref.t | 5 - FS/t/access_usergroup.t | 5 - FS/t/acct_rt_transaction.t | 5 - FS/t/acct_snarf.t | 5 - FS/t/agent.t | 5 - FS/t/agent_payment_gateway.t | 5 - FS/t/agent_type.t | 5 - FS/t/banned_pay.t | 5 - FS/t/cdr.t | 5 - FS/t/cdr_calltype.t | 5 - FS/t/cdr_carrier.t | 5 - FS/t/cdr_type.t | 5 - FS/t/cdr_upstream_rate.t | 5 - FS/t/clientapi_session.t | 5 - FS/t/clientapi_session_field.t | 5 - FS/t/conf.t | 5 - FS/t/cust_bill.t | 5 - FS/t/cust_bill_ApplicationCommon.t | 5 - FS/t/cust_bill_event.t | 5 - FS/t/cust_bill_pay.t | 5 - FS/t/cust_bill_pay_batch.t | 5 - FS/t/cust_bill_pay_pkg.t | 5 - FS/t/cust_bill_pkg.t | 5 - FS/t/cust_bill_pkg_detail.t | 5 - FS/t/cust_credit.t | 5 - FS/t/cust_credit_bill.t | 5 - FS/t/cust_credit_bill_pkg.t | 5 - FS/t/cust_credit_refund.t | 5 - FS/t/cust_event.t | 5 - FS/t/cust_main.t | 5 - FS/t/cust_main_Mixin.t | 5 - FS/t/cust_main_county.t | 5 - FS/t/cust_main_invoice.t | 5 - FS/t/cust_main_note.t | 5 - FS/t/cust_pay.t | 5 - FS/t/cust_pay_batch.t | 5 - FS/t/cust_pay_pending.t | 5 - FS/t/cust_pay_refund.t | 5 - FS/t/cust_pay_void.t | 5 - FS/t/cust_pkg.t | 5 - FS/t/cust_pkg_option.t | 5 - FS/t/cust_pkg_reason.t | 5 - FS/t/cust_refund.t | 5 - FS/t/cust_svc.t | 5 - FS/t/cust_tax_exempt.t | 5 - FS/t/cust_tax_exempt_pkg.t | 5 - FS/t/domain_record.t | 5 - FS/t/export_svc.t | 5 - FS/t/h_Common.t | 5 - FS/t/h_cust_bill.t | 5 - FS/t/h_cust_credit.t | 5 - FS/t/h_cust_pay.t | 5 - FS/t/h_cust_svc.t | 5 - FS/t/h_cust_tax_exempt.t | 5 - FS/t/h_domain_record.t | 5 - FS/t/h_svc_acct.t | 5 - FS/t/h_svc_broadband.t | 5 - FS/t/h_svc_domain.t | 5 - FS/t/h_svc_external.t | 5 - FS/t/h_svc_forward.t | 5 - FS/t/h_svc_www.t | 5 - FS/t/inventory_class.t | 5 - FS/t/inventory_item.t | 5 - FS/t/msgcat.t | 5 - FS/t/nas.t | 5 - FS/t/option_Common.t | 5 - FS/t/part_bill_event.t | 5 - FS/t/part_event-Action.t | 5 - FS/t/part_event-Condition.t | 5 - FS/t/part_event.t | 5 - FS/t/part_event_condition.t | 5 - FS/t/part_event_condition_option.t | 5 - FS/t/part_event_condition_option_option.t | 5 - FS/t/part_event_option.t | 5 - FS/t/part_export-acct_sql.t | 5 - FS/t/part_export-apache.t | 5 - FS/t/part_export-bind.t | 5 - FS/t/part_export-bind_slave.t | 5 - FS/t/part_export-bsdshell.t | 5 - FS/t/part_export-communigate_pro.t | 5 - FS/t/part_export-communigate_pro_singledomain.t | 5 - FS/t/part_export-cp.t | 5 - FS/t/part_export-cyrus.t | 5 - FS/t/part_export-domain_shellcommands.t | 5 - FS/t/part_export-forward_shellcommands.t | 5 - FS/t/part_export-http.t | 5 - FS/t/part_export-infostreet.t | 5 - FS/t/part_export-ldap.t | 5 - FS/t/part_export-null.t | 5 - FS/t/part_export-passwdfile.t | 5 - FS/t/part_export-postfix.t | 5 - FS/t/part_export-radiator.t | 5 - FS/t/part_export-router.t | 5 - FS/t/part_export-shellcommands.t | 5 - FS/t/part_export-shellcommands_withdomain.t | 5 - FS/t/part_export-sqlmail.t | 5 - FS/t/part_export-sqlradius.t | 5 - FS/t/part_export-sqlradius_withdomain.t | 5 - FS/t/part_export-sysvshell.t | 5 - FS/t/part_export-textradius.t | 5 - FS/t/part_export-vpopmail.t | 5 - FS/t/part_export-www_shellcommands.t | 5 - FS/t/part_export.t | 5 - FS/t/part_export_option.t | 5 - FS/t/part_pkg-flat.t | 5 - FS/t/part_pkg-flat_comission.t | 5 - FS/t/part_pkg-flat_comission_cust.t | 5 - FS/t/part_pkg-flat_comission_pkg.t | 5 - FS/t/part_pkg-flat_delayed.t | 5 - FS/t/part_pkg-prorate.t | 5 - FS/t/part_pkg-sesmon_hour.t | 5 - FS/t/part_pkg-sesmon_minute.t | 5 - FS/t/part_pkg-sql_external.t | 5 - FS/t/part_pkg-sql_generic.t | 5 - FS/t/part_pkg-sqlradacct_hour.t | 5 - FS/t/part_pkg-subscription.t | 5 - FS/t/part_pkg-voip_cdr.t | 5 - FS/t/part_pkg-voip_sqlradacct.t | 5 - FS/t/part_pkg.t | 5 - FS/t/part_pkg_option.t | 5 - FS/t/part_pkg_taxclass.t | 5 - FS/t/part_pop_local.t | 5 - FS/t/part_referral.t | 5 - FS/t/part_svc.t | 5 - FS/t/part_svc_column.t | 5 - FS/t/pay_batch.t | 5 - FS/t/payby.t | 5 - FS/t/payinfo_Mixin.t | 5 - FS/t/payment_gateway.t | 5 - FS/t/payment_gateway_option.t | 5 - FS/t/pkg_class.t | 5 - FS/t/pkg_referral.t | 5 - FS/t/pkg_svc.t | 5 - FS/t/port.t | 5 - FS/t/prepay_credit.t | 5 - FS/t/queue.t | 5 - FS/t/queue_arg.t | 5 - FS/t/queue_depend.t | 5 - FS/t/raddb.t | 5 - FS/t/radius_usergroup.t | 5 - FS/t/rate.t | 5 - FS/t/rate_detail.t | 5 - FS/t/rate_prefix.t | 5 - FS/t/rate_region.t | 5 - FS/t/reason.t | 5 - FS/t/reason_type.t | 5 - FS/t/reg_code.t | 5 - FS/t/reg_code_pkg.t | 5 - FS/t/registrar.t | 5 - FS/t/session.t | 5 - FS/t/svc_Common.t | 5 - FS/t/svc_External_Common.t | 5 - FS/t/svc_Parent_Mixin.t | 5 - FS/t/svc_acct.t | 5 - FS/t/svc_acct_pop.t | 5 - FS/t/svc_broadband.t | 5 - FS/t/svc_domain.t | 5 - FS/t/svc_external.t | 5 - FS/t/svc_forward.t | 5 - FS/t/svc_phone.t | 5 - FS/t/svc_www.t | 5 - FS/t/type_pkgs.t | 5 - INSTALL | 1 - Makefile | 363 - README | 54 - SCHEMA_CHANGE | 17 - TODO | 7 - bin/add-history-records.pl | 139 - bin/all-postal-no-email | 22 - bin/apache.export | 93 - bin/artera.import | 75 - bin/backup-dvd | 45 - bin/bill-as-nextmonth | 5 - bin/bill-as-nextmonth-BILL | 5 - bin/bill-as-nextyear | 5 - bin/bill-as-nextyear-BILL | 5 - bin/bill-for-nextmonth | 5 - bin/bill-for-nextyear | 5 - bin/bill-nextmonth | 5 - bin/bill-nextyear | 5 - bin/billco-upload | 20 - bin/bind.export | 195 - bin/bind.import | 234 - bin/breakdown-bill-applications | 25 - bin/bsdshell.export | 114 - bin/cdr_calltype.import | 41 - bin/cdr_upstream_rate.import | 142 - bin/create-fetchmailrc | 47 - bin/customer-faker | 122 - bin/expand-country | 29 - bin/explain-ar-total.sql | 976 - bin/find-overapplied | 27 - bin/fix-sequences | 69 - bin/freeside-init | 60 - bin/freeside-migrate-events | 229 - bin/freeside-session-kill | 103 - bin/freeside-upgrade-unicode | 72 - bin/freeside.import | 146 - bin/fs-migrate-cust_tax_exempt | 323 - bin/fs-migrate-part_svc | 41 - bin/fs-migrate-payref | 31 - bin/fs-migrate-svc_acct_sm | 227 - bin/fs-radius-add-check | 68 - bin/fs-radius-add-reply | 69 - bin/generate-prepay | 35 - bin/generate-raddb | 53 - bin/generate-table-module | 92 - bin/generate-tests | 21 - bin/import-county-tax-rates | 30 - bin/ispman.ldap.import | 114 - bin/mapsecrets2access_user | 87 - bin/masonize | 80 - bin/passwd.import | 121 - bin/payment-faker | 54 - bin/pg-readonly | 24 - bin/pg-version | 13 - bin/pod2x | 148 - bin/postfix.export | 122 - bin/postfix_courierimap.import | 137 - bin/print-schema | 7 - bin/rate-us.import | 109 - bin/rate.import | 95 - bin/reset-cust_credit-otaker | 88 - bin/rollback | 38 - bin/rotate-cdrs | 38 - bin/rt-drop-tables | 29 - bin/rt-update-links | 36 - bin/sendmail.import | 178 - bin/sequences.reset | 32 - bin/shadow.reimport | 125 - bin/slony-setup | 109 - bin/sqlradius-norealm.reimport | 113 - bin/sqlradius.import | 152 - bin/sqlradius.reimport | 160 - bin/strip-eps | 20 - bin/svc_acct.import | 237 - bin/svc_acct_pop.import | 59 - bin/svc_broadband.renumber | 84 - bin/svc_domain.erase | 15 - bin/sysvshell.export | 112 - conf/agent_defaultpkg | 0 conf/alerter_template | 18 - conf/blank_logo.eps | 22 - conf/company_address | 2 - conf/company_name | 1 - conf/cust_pkg-change_svcpart | 0 conf/declinetemplate | 10 - conf/home | 1 - conf/impending_recur_template | 20 - conf/invoice_from | 1 - conf/invoice_html | 166 - conf/invoice_html_statement | 124 - conf/invoice_latex | 260 - conf/invoice_latex.diff | 138 - conf/invoice_latex_statement | 244 - conf/invoice_latexfooter | 1 - conf/invoice_latexnotes | 8 - conf/invoice_latexnotes_statement | 8 - conf/invoice_latexsmallfooter | 1 - conf/invoice_template | 26 - conf/invoice_template_statement | 26 - conf/locale | 1 - conf/logo.eps | 13510 ----------- conf/logo.png | Bin 4887 -> 0 bytes conf/lpr | 1 - conf/maxsearchrecordsperpage | 1 - conf/payment_receipt_email | 26 - conf/report_template | 14 - conf/shells | 5 - conf/show-msgcat-codes | 0 conf/smtpmachine | 1 - conf/soadefaultttl | 1 - conf/soaexpire | 1 - conf/soarefresh | 1 - conf/soaretry | 1 - conf/ticket_system | 1 - conf/welcome_letter | 121 - debian/README.Debian | 6 - debian/changelog | 9 - debian/conffiles.ex | 7 - debian/control | 59 - debian/copyright | 10 - debian/cron.d.ex | 4 - debian/dirs | 2 - debian/docs | 3 - debian/ex.doc-base.package | 22 - debian/freeside-doc.docs | 2 - debian/freeside-doc.files | 2 - debian/init.d.ex | 70 - debian/manpage.1.ex | 60 - debian/manpage.sgml.ex | 143 - debian/menu.ex | 2 - debian/postinst.ex | 47 - debian/postrm.ex | 36 - debian/preinst.ex | 42 - debian/prerm.ex | 37 - debian/rules | 113 - debian/watch.ex | 5 - eg/TEMPLATE_cust_main.import | 196 - eg/export_template.pm | 113 - eg/part_event-Action-template.pm | 55 - eg/part_event-Condition-template.pm | 57 - eg/table_template-svc.pm | 215 - eg/table_template.pm | 118 - eg/xmlrpc-example.pl | 23 - etc/abbr_state.txt | 72 - etc/countries.txt | 239 - etc/domain-template.txt | 231 - etc/megapop.pl | 114 - etc/sql-reserved-words.txt | 103 - fs_passwd/fs_passwd | 131 - fs_selfadmin/FS-MailAdminServer/MailAdminClient.pm | 537 - fs_selfadmin/FS-MailAdminServer/cgi/mailadmin.cgi | 698 - fs_selfadmin/FS-MailAdminServer/fs_mailadmind | 366 - fs_selfadmin/README | 27 - fs_selfadmin/fs_mailadmin_server | 642 - fs_selfservice/DEPLOY | 29 - fs_selfservice/FS-SelfService/Changes | 6 - fs_selfservice/FS-SelfService/MANIFEST | 8 - fs_selfservice/FS-SelfService/Makefile.PL | 20 - fs_selfservice/FS-SelfService/SelfService.pm | 1467 -- .../FS-SelfService/SelfService/XMLRPC.pm | 88 - .../FS-SelfService/cgi/ach_payment_results.html | 16 - fs_selfservice/FS-SelfService/cgi/agent.cgi | 458 - .../FS-SelfService/cgi/agent_customer_menu.html | 7 - .../FS-SelfService/cgi/agent_delete_svc.html | 19 - fs_selfservice/FS-SelfService/cgi/agent_login.html | 22 - .../FS-SelfService/cgi/agent_logout.html | 5 - fs_selfservice/FS-SelfService/cgi/agent_main.html | 37 - fs_selfservice/FS-SelfService/cgi/agent_menu.html | 15 - .../FS-SelfService/cgi/agent_order_pkg.html | 19 - .../FS-SelfService/cgi/agent_provision.html | 25 - .../cgi/agent_provision_svc_acct.html | 19 - fs_selfservice/FS-SelfService/cgi/bill.html | 7 - fs_selfservice/FS-SelfService/cgi/card.html | 73 - fs_selfservice/FS-SelfService/cgi/change_bill.html | 25 - .../FS-SelfService/cgi/change_password.html | 53 - fs_selfservice/FS-SelfService/cgi/change_pay.html | 75 - fs_selfservice/FS-SelfService/cgi/change_pkg.html | 37 - fs_selfservice/FS-SelfService/cgi/change_ship.html | 104 - fs_selfservice/FS-SelfService/cgi/check.html | 54 - fs_selfservice/FS-SelfService/cgi/contact.html | 135 - .../FS-SelfService/cgi/cust_bill-logo.cgi | 19 - .../FS-SelfService/cgi/customer_change_pkg.html | 10 - .../FS-SelfService/cgi/customer_order_pkg.html | 10 - fs_selfservice/FS-SelfService/cgi/cvv2.html | 25 - fs_selfservice/FS-SelfService/cgi/cvv2.png | Bin 3854 -> 0 bytes fs_selfservice/FS-SelfService/cgi/cvv2_amex.png | Bin 4573 -> 0 bytes fs_selfservice/FS-SelfService/cgi/decline.html | 5 - fs_selfservice/FS-SelfService/cgi/delete_svc.html | 17 - .../FS-SelfService/cgi/list_customers.html | 39 - fs_selfservice/FS-SelfService/cgi/login.html | 29 - fs_selfservice/FS-SelfService/cgi/logout.html | 5 - .../FS-SelfService/cgi/make_ach_payment.html | 61 - .../FS-SelfService/cgi/make_payment.html | 71 - fs_selfservice/FS-SelfService/cgi/map.gif | Bin 8181 -> 0 bytes fs_selfservice/FS-SelfService/cgi/myaccount.html | 99 - .../FS-SelfService/cgi/myaccount_menu.html | 94 - fs_selfservice/FS-SelfService/cgi/order_pkg.html | 75 - fs_selfservice/FS-SelfService/cgi/passwd.cgi | 61 - fs_selfservice/FS-SelfService/cgi/passwd.html | 28 - .../FS-SelfService/cgi/payment_results.html | 16 - .../FS-SelfService/cgi/process_change_bill.html | 13 - .../cgi/process_change_password.html | 13 - .../FS-SelfService/cgi/process_change_pay.html | 13 - .../FS-SelfService/cgi/process_change_pkg.html | 13 - .../FS-SelfService/cgi/process_change_ship.html | 13 - .../FS-SelfService/cgi/process_order_pkg.html | 13 - .../FS-SelfService/cgi/process_order_recharge.html | 13 - .../FS-SelfService/cgi/process_svc_acct.html | 13 - .../FS-SelfService/cgi/process_svc_external.html | 15 - fs_selfservice/FS-SelfService/cgi/promocode.html | 14 - fs_selfservice/FS-SelfService/cgi/provision.html | 10 - .../FS-SelfService/cgi/provision_list.html | 92 - .../FS-SelfService/cgi/provision_svc_acct.html | 11 - .../FS-SelfService/cgi/recharge_prepay.html | 36 - .../FS-SelfService/cgi/recharge_results.html | 24 - fs_selfservice/FS-SelfService/cgi/regcode.html | 14 - fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 647 - .../FS-SelfService/cgi/signup-agentselect.html | 195 - .../FS-SelfService/cgi/signup-alternate.html | 218 - .../FS-SelfService/cgi/signup-billaddress.html | 307 - .../FS-SelfService/cgi/signup-freeoption.html | 262 - .../FS-SelfService/cgi/signup-snarf.html | 228 - fs_selfservice/FS-SelfService/cgi/signup.cgi | 349 - fs_selfservice/FS-SelfService/cgi/signup.html | 382 - fs_selfservice/FS-SelfService/cgi/stateselect.html | 134 - .../FS-SelfService/cgi/success-delayed.html | 16 - fs_selfservice/FS-SelfService/cgi/success.html | 11 - fs_selfservice/FS-SelfService/cgi/svc_acct.html | 58 - .../FS-SelfService/cgi/view_customer.html | 29 - .../FS-SelfService/cgi/view_invoice.html | 15 - .../FS-SelfService/cgi/view_support_details.html | 80 - fs_selfservice/FS-SelfService/cgi/view_usage.html | 59 - .../FS-SelfService/cgi/view_usage_details.html | 86 - fs_selfservice/FS-SelfService/cgi/xmlrpc.cgi | 18 - .../FS-SelfService/freeside-selfservice-clientd | 272 - .../freeside-selfservice-xmlrpc-server | 59 - fs_selfservice/FS-SelfService/ieak.template | 40 - fs_selfservice/FS-SelfService/test.pl | 17 - fs_selfservice/fs_passwd_test | 19 - fs_selfservice/php/freeside.class.php | 33 - fs_selfservice/php/freeside.login_example.php | 37 - fs_selfservice/php/freeside_signup_example.php | 49 - fs_sesmon/FS-SessionClient/Changes | 5 - fs_sesmon/FS-SessionClient/MANIFEST | 11 - fs_sesmon/FS-SessionClient/MANIFEST.SKIP | 1 - fs_sesmon/FS-SessionClient/Makefile.PL | 10 - fs_sesmon/FS-SessionClient/SessionClient.pm | 118 - fs_sesmon/FS-SessionClient/bin/freeside-login | 36 - fs_sesmon/FS-SessionClient/bin/freeside-logout | 36 - fs_sesmon/FS-SessionClient/cgi/login.cgi | 108 - fs_sesmon/FS-SessionClient/cgi/logout.cgi | 83 - fs_sesmon/FS-SessionClient/fs_sessiond | 65 - fs_sesmon/FS-SessionClient/test.pl | 21 - fs_sesmon/fs_session_server | 140 - htetc/freeside-base1.99.conf | 21 - htetc/freeside-base1.conf | 18 - htetc/freeside-base2.conf | 21 - htetc/freeside-rt.conf | 36 - htetc/handler.pl | 390 - httemplate/.htaccess | 3 - httemplate/autohandler | 35 - httemplate/browse/access_group.html | 108 - httemplate/browse/access_user.html | 61 - httemplate/browse/addr_block.cgi | 91 - httemplate/browse/agent.cgi | 401 - httemplate/browse/agent_type.cgi | 61 - httemplate/browse/cust_main_county.cgi | 288 - httemplate/browse/elements/browse.html | 6 - httemplate/browse/inventory_class.html | 93 - httemplate/browse/invoice_template.html | 124 - httemplate/browse/msgcat.cgi | 44 - httemplate/browse/nas.cgi | 82 - httemplate/browse/part_bill_event.cgi | 122 - httemplate/browse/part_event.html | 157 - httemplate/browse/part_export.cgi | 65 - httemplate/browse/part_pkg.cgi | 231 - httemplate/browse/part_referral.html | 181 - httemplate/browse/part_svc.cgi | 215 - httemplate/browse/part_virtual_field.cgi | 42 - httemplate/browse/payment_gateway.html | 94 - httemplate/browse/pkg_class.html | 31 - httemplate/browse/rate.cgi | 67 - httemplate/browse/rate_detail.html | 95 - httemplate/browse/rate_region.html | 53 - httemplate/browse/reason.html | 53 - httemplate/browse/reason_type.html | 68 - httemplate/browse/router.cgi | 76 - httemplate/browse/svc_acct_pop.cgi | 74 - httemplate/config/config-delete.cgi | 15 - httemplate/config/config-download.cgi | 28 - httemplate/config/config-process.cgi | 68 - httemplate/config/config-view.cgi | 159 - httemplate/config/config.cgi | 319 - httemplate/docs/ach.html | 10 - httemplate/docs/admin.html | 41 - httemplate/docs/cvv2.html | 24 - httemplate/docs/ieak.html | 75 - httemplate/docs/index.html | 32 - httemplate/docs/legacy.html | 39 - .../docs/man/FS/part_export/.cvs_is_on_crack | 0 httemplate/docs/overview-new.dia | Bin 2422 -> 0 bytes httemplate/docs/overview-new.png | Bin 29062 -> 0 bytes httemplate/docs/overview.dia | Bin 2800 -> 0 bytes httemplate/docs/overview.png | Bin 13064 -> 0 bytes httemplate/docs/passwd.html | 23 - httemplate/docs/schema.dia | Bin 16364 -> 0 bytes httemplate/docs/schema.html | 533 - httemplate/docs/schema.png | Bin 681043 -> 0 bytes httemplate/docs/session.html | 59 - httemplate/docs/signup.html | 54 - httemplate/docs/ssh.html | 16 - httemplate/edit/REAL_cust_pkg.cgi | 181 - httemplate/edit/access_group.html | 80 - httemplate/edit/access_user.html | 50 - httemplate/edit/agent.cgi | 98 - httemplate/edit/agent_payment_gateway.html | 68 - httemplate/edit/agent_type.cgi | 57 - httemplate/edit/bulk-cust_svc.html | 97 - httemplate/edit/cust_bill_pay.cgi | 86 - httemplate/edit/cust_credit.cgi | 84 - httemplate/edit/cust_credit_bill.cgi | 93 - httemplate/edit/cust_main.cgi | 543 - httemplate/edit/cust_main/billing.html | 484 - httemplate/edit/cust_main/contact.html | 183 - httemplate/edit/cust_main/select-country.html | 76 - httemplate/edit/cust_main/select-county.html | 113 - httemplate/edit/cust_main/select-domain.html | 67 - httemplate/edit/cust_main/select-state.html | 24 - httemplate/edit/cust_main_county-expand.cgi | 50 - httemplate/edit/cust_main_county.html | 62 - httemplate/edit/cust_main_note.cgi | 45 - httemplate/edit/cust_pay.cgi | 147 - httemplate/edit/cust_pkg.cgi | 150 - httemplate/edit/cust_refund.cgi | 141 - httemplate/edit/elements/edit.html | 536 - httemplate/edit/elements/svc_Common.html | 99 - httemplate/edit/inventory_class.html | 16 - httemplate/edit/invoice_logo.html | 136 - httemplate/edit/invoice_template.html | 80 - httemplate/edit/msgcat.cgi | 54 - httemplate/edit/part_bill_event.cgi | 554 - httemplate/edit/part_event.html | 681 - httemplate/edit/part_export.cgi | 123 - httemplate/edit/part_pkg.cgi | 451 - httemplate/edit/part_pkg_taxclass.html | 32 - httemplate/edit/part_referral.html | 19 - httemplate/edit/part_svc.cgi | 361 - httemplate/edit/part_virtual_field.cgi | 104 - httemplate/edit/payment_gateway.html | 132 - httemplate/edit/pkg_class.html | 22 - httemplate/edit/prepay_credit.cgi | 110 - httemplate/edit/process/REAL_cust_pkg.cgi | 36 - httemplate/edit/process/access_group.html | 16 - httemplate/edit/process/access_user.html | 21 - httemplate/edit/process/addr_block/add.cgi | 21 - httemplate/edit/process/addr_block/allocate.cgi | 26 - httemplate/edit/process/addr_block/deallocate.cgi | 25 - httemplate/edit/process/addr_block/split.cgi | 20 - httemplate/edit/process/agent.cgi | 30 - httemplate/edit/process/agent_payment_gateway.html | 29 - httemplate/edit/process/agent_type.cgi | 35 - httemplate/edit/process/bulk-cust_svc.cgi | 9 - httemplate/edit/process/cust_bill_pay.cgi | 49 - httemplate/edit/process/cust_credit.cgi | 63 - httemplate/edit/process/cust_credit_bill.cgi | 50 - httemplate/edit/process/cust_main.cgi | 203 - .../edit/process/cust_main_county-collapse.cgi | 44 - .../edit/process/cust_main_county-expand.cgi | 78 - httemplate/edit/process/cust_main_county.html | 13 - httemplate/edit/process/cust_main_note.cgi | 60 - httemplate/edit/process/cust_pay.cgi | 55 - httemplate/edit/process/cust_pkg.cgi | 75 - httemplate/edit/process/cust_refund.cgi | 43 - httemplate/edit/process/cust_svc.cgi | 30 - httemplate/edit/process/domain_record.cgi | 30 - httemplate/edit/process/elements/process.html | 225 - httemplate/edit/process/elements/svc_Common.html | 15 - httemplate/edit/process/generic.cgi | 77 - httemplate/edit/process/inventory_class.html | 11 - httemplate/edit/process/invoice_logo.html | 25 - httemplate/edit/process/invoice_template.html | 15 - httemplate/edit/process/msgcat.cgi | 22 - httemplate/edit/process/part_bill_event.cgi | 92 - httemplate/edit/process/part_event.html | 86 - httemplate/edit/process/part_export.cgi | 41 - httemplate/edit/process/part_pkg.cgi | 113 - httemplate/edit/process/part_pkg_taxclass.html | 53 - httemplate/edit/process/part_referral.html | 12 - httemplate/edit/process/part_svc.cgi | 9 - httemplate/edit/process/payment_gateway.html | 35 - httemplate/edit/process/pkg_class.html | 11 - httemplate/edit/process/prepay_credit.cgi | 62 - httemplate/edit/process/quick-charge.cgi | 50 - httemplate/edit/process/quick-cust_pkg.cgi | 33 - httemplate/edit/process/rate.cgi | 9 - httemplate/edit/process/rate_detail.html | 13 - httemplate/edit/process/rate_region.cgi | 53 - httemplate/edit/process/reason.html | 12 - httemplate/edit/process/reason_type.html | 12 - httemplate/edit/process/reg_code.cgi | 45 - httemplate/edit/process/router.cgi | 70 - httemplate/edit/process/svc_Common.html | 16 - httemplate/edit/process/svc_acct.cgi | 64 - httemplate/edit/process/svc_acct_pop.cgi | 30 - httemplate/edit/process/svc_broadband.cgi | 38 - httemplate/edit/process/svc_domain.cgi | 33 - httemplate/edit/process/svc_external.cgi | 31 - httemplate/edit/process/svc_forward.cgi | 31 - httemplate/edit/process/svc_phone.html | 10 - httemplate/edit/process/svc_www.cgi | 38 - httemplate/edit/quick-charge.html | 182 - httemplate/edit/rate.cgi | 43 - httemplate/edit/rate_detail.html | 59 - httemplate/edit/rate_region.cgi | 153 - httemplate/edit/reason.html | 50 - httemplate/edit/reason_type.html | 29 - httemplate/edit/reg_code.cgi | 44 - httemplate/edit/router.cgi | 78 - httemplate/edit/svc_Common.html | 33 - httemplate/edit/svc_acct.cgi | 452 - httemplate/edit/svc_acct_pop.cgi | 50 - httemplate/edit/svc_broadband.cgi | 254 - httemplate/edit/svc_domain.cgi | 91 - httemplate/edit/svc_external.cgi | 102 - httemplate/edit/svc_forward.cgi | 175 - httemplate/edit/svc_phone.cgi | 17 - httemplate/edit/svc_www.cgi | 240 - httemplate/elements/calendar-en.js | 127 - httemplate/elements/calendar-setup.js | 200 - httemplate/elements/calendar-win2k-2.css | 271 - httemplate/elements/calendar.js | 1806 -- httemplate/elements/calendar_stripped.js | 14 - httemplate/elements/checkboxes-table-name.html | 113 - httemplate/elements/checkboxes-table.html | 123 - httemplate/elements/cssexpr.js | 66 - httemplate/elements/dashboard-toplist.html | 109 - httemplate/elements/error.html | 4 - httemplate/elements/errorpage.html | 11 - .../editor/css/behaviors/disablehandles.htc | 15 - .../editor/css/behaviors/showtableborders.htc | 36 - .../fckeditor/editor/css/fck_editorarea.css | 91 - .../elements/fckeditor/editor/css/fck_internal.css | 111 - .../editor/css/fck_showtableborders_gecko.css | 42 - .../fckeditor/editor/css/images/fck_anchor.gif | Bin 184 -> 0 bytes .../fckeditor/editor/css/images/fck_flashlogo.gif | Bin 599 -> 0 bytes .../editor/css/images/fck_hiddenfield.gif | Bin 105 -> 0 bytes .../fckeditor/editor/css/images/fck_pagebreak.gif | Bin 54 -> 0 bytes .../editor/dialog/common/fck_dialog_common.css | 83 - .../editor/dialog/common/fck_dialog_common.js | 154 - .../editor/dialog/common/fcknumericfield.htc | 24 - .../editor/dialog/common/images/locked.gif | Bin 74 -> 0 bytes .../editor/dialog/common/images/reset.gif | Bin 104 -> 0 bytes .../editor/dialog/common/images/unlocked.gif | Bin 75 -> 0 bytes .../editor/dialog/common/moz-bindings.xml | 30 - .../fckeditor/editor/dialog/fck_about.html | 155 - .../editor/dialog/fck_about/logo_fckeditor.gif | Bin 2044 -> 0 bytes .../editor/dialog/fck_about/logo_fredck.gif | Bin 920 -> 0 bytes .../fckeditor/editor/dialog/fck_anchor.html | 236 - .../fckeditor/editor/dialog/fck_button.html | 107 - .../fckeditor/editor/dialog/fck_checkbox.html | 107 - .../fckeditor/editor/dialog/fck_colorselector.html | 171 - .../fckeditor/editor/dialog/fck_docprops.html | 600 - .../dialog/fck_docprops/fck_document_preview.html | 113 - .../elements/fckeditor/editor/dialog/fck_find.html | 173 - .../fckeditor/editor/dialog/fck_flash.html | 146 - .../fckeditor/editor/dialog/fck_flash/fck_flash.js | 286 - .../editor/dialog/fck_flash/fck_flash_preview.html | 46 - .../elements/fckeditor/editor/dialog/fck_form.html | 105 - .../fckeditor/editor/dialog/fck_hiddenfield.html | 116 - .../fckeditor/editor/dialog/fck_image.html | 252 - .../fckeditor/editor/dialog/fck_image/fck_image.js | 493 - .../editor/dialog/fck_image/fck_image_preview.html | 66 - .../elements/fckeditor/editor/dialog/fck_link.html | 293 - .../fckeditor/editor/dialog/fck_link/fck_link.js | 698 - .../fckeditor/editor/dialog/fck_listprop.html | 116 - .../fckeditor/editor/dialog/fck_paste.html | 285 - .../fckeditor/editor/dialog/fck_radiobutton.html | 107 - .../fckeditor/editor/dialog/fck_replace.html | 156 - .../fckeditor/editor/dialog/fck_select.html | 176 - .../editor/dialog/fck_select/fck_select.js | 194 - .../fckeditor/editor/dialog/fck_smiley.html | 105 - .../fckeditor/editor/dialog/fck_source.html | 65 - .../fckeditor/editor/dialog/fck_specialchar.html | 113 - .../fckeditor/editor/dialog/fck_spellerpages.html | 64 - .../fck_spellerpages/spellerpages/blank.html | 0 .../fck_spellerpages/spellerpages/controlWindow.js | 87 - .../fck_spellerpages/spellerpages/controls.html | 153 - .../spellerpages/server-scripts/spellchecker.pl | 180 - .../fck_spellerpages/spellerpages/spellChecker.js | 462 - .../spellerpages/spellchecker.html | 71 - .../fck_spellerpages/spellerpages/spellerStyle.css | 49 - .../fck_spellerpages/spellerpages/wordWindow.js | 272 - .../fckeditor/editor/dialog/fck_table.html | 291 - .../fckeditor/editor/dialog/fck_tablecell.html | 255 - .../fckeditor/editor/dialog/fck_template.html | 242 - .../dialog/fck_template/images/template1.gif | Bin 375 -> 0 bytes .../dialog/fck_template/images/template2.gif | Bin 333 -> 0 bytes .../dialog/fck_template/images/template3.gif | Bin 422 -> 0 bytes .../fckeditor/editor/dialog/fck_textarea.html | 94 - .../fckeditor/editor/dialog/fck_textfield.html | 139 - httemplate/elements/fckeditor/editor/fckdebug.html | 153 - .../elements/fckeditor/editor/fckdialog.html | 324 - .../elements/fckeditor/editor/fckeditor.html | 227 - .../fckeditor/editor/fckeditor.original.html | 319 - .../editor/filemanager/browser/default/browser.css | 88 - .../filemanager/browser/default/browser.html | 154 - .../browser/default/connectors/perl/basexml.pl | 63 - .../browser/default/connectors/perl/commands.pl | 158 - .../browser/default/connectors/perl/connector.cgi | 137 - .../browser/default/connectors/perl/io.pl | 131 - .../browser/default/connectors/perl/upload_fck.pl | 667 - .../browser/default/connectors/perl/util.pl | 60 - .../browser/default/frmactualfolder.html | 67 - .../browser/default/frmcreatefolder.html | 113 - .../filemanager/browser/default/frmfolders.html | 196 - .../browser/default/frmresourceslist.html | 160 - .../browser/default/frmresourcetype.html | 65 - .../filemanager/browser/default/frmupload.html | 113 - .../browser/default/images/ButtonArrow.gif | Bin 138 -> 0 bytes .../filemanager/browser/default/images/Folder.gif | Bin 128 -> 0 bytes .../browser/default/images/Folder32.gif | Bin 281 -> 0 bytes .../browser/default/images/FolderOpened.gif | Bin 132 -> 0 bytes .../browser/default/images/FolderOpened32.gif | Bin 264 -> 0 bytes .../browser/default/images/FolderUp.gif | Bin 132 -> 0 bytes .../browser/default/images/icons/32/ai.gif | Bin 1140 -> 0 bytes .../browser/default/images/icons/32/avi.gif | Bin 454 -> 0 bytes .../browser/default/images/icons/32/bmp.gif | Bin 709 -> 0 bytes .../browser/default/images/icons/32/cs.gif | Bin 224 -> 0 bytes .../default/images/icons/32/default.icon.gif | Bin 177 -> 0 bytes .../browser/default/images/icons/32/dll.gif | Bin 258 -> 0 bytes .../browser/default/images/icons/32/doc.gif | Bin 260 -> 0 bytes .../browser/default/images/icons/32/exe.gif | Bin 170 -> 0 bytes .../browser/default/images/icons/32/fla.gif | Bin 946 -> 0 bytes .../browser/default/images/icons/32/gif.gif | Bin 704 -> 0 bytes .../browser/default/images/icons/32/htm.gif | Bin 1527 -> 0 bytes .../browser/default/images/icons/32/html.gif | Bin 1527 -> 0 bytes .../browser/default/images/icons/32/jpg.gif | Bin 463 -> 0 bytes .../browser/default/images/icons/32/js.gif | Bin 274 -> 0 bytes .../browser/default/images/icons/32/mdb.gif | Bin 274 -> 0 bytes .../browser/default/images/icons/32/mp3.gif | Bin 454 -> 0 bytes .../browser/default/images/icons/32/pdf.gif | Bin 567 -> 0 bytes .../browser/default/images/icons/32/png.gif | Bin 464 -> 0 bytes .../browser/default/images/icons/32/ppt.gif | Bin 254 -> 0 bytes .../browser/default/images/icons/32/rdp.gif | Bin 1493 -> 0 bytes .../browser/default/images/icons/32/swf.gif | Bin 725 -> 0 bytes .../browser/default/images/icons/32/swt.gif | Bin 724 -> 0 bytes .../browser/default/images/icons/32/txt.gif | Bin 213 -> 0 bytes .../browser/default/images/icons/32/vsd.gif | Bin 277 -> 0 bytes .../browser/default/images/icons/32/xls.gif | Bin 271 -> 0 bytes .../browser/default/images/icons/32/xml.gif | Bin 408 -> 0 bytes .../browser/default/images/icons/32/zip.gif | Bin 368 -> 0 bytes .../browser/default/images/icons/ai.gif | Bin 403 -> 0 bytes .../browser/default/images/icons/avi.gif | Bin 249 -> 0 bytes .../browser/default/images/icons/bmp.gif | Bin 126 -> 0 bytes .../browser/default/images/icons/cs.gif | Bin 128 -> 0 bytes .../browser/default/images/icons/default.icon.gif | Bin 113 -> 0 bytes .../browser/default/images/icons/dll.gif | Bin 132 -> 0 bytes .../browser/default/images/icons/doc.gif | Bin 140 -> 0 bytes .../browser/default/images/icons/exe.gif | Bin 109 -> 0 bytes .../browser/default/images/icons/fla.gif | Bin 382 -> 0 bytes .../browser/default/images/icons/gif.gif | Bin 125 -> 0 bytes .../browser/default/images/icons/htm.gif | Bin 621 -> 0 bytes .../browser/default/images/icons/html.gif | Bin 621 -> 0 bytes .../browser/default/images/icons/jpg.gif | Bin 125 -> 0 bytes .../browser/default/images/icons/js.gif | Bin 139 -> 0 bytes .../browser/default/images/icons/mdb.gif | Bin 146 -> 0 bytes .../browser/default/images/icons/mp3.gif | Bin 249 -> 0 bytes .../browser/default/images/icons/pdf.gif | Bin 230 -> 0 bytes .../browser/default/images/icons/png.gif | Bin 125 -> 0 bytes .../browser/default/images/icons/ppt.gif | Bin 139 -> 0 bytes .../browser/default/images/icons/rdp.gif | Bin 606 -> 0 bytes .../browser/default/images/icons/swf.gif | Bin 388 -> 0 bytes .../browser/default/images/icons/swt.gif | Bin 388 -> 0 bytes .../browser/default/images/icons/txt.gif | Bin 122 -> 0 bytes .../browser/default/images/icons/vsd.gif | Bin 136 -> 0 bytes .../browser/default/images/icons/xls.gif | Bin 138 -> 0 bytes .../browser/default/images/icons/xml.gif | Bin 231 -> 0 bytes .../browser/default/images/icons/zip.gif | Bin 235 -> 0 bytes .../filemanager/browser/default/images/spacer.gif | Bin 43 -> 0 bytes .../filemanager/browser/default/js/common.js | 55 - .../filemanager/browser/default/js/fckxml.js | 129 - .../fckeditor/editor/filemanager/upload/test.html | 133 - .../elements/fckeditor/editor/images/anchor.gif | Bin 184 -> 0 bytes .../elements/fckeditor/editor/images/arrow_ltr.gif | Bin 49 -> 0 bytes .../elements/fckeditor/editor/images/arrow_rtl.gif | Bin 49 -> 0 bytes .../editor/images/smiley/msn/angel_smile.gif | Bin 445 -> 0 bytes .../editor/images/smiley/msn/angry_smile.gif | Bin 453 -> 0 bytes .../editor/images/smiley/msn/broken_heart.gif | Bin 423 -> 0 bytes .../fckeditor/editor/images/smiley/msn/cake.gif | Bin 453 -> 0 bytes .../editor/images/smiley/msn/confused_smile.gif | Bin 322 -> 0 bytes .../editor/images/smiley/msn/cry_smile.gif | Bin 473 -> 0 bytes .../editor/images/smiley/msn/devil_smile.gif | Bin 444 -> 0 bytes .../editor/images/smiley/msn/embaressed_smile.gif | Bin 1077 -> 0 bytes .../editor/images/smiley/msn/envelope.gif | Bin 1030 -> 0 bytes .../fckeditor/editor/images/smiley/msn/heart.gif | Bin 1012 -> 0 bytes .../fckeditor/editor/images/smiley/msn/kiss.gif | Bin 978 -> 0 bytes .../editor/images/smiley/msn/lightbulb.gif | Bin 303 -> 0 bytes .../editor/images/smiley/msn/omg_smile.gif | Bin 342 -> 0 bytes .../editor/images/smiley/msn/regular_smile.gif | Bin 1036 -> 0 bytes .../editor/images/smiley/msn/sad_smile.gif | Bin 1039 -> 0 bytes .../editor/images/smiley/msn/shades_smile.gif | Bin 1059 -> 0 bytes .../editor/images/smiley/msn/teeth_smile.gif | Bin 1064 -> 0 bytes .../editor/images/smiley/msn/thumbs_down.gif | Bin 992 -> 0 bytes .../editor/images/smiley/msn/thumbs_up.gif | Bin 989 -> 0 bytes .../editor/images/smiley/msn/tounge_smile.gif | Bin 1055 -> 0 bytes .../smiley/msn/whatchutalkingabout_smile.gif | Bin 1034 -> 0 bytes .../editor/images/smiley/msn/wink_smile.gif | Bin 1041 -> 0 bytes .../elements/fckeditor/editor/images/spacer.gif | Bin 43 -> 0 bytes .../fckeditor/editor/js/fckeditorcode_gecko.js | 98 - .../fckeditor/editor/js/fckeditorcode_ie.js | 99 - .../fckeditor/editor/lang/_getfontformat.html | 85 - .../fckeditor/editor/lang/_translationstatus.txt | 76 - httemplate/elements/fckeditor/editor/lang/af.js | 504 - httemplate/elements/fckeditor/editor/lang/ar.js | 504 - httemplate/elements/fckeditor/editor/lang/bg.js | 504 - httemplate/elements/fckeditor/editor/lang/bn.js | 504 - httemplate/elements/fckeditor/editor/lang/bs.js | 504 - httemplate/elements/fckeditor/editor/lang/ca.js | 504 - httemplate/elements/fckeditor/editor/lang/cs.js | 504 - httemplate/elements/fckeditor/editor/lang/da.js | 504 - httemplate/elements/fckeditor/editor/lang/de.js | 504 - httemplate/elements/fckeditor/editor/lang/el.js | 504 - httemplate/elements/fckeditor/editor/lang/en-au.js | 504 - httemplate/elements/fckeditor/editor/lang/en-ca.js | 504 - httemplate/elements/fckeditor/editor/lang/en-uk.js | 504 - httemplate/elements/fckeditor/editor/lang/en.js | 504 - httemplate/elements/fckeditor/editor/lang/eo.js | 504 - httemplate/elements/fckeditor/editor/lang/es.js | 504 - httemplate/elements/fckeditor/editor/lang/et.js | 504 - httemplate/elements/fckeditor/editor/lang/eu.js | 505 - httemplate/elements/fckeditor/editor/lang/fa.js | 504 - httemplate/elements/fckeditor/editor/lang/fi.js | 504 - httemplate/elements/fckeditor/editor/lang/fo.js | 504 - httemplate/elements/fckeditor/editor/lang/fr.js | 504 - httemplate/elements/fckeditor/editor/lang/gl.js | 504 - httemplate/elements/fckeditor/editor/lang/he.js | 504 - httemplate/elements/fckeditor/editor/lang/hi.js | 504 - httemplate/elements/fckeditor/editor/lang/hr.js | 504 - httemplate/elements/fckeditor/editor/lang/hu.js | 504 - httemplate/elements/fckeditor/editor/lang/it.js | 504 - httemplate/elements/fckeditor/editor/lang/ja.js | 504 - httemplate/elements/fckeditor/editor/lang/km.js | 504 - httemplate/elements/fckeditor/editor/lang/ko.js | 504 - httemplate/elements/fckeditor/editor/lang/lt.js | 504 - httemplate/elements/fckeditor/editor/lang/lv.js | 504 - httemplate/elements/fckeditor/editor/lang/mn.js | 504 - httemplate/elements/fckeditor/editor/lang/ms.js | 504 - httemplate/elements/fckeditor/editor/lang/nb.js | 504 - httemplate/elements/fckeditor/editor/lang/nl.js | 504 - httemplate/elements/fckeditor/editor/lang/no.js | 504 - httemplate/elements/fckeditor/editor/lang/pl.js | 504 - httemplate/elements/fckeditor/editor/lang/pt-br.js | 504 - httemplate/elements/fckeditor/editor/lang/pt.js | 504 - httemplate/elements/fckeditor/editor/lang/ro.js | 504 - httemplate/elements/fckeditor/editor/lang/ru.js | 504 - httemplate/elements/fckeditor/editor/lang/sk.js | 504 - httemplate/elements/fckeditor/editor/lang/sl.js | 504 - .../elements/fckeditor/editor/lang/sr-latn.js | 504 - httemplate/elements/fckeditor/editor/lang/sr.js | 504 - httemplate/elements/fckeditor/editor/lang/sv.js | 504 - httemplate/elements/fckeditor/editor/lang/th.js | 504 - httemplate/elements/fckeditor/editor/lang/tr.js | 504 - httemplate/elements/fckeditor/editor/lang/uk.js | 504 - httemplate/elements/fckeditor/editor/lang/vi.js | 504 - httemplate/elements/fckeditor/editor/lang/zh-cn.js | 504 - httemplate/elements/fckeditor/editor/lang/zh.js | 504 - .../fckeditor/editor/plugins/autogrow/fckplugin.js | 92 - .../plugins/placeholder/fck_placeholder.html | 100 - .../editor/plugins/placeholder/fckplugin.js | 187 - .../editor/plugins/placeholder/lang/de.js | 27 - .../editor/plugins/placeholder/lang/en.js | 27 - .../editor/plugins/placeholder/lang/fr.js | 27 - .../editor/plugins/placeholder/lang/it.js | 27 - .../editor/plugins/placeholder/lang/pl.js | 27 - .../editor/plugins/placeholder/placeholder.gif | Bin 96 -> 0 bytes .../editor/plugins/simplecommands/fckplugin.js | 29 - .../editor/plugins/tablecommands/fckplugin.js | 32 - .../fckeditor/editor/skins/_fckviewstrips.html | 121 - .../fckeditor/editor/skins/default/fck_dialog.css | 137 - .../fckeditor/editor/skins/default/fck_editor.css | 464 - .../fckeditor/editor/skins/default/fck_strip.gif | Bin 4578 -> 0 bytes .../skins/default/images/toolbar.arrowright.gif | Bin 53 -> 0 bytes .../skins/default/images/toolbar.buttonarrow.gif | Bin 46 -> 0 bytes .../skins/default/images/toolbar.collapse.gif | Bin 152 -> 0 bytes .../editor/skins/default/images/toolbar.end.gif | Bin 43 -> 0 bytes .../editor/skins/default/images/toolbar.expand.gif | Bin 152 -> 0 bytes .../skins/default/images/toolbar.separator.gif | Bin 58 -> 0 bytes .../editor/skins/default/images/toolbar.start.gif | Bin 105 -> 0 bytes .../editor/skins/office2003/fck_dialog.css | 138 - .../editor/skins/office2003/fck_editor.css | 476 - .../editor/skins/office2003/fck_strip.gif | Bin 9030 -> 0 bytes .../skins/office2003/images/toolbar.arrowright.gif | Bin 53 -> 0 bytes .../editor/skins/office2003/images/toolbar.bg.gif | Bin 73 -> 0 bytes .../office2003/images/toolbar.buttonarrow.gif | Bin 46 -> 0 bytes .../skins/office2003/images/toolbar.collapse.gif | Bin 152 -> 0 bytes .../editor/skins/office2003/images/toolbar.end.gif | Bin 124 -> 0 bytes .../skins/office2003/images/toolbar.expand.gif | Bin 152 -> 0 bytes .../skins/office2003/images/toolbar.separator.gif | Bin 67 -> 0 bytes .../skins/office2003/images/toolbar.start.gif | Bin 99 -> 0 bytes .../fckeditor/editor/skins/silver/fck_dialog.css | 141 - .../fckeditor/editor/skins/silver/fck_editor.css | 473 - .../fckeditor/editor/skins/silver/fck_strip.gif | Bin 4578 -> 0 bytes .../skins/silver/images/toolbar.arrowright.gif | Bin 53 -> 0 bytes .../skins/silver/images/toolbar.buttonarrow.gif | Bin 46 -> 0 bytes .../skins/silver/images/toolbar.buttonbg.gif | Bin 829 -> 0 bytes .../skins/silver/images/toolbar.collapse.gif | Bin 152 -> 0 bytes .../editor/skins/silver/images/toolbar.end.gif | Bin 43 -> 0 bytes .../editor/skins/silver/images/toolbar.expand.gif | Bin 152 -> 0 bytes .../skins/silver/images/toolbar.separator.gif | Bin 58 -> 0 bytes .../editor/skins/silver/images/toolbar.start.gif | Bin 105 -> 0 bytes httemplate/elements/fckeditor/fckconfig.js | 245 - httemplate/elements/fckeditor/fckeditor.js | 214 - httemplate/elements/fckeditor/fckpackager.xml | 237 - httemplate/elements/fckeditor/fckstyles.xml | 53 - httemplate/elements/fckeditor/fcktemplates.xml | 103 - httemplate/elements/footer.html | 5 - httemplate/elements/freeside.css | 16 - httemplate/elements/header-popup.html | 24 - httemplate/elements/header.html | 263 - httemplate/elements/hidden.html | 11 - httemplate/elements/iframecontentmws.js | 20 - httemplate/elements/jsrsClient.js | 356 - httemplate/elements/jsrsServer.html | 4 - httemplate/elements/menu.html | 410 - httemplate/elements/menubar.html | 10 - httemplate/elements/overlibmws.js | 697 - httemplate/elements/overlibmws_crossframe.js | 44 - httemplate/elements/overlibmws_draggable.js | 78 - httemplate/elements/overlibmws_iframe.js | 93 - httemplate/elements/pager.html | 55 - httemplate/elements/phonenumber.html | 31 - httemplate/elements/progress-init.html | 85 - httemplate/elements/progress-popup.html | 105 - httemplate/elements/qlib/box.js | 29 - httemplate/elements/qlib/boxctrl.js | 48 - httemplate/elements/qlib/boxres.js | 42 - httemplate/elements/qlib/button.js | 74 - httemplate/elements/qlib/buttonres.js | 23 - httemplate/elements/qlib/control.js | 51 - httemplate/elements/qlib/counter.js | 81 - httemplate/elements/qlib/imagelist.js | 25 - httemplate/elements/qlib/label.js | 72 - httemplate/elements/qlib/messagebox.js | 57 - httemplate/elements/qlib/progress.js | 73 - httemplate/elements/qlib/sound.js | 47 - httemplate/elements/qlib/sprite.js | 125 - httemplate/elements/qlib/window.js | 25 - httemplate/elements/qlib/wndctrl.js | 322 - httemplate/elements/search-cust_main.html | 164 - httemplate/elements/select-access_group.html | 16 - httemplate/elements/select-agent.html | 21 - httemplate/elements/select-agent_type.html | 21 - httemplate/elements/select-cust-fields.html | 24 - httemplate/elements/select-cust-part_pkg.html | 56 - httemplate/elements/select-cust_main-status.html | 30 - httemplate/elements/select-cust_pkg-status.html | 30 - httemplate/elements/select-month_year.html | 62 - httemplate/elements/select-otaker.html | 27 - httemplate/elements/select-part_referral.html | 20 - httemplate/elements/select-payby.html | 40 - httemplate/elements/select-pkg_class.html | 18 - httemplate/elements/select-table.html | 114 - httemplate/elements/select-taxclass.html | 38 - httemplate/elements/selectlayers.html | 201 - httemplate/elements/small_custview.html | 3 - httemplate/elements/table-grid.html | 25 - httemplate/elements/table.html | 11 - httemplate/elements/tablebreak-tr-title.html | 5 - httemplate/elements/tr-checkbox-multiple.html | 40 - httemplate/elements/tr-checkbox.html | 25 - httemplate/elements/tr-fixed-country.html | 10 - httemplate/elements/tr-fixed-state.html | 10 - httemplate/elements/tr-fixed.html | 15 - httemplate/elements/tr-freq.html | 54 - httemplate/elements/tr-input-beginning_ending.html | 75 - httemplate/elements/tr-input-date-field.html | 40 - .../elements/tr-input-lessthan_greaterthan.html | 13 - httemplate/elements/tr-input-money.html | 13 - httemplate/elements/tr-input-percentage.html | 8 - httemplate/elements/tr-input-text.html | 44 - httemplate/elements/tr-password.html | 4 - httemplate/elements/tr-select-access_group.html | 22 - httemplate/elements/tr-select-agent.html | 37 - httemplate/elements/tr-select-agent_type.html | 39 - httemplate/elements/tr-select-cust-fields.html | 15 - .../elements/tr-select-cust_main-status.html | 29 - httemplate/elements/tr-select-cust_pkg-status.html | 29 - httemplate/elements/tr-select-from_to.html | 52 - .../elements/tr-select-invoice_template.html | 39 - httemplate/elements/tr-select-otaker.html | 10 - httemplate/elements/tr-select-part_pkg.html | 29 - httemplate/elements/tr-select-part_referral.html | 35 - httemplate/elements/tr-select-part_svc.html | 29 - httemplate/elements/tr-select-payby.html | 37 - httemplate/elements/tr-select-pkg_class.html | 27 - httemplate/elements/tr-select-reason.html | 149 - httemplate/elements/tr-select-taxclass.html | 33 - httemplate/elements/tr-select.html | 61 - httemplate/elements/tr-selectlayers.html | 25 - .../elements/tr-selectmultiple-part_pkg.html | 20 - httemplate/elements/tr-td-label.html | 17 - httemplate/elements/tr-title.html | 15 - httemplate/elements/xmenu.css | 196 - httemplate/elements/xmenu.js | 668 - httemplate/elements/xmenu.top.css | 211 - httemplate/elements/xmenu.top.js | 671 - httemplate/elements/xmlhttp.html | 109 - httemplate/graph/cust_bill_pkg.cgi | 109 - httemplate/graph/cust_pkg.cgi | 63 - httemplate/graph/elements/monthly.html | 351 - httemplate/graph/money_time.cgi | 78 - httemplate/graph/report_cust_bill_pkg.html | 35 - httemplate/graph/report_cust_pkg.html | 27 - httemplate/graph/report_money_time.html | 39 - httemplate/images/32clear.gif | Bin 815 -> 0 bytes httemplate/images/ach.png | Bin 29759 -> 0 bytes httemplate/images/arrow.down.png | Bin 155 -> 0 bytes httemplate/images/arrow.right.black.png | Bin 160 -> 0 bytes httemplate/images/arrow.right.png | Bin 160 -> 0 bytes httemplate/images/background-cheat.png | Bin 338 -> 0 bytes httemplate/images/black-gradient.png | Bin 397 -> 0 bytes httemplate/images/black-gray-corner.png | Bin 460 -> 0 bytes httemplate/images/black-gray-gradient.png | Bin 384 -> 0 bytes httemplate/images/black-gray-side.png | Bin 198 -> 0 bytes httemplate/images/black-gray-top.png | Bin 203 -> 0 bytes httemplate/images/calendar-disabled.png | Bin 209 -> 0 bytes httemplate/images/calendar.png | Bin 426 -> 0 bytes httemplate/images/cvv2.png | Bin 7791 -> 0 bytes httemplate/images/cvv2_amex.png | Bin 9539 -> 0 bytes httemplate/images/menu-left-example.png | Bin 24709 -> 0 bytes httemplate/images/menu-top-example.png | Bin 22816 -> 0 bytes httemplate/images/progressbar-empty.png | Bin 90 -> 0 bytes httemplate/images/progressbar-full.png | Bin 79 -> 0 bytes httemplate/images/red_telephone_mimooh_01.png | Bin 921 -> 0 bytes httemplate/images/small-logo.png | Bin 4887 -> 0 bytes httemplate/index.html | 54 - httemplate/misc/batch-cust_pay.html | 32 - httemplate/misc/bill.cgi | 45 - httemplate/misc/bulk_change_pkg.cgi | 59 - httemplate/misc/cancel-unaudited.cgi | 33 - httemplate/misc/cancel_cust.html | 74 - httemplate/misc/cancel_pkg.html | 109 - httemplate/misc/catchall.cgi | 118 - httemplate/misc/cdr-import.html | 22 - httemplate/misc/change_pkg.cgi | 70 - httemplate/misc/counties.cgi | 7 - httemplate/misc/cust_main-cancel.cgi | 57 - httemplate/misc/cust_main-import.cgi | 109 - httemplate/misc/cust_main-import_charges.cgi | 22 - httemplate/misc/cust_main_note-import.cgi | 207 - httemplate/misc/cust_main_note-import.html | 39 - httemplate/misc/cust_pay-import.cgi | 62 - httemplate/misc/delete-agent_payment_gateway.cgi | 15 - httemplate/misc/delete-cust_credit.cgi | 21 - httemplate/misc/delete-cust_pay.cgi | 21 - httemplate/misc/delete-cust_refund.cgi | 21 - httemplate/misc/delete-customer.cgi | 64 - httemplate/misc/delete-domain_record.cgi | 20 - httemplate/misc/delete-part_export.cgi | 20 - httemplate/misc/disable-payment_gateway.cgi | 25 - httemplate/misc/download-batch.cgi | 213 - httemplate/misc/dump.cgi | 20 - httemplate/misc/elements/customer-table.html | 387 - httemplate/misc/email-invoice.cgi | 19 - httemplate/misc/email_events.cgi | 9 - httemplate/misc/email_invoice_events.cgi | 9 - httemplate/misc/email_invoices.cgi | 9 - httemplate/misc/fax-invoice.cgi | 19 - httemplate/misc/fax_events.cgi | 9 - httemplate/misc/fax_invoice_events.cgi | 9 - httemplate/misc/fax_invoices.cgi | 9 - httemplate/misc/inventory_item-import.html | 23 - httemplate/misc/link.cgi | 84 - httemplate/misc/meta-import.cgi | 79 - httemplate/misc/order_pkg.html | 62 - httemplate/misc/payment.cgi | 254 - httemplate/misc/print-invoice.cgi | 19 - httemplate/misc/print_events.cgi | 9 - httemplate/misc/print_invoice_events.cgi | 9 - httemplate/misc/print_invoices.cgi | 9 - httemplate/misc/process/batch-cust_pay.cgi | 47 - httemplate/misc/process/bulk_change_pkg.cgi | 56 - httemplate/misc/process/cancel_pkg.html | 79 - httemplate/misc/process/catchall.cgi | 35 - httemplate/misc/process/cdr-import.html | 22 - httemplate/misc/process/cust_main-import.cgi | 28 - .../misc/process/cust_main-import_charges.cgi | 23 - httemplate/misc/process/cust_main_note-import.cgi | 82 - httemplate/misc/process/cust_pay-import.cgi | 21 - httemplate/misc/process/delete-customer.cgi | 33 - httemplate/misc/process/inventory_item-import.html | 22 - httemplate/misc/process/link.cgi | 72 - httemplate/misc/process/meta-import.cgi | 190 - httemplate/misc/process/payment.cgi | 183 - httemplate/misc/process/recharge_svc.html | 92 - httemplate/misc/process/timeworked.html | 57 - httemplate/misc/queue.cgi | 49 - httemplate/misc/recharge_svc.html | 105 - httemplate/misc/states.cgi | 7 - httemplate/misc/svc_acct-domains.cgi | 31 - httemplate/misc/timeworked.html | 135 - httemplate/misc/unapply-cust_credit.cgi | 20 - httemplate/misc/unapply-cust_pay.cgi | 20 - httemplate/misc/unprovision.cgi | 26 - httemplate/misc/unsusp_pkg.cgi | 20 - httemplate/misc/unvoid-cust_pay_void.cgi | 21 - httemplate/misc/upload-batch.cgi | 36 - httemplate/misc/void-cust_pay.cgi | 26 - httemplate/misc/whois.cgi | 27 - httemplate/misc/xmlhttp-cust_main-search.cgi | 22 - httemplate/misc/xmlrpc.cgi | 18 - httemplate/pref/pref-process.html | 57 - httemplate/pref/pref.html | 102 - httemplate/search/cdr.html | 91 - httemplate/search/cust_bill.html | 227 - httemplate/search/cust_bill_event.cgi | 166 - httemplate/search/cust_bill_event.html | 67 - httemplate/search/cust_bill_pkg.cgi | 191 - httemplate/search/cust_credit.html | 104 - httemplate/search/cust_credit_bill.html | 135 - httemplate/search/cust_event.html | 285 - httemplate/search/cust_main-otaker.cgi | 31 - httemplate/search/cust_main-zip.html | 99 - httemplate/search/cust_main.cgi | 727 - httemplate/search/cust_main.html | 172 - httemplate/search/cust_pay.cgi | 247 - httemplate/search/cust_pay_batch.cgi | 191 - httemplate/search/cust_pkg.cgi | 237 - httemplate/search/cust_svc.html | 138 - httemplate/search/cust_tax_exempt_pkg.cgi | 182 - httemplate/search/elements/search.html | 853 - httemplate/search/inventory_item.html | 125 - httemplate/search/pay_batch.cgi | 130 - httemplate/search/pay_batch.html | 33 - httemplate/search/prepay_credit.html | 67 - httemplate/search/queue.html | 138 - httemplate/search/reg_code.html | 40 - httemplate/search/report_cdr.html | 44 - httemplate/search/report_cust_bill.html | 34 - httemplate/search/report_cust_credit.html | 47 - httemplate/search/report_cust_event.html | 65 - httemplate/search/report_cust_main-zip.html | 52 - httemplate/search/report_cust_main.html | 82 - httemplate/search/report_cust_pay.html | 78 - httemplate/search/report_cust_pay_batch.html | 43 - httemplate/search/report_cust_pkg.html | 148 - httemplate/search/report_prepaid_income.cgi | 87 - httemplate/search/report_prepaid_income.html | 43 - httemplate/search/report_receivables.cgi | 187 - httemplate/search/report_receivables.html | 35 - httemplate/search/report_rt_transaction.html | 22 - httemplate/search/report_svc_acct.html | 91 - httemplate/search/report_tax.cgi | 582 - httemplate/search/report_tax.html | 42 - httemplate/search/rt_transaction.html | 96 - httemplate/search/sql.html | 13 - httemplate/search/sqlradius.cgi | 305 - httemplate/search/sqlradius.html | 59 - httemplate/search/svc_acct.cgi | 289 - httemplate/search/svc_broadband.cgi | 123 - httemplate/search/svc_domain.cgi | 112 - httemplate/search/svc_external.cgi | 153 - httemplate/search/svc_forward.cgi | 146 - httemplate/search/svc_phone.cgi | 117 - httemplate/search/svc_www.cgi | 113 - httemplate/search/timeworked.html | 117 - httemplate/view/cust_bill-logo.cgi | 21 - httemplate/view/cust_bill-pdf.cgi | 28 - httemplate/view/cust_bill-ps.cgi | 24 - httemplate/view/cust_bill.cgi | 119 - httemplate/view/cust_main.cgi | 187 - httemplate/view/cust_main/billing.html | 214 - httemplate/view/cust_main/contacts.html | 122 - httemplate/view/cust_main/misc.html | 112 - httemplate/view/cust_main/notes.html | 93 - httemplate/view/cust_main/packages.html | 629 - httemplate/view/cust_main/payment_history.html | 630 - httemplate/view/cust_main/tickets.html | 84 - httemplate/view/cust_pay.html | 133 - httemplate/view/elements/svc_Common.html | 136 - httemplate/view/logo.cgi | 47 - httemplate/view/svc_Common.html | 29 - httemplate/view/svc_acct.cgi | 396 - httemplate/view/svc_broadband.cgi | 211 - httemplate/view/svc_domain.cgi | 160 - httemplate/view/svc_external.cgi | 62 - httemplate/view/svc_forward.cgi | 92 - httemplate/view/svc_phone.cgi | 10 - httemplate/view/svc_www.cgi | 88 - init.d/freeside-init | 79 - rpm/INSTALL | 4 - rpm/freeside.spec | 347 - rpm/freeside.sysconfig | 5 - rpm/rpm2Bundle | 98 - rt/COPYING | 339 - rt/Changelog | 23227 ------------------- rt/FREESIDE_MODIFIED | 34 - rt/Makefile | 494 - rt/Makefile.in | 494 - rt/README | 300 - rt/README.Oracle | 37 - rt/UPGRADING | 222 - rt/aclocal.m4 | 158 - rt/autom4te.cache/output.0 | 2771 --- rt/autom4te.cache/requests | 94 - rt/autom4te.cache/traces.0 | 158 - rt/bin/mason_handler.fcgi | 86 - rt/bin/mason_handler.fcgi.in | 86 - rt/bin/mason_handler.scgi | 67 - rt/bin/mason_handler.scgi.in | 67 - rt/bin/mason_handler.svc | 260 - rt/bin/mason_handler.svc.in | 260 - rt/bin/rt-commit-handler | 846 - rt/bin/rt-crontool | 298 - rt/bin/rt-crontool.in | 298 - rt/bin/rt-mailgate | 323 - rt/bin/rt-mailgate.in | 323 - rt/bin/rt.in | 2060 -- rt/bin/standalone_httpd.in | 67 - rt/bin/webmux.pl.in | 137 - rt/config.layout.in | 127 - rt/config.log | 226 - rt/config.status | 817 - rt/configure | 3164 --- rt/configure.ac | 310 - rt/docs/README.docs | 2 - rt/docs/Security | 25 - rt/docs/design_docs/3.3-schema-redesign.txt | 57 - rt/docs/design_docs/CARS | 66 - rt/docs/design_docs/TransactionTypes.txt | 48 - rt/docs/design_docs/acls | 50 - rt/docs/design_docs/approval_notices | 8 - rt/docs/design_docs/approval_template | 25 - rt/docs/design_docs/cf_search | 72 - rt/docs/design_docs/cli_spec | 31 - rt/docs/design_docs/cvs_integration | 164 - rt/docs/design_docs/delegation | 115 - rt/docs/design_docs/evil_plans | 162 - rt/docs/design_docs/groups_notes | 88 - rt/docs/design_docs/link-definitions.txt | 143 - rt/docs/design_docs/realflow.txt | 191 - .../recursive_group_membership_algorithm | 109 - rt/docs/design_docs/rql_parser_machine.graphviz | 32 - rt/docs/design_docs/rt-mvc | 32 - rt/docs/design_docs/ruleset-workflow.txt | 158 - rt/docs/design_docs/string-extraction-guide.txt | 100 - rt/docs/design_docs/subscription-definitions.txt | 113 - rt/docs/design_docs/ticket_templates | 16 - rt/docs/design_docs/users | 14 - rt/docs/rt3-schema-relationships.dot | 89 - rt/etc/RT_Config.pm | 587 - rt/etc/RT_Config.pm.in | 594 - rt/etc/RT_SiteConfig.pm | 52 - rt/etc/acl.Informix | 5 - rt/etc/acl.Oracle | 10 - rt/etc/acl.Pg | 63 - rt/etc/acl.Sybase | 6 - rt/etc/acl.mysql | 8 - rt/etc/constraints.mysql | 85 - rt/etc/drop.Informix | 19 - rt/etc/drop.Oracle | 41 - rt/etc/initialdata | 625 - rt/etc/rt.spec | 137 - rt/etc/schema.Informix | 364 - rt/etc/schema.Pg | 636 - rt/etc/schema.SQLite | 442 - rt/etc/schema.Sybase | 444 - rt/etc/schema.mysql | 416 - rt/etc/upgrade/3.1.0/acl.Informix | 4 - rt/etc/upgrade/3.1.0/acl.Oracle | 4 - rt/etc/upgrade/3.1.0/acl.Pg | 19 - rt/etc/upgrade/3.1.0/acl.SQLite | 4 - rt/etc/upgrade/3.1.0/acl.mysql | 4 - rt/etc/upgrade/3.1.0/content | 2 - rt/etc/upgrade/3.1.0/schema.Informix | 17 - rt/etc/upgrade/3.1.0/schema.Oracle | 17 - rt/etc/upgrade/3.1.0/schema.Pg | 25 - rt/etc/upgrade/3.1.0/schema.SQLite | 21 - rt/etc/upgrade/3.1.0/schema.mysql | 21 - rt/etc/upgrade/3.1.15/content | 7 - rt/etc/upgrade/3.1.17/content | 22 - rt/etc/upgrade/3.3.0/acl.Informix | 4 - rt/etc/upgrade/3.3.0/acl.Oracle | 4 - rt/etc/upgrade/3.3.0/acl.Pg | 20 - rt/etc/upgrade/3.3.0/acl.SQLite | 4 - rt/etc/upgrade/3.3.0/acl.mysql | 4 - rt/etc/upgrade/3.3.0/content | 1 - rt/etc/upgrade/3.3.0/schema.Oracle | 65 - rt/etc/upgrade/3.3.0/schema.Pg | 74 - rt/etc/upgrade/3.3.0/schema.mysql | 65 - rt/etc/upgrade/3.3.11/acl.Oracle | 4 - rt/etc/upgrade/3.3.11/acl.Pg | 4 - rt/etc/upgrade/3.3.11/acl.SQLite | 4 - rt/etc/upgrade/3.3.11/acl.mysql | 4 - rt/etc/upgrade/3.3.11/content | 1 - rt/etc/upgrade/3.3.11/schema.Oracle | 0 rt/etc/upgrade/3.3.11/schema.Pg | 11 - rt/etc/upgrade/3.3.11/schema.SQLite | 0 rt/etc/upgrade/3.3.11/schema.mysql | 5 - rt/etc/upgrade/3.5.1/content | 36 - rt/html/Admin/CustomFields/GroupRights.html | 172 - 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 | 104 - rt/html/Admin/Global/Scrip.html | 87 - rt/html/Admin/Global/Scrips.html | 77 - rt/html/Admin/Global/Template.html | 125 - rt/html/Admin/Global/Templates.html | 77 - rt/html/Admin/Global/UserRights.html | 101 - 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 | 433 - 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 - .../ActivityReports/Elements/Tabs/Default | 7 - .../ActivityReports/NoAuth/webrt.css/Default | 71 - .../Search/Results.html/SearchActions | 7 - .../Callbacks/RT-WebCronTool/Elements/Tabs/Default | 13 - .../Callbacks/kStatistics/Elements/Tabs/Default | 11 - rt/html/Developer/CronTool/autohandler | 9 - rt/html/Developer/CronTool/index.html | 116 - 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 | 0 rt/html/Elements/Error | 86 - rt/html/Elements/Footer | 94 - rt/html/Elements/FreesideInvoiceSearch | 20 - rt/html/Elements/FreesideNewCust | 3 - rt/html/Elements/FreesideSearch | 13 - rt/html/Elements/FreesideSvcSearch | 11 - rt/html/Elements/GotoTicket | 48 - rt/html/Elements/Header | 172 - 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 | 256 - 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 | 314 - 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 | 75 - 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 | 126 - 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 | 126 - rt/html/Elements/SimpleSearch | 58 - rt/html/Elements/Submit | 86 - rt/html/Elements/Tabs | 137 - 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 | 0 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/freeside.css | 82 - 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 | 92 - 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 | 179 - rt/html/NoAuth/css/3.5-default/transactions.css | 150 - rt/html/NoAuth/css/autohandler | 53 - rt/html/NoAuth/css/dhandler | 30 - 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/images/small-logo.png | Bin 4887 -> 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 - .../RTx/Statistics/CallsMultiQueue/Elements/Chart | 39 - rt/html/RTx/Statistics/CallsMultiQueue/index.html | 330 - .../RTx/Statistics/CallsQueueDay/Elements/Chart | 29 - rt/html/RTx/Statistics/CallsQueueDay/Results.tsv | 191 - rt/html/RTx/Statistics/CallsQueueDay/index.html | 275 - rt/html/RTx/Statistics/DayOfWeek/Elements/Chart | 26 - rt/html/RTx/Statistics/DayOfWeek/index.html | 155 - rt/html/RTx/Statistics/DurationAsString | 18 - .../Statistics/Elements/CollectionAsTable/Header | 126 - .../Elements/CollectionAsTable/ParseFormat | 109 - .../RTx/Statistics/Elements/CollectionAsTable/Row | 112 - .../Statistics/Elements/ControlsAsTable/ControlBox | 103 - .../Statistics/Elements/ControlsAsTable/UpdatePage | 5 - rt/html/RTx/Statistics/Elements/DateSelectRow | 55 - rt/html/RTx/Statistics/Elements/DurationAsString | 18 - rt/html/RTx/Statistics/Elements/GraphBox | 27 - rt/html/RTx/Statistics/Elements/SelectMultiQueue | 81 - rt/html/RTx/Statistics/Elements/StatColumnMap | 173 - rt/html/RTx/Statistics/Elements/Tabs | 72 - rt/html/RTx/Statistics/FAQ/index.html | 23 - rt/html/RTx/Statistics/OpenStalled/Elements/Chart | 27 - rt/html/RTx/Statistics/OpenStalled/Results.tsv | 114 - rt/html/RTx/Statistics/OpenStalled/index.html | 188 - rt/html/RTx/Statistics/Resolution/Elements/Chart | 29 - rt/html/RTx/Statistics/Resolution/index.html | 269 - .../RTx/Statistics/TimeToResolve/Elements/Chart | 23 - rt/html/RTx/Statistics/TimeToResolve/index.html | 75 - rt/html/RTx/Statistics/UserTest/Elements/Chart | 28 - rt/html/RTx/Statistics/UserTest/index.html | 54 - rt/html/RTx/Statistics/index.html | 59 - rt/html/Reports/Activity/ActivityDetail.html | 83 - rt/html/Reports/Activity/ActivitySummary.html | 61 - rt/html/Reports/Activity/Elements/LimitReport | 23 - rt/html/Reports/Activity/Elements/MiniPlot | 57 - rt/html/Reports/Activity/Elements/PrintFooter | 7 - rt/html/Reports/Activity/Elements/PrintHeader | 32 - rt/html/Reports/Activity/Elements/ScreenFooter | 13 - rt/html/Reports/Activity/Elements/ScreenHeader | 8 - rt/html/Reports/Activity/Elements/Tabs | 52 - rt/html/Reports/Activity/Elements/Wrapper | 16 - rt/html/Reports/Activity/ResolutionComments.html | 62 - rt/html/Reports/Activity/ResolutionStatistics.html | 95 - rt/html/Reports/Activity/index.html | 29 - rt/html/Search/Build.html | 832 - rt/html/Search/Bulk.html | 396 - 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 | 143 - 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 | 117 - 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 | 405 - rt/html/Ticket/Display.html | 182 - rt/html/Ticket/Elements/AddCustomers | 50 - 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/EditCustomers | 67 - 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/ShowCustomers | 40 - 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 | 9 - rt/html/Ticket/Elements/ShowRequestor | 89 - rt/html/Ticket/Elements/ShowSummary | 120 - rt/html/Ticket/Elements/ShowTime | 55 - rt/html/Ticket/Elements/ShowTransaction | 194 - 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 | 221 - rt/html/Ticket/ModifyCustomers.html | 49 - 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 | 69 - 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/install-sh | 251 - rt/lib/RT.pm | 465 - rt/lib/RT.pm.in | 467 - rt/lib/RT/ACE.pm | 304 - rt/lib/RT/ACE_Overlay.pm | 958 - rt/lib/RT/ACL.pm | 115 - rt/lib/RT/ACL_Overlay.pm | 373 - rt/lib/RT/Action/AutoOpen.pm | 109 - rt/lib/RT/Action/Autoreply.pm | 96 - rt/lib/RT/Action/CreateTickets.pm | 1476 -- rt/lib/RT/Action/EscalatePriority.pm | 167 - rt/lib/RT/Action/Generic.pm | 195 - rt/lib/RT/Action/Notify.pm | 132 - rt/lib/RT/Action/NotifyAsComment.pm | 55 - rt/lib/RT/Action/RecordComment.pm | 120 - rt/lib/RT/Action/RecordCorrespondence.pm | 121 - rt/lib/RT/Action/ResolveMembers.pm | 88 - rt/lib/RT/Action/SendEmail.pm | 685 - rt/lib/RT/Action/SetPriority.pm | 85 - rt/lib/RT/Action/UserDefined.pm | 95 - rt/lib/RT/Attachment.pm | 372 - rt/lib/RT/Attachment_Overlay.pm | 618 - rt/lib/RT/Attachments.pm | 115 - rt/lib/RT/Attachments_Overlay.pm | 173 - rt/lib/RT/Attribute.pm | 349 - rt/lib/RT/Attribute_Overlay.pm | 469 - rt/lib/RT/Attributes.pm | 139 - rt/lib/RT/Attributes_Overlay.pm | 198 - rt/lib/RT/Base.pm | 173 - rt/lib/RT/CachedGroupMember.pm | 282 - rt/lib/RT/CachedGroupMember_Overlay.pm | 366 - rt/lib/RT/CachedGroupMembers.pm | 139 - rt/lib/RT/CachedGroupMembers_Overlay.pm | 177 - rt/lib/RT/Condition/AnyTransaction.pm | 51 - rt/lib/RT/Condition/BeforeDue.pm | 88 - rt/lib/RT/Condition/Generic.pm | 211 - rt/lib/RT/Condition/Overdue.pm | 92 - rt/lib/RT/Condition/OwnerChange.pm | 124 - rt/lib/RT/Condition/PriorityChange.pm | 82 - rt/lib/RT/Condition/PriorityExceeds.pm | 81 - rt/lib/RT/Condition/QueueChange.pm | 81 - rt/lib/RT/Condition/StatusChange.pm | 59 - rt/lib/RT/Condition/UserDefined.pm | 81 - rt/lib/RT/CurrentUser.pm | 374 - rt/lib/RT/CustomField.pm | 421 - rt/lib/RT/CustomFieldValue.pm | 318 - rt/lib/RT/CustomFieldValue_Overlay.pm | 97 - rt/lib/RT/CustomFieldValues.pm | 151 - rt/lib/RT/CustomFieldValues_Overlay.pm | 73 - rt/lib/RT/CustomField_Overlay.pm | 1300 -- rt/lib/RT/CustomFields.pm | 150 - rt/lib/RT/CustomFields_Overlay.pm | 264 - rt/lib/RT/Date.pm | 557 - rt/lib/RT/EmailParser.pm | 636 - rt/lib/RT/Extension/ActivityReports.pm | 3 - rt/lib/RT/Group.pm | 258 - rt/lib/RT/GroupMember.pm | 189 - rt/lib/RT/GroupMember_Overlay.pm | 390 - rt/lib/RT/GroupMembers.pm | 115 - rt/lib/RT/GroupMembers_Overlay.pm | 153 - rt/lib/RT/Group_Overlay.pm | 1383 -- rt/lib/RT/Groups.pm | 115 - rt/lib/RT/Groups_Overlay.pm | 536 - rt/lib/RT/Handle.pm | 101 - rt/lib/RT/I18N.pm | 501 - rt/lib/RT/I18N/cs.pm | 115 - rt/lib/RT/I18N/cs.po | 6201 ----- rt/lib/RT/I18N/da.po | 7074 ------ rt/lib/RT/I18N/de.po | 5194 ----- rt/lib/RT/I18N/en.po | 99 - rt/lib/RT/I18N/es.po | 6492 ------ rt/lib/RT/I18N/fi.po | 6188 ----- rt/lib/RT/I18N/fr.po | 5117 ---- rt/lib/RT/I18N/he.po | 5414 ----- rt/lib/RT/I18N/hu.po | 5170 ----- rt/lib/RT/I18N/i_default.pm | 110 - rt/lib/RT/I18N/id.po | 5520 ----- rt/lib/RT/I18N/it.po | 6655 ------ rt/lib/RT/I18N/ja.po | 6749 ------ rt/lib/RT/I18N/nl.po | 6195 ----- rt/lib/RT/I18N/no.po | 6563 ------ rt/lib/RT/I18N/pl.po | 6715 ------ rt/lib/RT/I18N/pt_br.po | 6531 ------ rt/lib/RT/I18N/ru.po | 6737 ------ rt/lib/RT/I18N/sv.po | 5840 ----- rt/lib/RT/I18N/tr.po | 5079 ---- rt/lib/RT/I18N/zh_cn.po | 8423 ------- rt/lib/RT/I18N/zh_tw.po | 8360 ------- rt/lib/RT/Interface/CLI.pm | 246 - rt/lib/RT/Interface/Email.pm | 648 - rt/lib/RT/Interface/Email/Auth/GnuPG.pm | 123 - rt/lib/RT/Interface/Email/Auth/MailFrom.pm | 189 - rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm | 96 - rt/lib/RT/Interface/REST.pm | 288 - rt/lib/RT/Interface/Web.pm | 1377 -- rt/lib/RT/Interface/Web/Handler.pm | 211 - rt/lib/RT/Interface/Web/Menu.pm | 68 - rt/lib/RT/Interface/Web/Menu/Item.pm | 86 - rt/lib/RT/Interface/Web/QueryBuilder.pm | 58 - rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm | 247 - rt/lib/RT/Interface/Web/Standalone.pm | 84 - rt/lib/RT/Interface/Web_Vendor.pm | 95 - rt/lib/RT/Link.pm | 302 - rt/lib/RT/Link_Overlay.pm | 390 - rt/lib/RT/Links.pm | 115 - rt/lib/RT/Links_Overlay.pm | 174 - rt/lib/RT/ObjectCustomField.pm | 295 - rt/lib/RT/ObjectCustomFieldValue.pm | 433 - rt/lib/RT/ObjectCustomFieldValue_Overlay.pm | 262 - rt/lib/RT/ObjectCustomFieldValues.pm | 150 - rt/lib/RT/ObjectCustomFieldValues_Overlay.pm | 155 - rt/lib/RT/ObjectCustomField_Overlay.pm | 103 - rt/lib/RT/ObjectCustomFields.pm | 150 - rt/lib/RT/ObjectCustomFields_Overlay.pm | 115 - rt/lib/RT/Principal.pm | 236 - rt/lib/RT/Principal_Overlay.pm | 596 - rt/lib/RT/Principals.pm | 139 - rt/lib/RT/Principals_Overlay.pm | 79 - rt/lib/RT/Queue.pm | 371 - rt/lib/RT/Queue_Overlay.pm | 1137 - rt/lib/RT/Queues.pm | 115 - rt/lib/RT/Queues_Overlay.pm | 144 - rt/lib/RT/Record.pm | 455 - rt/lib/RT/Reminders.pm | 167 - rt/lib/RT/Report/Tickets.pm | 451 - rt/lib/RT/Report/Tickets/Entry.pm | 55 - rt/lib/RT/SavedSearch.pm | 348 - rt/lib/RT/SavedSearches.pm | 190 - rt/lib/RT/Scrip.pm | 500 - rt/lib/RT/ScripAction.pm | 279 - rt/lib/RT/ScripAction_Overlay.pm | 285 - rt/lib/RT/ScripActions.pm | 115 - rt/lib/RT/ScripActions_Overlay.pm | 114 - rt/lib/RT/ScripCondition.pm | 302 - rt/lib/RT/ScripCondition_Overlay.pm | 238 - rt/lib/RT/ScripConditions.pm | 115 - rt/lib/RT/ScripConditions_Overlay.pm | 114 - rt/lib/RT/Scrip_Overlay.pm | 618 - rt/lib/RT/Scrips.pm | 115 - rt/lib/RT/Scrips_Overlay.pm | 371 - rt/lib/RT/Search/ActiveTicketsInQueue.pm | 102 - rt/lib/RT/Search/FromSQL.pm | 110 - rt/lib/RT/Search/Generic.pm | 152 - rt/lib/RT/Search/Googleish.pm | 188 - rt/lib/RT/SearchBuilder.pm | 389 - rt/lib/RT/StyleGuide.pod | 920 - rt/lib/RT/System.pm | 190 - rt/lib/RT/Template.pm | 363 - rt/lib/RT/Template_Overlay.pm | 422 - rt/lib/RT/Templates.pm | 115 - rt/lib/RT/Templates_Overlay.pm | 203 - rt/lib/RT/Ticket.pm | 662 - rt/lib/RT/Ticket_Overlay.pm | 3827 --- rt/lib/RT/Tickets.pm | 115 - rt/lib/RT/Tickets_Overlay.pm | 3053 --- rt/lib/RT/Tickets_Overlay_SQL.pm | 587 - rt/lib/RT/Transaction.pm | 364 - rt/lib/RT/Transaction_Overlay.pm | 1134 - rt/lib/RT/Transactions.pm | 115 - rt/lib/RT/Transactions_Overlay.pm | 187 - rt/lib/RT/URI.pm | 283 - rt/lib/RT/URI/base.pm | 149 - rt/lib/RT/URI/freeside.pm | 285 - rt/lib/RT/URI/freeside/Internal.pm | 138 - rt/lib/RT/URI/freeside/XMLRPC.pm | 122 - rt/lib/RT/URI/fsck_com_rt.pm | 270 - rt/lib/RT/URI/t.pm | 130 - rt/lib/RT/User.pm | 854 - rt/lib/RT/User_Overlay.pm | 1944 -- rt/lib/RT/Users.pm | 115 - rt/lib/RT/Users_Overlay.pm | 676 - rt/lib/RTx/Statistics.pm | 239 - rt/lib/RTx/WebCronTool.pm | 41 - rt/lib/t/00smoke.t | 13 - rt/lib/t/01harness.t | 12 - rt/lib/t/02regression.t | 47 - rt/lib/t/03web.pl | 170 - rt/lib/t/04_send_email.pl | 506 - 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 | 47 - 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 | 266 - 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-requestor.t | 143 - 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 | 228 - rt/lib/t/regression/23-batch-upload-csv.t | 47 - rt/lib/t/regression/23-web_attachments.t | 60 - rt/lib/t/regression/23cfsort.t | 192 - rt/lib/t/regression/24pawsort.t | 104 - rt/lib/t/regression/25scrip_order.t | 57 - rt/lib/t/regression/26command_line.t | 445 - rt/lib/t/regression/27verp.t | 9 - rt/lib/t/regression/mime_tests | 19 - rt/lib/t/setup_regression.t | 34 - rt/m4/rt_enable_layout.m4 | 36 - rt/m4/rt_expand_var.m4 | 18 - rt/m4/rt_layout.m4 | 75 - rt/m4/rt_subst_expanded_arg.m4 | 14 - rt/sbin/extract-message-catalog | 274 - rt/sbin/extract_pod_tests | 159 - rt/sbin/factory | 515 - rt/sbin/license_tag | 243 - rt/sbin/regression_harness | 56 - rt/sbin/rt-dump-database.in | 173 - rt/sbin/rt-setup-database.in | 712 - rt/sbin/rt-test-dependencies.in | 479 - test/cgi-test | 558 - test/dup-test | 32 - 2299 files changed, 476591 deletions(-) delete mode 100644 AGPL delete mode 100644 CREDITS delete mode 100644 FS/Changes delete mode 100644 FS/FS.pm delete mode 100644 FS/FS/AccessRight.pm delete mode 100644 FS/FS/CGI.pm delete mode 100644 FS/FS/ClientAPI.pm delete mode 100644 FS/FS/ClientAPI/Agent.pm delete mode 100644 FS/FS/ClientAPI/MyAccount.pm delete mode 100644 FS/FS/ClientAPI/Signup.pm delete mode 100644 FS/FS/ClientAPI/passwd.pm delete mode 100644 FS/FS/ClientAPI_SessionCache.pm delete mode 100644 FS/FS/Conf.pm delete mode 100644 FS/FS/ConfDefaults.pm delete mode 100644 FS/FS/ConfItem.pm delete mode 100644 FS/FS/Conf_compat17.pm delete mode 100644 FS/FS/Cron/backup.pm delete mode 100644 FS/FS/Cron/bill.pm delete mode 100644 FS/FS/Cron/expire_user_pref.pm delete mode 100644 FS/FS/Cron/notify.pm delete mode 100644 FS/FS/Cron/vacuum.pm delete mode 100644 FS/FS/CurrentUser.pm delete mode 100644 FS/FS/Daemon.pm delete mode 100644 FS/FS/InitHandler.pm delete mode 100644 FS/FS/Misc.pm delete mode 100644 FS/FS/Misc/prune.pm delete mode 100644 FS/FS/Msgcat.pm delete mode 100644 FS/FS/Pony.pm delete mode 100644 FS/FS/Record.pm delete mode 100644 FS/FS/Report.pm delete mode 100644 FS/FS/Report/Table.pm delete mode 100644 FS/FS/Report/Table/Monthly.pm delete mode 100644 FS/FS/Schema.pm delete mode 100644 FS/FS/SearchCache.pm delete mode 100644 FS/FS/Setup.pm delete mode 100644 FS/FS/TicketSystem.pm delete mode 100644 FS/FS/TicketSystem/RT_External.pm delete mode 100644 FS/FS/TicketSystem/RT_Internal.pm delete mode 100644 FS/FS/TicketSystem/RT_Libs.pm delete mode 100644 FS/FS/UI/Web.pm delete mode 100644 FS/FS/UI/bytecount.pm delete mode 100644 FS/FS/UID.pm delete mode 100644 FS/FS/Upgrade.pm delete mode 100644 FS/FS/XMLRPC.pm delete mode 100644 FS/FS/access_group.pm delete mode 100644 FS/FS/access_groupagent.pm delete mode 100644 FS/FS/access_right.pm delete mode 100644 FS/FS/access_user.pm delete mode 100644 FS/FS/access_user_pref.pm delete mode 100644 FS/FS/access_usergroup.pm delete mode 100644 FS/FS/acct_rt_transaction.pm delete mode 100644 FS/FS/acct_snarf.pm delete mode 100755 FS/FS/addr_block.pm delete mode 100644 FS/FS/agent.pm delete mode 100644 FS/FS/agent_payment_gateway.pm delete mode 100644 FS/FS/agent_type.pm delete mode 100644 FS/FS/banned_pay.pm delete mode 100644 FS/FS/cdr.pm delete mode 100644 FS/FS/cdr_calltype.pm delete mode 100644 FS/FS/cdr_carrier.pm delete mode 100644 FS/FS/cdr_type.pm delete mode 100644 FS/FS/cdr_upstream_rate.pm delete mode 100644 FS/FS/clientapi_session.pm delete mode 100644 FS/FS/clientapi_session_field.pm delete mode 100644 FS/FS/conf.pm delete mode 100644 FS/FS/cust_bill.pm delete mode 100644 FS/FS/cust_bill_ApplicationCommon.pm delete mode 100644 FS/FS/cust_bill_event.pm delete mode 100644 FS/FS/cust_bill_pay.pm delete mode 100644 FS/FS/cust_bill_pay_batch.pm delete mode 100644 FS/FS/cust_bill_pay_pkg.pm delete mode 100644 FS/FS/cust_bill_pkg.pm delete mode 100644 FS/FS/cust_bill_pkg_detail.pm delete mode 100644 FS/FS/cust_credit.pm delete mode 100644 FS/FS/cust_credit_bill.pm delete mode 100644 FS/FS/cust_credit_bill_pkg.pm delete mode 100644 FS/FS/cust_credit_refund.pm delete mode 100644 FS/FS/cust_event.pm delete mode 100644 FS/FS/cust_main.pm delete mode 100644 FS/FS/cust_main_Mixin.pm delete mode 100644 FS/FS/cust_main_county.pm delete mode 100644 FS/FS/cust_main_invoice.pm delete mode 100644 FS/FS/cust_main_note.pm delete mode 100644 FS/FS/cust_pay.pm delete mode 100644 FS/FS/cust_pay_batch.pm delete mode 100644 FS/FS/cust_pay_pending.pm delete mode 100644 FS/FS/cust_pay_refund.pm delete mode 100644 FS/FS/cust_pay_void.pm delete mode 100644 FS/FS/cust_pkg.pm delete mode 100644 FS/FS/cust_pkg_option.pm delete mode 100644 FS/FS/cust_pkg_reason.pm delete mode 100644 FS/FS/cust_refund.pm delete mode 100644 FS/FS/cust_svc.pm delete mode 100644 FS/FS/cust_tax_exempt.pm delete mode 100644 FS/FS/cust_tax_exempt_pkg.pm delete mode 100644 FS/FS/domain_record.pm delete mode 100644 FS/FS/export_svc.pm delete mode 100644 FS/FS/h_Common.pm delete mode 100644 FS/FS/h_cust_bill.pm delete mode 100644 FS/FS/h_cust_credit.pm delete mode 100644 FS/FS/h_cust_pay.pm delete mode 100644 FS/FS/h_cust_svc.pm delete mode 100644 FS/FS/h_cust_tax_exempt.pm delete mode 100644 FS/FS/h_domain_record.pm delete mode 100644 FS/FS/h_svc_acct.pm delete mode 100644 FS/FS/h_svc_broadband.pm delete mode 100644 FS/FS/h_svc_domain.pm delete mode 100644 FS/FS/h_svc_external.pm delete mode 100644 FS/FS/h_svc_forward.pm delete mode 100644 FS/FS/h_svc_phone.pm delete mode 100644 FS/FS/h_svc_www.pm delete mode 100644 FS/FS/inventory_class.pm delete mode 100644 FS/FS/inventory_item.pm delete mode 100644 FS/FS/m2m_Common.pm delete mode 100644 FS/FS/m2name_Common.pm delete mode 100644 FS/FS/msgcat.pm delete mode 100644 FS/FS/nas.pm delete mode 100644 FS/FS/option_Common.pm delete mode 100644 FS/FS/part_bill_event.pm delete mode 100644 FS/FS/part_event.pm delete mode 100644 FS/FS/part_event/Action.pm delete mode 100644 FS/FS/part_event/Action/addpost.pm delete mode 100644 FS/FS/part_event/Action/apply.pm delete mode 100644 FS/FS/part_event/Action/bill.pm delete mode 100644 FS/FS/part_event/Action/cancel.pm delete mode 100644 FS/FS/part_event/Action/collect.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_batch.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_comp.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_fee_percent.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_realtime_card.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_realtime_check.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_realtime_lec.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_send.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_send_agent.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_send_alternate.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_send_csv_ftp.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_send_if_newest.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_spool_csv.pm delete mode 100644 FS/FS/part_event/Action/cust_bill_suspend_if_balance.pm delete mode 100644 FS/FS/part_event/Action/fee.pm delete mode 100644 FS/FS/part_event/Action/suspend.pm delete mode 100644 FS/FS/part_event/Action/suspend_if_pkgpart.pm delete mode 100644 FS/FS/part_event/Action/suspend_unless_pkgpart.pm delete mode 100644 FS/FS/part_event/Condition.pm delete mode 100644 FS/FS/part_event/Condition/agent.pm delete mode 100644 FS/FS/part_event/Condition/agent_type.pm delete mode 100644 FS/FS/part_event/Condition/balance.pm delete mode 100644 FS/FS/part_event/Condition/balance_age.pm delete mode 100644 FS/FS/part_event/Condition/balance_under.pm delete mode 100644 FS/FS/part_event/Condition/cust_bill_age.pm delete mode 100644 FS/FS/part_event/Condition/cust_bill_has_service.pm delete mode 100644 FS/FS/part_event/Condition/cust_bill_owed.pm delete mode 100644 FS/FS/part_event/Condition/cust_bill_owed_under.pm delete mode 100644 FS/FS/part_event/Condition/cust_pay_batch_declined.pm delete mode 100644 FS/FS/part_event/Condition/cust_status.pm delete mode 100644 FS/FS/part_event/Condition/every.pm delete mode 100644 FS/FS/part_event/Condition/once.pm delete mode 100644 FS/FS/part_event/Condition/payby.pm delete mode 100644 FS/FS/part_event/Condition/pkg_class.pm delete mode 100644 FS/FS/part_event/Condition/pkg_status.pm delete mode 100644 FS/FS/part_event_condition.pm delete mode 100644 FS/FS/part_event_condition_option.pm delete mode 100644 FS/FS/part_event_condition_option_option.pm delete mode 100644 FS/FS/part_event_option.pm delete mode 100644 FS/FS/part_export.pm delete mode 100644 FS/FS/part_export/acct_plesk.pm delete mode 100644 FS/FS/part_export/acct_sql.pm delete mode 100644 FS/FS/part_export/apache.pm delete mode 100644 FS/FS/part_export/artera_turbo.pm delete mode 100644 FS/FS/part_export/bind.pm delete mode 100644 FS/FS/part_export/bind_slave.pm delete mode 100644 FS/FS/part_export/bsdshell.pm delete mode 100644 FS/FS/part_export/communigate_pro.pm delete mode 100644 FS/FS/part_export/communigate_pro_singledomain.pm delete mode 100644 FS/FS/part_export/cp.pm delete mode 100644 FS/FS/part_export/cpanel.pm delete mode 100644 FS/FS/part_export/cyrus.pm delete mode 100644 FS/FS/part_export/domain_shellcommands.pm delete mode 100644 FS/FS/part_export/domain_sql.pm delete mode 100644 FS/FS/part_export/everyone_net.pm delete mode 100644 FS/FS/part_export/forward_shellcommands.pm delete mode 100644 FS/FS/part_export/http.pm delete mode 100644 FS/FS/part_export/infostreet.pm delete mode 100644 FS/FS/part_export/ldap.pm delete mode 100644 FS/FS/part_export/nas_wrapper.pm delete mode 100644 FS/FS/part_export/null.pm delete mode 100644 FS/FS/part_export/passwdfile.pm delete mode 100644 FS/FS/part_export/postfix.pm delete mode 100644 FS/FS/part_export/prizm.pm delete mode 100644 FS/FS/part_export/radiator.pm delete mode 100644 FS/FS/part_export/router.pm delete mode 100644 FS/FS/part_export/shellcommands.pm delete mode 100644 FS/FS/part_export/shellcommands_withdomain.pm delete mode 100644 FS/FS/part_export/snmp.pm delete mode 100644 FS/FS/part_export/sqlmail.pm delete mode 100644 FS/FS/part_export/sqlradius.pm delete mode 100644 FS/FS/part_export/sqlradius_withdomain.pm delete mode 100644 FS/FS/part_export/sysvshell.pm delete mode 100644 FS/FS/part_export/textradius.pm delete mode 100644 FS/FS/part_export/trango.pm delete mode 100644 FS/FS/part_export/vpopmail.pm delete mode 100644 FS/FS/part_export/www_plesk.pm delete mode 100644 FS/FS/part_export/www_shellcommands.pm delete mode 100644 FS/FS/part_export_option.pm delete mode 100644 FS/FS/part_pkg.pm delete mode 100644 FS/FS/part_pkg/base_delayed.pm delete mode 100644 FS/FS/part_pkg/base_rate.pm delete mode 100644 FS/FS/part_pkg/bulk.pm delete mode 100644 FS/FS/part_pkg/flat.pm delete mode 100644 FS/FS/part_pkg/flat_comission.pm delete mode 100644 FS/FS/part_pkg/flat_comission_cust.pm delete mode 100644 FS/FS/part_pkg/flat_comission_pkg.pm delete mode 100644 FS/FS/part_pkg/flat_delayed.pm delete mode 100644 FS/FS/part_pkg/flat_introrate.pm delete mode 100644 FS/FS/part_pkg/incomplete/billoneday.pm delete mode 100644 FS/FS/part_pkg/prepaid.pm delete mode 100644 FS/FS/part_pkg/prorate.pm delete mode 100644 FS/FS/part_pkg/prorate_delayed.pm delete mode 100644 FS/FS/part_pkg/sesmon_hour.pm delete mode 100644 FS/FS/part_pkg/sesmon_minute.pm delete mode 100644 FS/FS/part_pkg/sql_external.pm delete mode 100644 FS/FS/part_pkg/sql_generic.pm delete mode 100644 FS/FS/part_pkg/sqlradacct_hour.pm delete mode 100644 FS/FS/part_pkg/subscription.pm delete mode 100644 FS/FS/part_pkg/voip_cdr.pm delete mode 100644 FS/FS/part_pkg/voip_sqlradacct.pm delete mode 100644 FS/FS/part_pkg_option.pm delete mode 100644 FS/FS/part_pkg_taxclass.pm delete mode 100644 FS/FS/part_pop_local.pm delete mode 100644 FS/FS/part_referral.pm delete mode 100644 FS/FS/part_svc.pm delete mode 100644 FS/FS/part_svc_column.pm delete mode 100755 FS/FS/part_svc_router.pm delete mode 100755 FS/FS/part_virtual_field.pm delete mode 100644 FS/FS/pay_batch.pm delete mode 100644 FS/FS/payby.pm delete mode 100644 FS/FS/payinfo_Mixin.pm delete mode 100644 FS/FS/payment_gateway.pm delete mode 100644 FS/FS/payment_gateway_option.pm delete mode 100644 FS/FS/pkg_class.pm delete mode 100644 FS/FS/pkg_referral.pm delete mode 100644 FS/FS/pkg_svc.pm delete mode 100644 FS/FS/port.pm delete mode 100644 FS/FS/prepay_credit.pm delete mode 100644 FS/FS/queue.pm delete mode 100644 FS/FS/queue_arg.pm delete mode 100644 FS/FS/queue_depend.pm delete mode 100644 FS/FS/raddb.pm delete mode 100644 FS/FS/radius_usergroup.pm delete mode 100644 FS/FS/rate.pm delete mode 100644 FS/FS/rate_detail.pm delete mode 100644 FS/FS/rate_prefix.pm delete mode 100644 FS/FS/rate_region.pm delete mode 100644 FS/FS/reason.pm delete mode 100644 FS/FS/reason_type.pm delete mode 100644 FS/FS/reg_code.pm delete mode 100644 FS/FS/reg_code_pkg.pm delete mode 100644 FS/FS/registrar.pm delete mode 100755 FS/FS/router.pm delete mode 100644 FS/FS/session.pm delete mode 100644 FS/FS/svc_Common.pm delete mode 100644 FS/FS/svc_External_Common.pm delete mode 100644 FS/FS/svc_Parent_Mixin.pm delete mode 100644 FS/FS/svc_acct.pm delete mode 100644 FS/FS/svc_acct_pop.pm delete mode 100755 FS/FS/svc_broadband.pm delete mode 100644 FS/FS/svc_domain.pm delete mode 100644 FS/FS/svc_external.pm delete mode 100644 FS/FS/svc_forward.pm delete mode 100644 FS/FS/svc_phone.pm delete mode 100644 FS/FS/svc_www.pm delete mode 100644 FS/FS/type_pkgs.pm delete mode 100644 FS/MANIFEST delete mode 100644 FS/MANIFEST.SKIP delete mode 100644 FS/Makefile.PL delete mode 100755 FS/bin/freeside-addgroup delete mode 100644 FS/bin/freeside-addoutsource delete mode 100644 FS/bin/freeside-addoutsourceuser delete mode 100644 FS/bin/freeside-adduser delete mode 100755 FS/bin/freeside-apply-credits delete mode 100755 FS/bin/freeside-count-active-customers delete mode 100755 FS/bin/freeside-daily delete mode 100755 FS/bin/freeside-dbdef-create delete mode 100755 FS/bin/freeside-delete-addr_blocks delete mode 100644 FS/bin/freeside-deloutsource delete mode 100644 FS/bin/freeside-deloutsourceuser delete mode 100644 FS/bin/freeside-deluser delete mode 100755 FS/bin/freeside-disable-reasons delete mode 100755 FS/bin/freeside-email delete mode 100755 FS/bin/freeside-expiration-alerter delete mode 100755 FS/bin/freeside-fetch delete mode 100755 FS/bin/freeside-history-requeue delete mode 100755 FS/bin/freeside-init-config delete mode 100755 FS/bin/freeside-monthly delete mode 100644 FS/bin/freeside-prepaidd delete mode 100755 FS/bin/freeside-prune-applications delete mode 100644 FS/bin/freeside-queued delete mode 100644 FS/bin/freeside-radgroup delete mode 100644 FS/bin/freeside-reexport delete mode 100755 FS/bin/freeside-reset-fixed delete mode 100644 FS/bin/freeside-selfservice-server delete mode 100644 FS/bin/freeside-setinvoice delete mode 100755 FS/bin/freeside-setup delete mode 100755 FS/bin/freeside-sqlradius-dedup-group delete mode 100644 FS/bin/freeside-sqlradius-radacctd delete mode 100755 FS/bin/freeside-sqlradius-reset delete mode 100644 FS/bin/freeside-sqlradius-seconds delete mode 100755 FS/bin/freeside-sqlradius-set-lastlog delete mode 100755 FS/bin/freeside-upgrade delete mode 100644 FS/t/AccessRight.t delete mode 100644 FS/t/CGI.t delete mode 100644 FS/t/ClientAPI.t delete mode 100644 FS/t/ClientAPI_SessionCache.t delete mode 100644 FS/t/Conf.t delete mode 100644 FS/t/ConfDefaults.t delete mode 100644 FS/t/ConfItem.t delete mode 100644 FS/t/Cron-backup.t delete mode 100644 FS/t/Cron-bill.t delete mode 100644 FS/t/Cron-vacuum.t delete mode 100644 FS/t/Daemon.t delete mode 100644 FS/t/InitHandler.t delete mode 100644 FS/t/Misc.t delete mode 100644 FS/t/Msgcat.t delete mode 100644 FS/t/Record.t delete mode 100644 FS/t/Report-Table-Monthly.t delete mode 100644 FS/t/Report-Table.t delete mode 100644 FS/t/Report.t delete mode 100644 FS/t/SearchCache.t delete mode 100644 FS/t/UID.t delete mode 100644 FS/t/access_group.t delete mode 100644 FS/t/access_groupagent.t delete mode 100644 FS/t/access_right.t delete mode 100644 FS/t/access_user.t delete mode 100644 FS/t/access_user_pref.t delete mode 100644 FS/t/access_usergroup.t delete mode 100644 FS/t/acct_rt_transaction.t delete mode 100644 FS/t/acct_snarf.t delete mode 100644 FS/t/agent.t delete mode 100644 FS/t/agent_payment_gateway.t delete mode 100644 FS/t/agent_type.t delete mode 100644 FS/t/banned_pay.t delete mode 100644 FS/t/cdr.t delete mode 100644 FS/t/cdr_calltype.t delete mode 100644 FS/t/cdr_carrier.t delete mode 100644 FS/t/cdr_type.t delete mode 100644 FS/t/cdr_upstream_rate.t delete mode 100644 FS/t/clientapi_session.t delete mode 100644 FS/t/clientapi_session_field.t delete mode 100644 FS/t/conf.t delete mode 100644 FS/t/cust_bill.t delete mode 100644 FS/t/cust_bill_ApplicationCommon.t delete mode 100644 FS/t/cust_bill_event.t delete mode 100644 FS/t/cust_bill_pay.t delete mode 100644 FS/t/cust_bill_pay_batch.t delete mode 100644 FS/t/cust_bill_pay_pkg.t delete mode 100644 FS/t/cust_bill_pkg.t delete mode 100644 FS/t/cust_bill_pkg_detail.t delete mode 100644 FS/t/cust_credit.t delete mode 100644 FS/t/cust_credit_bill.t delete mode 100644 FS/t/cust_credit_bill_pkg.t delete mode 100644 FS/t/cust_credit_refund.t delete mode 100644 FS/t/cust_event.t delete mode 100644 FS/t/cust_main.t delete mode 100644 FS/t/cust_main_Mixin.t delete mode 100644 FS/t/cust_main_county.t delete mode 100644 FS/t/cust_main_invoice.t delete mode 100644 FS/t/cust_main_note.t delete mode 100644 FS/t/cust_pay.t delete mode 100644 FS/t/cust_pay_batch.t delete mode 100644 FS/t/cust_pay_pending.t delete mode 100644 FS/t/cust_pay_refund.t delete mode 100644 FS/t/cust_pay_void.t delete mode 100644 FS/t/cust_pkg.t delete mode 100644 FS/t/cust_pkg_option.t delete mode 100644 FS/t/cust_pkg_reason.t delete mode 100644 FS/t/cust_refund.t delete mode 100644 FS/t/cust_svc.t delete mode 100644 FS/t/cust_tax_exempt.t delete mode 100644 FS/t/cust_tax_exempt_pkg.t delete mode 100644 FS/t/domain_record.t delete mode 100644 FS/t/export_svc.t delete mode 100644 FS/t/h_Common.t delete mode 100644 FS/t/h_cust_bill.t delete mode 100644 FS/t/h_cust_credit.t delete mode 100644 FS/t/h_cust_pay.t delete mode 100644 FS/t/h_cust_svc.t delete mode 100644 FS/t/h_cust_tax_exempt.t delete mode 100644 FS/t/h_domain_record.t delete mode 100644 FS/t/h_svc_acct.t delete mode 100644 FS/t/h_svc_broadband.t delete mode 100644 FS/t/h_svc_domain.t delete mode 100644 FS/t/h_svc_external.t delete mode 100644 FS/t/h_svc_forward.t delete mode 100644 FS/t/h_svc_www.t delete mode 100644 FS/t/inventory_class.t delete mode 100644 FS/t/inventory_item.t delete mode 100644 FS/t/msgcat.t delete mode 100644 FS/t/nas.t delete mode 100644 FS/t/option_Common.t delete mode 100644 FS/t/part_bill_event.t delete mode 100644 FS/t/part_event-Action.t delete mode 100644 FS/t/part_event-Condition.t delete mode 100644 FS/t/part_event.t delete mode 100644 FS/t/part_event_condition.t delete mode 100644 FS/t/part_event_condition_option.t delete mode 100644 FS/t/part_event_condition_option_option.t delete mode 100644 FS/t/part_event_option.t delete mode 100644 FS/t/part_export-acct_sql.t delete mode 100644 FS/t/part_export-apache.t delete mode 100644 FS/t/part_export-bind.t delete mode 100644 FS/t/part_export-bind_slave.t delete mode 100644 FS/t/part_export-bsdshell.t delete mode 100644 FS/t/part_export-communigate_pro.t delete mode 100644 FS/t/part_export-communigate_pro_singledomain.t delete mode 100644 FS/t/part_export-cp.t delete mode 100644 FS/t/part_export-cyrus.t delete mode 100644 FS/t/part_export-domain_shellcommands.t delete mode 100644 FS/t/part_export-forward_shellcommands.t delete mode 100644 FS/t/part_export-http.t delete mode 100644 FS/t/part_export-infostreet.t delete mode 100644 FS/t/part_export-ldap.t delete mode 100644 FS/t/part_export-null.t delete mode 100644 FS/t/part_export-passwdfile.t delete mode 100644 FS/t/part_export-postfix.t delete mode 100644 FS/t/part_export-radiator.t delete mode 100644 FS/t/part_export-router.t delete mode 100644 FS/t/part_export-shellcommands.t delete mode 100644 FS/t/part_export-shellcommands_withdomain.t delete mode 100644 FS/t/part_export-sqlmail.t delete mode 100644 FS/t/part_export-sqlradius.t delete mode 100644 FS/t/part_export-sqlradius_withdomain.t delete mode 100644 FS/t/part_export-sysvshell.t delete mode 100644 FS/t/part_export-textradius.t delete mode 100644 FS/t/part_export-vpopmail.t delete mode 100644 FS/t/part_export-www_shellcommands.t delete mode 100644 FS/t/part_export.t delete mode 100644 FS/t/part_export_option.t delete mode 100644 FS/t/part_pkg-flat.t delete mode 100644 FS/t/part_pkg-flat_comission.t delete mode 100644 FS/t/part_pkg-flat_comission_cust.t delete mode 100644 FS/t/part_pkg-flat_comission_pkg.t delete mode 100644 FS/t/part_pkg-flat_delayed.t delete mode 100644 FS/t/part_pkg-prorate.t delete mode 100644 FS/t/part_pkg-sesmon_hour.t delete mode 100644 FS/t/part_pkg-sesmon_minute.t delete mode 100644 FS/t/part_pkg-sql_external.t delete mode 100644 FS/t/part_pkg-sql_generic.t delete mode 100644 FS/t/part_pkg-sqlradacct_hour.t delete mode 100644 FS/t/part_pkg-subscription.t delete mode 100644 FS/t/part_pkg-voip_cdr.t delete mode 100644 FS/t/part_pkg-voip_sqlradacct.t delete mode 100644 FS/t/part_pkg.t delete mode 100644 FS/t/part_pkg_option.t delete mode 100644 FS/t/part_pkg_taxclass.t delete mode 100644 FS/t/part_pop_local.t delete mode 100644 FS/t/part_referral.t delete mode 100644 FS/t/part_svc.t delete mode 100644 FS/t/part_svc_column.t delete mode 100644 FS/t/pay_batch.t delete mode 100644 FS/t/payby.t delete mode 100644 FS/t/payinfo_Mixin.t delete mode 100644 FS/t/payment_gateway.t delete mode 100644 FS/t/payment_gateway_option.t delete mode 100644 FS/t/pkg_class.t delete mode 100644 FS/t/pkg_referral.t delete mode 100644 FS/t/pkg_svc.t delete mode 100644 FS/t/port.t delete mode 100644 FS/t/prepay_credit.t delete mode 100644 FS/t/queue.t delete mode 100644 FS/t/queue_arg.t delete mode 100644 FS/t/queue_depend.t delete mode 100644 FS/t/raddb.t delete mode 100644 FS/t/radius_usergroup.t delete mode 100644 FS/t/rate.t delete mode 100644 FS/t/rate_detail.t delete mode 100644 FS/t/rate_prefix.t delete mode 100644 FS/t/rate_region.t delete mode 100644 FS/t/reason.t delete mode 100644 FS/t/reason_type.t delete mode 100644 FS/t/reg_code.t delete mode 100644 FS/t/reg_code_pkg.t delete mode 100644 FS/t/registrar.t delete mode 100644 FS/t/session.t delete mode 100644 FS/t/svc_Common.t delete mode 100644 FS/t/svc_External_Common.t delete mode 100644 FS/t/svc_Parent_Mixin.t delete mode 100644 FS/t/svc_acct.t delete mode 100644 FS/t/svc_acct_pop.t delete mode 100644 FS/t/svc_broadband.t delete mode 100644 FS/t/svc_domain.t delete mode 100644 FS/t/svc_external.t delete mode 100644 FS/t/svc_forward.t delete mode 100644 FS/t/svc_phone.t delete mode 100644 FS/t/svc_www.t delete mode 100644 FS/t/type_pkgs.t delete mode 100644 INSTALL delete mode 100644 Makefile delete mode 100644 README delete mode 100644 SCHEMA_CHANGE delete mode 100644 TODO delete mode 100755 bin/add-history-records.pl delete mode 100755 bin/all-postal-no-email delete mode 100755 bin/apache.export delete mode 100644 bin/artera.import delete mode 100644 bin/backup-dvd delete mode 100755 bin/bill-as-nextmonth delete mode 100755 bin/bill-as-nextmonth-BILL delete mode 100755 bin/bill-as-nextyear delete mode 100755 bin/bill-as-nextyear-BILL delete mode 100755 bin/bill-for-nextmonth delete mode 100755 bin/bill-for-nextyear delete mode 100755 bin/bill-nextmonth delete mode 100755 bin/bill-nextyear delete mode 100644 bin/billco-upload delete mode 100755 bin/bind.export delete mode 100755 bin/bind.import delete mode 100644 bin/breakdown-bill-applications delete mode 100755 bin/bsdshell.export delete mode 100755 bin/cdr_calltype.import delete mode 100755 bin/cdr_upstream_rate.import delete mode 100644 bin/create-fetchmailrc delete mode 100755 bin/customer-faker delete mode 100755 bin/expand-country delete mode 100644 bin/explain-ar-total.sql delete mode 100644 bin/find-overapplied delete mode 100755 bin/fix-sequences delete mode 100755 bin/freeside-init delete mode 100644 bin/freeside-migrate-events delete mode 100755 bin/freeside-session-kill delete mode 100755 bin/freeside-upgrade-unicode delete mode 100644 bin/freeside.import delete mode 100755 bin/fs-migrate-cust_tax_exempt delete mode 100755 bin/fs-migrate-part_svc delete mode 100755 bin/fs-migrate-payref delete mode 100755 bin/fs-migrate-svc_acct_sm delete mode 100755 bin/fs-radius-add-check delete mode 100755 bin/fs-radius-add-reply delete mode 100755 bin/generate-prepay delete mode 100755 bin/generate-raddb delete mode 100755 bin/generate-table-module delete mode 100755 bin/generate-tests delete mode 100755 bin/import-county-tax-rates delete mode 100755 bin/ispman.ldap.import delete mode 100755 bin/mapsecrets2access_user delete mode 100755 bin/masonize delete mode 100755 bin/passwd.import delete mode 100755 bin/payment-faker delete mode 100644 bin/pg-readonly delete mode 100755 bin/pg-version delete mode 100755 bin/pod2x delete mode 100755 bin/postfix.export delete mode 100755 bin/postfix_courierimap.import delete mode 100755 bin/print-schema delete mode 100755 bin/rate-us.import delete mode 100755 bin/rate.import delete mode 100755 bin/reset-cust_credit-otaker delete mode 100755 bin/rollback delete mode 100755 bin/rotate-cdrs delete mode 100755 bin/rt-drop-tables delete mode 100644 bin/rt-update-links delete mode 100644 bin/sendmail.import delete mode 100644 bin/sequences.reset delete mode 100755 bin/shadow.reimport delete mode 100755 bin/slony-setup delete mode 100755 bin/sqlradius-norealm.reimport delete mode 100644 bin/sqlradius.import delete mode 100755 bin/sqlradius.reimport delete mode 100755 bin/strip-eps delete mode 100755 bin/svc_acct.import delete mode 100755 bin/svc_acct_pop.import delete mode 100755 bin/svc_broadband.renumber delete mode 100755 bin/svc_domain.erase delete mode 100755 bin/sysvshell.export delete mode 100644 conf/agent_defaultpkg delete mode 100644 conf/alerter_template delete mode 100644 conf/blank_logo.eps delete mode 100644 conf/company_address delete mode 100644 conf/company_name delete mode 100644 conf/cust_pkg-change_svcpart delete mode 100644 conf/declinetemplate delete mode 100644 conf/home delete mode 100644 conf/impending_recur_template delete mode 100644 conf/invoice_from delete mode 100644 conf/invoice_html delete mode 100644 conf/invoice_html_statement delete mode 100644 conf/invoice_latex delete mode 100644 conf/invoice_latex.diff delete mode 100644 conf/invoice_latex_statement delete mode 100644 conf/invoice_latexfooter delete mode 100644 conf/invoice_latexnotes delete mode 100644 conf/invoice_latexnotes_statement delete mode 100644 conf/invoice_latexsmallfooter delete mode 100644 conf/invoice_template delete mode 100644 conf/invoice_template_statement delete mode 100644 conf/locale delete mode 100644 conf/logo.eps delete mode 100644 conf/logo.png delete mode 100644 conf/lpr delete mode 100644 conf/maxsearchrecordsperpage delete mode 100644 conf/payment_receipt_email delete mode 100644 conf/report_template delete mode 100644 conf/shells delete mode 100644 conf/show-msgcat-codes delete mode 100644 conf/smtpmachine delete mode 100644 conf/soadefaultttl delete mode 100644 conf/soaexpire delete mode 100644 conf/soarefresh delete mode 100644 conf/soaretry delete mode 100644 conf/ticket_system delete mode 100644 conf/welcome_letter delete mode 100644 debian/README.Debian delete mode 100644 debian/changelog delete mode 100644 debian/conffiles.ex delete mode 100644 debian/control delete mode 100644 debian/copyright delete mode 100644 debian/cron.d.ex delete mode 100644 debian/dirs delete mode 100644 debian/docs delete mode 100644 debian/ex.doc-base.package delete mode 100644 debian/freeside-doc.docs delete mode 100644 debian/freeside-doc.files delete mode 100644 debian/init.d.ex delete mode 100644 debian/manpage.1.ex delete mode 100644 debian/manpage.sgml.ex delete mode 100644 debian/menu.ex delete mode 100644 debian/postinst.ex delete mode 100644 debian/postrm.ex delete mode 100644 debian/preinst.ex delete mode 100644 debian/prerm.ex delete mode 100755 debian/rules delete mode 100644 debian/watch.ex delete mode 100755 eg/TEMPLATE_cust_main.import delete mode 100644 eg/export_template.pm delete mode 100644 eg/part_event-Action-template.pm delete mode 100644 eg/part_event-Condition-template.pm delete mode 100644 eg/table_template-svc.pm delete mode 100644 eg/table_template.pm delete mode 100755 eg/xmlrpc-example.pl delete mode 100644 etc/abbr_state.txt delete mode 100644 etc/countries.txt delete mode 100644 etc/domain-template.txt delete mode 100755 etc/megapop.pl delete mode 100644 etc/sql-reserved-words.txt delete mode 100755 fs_passwd/fs_passwd delete mode 100755 fs_selfadmin/FS-MailAdminServer/MailAdminClient.pm delete mode 100755 fs_selfadmin/FS-MailAdminServer/cgi/mailadmin.cgi delete mode 100755 fs_selfadmin/FS-MailAdminServer/fs_mailadmind delete mode 100644 fs_selfadmin/README delete mode 100755 fs_selfadmin/fs_mailadmin_server delete mode 100755 fs_selfservice/DEPLOY delete mode 100644 fs_selfservice/FS-SelfService/Changes delete mode 100644 fs_selfservice/FS-SelfService/MANIFEST delete mode 100644 fs_selfservice/FS-SelfService/Makefile.PL delete mode 100644 fs_selfservice/FS-SelfService/SelfService.pm delete mode 100644 fs_selfservice/FS-SelfService/SelfService/XMLRPC.pm delete mode 100644 fs_selfservice/FS-SelfService/cgi/ach_payment_results.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/agent.cgi delete mode 100644 fs_selfservice/FS-SelfService/cgi/agent_customer_menu.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/agent_delete_svc.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/agent_login.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/agent_logout.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/agent_main.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/agent_menu.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/agent_order_pkg.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/agent_provision.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/agent_provision_svc_acct.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/bill.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/card.html delete mode 100755 fs_selfservice/FS-SelfService/cgi/change_bill.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/change_password.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/change_pay.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/change_pkg.html delete mode 100755 fs_selfservice/FS-SelfService/cgi/change_ship.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/check.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/contact.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi delete mode 100644 fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html delete mode 100755 fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/cvv2.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/cvv2.png delete mode 100644 fs_selfservice/FS-SelfService/cgi/cvv2_amex.png delete mode 100644 fs_selfservice/FS-SelfService/cgi/decline.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/delete_svc.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/list_customers.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/login.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/logout.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/make_ach_payment.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/make_payment.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/map.gif delete mode 100644 fs_selfservice/FS-SelfService/cgi/myaccount.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/myaccount_menu.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/order_pkg.html delete mode 100755 fs_selfservice/FS-SelfService/cgi/passwd.cgi delete mode 100644 fs_selfservice/FS-SelfService/cgi/passwd.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/payment_results.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/process_change_bill.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/process_change_password.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/process_change_pay.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/process_change_pkg.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/process_change_ship.html delete mode 100755 fs_selfservice/FS-SelfService/cgi/process_order_pkg.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/process_order_recharge.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/process_svc_acct.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/process_svc_external.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/promocode.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/provision.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/provision_list.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/recharge_prepay.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/recharge_results.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/regcode.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/selfservice.cgi delete mode 100755 fs_selfservice/FS-SelfService/cgi/signup-agentselect.html delete mode 100755 fs_selfservice/FS-SelfService/cgi/signup-alternate.html delete mode 100755 fs_selfservice/FS-SelfService/cgi/signup-billaddress.html delete mode 100755 fs_selfservice/FS-SelfService/cgi/signup-freeoption.html delete mode 100755 fs_selfservice/FS-SelfService/cgi/signup-snarf.html delete mode 100755 fs_selfservice/FS-SelfService/cgi/signup.cgi delete mode 100755 fs_selfservice/FS-SelfService/cgi/signup.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/stateselect.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/success-delayed.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/success.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/svc_acct.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/view_customer.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/view_invoice.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/view_support_details.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/view_usage.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/view_usage_details.html delete mode 100644 fs_selfservice/FS-SelfService/cgi/xmlrpc.cgi delete mode 100644 fs_selfservice/FS-SelfService/freeside-selfservice-clientd delete mode 100644 fs_selfservice/FS-SelfService/freeside-selfservice-xmlrpc-server delete mode 100755 fs_selfservice/FS-SelfService/ieak.template delete mode 100644 fs_selfservice/FS-SelfService/test.pl delete mode 100755 fs_selfservice/fs_passwd_test delete mode 100644 fs_selfservice/php/freeside.class.php delete mode 100644 fs_selfservice/php/freeside.login_example.php delete mode 100644 fs_selfservice/php/freeside_signup_example.php delete mode 100644 fs_sesmon/FS-SessionClient/Changes delete mode 100644 fs_sesmon/FS-SessionClient/MANIFEST delete mode 100644 fs_sesmon/FS-SessionClient/MANIFEST.SKIP delete mode 100644 fs_sesmon/FS-SessionClient/Makefile.PL delete mode 100644 fs_sesmon/FS-SessionClient/SessionClient.pm delete mode 100644 fs_sesmon/FS-SessionClient/bin/freeside-login delete mode 100644 fs_sesmon/FS-SessionClient/bin/freeside-logout delete mode 100644 fs_sesmon/FS-SessionClient/cgi/login.cgi delete mode 100644 fs_sesmon/FS-SessionClient/cgi/logout.cgi delete mode 100644 fs_sesmon/FS-SessionClient/fs_sessiond delete mode 100644 fs_sesmon/FS-SessionClient/test.pl delete mode 100644 fs_sesmon/fs_session_server delete mode 100644 htetc/freeside-base1.99.conf delete mode 100644 htetc/freeside-base1.conf delete mode 100644 htetc/freeside-base2.conf delete mode 100644 htetc/freeside-rt.conf delete mode 100644 htetc/handler.pl delete mode 100755 httemplate/.htaccess delete mode 100644 httemplate/autohandler delete mode 100644 httemplate/browse/access_group.html delete mode 100644 httemplate/browse/access_user.html delete mode 100644 httemplate/browse/addr_block.cgi delete mode 100755 httemplate/browse/agent.cgi delete mode 100755 httemplate/browse/agent_type.cgi delete mode 100755 httemplate/browse/cust_main_county.cgi delete mode 100644 httemplate/browse/elements/browse.html delete mode 100644 httemplate/browse/inventory_class.html delete mode 100644 httemplate/browse/invoice_template.html delete mode 100755 httemplate/browse/msgcat.cgi delete mode 100755 httemplate/browse/nas.cgi delete mode 100755 httemplate/browse/part_bill_event.cgi delete mode 100644 httemplate/browse/part_event.html delete mode 100755 httemplate/browse/part_export.cgi delete mode 100755 httemplate/browse/part_pkg.cgi delete mode 100755 httemplate/browse/part_referral.html delete mode 100755 httemplate/browse/part_svc.cgi delete mode 100644 httemplate/browse/part_virtual_field.cgi delete mode 100644 httemplate/browse/payment_gateway.html delete mode 100644 httemplate/browse/pkg_class.html delete mode 100644 httemplate/browse/rate.cgi delete mode 100644 httemplate/browse/rate_detail.html delete mode 100644 httemplate/browse/rate_region.html delete mode 100644 httemplate/browse/reason.html delete mode 100644 httemplate/browse/reason_type.html delete mode 100644 httemplate/browse/router.cgi delete mode 100755 httemplate/browse/svc_acct_pop.cgi delete mode 100644 httemplate/config/config-delete.cgi delete mode 100644 httemplate/config/config-download.cgi delete mode 100644 httemplate/config/config-process.cgi delete mode 100644 httemplate/config/config-view.cgi delete mode 100644 httemplate/config/config.cgi delete mode 100644 httemplate/docs/ach.html delete mode 100755 httemplate/docs/admin.html delete mode 100644 httemplate/docs/cvv2.html delete mode 100644 httemplate/docs/ieak.html delete mode 100644 httemplate/docs/index.html delete mode 100755 httemplate/docs/legacy.html delete mode 100644 httemplate/docs/man/FS/part_export/.cvs_is_on_crack delete mode 100644 httemplate/docs/overview-new.dia delete mode 100644 httemplate/docs/overview-new.png delete mode 100644 httemplate/docs/overview.dia delete mode 100644 httemplate/docs/overview.png delete mode 100755 httemplate/docs/passwd.html delete mode 100644 httemplate/docs/schema.dia delete mode 100644 httemplate/docs/schema.html delete mode 100644 httemplate/docs/schema.png delete mode 100644 httemplate/docs/session.html delete mode 100644 httemplate/docs/signup.html delete mode 100755 httemplate/docs/ssh.html delete mode 100755 httemplate/edit/REAL_cust_pkg.cgi delete mode 100644 httemplate/edit/access_group.html delete mode 100644 httemplate/edit/access_user.html delete mode 100755 httemplate/edit/agent.cgi delete mode 100644 httemplate/edit/agent_payment_gateway.html delete mode 100755 httemplate/edit/agent_type.cgi delete mode 100644 httemplate/edit/bulk-cust_svc.html delete mode 100755 httemplate/edit/cust_bill_pay.cgi delete mode 100755 httemplate/edit/cust_credit.cgi delete mode 100755 httemplate/edit/cust_credit_bill.cgi delete mode 100755 httemplate/edit/cust_main.cgi delete mode 100644 httemplate/edit/cust_main/billing.html delete mode 100644 httemplate/edit/cust_main/contact.html delete mode 100644 httemplate/edit/cust_main/select-country.html delete mode 100644 httemplate/edit/cust_main/select-county.html delete mode 100644 httemplate/edit/cust_main/select-domain.html delete mode 100644 httemplate/edit/cust_main/select-state.html delete mode 100755 httemplate/edit/cust_main_county-expand.cgi delete mode 100644 httemplate/edit/cust_main_county.html delete mode 100755 httemplate/edit/cust_main_note.cgi delete mode 100755 httemplate/edit/cust_pay.cgi delete mode 100755 httemplate/edit/cust_pkg.cgi delete mode 100755 httemplate/edit/cust_refund.cgi delete mode 100644 httemplate/edit/elements/edit.html delete mode 100644 httemplate/edit/elements/svc_Common.html delete mode 100644 httemplate/edit/inventory_class.html delete mode 100644 httemplate/edit/invoice_logo.html delete mode 100644 httemplate/edit/invoice_template.html delete mode 100755 httemplate/edit/msgcat.cgi delete mode 100755 httemplate/edit/part_bill_event.cgi delete mode 100644 httemplate/edit/part_event.html delete mode 100644 httemplate/edit/part_export.cgi delete mode 100755 httemplate/edit/part_pkg.cgi delete mode 100644 httemplate/edit/part_pkg_taxclass.html delete mode 100755 httemplate/edit/part_referral.html delete mode 100755 httemplate/edit/part_svc.cgi delete mode 100644 httemplate/edit/part_virtual_field.cgi delete mode 100644 httemplate/edit/payment_gateway.html delete mode 100644 httemplate/edit/pkg_class.html delete mode 100644 httemplate/edit/prepay_credit.cgi delete mode 100755 httemplate/edit/process/REAL_cust_pkg.cgi delete mode 100644 httemplate/edit/process/access_group.html delete mode 100644 httemplate/edit/process/access_user.html delete mode 100755 httemplate/edit/process/addr_block/add.cgi delete mode 100755 httemplate/edit/process/addr_block/allocate.cgi delete mode 100755 httemplate/edit/process/addr_block/deallocate.cgi delete mode 100755 httemplate/edit/process/addr_block/split.cgi delete mode 100755 httemplate/edit/process/agent.cgi delete mode 100644 httemplate/edit/process/agent_payment_gateway.html delete mode 100755 httemplate/edit/process/agent_type.cgi delete mode 100644 httemplate/edit/process/bulk-cust_svc.cgi delete mode 100755 httemplate/edit/process/cust_bill_pay.cgi delete mode 100755 httemplate/edit/process/cust_credit.cgi delete mode 100755 httemplate/edit/process/cust_credit_bill.cgi delete mode 100755 httemplate/edit/process/cust_main.cgi delete mode 100755 httemplate/edit/process/cust_main_county-collapse.cgi delete mode 100755 httemplate/edit/process/cust_main_county-expand.cgi delete mode 100644 httemplate/edit/process/cust_main_county.html delete mode 100755 httemplate/edit/process/cust_main_note.cgi delete mode 100755 httemplate/edit/process/cust_pay.cgi delete mode 100755 httemplate/edit/process/cust_pkg.cgi delete mode 100755 httemplate/edit/process/cust_refund.cgi delete mode 100644 httemplate/edit/process/cust_svc.cgi delete mode 100755 httemplate/edit/process/domain_record.cgi delete mode 100644 httemplate/edit/process/elements/process.html delete mode 100644 httemplate/edit/process/elements/svc_Common.html delete mode 100644 httemplate/edit/process/generic.cgi delete mode 100644 httemplate/edit/process/inventory_class.html delete mode 100644 httemplate/edit/process/invoice_logo.html delete mode 100644 httemplate/edit/process/invoice_template.html delete mode 100644 httemplate/edit/process/msgcat.cgi delete mode 100755 httemplate/edit/process/part_bill_event.cgi delete mode 100644 httemplate/edit/process/part_event.html delete mode 100644 httemplate/edit/process/part_export.cgi delete mode 100755 httemplate/edit/process/part_pkg.cgi delete mode 100644 httemplate/edit/process/part_pkg_taxclass.html delete mode 100755 httemplate/edit/process/part_referral.html delete mode 100755 httemplate/edit/process/part_svc.cgi delete mode 100644 httemplate/edit/process/payment_gateway.html delete mode 100644 httemplate/edit/process/pkg_class.html delete mode 100644 httemplate/edit/process/prepay_credit.cgi delete mode 100644 httemplate/edit/process/quick-charge.cgi delete mode 100644 httemplate/edit/process/quick-cust_pkg.cgi delete mode 100755 httemplate/edit/process/rate.cgi delete mode 100644 httemplate/edit/process/rate_detail.html delete mode 100755 httemplate/edit/process/rate_region.cgi delete mode 100644 httemplate/edit/process/reason.html delete mode 100644 httemplate/edit/process/reason_type.html delete mode 100644 httemplate/edit/process/reg_code.cgi delete mode 100644 httemplate/edit/process/router.cgi delete mode 100644 httemplate/edit/process/svc_Common.html delete mode 100755 httemplate/edit/process/svc_acct.cgi delete mode 100755 httemplate/edit/process/svc_acct_pop.cgi delete mode 100644 httemplate/edit/process/svc_broadband.cgi delete mode 100755 httemplate/edit/process/svc_domain.cgi delete mode 100755 httemplate/edit/process/svc_external.cgi delete mode 100755 httemplate/edit/process/svc_forward.cgi delete mode 100644 httemplate/edit/process/svc_phone.html delete mode 100644 httemplate/edit/process/svc_www.cgi delete mode 100644 httemplate/edit/quick-charge.html delete mode 100644 httemplate/edit/rate.cgi delete mode 100644 httemplate/edit/rate_detail.html delete mode 100644 httemplate/edit/rate_region.cgi delete mode 100644 httemplate/edit/reason.html delete mode 100644 httemplate/edit/reason_type.html delete mode 100644 httemplate/edit/reg_code.cgi delete mode 100755 httemplate/edit/router.cgi delete mode 100644 httemplate/edit/svc_Common.html delete mode 100755 httemplate/edit/svc_acct.cgi delete mode 100755 httemplate/edit/svc_acct_pop.cgi delete mode 100644 httemplate/edit/svc_broadband.cgi delete mode 100755 httemplate/edit/svc_domain.cgi delete mode 100644 httemplate/edit/svc_external.cgi delete mode 100755 httemplate/edit/svc_forward.cgi delete mode 100644 httemplate/edit/svc_phone.cgi delete mode 100644 httemplate/edit/svc_www.cgi delete mode 100644 httemplate/elements/calendar-en.js delete mode 100644 httemplate/elements/calendar-setup.js delete mode 100644 httemplate/elements/calendar-win2k-2.css delete mode 100644 httemplate/elements/calendar.js delete mode 100644 httemplate/elements/calendar_stripped.js delete mode 100644 httemplate/elements/checkboxes-table-name.html delete mode 100644 httemplate/elements/checkboxes-table.html delete mode 100644 httemplate/elements/cssexpr.js delete mode 100644 httemplate/elements/dashboard-toplist.html delete mode 100644 httemplate/elements/error.html delete mode 100644 httemplate/elements/errorpage.html delete mode 100644 httemplate/elements/fckeditor/editor/css/behaviors/disablehandles.htc delete mode 100644 httemplate/elements/fckeditor/editor/css/behaviors/showtableborders.htc delete mode 100644 httemplate/elements/fckeditor/editor/css/fck_editorarea.css delete mode 100644 httemplate/elements/fckeditor/editor/css/fck_internal.css delete mode 100644 httemplate/elements/fckeditor/editor/css/fck_showtableborders_gecko.css delete mode 100644 httemplate/elements/fckeditor/editor/css/images/fck_anchor.gif delete mode 100644 httemplate/elements/fckeditor/editor/css/images/fck_flashlogo.gif delete mode 100644 httemplate/elements/fckeditor/editor/css/images/fck_hiddenfield.gif delete mode 100644 httemplate/elements/fckeditor/editor/css/images/fck_pagebreak.gif delete mode 100644 httemplate/elements/fckeditor/editor/dialog/common/fck_dialog_common.css delete mode 100644 httemplate/elements/fckeditor/editor/dialog/common/fck_dialog_common.js delete mode 100644 httemplate/elements/fckeditor/editor/dialog/common/fcknumericfield.htc delete mode 100644 httemplate/elements/fckeditor/editor/dialog/common/images/locked.gif delete mode 100644 httemplate/elements/fckeditor/editor/dialog/common/images/reset.gif delete mode 100644 httemplate/elements/fckeditor/editor/dialog/common/images/unlocked.gif delete mode 100644 httemplate/elements/fckeditor/editor/dialog/common/moz-bindings.xml delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_about.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_about/logo_fredck.gif delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_anchor.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_button.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_checkbox.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_colorselector.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_docprops.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_find.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_flash.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_flash/fck_flash.js delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_form.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_hiddenfield.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_image.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_image/fck_image.js delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_image/fck_image_preview.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_link.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_link/fck_link.js delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_listprop.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_paste.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_radiobutton.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_replace.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_select.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_select/fck_select.js delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_smiley.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_source.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_specialchar.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_spellerpages.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_table.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_tablecell.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_template.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_template/images/template1.gif delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_template/images/template2.gif delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_template/images/template3.gif delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_textarea.html delete mode 100644 httemplate/elements/fckeditor/editor/dialog/fck_textfield.html delete mode 100644 httemplate/elements/fckeditor/editor/fckdebug.html delete mode 100644 httemplate/elements/fckeditor/editor/fckdialog.html delete mode 100644 httemplate/elements/fckeditor/editor/fckeditor.html delete mode 100644 httemplate/elements/fckeditor/editor/fckeditor.original.html delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/browser.css delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/browser.html delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/connectors/perl/basexml.pl delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/connectors/perl/commands.pl delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/connectors/perl/connector.cgi delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/connectors/perl/io.pl delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/connectors/perl/upload_fck.pl delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/connectors/perl/util.pl delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/frmactualfolder.html delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/frmfolders.html delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/frmresourceslist.html delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/frmresourcetype.html delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/frmupload.html delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/Folder.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/Folder32.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/png.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/html.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/js.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/png.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/images/spacer.gif delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/js/common.js delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/browser/default/js/fckxml.js delete mode 100644 httemplate/elements/fckeditor/editor/filemanager/upload/test.html delete mode 100644 httemplate/elements/fckeditor/editor/images/anchor.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/arrow_ltr.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/arrow_rtl.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/angel_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/angry_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/broken_heart.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/cake.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/confused_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/cry_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/devil_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/embaressed_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/envelope.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/heart.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/kiss.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/lightbulb.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/omg_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/regular_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/sad_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/shades_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/teeth_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/thumbs_down.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/thumbs_up.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/tounge_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/smiley/msn/wink_smile.gif delete mode 100644 httemplate/elements/fckeditor/editor/images/spacer.gif delete mode 100644 httemplate/elements/fckeditor/editor/js/fckeditorcode_gecko.js delete mode 100644 httemplate/elements/fckeditor/editor/js/fckeditorcode_ie.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/_getfontformat.html delete mode 100644 httemplate/elements/fckeditor/editor/lang/_translationstatus.txt delete mode 100644 httemplate/elements/fckeditor/editor/lang/af.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/ar.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/bg.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/bn.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/bs.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/ca.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/cs.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/da.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/de.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/el.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/en-au.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/en-ca.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/en-uk.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/en.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/eo.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/es.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/et.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/eu.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/fa.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/fi.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/fo.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/fr.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/gl.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/he.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/hi.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/hr.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/hu.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/it.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/ja.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/km.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/ko.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/lt.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/lv.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/mn.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/ms.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/nb.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/nl.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/no.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/pl.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/pt-br.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/pt.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/ro.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/ru.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/sk.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/sl.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/sr-latn.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/sr.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/sv.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/th.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/tr.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/uk.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/vi.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/zh-cn.js delete mode 100644 httemplate/elements/fckeditor/editor/lang/zh.js delete mode 100644 httemplate/elements/fckeditor/editor/plugins/autogrow/fckplugin.js delete mode 100644 httemplate/elements/fckeditor/editor/plugins/placeholder/fck_placeholder.html delete mode 100644 httemplate/elements/fckeditor/editor/plugins/placeholder/fckplugin.js delete mode 100644 httemplate/elements/fckeditor/editor/plugins/placeholder/lang/de.js delete mode 100644 httemplate/elements/fckeditor/editor/plugins/placeholder/lang/en.js delete mode 100644 httemplate/elements/fckeditor/editor/plugins/placeholder/lang/fr.js delete mode 100644 httemplate/elements/fckeditor/editor/plugins/placeholder/lang/it.js delete mode 100644 httemplate/elements/fckeditor/editor/plugins/placeholder/lang/pl.js delete mode 100644 httemplate/elements/fckeditor/editor/plugins/placeholder/placeholder.gif delete mode 100644 httemplate/elements/fckeditor/editor/plugins/simplecommands/fckplugin.js delete mode 100644 httemplate/elements/fckeditor/editor/plugins/tablecommands/fckplugin.js delete mode 100644 httemplate/elements/fckeditor/editor/skins/_fckviewstrips.html delete mode 100644 httemplate/elements/fckeditor/editor/skins/default/fck_dialog.css delete mode 100644 httemplate/elements/fckeditor/editor/skins/default/fck_editor.css delete mode 100644 httemplate/elements/fckeditor/editor/skins/default/fck_strip.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/default/images/toolbar.arrowright.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/default/images/toolbar.collapse.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/default/images/toolbar.end.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/default/images/toolbar.expand.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/default/images/toolbar.separator.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/default/images/toolbar.start.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/fck_dialog.css delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/fck_editor.css delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/fck_strip.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/images/toolbar.bg.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/images/toolbar.end.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/images/toolbar.expand.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/images/toolbar.separator.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/office2003/images/toolbar.start.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/fck_dialog.css delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/fck_editor.css delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/fck_strip.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/images/toolbar.collapse.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/images/toolbar.end.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/images/toolbar.expand.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/images/toolbar.separator.gif delete mode 100644 httemplate/elements/fckeditor/editor/skins/silver/images/toolbar.start.gif delete mode 100644 httemplate/elements/fckeditor/fckconfig.js delete mode 100644 httemplate/elements/fckeditor/fckeditor.js delete mode 100644 httemplate/elements/fckeditor/fckpackager.xml delete mode 100644 httemplate/elements/fckeditor/fckstyles.xml delete mode 100644 httemplate/elements/fckeditor/fcktemplates.xml delete mode 100644 httemplate/elements/footer.html delete mode 100644 httemplate/elements/freeside.css delete mode 100644 httemplate/elements/header-popup.html delete mode 100644 httemplate/elements/header.html delete mode 100644 httemplate/elements/hidden.html delete mode 100644 httemplate/elements/iframecontentmws.js delete mode 100644 httemplate/elements/jsrsClient.js delete mode 100644 httemplate/elements/jsrsServer.html delete mode 100644 httemplate/elements/menu.html delete mode 100644 httemplate/elements/menubar.html delete mode 100644 httemplate/elements/overlibmws.js delete mode 100644 httemplate/elements/overlibmws_crossframe.js delete mode 100644 httemplate/elements/overlibmws_draggable.js delete mode 100644 httemplate/elements/overlibmws_iframe.js delete mode 100644 httemplate/elements/pager.html delete mode 100644 httemplate/elements/phonenumber.html delete mode 100644 httemplate/elements/progress-init.html delete mode 100644 httemplate/elements/progress-popup.html delete mode 100644 httemplate/elements/qlib/box.js delete mode 100644 httemplate/elements/qlib/boxctrl.js delete mode 100644 httemplate/elements/qlib/boxres.js delete mode 100644 httemplate/elements/qlib/button.js delete mode 100644 httemplate/elements/qlib/buttonres.js delete mode 100644 httemplate/elements/qlib/control.js delete mode 100644 httemplate/elements/qlib/counter.js delete mode 100644 httemplate/elements/qlib/imagelist.js delete mode 100644 httemplate/elements/qlib/label.js delete mode 100644 httemplate/elements/qlib/messagebox.js delete mode 100644 httemplate/elements/qlib/progress.js delete mode 100644 httemplate/elements/qlib/sound.js delete mode 100644 httemplate/elements/qlib/sprite.js delete mode 100644 httemplate/elements/qlib/window.js delete mode 100644 httemplate/elements/qlib/wndctrl.js delete mode 100644 httemplate/elements/search-cust_main.html delete mode 100644 httemplate/elements/select-access_group.html delete mode 100644 httemplate/elements/select-agent.html delete mode 100644 httemplate/elements/select-agent_type.html delete mode 100644 httemplate/elements/select-cust-fields.html delete mode 100644 httemplate/elements/select-cust-part_pkg.html delete mode 100644 httemplate/elements/select-cust_main-status.html delete mode 100644 httemplate/elements/select-cust_pkg-status.html delete mode 100644 httemplate/elements/select-month_year.html delete mode 100644 httemplate/elements/select-otaker.html delete mode 100644 httemplate/elements/select-part_referral.html delete mode 100644 httemplate/elements/select-payby.html delete mode 100644 httemplate/elements/select-pkg_class.html delete mode 100644 httemplate/elements/select-table.html delete mode 100644 httemplate/elements/select-taxclass.html delete mode 100644 httemplate/elements/selectlayers.html delete mode 100644 httemplate/elements/small_custview.html delete mode 100644 httemplate/elements/table-grid.html delete mode 100644 httemplate/elements/table.html delete mode 100644 httemplate/elements/tablebreak-tr-title.html delete mode 100644 httemplate/elements/tr-checkbox-multiple.html delete mode 100644 httemplate/elements/tr-checkbox.html delete mode 100644 httemplate/elements/tr-fixed-country.html delete mode 100644 httemplate/elements/tr-fixed-state.html delete mode 100644 httemplate/elements/tr-fixed.html delete mode 100644 httemplate/elements/tr-freq.html delete mode 100644 httemplate/elements/tr-input-beginning_ending.html delete mode 100644 httemplate/elements/tr-input-date-field.html delete mode 100644 httemplate/elements/tr-input-lessthan_greaterthan.html delete mode 100644 httemplate/elements/tr-input-money.html delete mode 100644 httemplate/elements/tr-input-percentage.html delete mode 100644 httemplate/elements/tr-input-text.html delete mode 100644 httemplate/elements/tr-password.html delete mode 100644 httemplate/elements/tr-select-access_group.html delete mode 100644 httemplate/elements/tr-select-agent.html delete mode 100644 httemplate/elements/tr-select-agent_type.html delete mode 100644 httemplate/elements/tr-select-cust-fields.html delete mode 100644 httemplate/elements/tr-select-cust_main-status.html delete mode 100644 httemplate/elements/tr-select-cust_pkg-status.html delete mode 100644 httemplate/elements/tr-select-from_to.html delete mode 100644 httemplate/elements/tr-select-invoice_template.html delete mode 100644 httemplate/elements/tr-select-otaker.html delete mode 100644 httemplate/elements/tr-select-part_pkg.html delete mode 100644 httemplate/elements/tr-select-part_referral.html delete mode 100644 httemplate/elements/tr-select-part_svc.html delete mode 100644 httemplate/elements/tr-select-payby.html delete mode 100644 httemplate/elements/tr-select-pkg_class.html delete mode 100755 httemplate/elements/tr-select-reason.html delete mode 100644 httemplate/elements/tr-select-taxclass.html delete mode 100644 httemplate/elements/tr-select.html delete mode 100644 httemplate/elements/tr-selectlayers.html delete mode 100644 httemplate/elements/tr-selectmultiple-part_pkg.html delete mode 100644 httemplate/elements/tr-td-label.html delete mode 100644 httemplate/elements/tr-title.html delete mode 100644 httemplate/elements/xmenu.css delete mode 100644 httemplate/elements/xmenu.js delete mode 100644 httemplate/elements/xmenu.top.css delete mode 100644 httemplate/elements/xmenu.top.js delete mode 100644 httemplate/elements/xmlhttp.html delete mode 100644 httemplate/graph/cust_bill_pkg.cgi delete mode 100644 httemplate/graph/cust_pkg.cgi delete mode 100644 httemplate/graph/elements/monthly.html delete mode 100644 httemplate/graph/money_time.cgi delete mode 100644 httemplate/graph/report_cust_bill_pkg.html delete mode 100644 httemplate/graph/report_cust_pkg.html delete mode 100644 httemplate/graph/report_money_time.html delete mode 100644 httemplate/images/32clear.gif delete mode 100644 httemplate/images/ach.png delete mode 100644 httemplate/images/arrow.down.png delete mode 100644 httemplate/images/arrow.right.black.png delete mode 100644 httemplate/images/arrow.right.png delete mode 100644 httemplate/images/background-cheat.png delete mode 100644 httemplate/images/black-gradient.png delete mode 100644 httemplate/images/black-gray-corner.png delete mode 100644 httemplate/images/black-gray-gradient.png delete mode 100644 httemplate/images/black-gray-side.png delete mode 100644 httemplate/images/black-gray-top.png delete mode 100644 httemplate/images/calendar-disabled.png delete mode 100644 httemplate/images/calendar.png delete mode 100644 httemplate/images/cvv2.png delete mode 100644 httemplate/images/cvv2_amex.png delete mode 100644 httemplate/images/menu-left-example.png delete mode 100644 httemplate/images/menu-top-example.png delete mode 100644 httemplate/images/progressbar-empty.png delete mode 100644 httemplate/images/progressbar-full.png delete mode 100644 httemplate/images/red_telephone_mimooh_01.png delete mode 100644 httemplate/images/small-logo.png delete mode 100644 httemplate/index.html delete mode 100644 httemplate/misc/batch-cust_pay.html delete mode 100755 httemplate/misc/bill.cgi delete mode 100755 httemplate/misc/bulk_change_pkg.cgi delete mode 100755 httemplate/misc/cancel-unaudited.cgi delete mode 100644 httemplate/misc/cancel_cust.html delete mode 100755 httemplate/misc/cancel_pkg.html delete mode 100755 httemplate/misc/catchall.cgi delete mode 100644 httemplate/misc/cdr-import.html delete mode 100755 httemplate/misc/change_pkg.cgi delete mode 100644 httemplate/misc/counties.cgi delete mode 100755 httemplate/misc/cust_main-cancel.cgi delete mode 100644 httemplate/misc/cust_main-import.cgi delete mode 100644 httemplate/misc/cust_main-import_charges.cgi delete mode 100644 httemplate/misc/cust_main_note-import.cgi delete mode 100644 httemplate/misc/cust_main_note-import.html delete mode 100644 httemplate/misc/cust_pay-import.cgi delete mode 100644 httemplate/misc/delete-agent_payment_gateway.cgi delete mode 100755 httemplate/misc/delete-cust_credit.cgi delete mode 100755 httemplate/misc/delete-cust_pay.cgi delete mode 100755 httemplate/misc/delete-cust_refund.cgi delete mode 100755 httemplate/misc/delete-customer.cgi delete mode 100755 httemplate/misc/delete-domain_record.cgi delete mode 100755 httemplate/misc/delete-part_export.cgi delete mode 100644 httemplate/misc/disable-payment_gateway.cgi delete mode 100644 httemplate/misc/download-batch.cgi delete mode 100644 httemplate/misc/dump.cgi delete mode 100644 httemplate/misc/elements/customer-table.html delete mode 100755 httemplate/misc/email-invoice.cgi delete mode 100644 httemplate/misc/email_events.cgi delete mode 100644 httemplate/misc/email_invoice_events.cgi delete mode 100644 httemplate/misc/email_invoices.cgi delete mode 100755 httemplate/misc/fax-invoice.cgi delete mode 100644 httemplate/misc/fax_events.cgi delete mode 100644 httemplate/misc/fax_invoice_events.cgi delete mode 100644 httemplate/misc/fax_invoices.cgi delete mode 100644 httemplate/misc/inventory_item-import.html delete mode 100755 httemplate/misc/link.cgi delete mode 100644 httemplate/misc/meta-import.cgi delete mode 100644 httemplate/misc/order_pkg.html delete mode 100644 httemplate/misc/payment.cgi delete mode 100755 httemplate/misc/print-invoice.cgi delete mode 100644 httemplate/misc/print_events.cgi delete mode 100644 httemplate/misc/print_invoice_events.cgi delete mode 100644 httemplate/misc/print_invoices.cgi delete mode 100644 httemplate/misc/process/batch-cust_pay.cgi delete mode 100755 httemplate/misc/process/bulk_change_pkg.cgi delete mode 100755 httemplate/misc/process/cancel_pkg.html delete mode 100755 httemplate/misc/process/catchall.cgi delete mode 100644 httemplate/misc/process/cdr-import.html delete mode 100644 httemplate/misc/process/cust_main-import.cgi delete mode 100644 httemplate/misc/process/cust_main-import_charges.cgi delete mode 100644 httemplate/misc/process/cust_main_note-import.cgi delete mode 100644 httemplate/misc/process/cust_pay-import.cgi delete mode 100755 httemplate/misc/process/delete-customer.cgi delete mode 100644 httemplate/misc/process/inventory_item-import.html delete mode 100755 httemplate/misc/process/link.cgi delete mode 100644 httemplate/misc/process/meta-import.cgi delete mode 100644 httemplate/misc/process/payment.cgi delete mode 100755 httemplate/misc/process/recharge_svc.html delete mode 100644 httemplate/misc/process/timeworked.html delete mode 100644 httemplate/misc/queue.cgi delete mode 100755 httemplate/misc/recharge_svc.html delete mode 100644 httemplate/misc/states.cgi delete mode 100644 httemplate/misc/svc_acct-domains.cgi delete mode 100755 httemplate/misc/timeworked.html delete mode 100755 httemplate/misc/unapply-cust_credit.cgi delete mode 100755 httemplate/misc/unapply-cust_pay.cgi delete mode 100755 httemplate/misc/unprovision.cgi delete mode 100755 httemplate/misc/unsusp_pkg.cgi delete mode 100755 httemplate/misc/unvoid-cust_pay_void.cgi delete mode 100644 httemplate/misc/upload-batch.cgi delete mode 100755 httemplate/misc/void-cust_pay.cgi delete mode 100644 httemplate/misc/whois.cgi delete mode 100644 httemplate/misc/xmlhttp-cust_main-search.cgi delete mode 100644 httemplate/misc/xmlrpc.cgi delete mode 100644 httemplate/pref/pref-process.html delete mode 100644 httemplate/pref/pref.html delete mode 100644 httemplate/search/cdr.html delete mode 100755 httemplate/search/cust_bill.html delete mode 100644 httemplate/search/cust_bill_event.cgi delete mode 100755 httemplate/search/cust_bill_event.html delete mode 100644 httemplate/search/cust_bill_pkg.cgi delete mode 100755 httemplate/search/cust_credit.html delete mode 100644 httemplate/search/cust_credit_bill.html delete mode 100644 httemplate/search/cust_event.html delete mode 100755 httemplate/search/cust_main-otaker.cgi delete mode 100644 httemplate/search/cust_main-zip.html delete mode 100755 httemplate/search/cust_main.cgi delete mode 100755 httemplate/search/cust_main.html delete mode 100755 httemplate/search/cust_pay.cgi delete mode 100755 httemplate/search/cust_pay_batch.cgi delete mode 100755 httemplate/search/cust_pkg.cgi delete mode 100644 httemplate/search/cust_svc.html delete mode 100644 httemplate/search/cust_tax_exempt_pkg.cgi delete mode 100644 httemplate/search/elements/search.html delete mode 100644 httemplate/search/inventory_item.html delete mode 100755 httemplate/search/pay_batch.cgi delete mode 100644 httemplate/search/pay_batch.html delete mode 100644 httemplate/search/prepay_credit.html delete mode 100644 httemplate/search/queue.html delete mode 100644 httemplate/search/reg_code.html delete mode 100644 httemplate/search/report_cdr.html delete mode 100644 httemplate/search/report_cust_bill.html delete mode 100644 httemplate/search/report_cust_credit.html delete mode 100644 httemplate/search/report_cust_event.html delete mode 100644 httemplate/search/report_cust_main-zip.html delete mode 100755 httemplate/search/report_cust_main.html delete mode 100644 httemplate/search/report_cust_pay.html delete mode 100644 httemplate/search/report_cust_pay_batch.html delete mode 100755 httemplate/search/report_cust_pkg.html delete mode 100644 httemplate/search/report_prepaid_income.cgi delete mode 100644 httemplate/search/report_prepaid_income.html delete mode 100755 httemplate/search/report_receivables.cgi delete mode 100755 httemplate/search/report_receivables.html delete mode 100644 httemplate/search/report_rt_transaction.html delete mode 100755 httemplate/search/report_svc_acct.html delete mode 100755 httemplate/search/report_tax.cgi delete mode 100755 httemplate/search/report_tax.html delete mode 100644 httemplate/search/rt_transaction.html delete mode 100644 httemplate/search/sql.html delete mode 100644 httemplate/search/sqlradius.cgi delete mode 100644 httemplate/search/sqlradius.html delete mode 100755 httemplate/search/svc_acct.cgi delete mode 100755 httemplate/search/svc_broadband.cgi delete mode 100755 httemplate/search/svc_domain.cgi delete mode 100755 httemplate/search/svc_external.cgi delete mode 100755 httemplate/search/svc_forward.cgi delete mode 100644 httemplate/search/svc_phone.cgi delete mode 100755 httemplate/search/svc_www.cgi delete mode 100644 httemplate/search/timeworked.html delete mode 100755 httemplate/view/cust_bill-logo.cgi delete mode 100755 httemplate/view/cust_bill-pdf.cgi delete mode 100755 httemplate/view/cust_bill-ps.cgi delete mode 100755 httemplate/view/cust_bill.cgi delete mode 100755 httemplate/view/cust_main.cgi delete mode 100644 httemplate/view/cust_main/billing.html delete mode 100644 httemplate/view/cust_main/contacts.html delete mode 100644 httemplate/view/cust_main/misc.html delete mode 100755 httemplate/view/cust_main/notes.html delete mode 100755 httemplate/view/cust_main/packages.html delete mode 100644 httemplate/view/cust_main/payment_history.html delete mode 100644 httemplate/view/cust_main/tickets.html delete mode 100644 httemplate/view/cust_pay.html delete mode 100644 httemplate/view/elements/svc_Common.html delete mode 100644 httemplate/view/logo.cgi delete mode 100644 httemplate/view/svc_Common.html delete mode 100755 httemplate/view/svc_acct.cgi delete mode 100644 httemplate/view/svc_broadband.cgi delete mode 100755 httemplate/view/svc_domain.cgi delete mode 100644 httemplate/view/svc_external.cgi delete mode 100755 httemplate/view/svc_forward.cgi delete mode 100644 httemplate/view/svc_phone.cgi delete mode 100644 httemplate/view/svc_www.cgi delete mode 100644 init.d/freeside-init delete mode 100644 rpm/INSTALL delete mode 100644 rpm/freeside.spec delete mode 100644 rpm/freeside.sysconfig delete mode 100755 rpm/rpm2Bundle delete mode 100755 rt/COPYING delete mode 100644 rt/Changelog delete mode 100644 rt/FREESIDE_MODIFIED delete mode 100644 rt/Makefile delete mode 100644 rt/Makefile.in delete mode 100755 rt/README delete mode 100644 rt/README.Oracle delete mode 100644 rt/UPGRADING delete mode 100644 rt/aclocal.m4 delete mode 100644 rt/autom4te.cache/output.0 delete mode 100644 rt/autom4te.cache/requests delete mode 100644 rt/autom4te.cache/traces.0 delete mode 100755 rt/bin/mason_handler.fcgi delete mode 100644 rt/bin/mason_handler.fcgi.in delete mode 100755 rt/bin/mason_handler.scgi delete mode 100644 rt/bin/mason_handler.scgi.in delete mode 100644 rt/bin/mason_handler.svc delete mode 100644 rt/bin/mason_handler.svc.in delete mode 100644 rt/bin/rt-commit-handler delete mode 100644 rt/bin/rt-crontool delete mode 100644 rt/bin/rt-crontool.in delete mode 100755 rt/bin/rt-mailgate delete mode 100644 rt/bin/rt-mailgate.in delete mode 100644 rt/bin/rt.in delete mode 100755 rt/bin/standalone_httpd.in delete mode 100644 rt/bin/webmux.pl.in delete mode 100644 rt/config.layout.in delete mode 100644 rt/config.log delete mode 100755 rt/config.status delete mode 100755 rt/configure delete mode 100644 rt/configure.ac delete mode 100755 rt/docs/README.docs delete mode 100644 rt/docs/Security delete mode 100644 rt/docs/design_docs/3.3-schema-redesign.txt delete mode 100755 rt/docs/design_docs/CARS delete mode 100755 rt/docs/design_docs/TransactionTypes.txt delete mode 100644 rt/docs/design_docs/acls delete mode 100644 rt/docs/design_docs/approval_notices delete mode 100644 rt/docs/design_docs/approval_template delete mode 100644 rt/docs/design_docs/cf_search delete mode 100644 rt/docs/design_docs/cli_spec delete mode 100644 rt/docs/design_docs/cvs_integration delete mode 100644 rt/docs/design_docs/delegation delete mode 100644 rt/docs/design_docs/evil_plans delete mode 100644 rt/docs/design_docs/groups_notes delete mode 100644 rt/docs/design_docs/link-definitions.txt delete mode 100644 rt/docs/design_docs/realflow.txt delete mode 100644 rt/docs/design_docs/recursive_group_membership_algorithm delete mode 100644 rt/docs/design_docs/rql_parser_machine.graphviz delete mode 100644 rt/docs/design_docs/rt-mvc delete mode 100644 rt/docs/design_docs/ruleset-workflow.txt delete mode 100644 rt/docs/design_docs/string-extraction-guide.txt delete mode 100755 rt/docs/design_docs/subscription-definitions.txt delete mode 100644 rt/docs/design_docs/ticket_templates delete mode 100644 rt/docs/design_docs/users delete mode 100644 rt/docs/rt3-schema-relationships.dot delete mode 100644 rt/etc/RT_Config.pm delete mode 100644 rt/etc/RT_Config.pm.in delete mode 100644 rt/etc/RT_SiteConfig.pm delete mode 100644 rt/etc/acl.Informix delete mode 100644 rt/etc/acl.Oracle delete mode 100755 rt/etc/acl.Pg delete mode 100644 rt/etc/acl.Sybase delete mode 100755 rt/etc/acl.mysql delete mode 100644 rt/etc/constraints.mysql delete mode 100644 rt/etc/drop.Informix delete mode 100644 rt/etc/drop.Oracle delete mode 100644 rt/etc/initialdata delete mode 100644 rt/etc/rt.spec delete mode 100644 rt/etc/schema.Informix delete mode 100755 rt/etc/schema.Pg delete mode 100644 rt/etc/schema.SQLite delete mode 100644 rt/etc/schema.Sybase delete mode 100755 rt/etc/schema.mysql delete mode 100644 rt/etc/upgrade/3.1.0/acl.Informix delete mode 100755 rt/etc/upgrade/3.1.0/acl.Oracle delete mode 100755 rt/etc/upgrade/3.1.0/acl.Pg delete mode 100755 rt/etc/upgrade/3.1.0/acl.SQLite delete mode 100755 rt/etc/upgrade/3.1.0/acl.mysql delete mode 100644 rt/etc/upgrade/3.1.0/content delete mode 100644 rt/etc/upgrade/3.1.0/schema.Informix delete mode 100644 rt/etc/upgrade/3.1.0/schema.Oracle delete mode 100755 rt/etc/upgrade/3.1.0/schema.Pg delete mode 100644 rt/etc/upgrade/3.1.0/schema.SQLite delete mode 100755 rt/etc/upgrade/3.1.0/schema.mysql delete mode 100644 rt/etc/upgrade/3.1.15/content delete mode 100644 rt/etc/upgrade/3.1.17/content delete mode 100644 rt/etc/upgrade/3.3.0/acl.Informix delete mode 100644 rt/etc/upgrade/3.3.0/acl.Oracle delete mode 100644 rt/etc/upgrade/3.3.0/acl.Pg delete mode 100644 rt/etc/upgrade/3.3.0/acl.SQLite delete mode 100644 rt/etc/upgrade/3.3.0/acl.mysql delete mode 100644 rt/etc/upgrade/3.3.0/content delete mode 100644 rt/etc/upgrade/3.3.0/schema.Oracle delete mode 100644 rt/etc/upgrade/3.3.0/schema.Pg delete mode 100644 rt/etc/upgrade/3.3.0/schema.mysql delete mode 100644 rt/etc/upgrade/3.3.11/acl.Oracle delete mode 100644 rt/etc/upgrade/3.3.11/acl.Pg delete mode 100644 rt/etc/upgrade/3.3.11/acl.SQLite delete mode 100644 rt/etc/upgrade/3.3.11/acl.mysql delete mode 100644 rt/etc/upgrade/3.3.11/content delete mode 100644 rt/etc/upgrade/3.3.11/schema.Oracle delete mode 100644 rt/etc/upgrade/3.3.11/schema.Pg delete mode 100644 rt/etc/upgrade/3.3.11/schema.SQLite delete mode 100644 rt/etc/upgrade/3.3.11/schema.mysql delete mode 100644 rt/etc/upgrade/3.5.1/content 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/Callbacks/ActivityReports/Elements/Tabs/Default delete mode 100644 rt/html/Callbacks/ActivityReports/NoAuth/webrt.css/Default delete mode 100644 rt/html/Callbacks/ActivityReports/Search/Results.html/SearchActions delete mode 100644 rt/html/Callbacks/RT-WebCronTool/Elements/Tabs/Default delete mode 100644 rt/html/Callbacks/kStatistics/Elements/Tabs/Default delete mode 100644 rt/html/Developer/CronTool/autohandler delete mode 100644 rt/html/Developer/CronTool/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/FreesideInvoiceSearch delete mode 100644 rt/html/Elements/FreesideNewCust delete mode 100644 rt/html/Elements/FreesideSearch delete mode 100644 rt/html/Elements/FreesideSvcSearch 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/freeside.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/images/small-logo.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 100755 rt/html/RTx/Statistics/CallsMultiQueue/Elements/Chart delete mode 100755 rt/html/RTx/Statistics/CallsMultiQueue/index.html delete mode 100755 rt/html/RTx/Statistics/CallsQueueDay/Elements/Chart delete mode 100644 rt/html/RTx/Statistics/CallsQueueDay/Results.tsv delete mode 100755 rt/html/RTx/Statistics/CallsQueueDay/index.html delete mode 100755 rt/html/RTx/Statistics/DayOfWeek/Elements/Chart delete mode 100755 rt/html/RTx/Statistics/DayOfWeek/index.html delete mode 100755 rt/html/RTx/Statistics/DurationAsString delete mode 100644 rt/html/RTx/Statistics/Elements/CollectionAsTable/Header delete mode 100644 rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat delete mode 100644 rt/html/RTx/Statistics/Elements/CollectionAsTable/Row delete mode 100644 rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox delete mode 100644 rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage delete mode 100644 rt/html/RTx/Statistics/Elements/DateSelectRow delete mode 100755 rt/html/RTx/Statistics/Elements/DurationAsString delete mode 100644 rt/html/RTx/Statistics/Elements/GraphBox delete mode 100755 rt/html/RTx/Statistics/Elements/SelectMultiQueue delete mode 100644 rt/html/RTx/Statistics/Elements/StatColumnMap delete mode 100755 rt/html/RTx/Statistics/Elements/Tabs delete mode 100644 rt/html/RTx/Statistics/FAQ/index.html delete mode 100755 rt/html/RTx/Statistics/OpenStalled/Elements/Chart delete mode 100644 rt/html/RTx/Statistics/OpenStalled/Results.tsv delete mode 100755 rt/html/RTx/Statistics/OpenStalled/index.html delete mode 100755 rt/html/RTx/Statistics/Resolution/Elements/Chart delete mode 100644 rt/html/RTx/Statistics/Resolution/index.html delete mode 100755 rt/html/RTx/Statistics/TimeToResolve/Elements/Chart delete mode 100755 rt/html/RTx/Statistics/TimeToResolve/index.html delete mode 100755 rt/html/RTx/Statistics/UserTest/Elements/Chart delete mode 100755 rt/html/RTx/Statistics/UserTest/index.html delete mode 100755 rt/html/RTx/Statistics/index.html delete mode 100644 rt/html/Reports/Activity/ActivityDetail.html delete mode 100644 rt/html/Reports/Activity/ActivitySummary.html delete mode 100644 rt/html/Reports/Activity/Elements/LimitReport delete mode 100644 rt/html/Reports/Activity/Elements/MiniPlot delete mode 100644 rt/html/Reports/Activity/Elements/PrintFooter delete mode 100644 rt/html/Reports/Activity/Elements/PrintHeader delete mode 100644 rt/html/Reports/Activity/Elements/ScreenFooter delete mode 100644 rt/html/Reports/Activity/Elements/ScreenHeader delete mode 100644 rt/html/Reports/Activity/Elements/Tabs delete mode 100644 rt/html/Reports/Activity/Elements/Wrapper delete mode 100644 rt/html/Reports/Activity/ResolutionComments.html delete mode 100644 rt/html/Reports/Activity/ResolutionStatistics.html delete mode 100644 rt/html/Reports/Activity/index.html 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/AddCustomers 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/EditCustomers 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/ShowCustomers 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/ModifyCustomers.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/install-sh delete mode 100644 rt/lib/RT.pm delete mode 100644 rt/lib/RT.pm.in delete mode 100755 rt/lib/RT/ACE.pm delete mode 100644 rt/lib/RT/ACE_Overlay.pm delete mode 100755 rt/lib/RT/ACL.pm delete mode 100644 rt/lib/RT/ACL_Overlay.pm delete mode 100644 rt/lib/RT/Action/AutoOpen.pm delete mode 100755 rt/lib/RT/Action/Autoreply.pm delete mode 100644 rt/lib/RT/Action/CreateTickets.pm delete mode 100644 rt/lib/RT/Action/EscalatePriority.pm delete mode 100755 rt/lib/RT/Action/Generic.pm delete mode 100755 rt/lib/RT/Action/Notify.pm delete mode 100755 rt/lib/RT/Action/NotifyAsComment.pm delete mode 100644 rt/lib/RT/Action/RecordComment.pm delete mode 100644 rt/lib/RT/Action/RecordCorrespondence.pm delete mode 100644 rt/lib/RT/Action/ResolveMembers.pm delete mode 100755 rt/lib/RT/Action/SendEmail.pm delete mode 100644 rt/lib/RT/Action/SetPriority.pm delete mode 100644 rt/lib/RT/Action/UserDefined.pm delete mode 100755 rt/lib/RT/Attachment.pm delete mode 100644 rt/lib/RT/Attachment_Overlay.pm delete mode 100755 rt/lib/RT/Attachments.pm delete mode 100644 rt/lib/RT/Attachments_Overlay.pm delete mode 100644 rt/lib/RT/Attribute.pm delete mode 100644 rt/lib/RT/Attribute_Overlay.pm delete mode 100644 rt/lib/RT/Attributes.pm delete mode 100644 rt/lib/RT/Attributes_Overlay.pm delete mode 100644 rt/lib/RT/Base.pm delete mode 100644 rt/lib/RT/CachedGroupMember.pm delete mode 100644 rt/lib/RT/CachedGroupMember_Overlay.pm delete mode 100644 rt/lib/RT/CachedGroupMembers.pm delete mode 100644 rt/lib/RT/CachedGroupMembers_Overlay.pm delete mode 100644 rt/lib/RT/Condition/AnyTransaction.pm delete mode 100644 rt/lib/RT/Condition/BeforeDue.pm delete mode 100755 rt/lib/RT/Condition/Generic.pm delete mode 100644 rt/lib/RT/Condition/Overdue.pm delete mode 100644 rt/lib/RT/Condition/OwnerChange.pm delete mode 100644 rt/lib/RT/Condition/PriorityChange.pm delete mode 100644 rt/lib/RT/Condition/PriorityExceeds.pm delete mode 100644 rt/lib/RT/Condition/QueueChange.pm delete mode 100644 rt/lib/RT/Condition/StatusChange.pm delete mode 100644 rt/lib/RT/Condition/UserDefined.pm delete mode 100755 rt/lib/RT/CurrentUser.pm delete mode 100644 rt/lib/RT/CustomField.pm delete mode 100644 rt/lib/RT/CustomFieldValue.pm delete mode 100644 rt/lib/RT/CustomFieldValue_Overlay.pm delete mode 100644 rt/lib/RT/CustomFieldValues.pm delete mode 100644 rt/lib/RT/CustomFieldValues_Overlay.pm delete mode 100644 rt/lib/RT/CustomField_Overlay.pm delete mode 100644 rt/lib/RT/CustomFields.pm delete mode 100644 rt/lib/RT/CustomFields_Overlay.pm delete mode 100644 rt/lib/RT/Date.pm delete mode 100644 rt/lib/RT/EmailParser.pm delete mode 100644 rt/lib/RT/Extension/ActivityReports.pm delete mode 100755 rt/lib/RT/Group.pm delete mode 100755 rt/lib/RT/GroupMember.pm delete mode 100644 rt/lib/RT/GroupMember_Overlay.pm delete mode 100755 rt/lib/RT/GroupMembers.pm delete mode 100644 rt/lib/RT/GroupMembers_Overlay.pm delete mode 100644 rt/lib/RT/Group_Overlay.pm delete mode 100755 rt/lib/RT/Groups.pm delete mode 100644 rt/lib/RT/Groups_Overlay.pm delete mode 100644 rt/lib/RT/Handle.pm delete mode 100644 rt/lib/RT/I18N.pm delete mode 100644 rt/lib/RT/I18N/cs.pm delete mode 100644 rt/lib/RT/I18N/cs.po delete mode 100644 rt/lib/RT/I18N/da.po delete mode 100644 rt/lib/RT/I18N/de.po delete mode 100644 rt/lib/RT/I18N/en.po delete mode 100644 rt/lib/RT/I18N/es.po delete mode 100644 rt/lib/RT/I18N/fi.po delete mode 100644 rt/lib/RT/I18N/fr.po delete mode 100644 rt/lib/RT/I18N/he.po delete mode 100644 rt/lib/RT/I18N/hu.po delete mode 100644 rt/lib/RT/I18N/i_default.pm delete mode 100644 rt/lib/RT/I18N/id.po delete mode 100644 rt/lib/RT/I18N/it.po delete mode 100644 rt/lib/RT/I18N/ja.po delete mode 100644 rt/lib/RT/I18N/nl.po delete mode 100644 rt/lib/RT/I18N/no.po delete mode 100644 rt/lib/RT/I18N/pl.po delete mode 100644 rt/lib/RT/I18N/pt_br.po delete mode 100644 rt/lib/RT/I18N/ru.po delete mode 100644 rt/lib/RT/I18N/sv.po delete mode 100644 rt/lib/RT/I18N/tr.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/RT/Interface/CLI.pm delete mode 100755 rt/lib/RT/Interface/Email.pm delete mode 100755 rt/lib/RT/Interface/Email/Auth/GnuPG.pm delete mode 100644 rt/lib/RT/Interface/Email/Auth/MailFrom.pm delete mode 100644 rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm delete mode 100644 rt/lib/RT/Interface/REST.pm delete mode 100644 rt/lib/RT/Interface/Web.pm delete mode 100644 rt/lib/RT/Interface/Web/Handler.pm delete mode 100644 rt/lib/RT/Interface/Web/Menu.pm delete mode 100644 rt/lib/RT/Interface/Web/Menu/Item.pm delete mode 100755 rt/lib/RT/Interface/Web/QueryBuilder.pm delete mode 100755 rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm delete mode 100755 rt/lib/RT/Interface/Web/Standalone.pm delete mode 100644 rt/lib/RT/Interface/Web_Vendor.pm delete mode 100644 rt/lib/RT/Link.pm delete mode 100644 rt/lib/RT/Link_Overlay.pm delete mode 100644 rt/lib/RT/Links.pm delete mode 100644 rt/lib/RT/Links_Overlay.pm delete mode 100644 rt/lib/RT/ObjectCustomField.pm delete mode 100644 rt/lib/RT/ObjectCustomFieldValue.pm delete mode 100644 rt/lib/RT/ObjectCustomFieldValue_Overlay.pm delete mode 100644 rt/lib/RT/ObjectCustomFieldValues.pm delete mode 100644 rt/lib/RT/ObjectCustomFieldValues_Overlay.pm delete mode 100644 rt/lib/RT/ObjectCustomField_Overlay.pm delete mode 100644 rt/lib/RT/ObjectCustomFields.pm delete mode 100644 rt/lib/RT/ObjectCustomFields_Overlay.pm delete mode 100644 rt/lib/RT/Principal.pm delete mode 100644 rt/lib/RT/Principal_Overlay.pm delete mode 100644 rt/lib/RT/Principals.pm delete mode 100644 rt/lib/RT/Principals_Overlay.pm delete mode 100755 rt/lib/RT/Queue.pm delete mode 100644 rt/lib/RT/Queue_Overlay.pm delete mode 100755 rt/lib/RT/Queues.pm delete mode 100644 rt/lib/RT/Queues_Overlay.pm delete mode 100755 rt/lib/RT/Record.pm delete mode 100644 rt/lib/RT/Reminders.pm delete mode 100644 rt/lib/RT/Report/Tickets.pm delete mode 100644 rt/lib/RT/Report/Tickets/Entry.pm delete mode 100644 rt/lib/RT/SavedSearch.pm delete mode 100644 rt/lib/RT/SavedSearches.pm delete mode 100755 rt/lib/RT/Scrip.pm delete mode 100755 rt/lib/RT/ScripAction.pm delete mode 100644 rt/lib/RT/ScripAction_Overlay.pm delete mode 100755 rt/lib/RT/ScripActions.pm delete mode 100644 rt/lib/RT/ScripActions_Overlay.pm delete mode 100755 rt/lib/RT/ScripCondition.pm delete mode 100644 rt/lib/RT/ScripCondition_Overlay.pm delete mode 100755 rt/lib/RT/ScripConditions.pm delete mode 100644 rt/lib/RT/ScripConditions_Overlay.pm delete mode 100644 rt/lib/RT/Scrip_Overlay.pm delete mode 100755 rt/lib/RT/Scrips.pm delete mode 100644 rt/lib/RT/Scrips_Overlay.pm delete mode 100644 rt/lib/RT/Search/ActiveTicketsInQueue.pm delete mode 100644 rt/lib/RT/Search/FromSQL.pm delete mode 100644 rt/lib/RT/Search/Generic.pm delete mode 100644 rt/lib/RT/Search/Googleish.pm delete mode 100644 rt/lib/RT/SearchBuilder.pm delete mode 100644 rt/lib/RT/StyleGuide.pod delete mode 100644 rt/lib/RT/System.pm delete mode 100755 rt/lib/RT/Template.pm delete mode 100644 rt/lib/RT/Template_Overlay.pm delete mode 100755 rt/lib/RT/Templates.pm delete mode 100644 rt/lib/RT/Templates_Overlay.pm delete mode 100755 rt/lib/RT/Ticket.pm delete mode 100644 rt/lib/RT/Ticket_Overlay.pm delete mode 100755 rt/lib/RT/Tickets.pm delete mode 100644 rt/lib/RT/Tickets_Overlay.pm delete mode 100644 rt/lib/RT/Tickets_Overlay_SQL.pm delete mode 100755 rt/lib/RT/Transaction.pm delete mode 100644 rt/lib/RT/Transaction_Overlay.pm delete mode 100755 rt/lib/RT/Transactions.pm delete mode 100644 rt/lib/RT/Transactions_Overlay.pm delete mode 100644 rt/lib/RT/URI.pm delete mode 100644 rt/lib/RT/URI/base.pm delete mode 100644 rt/lib/RT/URI/freeside.pm delete mode 100644 rt/lib/RT/URI/freeside/Internal.pm delete mode 100644 rt/lib/RT/URI/freeside/XMLRPC.pm delete mode 100644 rt/lib/RT/URI/fsck_com_rt.pm delete mode 100644 rt/lib/RT/URI/t.pm delete mode 100755 rt/lib/RT/User.pm delete mode 100644 rt/lib/RT/User_Overlay.pm delete mode 100755 rt/lib/RT/Users.pm delete mode 100644 rt/lib/RT/Users_Overlay.pm delete mode 100755 rt/lib/RTx/Statistics.pm delete mode 100644 rt/lib/RTx/WebCronTool.pm delete mode 100644 rt/lib/t/00smoke.t delete mode 100644 rt/lib/t/01harness.t delete mode 100644 rt/lib/t/02regression.t delete mode 100644 rt/lib/t/03web.pl delete mode 100644 rt/lib/t/04_send_email.pl 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-requestor.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.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/m4/rt_enable_layout.m4 delete mode 100644 rt/m4/rt_expand_var.m4 delete mode 100644 rt/m4/rt_layout.m4 delete mode 100644 rt/m4/rt_subst_expanded_arg.m4 delete mode 100644 rt/sbin/extract-message-catalog delete mode 100644 rt/sbin/extract_pod_tests delete mode 100644 rt/sbin/factory delete mode 100644 rt/sbin/license_tag delete mode 100644 rt/sbin/regression_harness delete mode 100755 rt/sbin/rt-dump-database.in delete mode 100644 rt/sbin/rt-setup-database.in delete mode 100644 rt/sbin/rt-test-dependencies.in delete mode 100755 test/cgi-test delete mode 100755 test/dup-test diff --git a/AGPL b/AGPL deleted file mode 100644 index 939a6f41f..000000000 --- a/AGPL +++ /dev/null @@ -1,662 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license -for software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are -designed to take away your freedom to share and change the works. By -contrast, our General Public Licenses are intended to guarantee your -freedom to share and change all versions of a program--to make sure it -remains free software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public -License. - - "Copyright" also means copyright-like laws that apply to other kinds -of works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further restriction, -you may remove that term. If a license document contains a further -restriction but permits relicensing or conveying under this License, you -may add to a covered work material governed by the terms of that license -document, provided that the further restriction does not survive such -relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have permission -to link or combine any covered work with a work licensed under version 3 -of the GNU General Public License into a single combined work, and to -convey the resulting work. The terms of this License will continue to -apply to the part which is the covered work, but the work with which it is -combined will remain governed by version 3 of the GNU General Public -License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may differ -in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero -General Public License "or any later version" applies to it, you have -the option of following the terms and conditions either of that -numbered version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number -of the GNU Affero General Public License, you may choose any version -ever published by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that -proxy's public statement of acceptance of a version permanently -authorizes you to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/CREDITS b/CREDITS deleted file mode 100644 index 15f1aa935..000000000 --- a/CREDITS +++ /dev/null @@ -1,178 +0,0 @@ -Thanks to Matt Simerson of MichWeb Inc. for documentation -and pre-release testing. Without his help the documentation in 1.0.0 -release would have consisted of a single screenfull of text. -(To clear up some misunderstanding, Matt did not write the current -documentation.) - -Steve Cleff did the default background image in 1.0.x and -is also the creator of Freeside's elusive mascot, Snakeman, who we hope will -make an appearance in an upcoming version. - -Jerry St. Pierre did the "SISD" graphic used in -1.0.x and most of 1.1.x. - -Mark Norris of Urban Design, Inc. did the red "S" -logo for later 1.1.x versions until 1.4.1 - -Brian McCane? contributed PostgreSQL support, HTML -style enhancements and many, many bugfixes. - -Cerkit contributed rsync support and desynced hosts. -His changes will hopefully be included in an upcoming version. - -CompleteHOST, Inc. (http://www.completehost.com) funded the development of the -following features: - - Multiple, separate databases and configurations on one box. - - Per-customer pricing (custom packages) - - Internationalization wrt addresses (cust_main, cust_main_county) -Thanks! - -Mark Williamson and Roger Mangraviti - contributed state/provence listings for Australia. - -Peter Wemm sent in a bunch of bugfixes for the 1.2 -release. - -Greg Kuhnert sent some documentation updates. - -Joel Griffiths contribued many bugfixes as well as -the print-batch script. - -NetLoud funded the development of the following -features: - - IEAK support for the signup server - - Pre-payment support - -NetAcces.Net (not netaccess.net) funded the development of the following -features: - - DNS tracking and export to BIND configuration files - - Web site virtual host tracking and export to Apache configuration files - -Kristian Hoffmann contributed Netscape CCK -autoconfiguration support for the signup server, lots of great mailing -lists posts which I shamelessly made into documentation, fixes to get rid of -the embarassing and non-database-normal "owed" field, and many other things -I'm forgetting. Most recently Kristian and Mark (last name?) contributed -the IP address tracking and svc_broadband in 1.5. - -Jeff Finucane send in a bunch of bugfixes (for the sendmail -export, cancel-unaudited.cgi), patches to support billing date modification, -and probably other things too (sorry if I forgot them). And yet even more -bug squashing, thanks! *and* he single-handedly implemented all the necessary -work to get rid of svc_acct_sm and the "default domain" thanks!! and rewrote -the financials! wow, thanks jeff! and contributed financial reports! - -Kenny Elliott contributed ICRADIUS radreply table support, -allowing attributes with ICRADIUS, helped fix many bugs, and some -other stuff I can't recall (sorry). - -Stephen Amadei contribued portability cleanups for the -low-level DBI stuff. - -Jason Spence contributed admin.html and other -documentation, autocapnames javascript, bugfixes & other neat stuff I can't -remember. - -Brad Dameron contributed code to do configurable state -and referral defaults. - -Surf and Sip, Inc., sponsored a long-requested -feature - the session monitor and time-based prepaid cards. -Matt Peterson and Mack ? tested -the new features and contributed many bugfixes. - -Landel Telecom sponsored shipping addresses and -customer notes, as well as an update of the CP provisioning. - -nikotel, Inc. sponsored the inclusion of -customer-to-customer referrals in the web interface and signup server. - -Three Bubba's Innanet sponsored expedited check entry, -the "similar names warning" feature, and a number of other enhancements. - -Dave Burgess sent in a bunch of fixes and small changes -and will doubtless send more once he's got his tree under control. - -Luke Pfeifer contributed the "subscription" price plan. - -Noment Networks, LLC sponsored ICRADIUS/FreeRADIUS -groups, message catalogs, and signup server enhancements. - -Donald Greer provided the SQL to work around MySQL's lack -of subqueries, and Dale Hege provided the patches. -Thanks! - - sent in several documentation patches. - -"Stephen Bechard" sent in patches for svc_www services and -other fixes. - -Charles A Beasley contributed quota editing for the -Infostreet export. - -Richard Siddall sent in Mason fixes, fixed lots -of typos, mod_perl 2.0 work, RPM packaging and other things I'm probably -forgetting. - -Contains "JS Calendar" -by Mihai Bazon licensed under the terms of the GNU LGPL. - -Latex invoice template based on a template from eBills - by Mark Asplen-Taylor , -licensed under the terms fo the GNU GPL. - -Contains "Request Tracker" and -"RTx::Extension::ActivityReports" from Best Practical Solutions, licensed under -the terms of the GNU GPL. - -Contains "RTx::Statistics Package" - from Kelly Hickel -, licensed under the same terms as Perl (GPL/Artistic). - -Contains "RTx::WebCronTool" from -Audrey Tang, licensed under the same terms as Perl (GPL/Artistic). - -#not yet used... -# Contains "SQL Ledger" by DWS Systems Inc. and -# contributors licensed under the terms of the GNU GPL. - -Peter Bowen started the difficult modular price plans -changes, added credit card encryption features, and other things I've -probably overlooked. - -Rebecca Cardennis created the great new logo first -released with 1.4.2beta1 and 1.5.0pre6. - -Troy Hammonds sent in RADIUS session history viewing, -many bugfixes and other things I'm probably forgetting. - -Contains the QLIB JavaScript library by -Quazzle.com, Serge Dolgov, licensed under the terms of the GNU GPL. - -Contains the overlibmws DHTML Popup Library -by Foteos Macrides (derived from overLIB -by Erik Bosrup), licensed under the terms of the Artistic license -. - -Ricardo SIGNES has contributed a bunch of -patches to clean up and refactor various stuff in the module layer. Thanks! - -XMLHttpRequest implementation based on the SAJAX toolkit, licensed under the -terms of the BSD license. -(c) copyright 2005 modernmethod, inc -Perl backend version (c) copyright 2005 Nathan Schmidt - -Scott Edwards contributed magic for XMLHTTP error -handling, and other patches. - -Contains XMenu -by Erik Arvidsson, licensed under the terms of the GNU GPL. - -Contains public domain artwork from openclipart.org by mimooh and other -authors. - -Contains FCKeditor by Frederico Caldeira Knabben, licensed under the terms of -the GNU GPL. - -Everything else is my (Ivan Kohler ) fault. - diff --git a/FS/Changes b/FS/Changes deleted file mode 100644 index c94ef10f5..000000000 --- a/FS/Changes +++ /dev/null @@ -1,5 +0,0 @@ -Revision history for Perl extension FS. - -0.01 Wed Aug 4 00:13:45 1999 - - original version; created by h2xs 1.19 - diff --git a/FS/FS.pm b/FS/FS.pm deleted file mode 100644 index 6fa6faa52..000000000 --- a/FS/FS.pm +++ /dev/null @@ -1,428 +0,0 @@ -package FS; - -use strict; -use vars qw($VERSION); - -$VERSION = '%%%VERSION%%%'; - -#find missing entries in this file with: -# for a in `ls *pm | cut -d. -f1`; do grep 'L' ../FS.pm >/dev/null || echo "missing $a" ; done - -1; -__END__ - -=head1 NAME - -FS - Freeside Perl modules - -=head1 SYNOPSIS - -Freeside perl modules and CLI utilities. - -=head2 Utility classes - -L - Freeside database schema - -L - Setup subroutines - -L - Upgrade subroutines - -L - Freeside configuration values - -L - Freeside configuration option meta-data. - -L - Freeside configuration default and available values - -L - User class (not yet OO) - -L - Package representing the current user - -L - Non OO-subroutines for the web interface. - -L - Message catalog - -L - Search cache - -L - Access control rights. - -L - Report data objects - -L - Report data objects - -L - Report data objects - -L - Backend XML::RPC server - -L - Miscellaneous subroutines - -L - Payment types - -L - ClientAPI session cache - -L - A pony - -=head2 Database record classes - -L - Database record base class - -L - Mixin class for classes in a many-to-many relationship - -L - Base class for tables with a related table listing names - -L - Base class for option sub-classes - -L - Configuration value class - -L - Mixin class for records in tables that contain payinfo. - -L - Employees / internal users - -L - Employee preferences - -L - Employee groups - -L - Employee group membership - -L - Group reseller access - -L - Access rights - -L - POP (Point of Presence, not Post -Office Protocol) class - -L - Local calling area class - -L - Referral class - -L - Package referral class - -L - Locale (tax rate) class - -L - Tax exemption record class - -L - Line-item specific tax exemption record class - -L - Service base class - -L - Mixin class for svc_ classes with a parent_svcnum field - -L - Account (shell, RADIUS, POP3) class - -L - External mail account class - -L - Time worked application to account class - -L - RADIUS groups - -L - Domain class - -L - DNS zone entries - -L - Domain registrar class - -L - Mail forwarding class - -L - Web virtual host class. - -L - DSL, wireless and other broadband class. - -L - Address block class - -L - Router class - -L - Broadband virtual field class - -L - Phone service class - -L - Call Detail Record class - -L - CDR calltype class - -L - CDR carrier class - -L - CDR upstream rate class - -L - CDR type class - -L - Externally tracked service class. - -L - Inventory classes - -L - Inventory items - -L - Service definition class - -L - Column constraint class - -L - Class linking service definitions (see L) -with exports (see L) - -L - External provisioning export class - -L - Export option class - -L - Package class class - -L - Package definition class - -L - Tax class class - -L - Package definition option class - -L - Class linking package definitions (see L) with -service definitions (see L) - -L - One-time registration codes - -L - Class linking registration codes (see L) with package definitions (see L) - -L - Rate plans for call billing - -L - Rate regions for call billing - -L - Rate region prefixes for call billing - -L - Rate plan detail for call billing - -L - Agent (reseller) class - -L - Agent type class - -L - Class linking agent types (see L) with package definitions (see L) - -L - Payment gateway class - -L - Payment gateway option class - -L - Agent payment gateway class - -L - Service class - -L - Customer package class - -L - Customer package option class - -L - Reason type class - -L - Reason class - -L - Package reason class - -L - Customer class - -L - Mixin class for records that contain fields from cust_main - -L - Invoice destination class - -L - Customer note class - -L - Banned payment information class - -L - Invoice class - -L - Invoice line item class - -L - Invoice line item detail class - -L - (Old) Invoice event definition class - -L - (Old) Completed invoice event class - -L - (New) Billing event definition class - -L - (New) Billing event option class - -L - (New) Billing event condition base class - -L - (New) Billing event action base class - -L - (New) Billing event condition class - -L - (New) Billing event condition option class - -L - (New) Billing event condition compound option class - -L - (New) Customer event class - -L - Base class for bill application classes - -L - Payment class - -L - Pending payment class - -L - Voided payment class - -L - Payment application class - -L - Line-item specific payment application class - -L - Batch payment application class - -L - Credit class - -L - Refund class - -L - Refund application to credit class - -L - Credit application to invoice class - -L - Line-item specific credit application to invoice class - -L - Refund application to payment class - -L - Credit card transaction queue class - -L - Credit card transaction member queue class - -L - Prepaid "calling card" credit class. - -L - Network Access Server class - -L - NAS port class - -L - User login session class - -L - Job queue - -L - Job arguments - -L - Job dependencies - -L - Message catalogs - -L - -L - -=head2 Historical database record classes - -L - History table base class - -L - Historical record of customer payment changes - -L - Historical record of customer credit changes - -L - Historical record of customer tax changes (old-style) - -L - Object method for h_cust_svc objects - -L - Historical record of customer tax changes (old-style) - -L - Historical DNS entry objects - -L - Historical account objects - -L - Historical broadband connection objects - -L - Historical domain objects - -L - Historical externally tracked service objects - -L - Historical mail forwarding alias objects - -L - Historical phone number objects - -L - Historical web virtual host objects - -=head2 Remote API modules - -L - Self-service API - -L - Self-service XML-RPC API - -=head2 User Interface classes - -L - Web user-interface class - -L - Byte counter user-interface class - -=head2 Command-line utilities - -L - Command line interface to add (freeside) users. - -L - Run daily billing and collection events. - -L - Run monthly billing and invoice collection events. - -L - Recreate database schema cache - -L - Command line interface to delete (freeside) users. - -L - Emails notifications of credit card expirations. - -L - Prints email addresses of all users on STDOUT - -L - Send a freeside page to a list of employees. - -L - Real-time daemon for prepaid packages - -L - Removes stray applications of credit, payment to bills, refunds, etc. - -L - Job queue daemon - -L - Command line utility to manipulate radius groups - -L - Command line tool to re-trigger export jobs for existing services - -L - Command line tool to set the fixed columns for existing services - -L - Command line tool to eliminate duplicate usergroup entries from radius tables - -L - Real-time radacct import daemon - -L - Command line interface to reset and recreate RADIUS SQL tables - -L - Command line time-online tool - -L - Upgrades database schema for new freeside verisons. - -=head1 Notes - -To quote perl(1), "If you're intending to read these straight through for the -first time, the suggested order will tend to reduce the number of forward -references." - -If you've never used OO modules before, -http://www.perl.com/doc/FMTEYEWTK/easy_objects.html might help you out. - -=head1 DESCRIPTION - -Freeside is a billing and administration package for wired and wireless ISPs, -VoIP, hosting, service and content providers and other online businesses. - -The Freeside home page is at . - -The main documentation is at . - -=head1 SUPPORT - -A mailing list for users is available. Send a blank message to - to subscribe. - -A mailing list for developers is available. It is intended to be lower volume -and higher SNR than the users list. Send a blank message to - to subscribe. - -Commercial support is available; see -. - -=head1 AUTHORS - -Primarily Ivan Kohler, with help from many kind folks, including core -contributors Jeff Finucane, Kristian Hoffman, Jason Hall and Peter Bowen. - -See the CREDITS file in the Freeside distribution for a (hopefully) complete -list and the individal files for details. - -=head1 SEE ALSO - -perl(1), main Freeside documentation at - -=head1 BUGS - -Those modules which would be useful separately should be pulled out, -renamed appropriately and uploaded to CPAN. So far: DBIx::DBSchema, Net::SSH -and Net::SCP... - -=cut - diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm deleted file mode 100644 index 13dbd7f5b..000000000 --- a/FS/FS/AccessRight.pm +++ /dev/null @@ -1,295 +0,0 @@ -package FS::AccessRight; - -use strict; -use vars qw(@rights); # %rights); -use Tie::IxHash; - -=head1 NAME - -FS::AccessRight - Access control rights. - -=head1 SYNOPSIS - - use FS::AccessRight; - - my @rights = FS::AccessRight->rights; - - #my %rights = FS::AccessRight->rights_categorized; - tie my %rights, 'Tie::IxHash', FS::AccessRight->rights_categorized; - foreach my $category ( keys %rights ) { - my @category_rights = @{ $rights{$category} }; - } - -=head1 DESCRIPTION - -Access control rights - Permission to perform specific actions that can be -assigned to users and/or groups. - -=cut - -#@rights = ( -# 'Reports' => [ -# '_desc' => 'Access to high-level reporting', -# ], -# 'Configuration' => [ -# '_desc' => 'Access to configuration', -# -# 'Settings' => {}, -# -# 'agent' => [ -# '_desc' => 'Master access to reseller configuration', -# 'agent_type' => {}, -# 'agent' => {}, -# ], -# -# 'export_svc_pkg' => [ -# '_desc' => 'Access to export, service and package configuration', -# 'part_export' => {}, -# 'part_svc' => {}, -# 'part_pkg' => {}, -# 'pkg_class' => {}, -# ], -# -# 'billing' => [ -# '_desc' => 'Access to billing configuration', -# 'payment_gateway' => {}, -# 'part_bill_event' => {}, -# 'prepay_credit' => {}, -# 'rate' => {}, -# 'cust_main_county' => {}, -# ], -# -# 'dialup' => [ -# '_desc' => 'Access to dialup configuraiton', -# 'svc_acct_pop' => {}, -# ], -# -# 'broadband' => [ -# '_desc' => 'Access to broadband configuration', -# 'router' => {}, -# 'addr_block' => {}, -# ], -# -# 'misc' => [ -# 'part_referral' => {}, -# 'part_virtual_field' => {}, -# 'msgcat' => {}, -# 'inventory_class' => {}, -# ], -# -# }, -# -#); -# -##turn it into a more hash-like structure, but ordered via IxHash - -#well, this is what we have for now. getting better. -tie my %rights, 'Tie::IxHash', - - ### - # basic customer rights - ### - 'Customer rights' => [ - 'New customer', - 'View customer', - #'View Customer | View tickets', - 'Edit customer', - 'Cancel customer', - 'Complimentary customer', #aka users-allow_comp - { rightname=>'Delete customer', desc=>"Enable customer deletions. Be very careful! Deleting a customer will remove all traces that this customer ever existed! It should probably only be used when auditing a legacy database. Normally, you cancel all of a customer's packages if they cancel service." }, #aka. deletecustomers - 'Add customer note', #NEW - 'Edit customer note', #NEW - 'Bill customer now', #NEW - ], - - ### - # customer package rights - ### - 'Customer package rights' => [ - 'View customer packages', #NEW - 'Order customer package', - 'One-time charge', - 'Change customer package', - 'Bulk change customer packages', - 'Edit customer package dates', - 'Customize customer package', - 'Suspend customer package', - 'Suspend customer package later', - 'Unsuspend customer package', - 'Cancel customer package immediately', - 'Cancel customer package later', - 'Add on-the-fly cancel reason', #NEW - 'Add on-the-fly suspend reason', #NEW - ], - - ### - # customer service rights - ### - 'Customer service rights' => [ - 'View customer services', #NEW - 'Provision customer service', - 'Recharge customer service', #NEW - 'Unprovision customer service', - 'Change customer service', #NEWNEW - 'Edit usage', #NEW - 'Edit home dir', #NEW - 'Edit www config', #NEW - 'Edit domain catchall', #NEW - 'Edit domain nameservice', #NEW - - { rightname=>'View/link unlinked services', global=>1 }, #not agent-virtualizable without more work - ], - - ### - # customer invoice/financial info rights - ### - 'Customer invoice / financial info rights' => [ - 'View invoices', - 'Resend invoices', #NEWNEW - 'View customer tax exemptions', #yow - 'View customer batched payments', #NEW - 'View customer billing events', #NEW - ], - - ### - # customer payment rights - ### - 'Customer payment rights' => [ - 'Post payment', - 'Post payment batch', - 'Apply payment', #NEWNEW - { rightname=>'Unapply payment', desc=>'Enable "unapplication" of unclosed payments from specific invoices.' }, #aka. unapplypayments - 'Process payment', - 'Refund payment', - - { rightname=>'Delete payment', desc=>'Enable deletion of unclosed payments. Be very careful! Only delete payments that were data-entry errors, not adjustments.' }, #aka. deletepayments Optionally specify one or more comma-separated email addresses to be notified when a payment is deleted. - - ], - - ### - # customer credit rights - ### - 'Customer credit and refund rights' => [ - 'Post credit', - 'Apply credit', #NEWNEW - { rightname=>'Unapply credit', desc=>'Enable "unapplication" of unclosed credits.' }, #aka unapplycredits - { rightname=>'Delete credit', desc=>'Enable deletion of unclosed credits. Be very careful! Only delete credits that were data-entry errors, not adjustments.' }, #aka. deletecredits Optionally specify one or more comma-separated email addresses to be notified when a credit is deleted. - 'Delete refund', #NEW - 'Add on-the-fly credit reason', #NEW - ], - - ### - # customer voiding rights.. - ### - 'Customer void rights' => [ - { rightname=>'Credit card void', desc=>'Enable local-only voiding of echeck payments in addition to refunds against the payment gateway.' }, #aka. cc-void - { rightname=>'Echeck void', desc=>'Enable local-only voiding of echeck payments in addition to refunds against the payment gateway.' }, #aka. echeck-void - 'Regular void', - { rightname=>'Unvoid', desc=>'Enable unvoiding of voided payments' }, #aka. unvoid - - - ], - - ### - # report/listing rights... - ### - 'Reprting/listing rights' => [ - 'List customers', - 'List zip codes', #NEW - 'List invoices', - 'List packages', - 'List services', - - { rightname=> 'List rating data', desc=>'Usage reports', global=>1 }, - 'Billing event reports', - 'Financial reports', - ], - - ### - # misc rights - ### - 'Miscellaneous rights' => [ - { rightname=>'Job queue', global=>1 }, - { rightname=>'Time queue', global=>1 }, - { rightname=>'Process batches', global=>1 }, - { rightname=>'Reprocess batches', global=>1 }, - { rightname=>'Import', global=>1 }, #some of these are ag-virt'ed now? give em their own ACLs - { rightname=>'Export', global=>1 }, - #], - # - ### - # misc misc rights - ### - #'Database access rights' => [ - { rightname=>'Raw SQL', global=>1 }, #NEW - ], - - ### - # setup/config rights - ### - 'Configuration rights' => [ - 'Edit advertising sources', - { rightname=>'Edit global advertising sources', global=>1 }, - - 'Edit package definitions', - { rightname=>'Edit global package definitions', global=>1 }, - - 'Edit billing events', - { rightname=>'Edit global billing events', global=>1 }, - - { rightname=>'Configuration', global=>1 }, #most of the rest of the configuraiton is not agent-virtualized - ], - -; - -=head1 CLASS METHODS - -=over 4 - -=item rights - -Returns a list of right names. - -=cut - - sub rights { - #my $class = shift; - map { ref($_) ? $_->{'rightname'} : $_ } map @{ $rights{$_} }, keys %rights; - } - -=item rights_info - -Returns a list of key-value pairs suitable for assigning to a hash. Keys are -category names and values are list references of rights. Each element of the -list reference scalar right name or a hashref with the following keys: - -=over 4 - -=item rightname - Right name - -=item desc - Extended right description - -=item global - Global flag, indicates that this access right provides access to global data which is shared among all agents. - -=back - -=cut - -sub rights_info { - %rights; -} - -=back - -=head1 BUGS - -Damn those infernal six-legged creatures! - -=head1 SEE ALSO - -L, L, L - -=cut - -1; - diff --git a/FS/FS/CGI.pm b/FS/FS/CGI.pm deleted file mode 100644 index 38a869ccd..000000000 --- a/FS/FS/CGI.pm +++ /dev/null @@ -1,425 +0,0 @@ -package FS::CGI; - -use strict; -use vars qw(@EXPORT_OK @ISA); -use Exporter; -use CGI; -use URI::URL; -#use CGI::Carp qw(fatalsToBrowser); -use FS::UID; - -@ISA = qw(Exporter); -@EXPORT_OK = qw(header menubar idiot eidiot popurl rooturl table itable ntable - small_custview myexit http_header); - -=head1 NAME - -FS::CGI - Subroutines for the web interface - -=head1 SYNOPSIS - - use FS::CGI qw(header menubar idiot eidiot popurl); - - print header( 'Title', '' ); - print header( 'Title', menubar('item', 'URL', ... ) ); - - idiot "error message"; - eidiot "error message"; - - $url = popurl; #returns current url - $url = popurl(3); #three levels up - -=head1 DESCRIPTION - -Provides a few common subroutines for the web interface. - -=head1 SUBROUTINES - -=over 4 - -=item header TITLE, MENUBAR - -Returns an HTML header. - -=cut - -sub header { - use Carp; - carp 'FS::CGI::header deprecated; include /elements/header.html instead'; - - my($title,$menubar,$etc)=@_; #$etc is for things like onLoad= etc. - $etc = '' unless defined $etc; - - my $x = < - - - $title - - - - - - - -
$title
-
-
-END - $x .= $menubar. "

" if $menubar; - $x; -} - -=item http_header - -Sets an http header. - -=cut - -sub http_header { - my ( $header, $value ) = @_; - if (exists $ENV{MOD_PERL}) { - if ( defined $HTML::Mason::Commands::r ) { #Mason - ## is this the correct pacakge for $r ??? for 1.0x and 1.1x ? - if ( $header =~ /^Content-Type$/ ) { - $HTML::Mason::Commands::r->content_type($value); - } else { - $HTML::Mason::Commands::r->header_out( $header => $value ); - } - } else { - die "http_header called in unknown environment"; - } - } else { - die "http_header called not running under mod_perl"; - } - -} - -=item menubar ITEM, URL, ... - -Returns an HTML menubar. - -=cut - -sub menubar { #$menubar=menubar('Main Menu', '../', 'Item', 'url', ... ); - use Carp; - carp 'FS::CGI::menubar deprecated; include /elements/menubar.html instead'; - - my($item,$url,@html); - while (@_) { - ($item,$url)=splice(@_,0,2); - next if $item =~ /^\s*Main\s+Menu\s*$/i; - push @html, qq!$item!; - } - join(' | ',@html); -} - -=item idiot ERROR - -This is depriciated. Don't use it. - -Sends an HTML error message. - -=cut - -sub idiot { - #warn "idiot depriciated"; - my($error)=@_; -# my $cgi = &FS::UID::cgi(); -# if ( $cgi->isa('CGI::Base') ) { -# no strict 'subs'; -# &CGI::Base::SendHeaders; -# } else { -# print $cgi->header( @FS::CGI::header ); -# } - print < - - Error processing your request - - - - - -
-

Error processing your request

-
- Your request could not be processed because of the following error: -

$error - - -END - -} - -=item eidiot ERROR - -This is depriciated. Don't use it. - -Sends an HTML error message, then exits. - -=cut - -sub eidiot { - warn "eidiot depriciated"; - $HTML::Mason::Commands::r->send_http_header - if defined $HTML::Mason::Commands::r; - idiot(@_); - &myexit(); -} - -=item myexit - -You probably shouldn't use this; but if you must: - -If running under mod_perl, calles Apache::exit, otherwise, calls exit. - -=cut - -sub myexit { - if (exists $ENV{MOD_PERL}) { - - if ( defined $HTML::Mason::Commands::m ) { #Mason - #$HTML::Mason::Commands::m->flush_buffer(); - $HTML::Mason::Commands::m->abort(); - die "shouldn't fall through to here (mason \$m->abort didn't)"; - } else { - #??? well, it is $ENV{MOD_PERL} - warn "running under unknown mod_perl environment; trying Apache::exit()"; - require Apache; - Apache::exit(); - } - } else { - exit; - } -} - -=item popurl LEVEL - -Returns current URL with LEVEL levels of path removed from the end (default 0). - -=cut - -sub popurl { - my($up)=@_; - my $cgi = &FS::UID::cgi; - my $url_string = $cgi->isa('Apache') ? $cgi->uri : $cgi->url; - $url_string =~ s/\?.*//; - my $url = new URI::URL ( $url_string ); - my(@path)=$url->path_components; - splice @path, 0-$up; - $url->path_components(@path); - my $x = $url->as_string; - $x .= '/' unless $x =~ /\/$/; - $x; -} - -=item rooturl - -=cut - -sub rooturl { - # better to start with the client-provided URL - my $cgi = &FS::UID::cgi; - my $url_string = $cgi->isa('Apache') ? $cgi->uri : $cgi->url; - $url_string =~ s/\?.*//; - - #even though this is kludgy - $url_string =~ s{ / index\.html /? $ } - {/}x; - $url_string =~ - s{ - / - (browse|config|docs|edit|graph|misc|search|view|pref|rt|elements) - / - (process/)? - ([\w\-\.\/]+) - $ - } - {}x; - - #elements because of progress-popup.html... - #XXX remove anything from elements that is called directly & prevent - #those pages from being served up - - $url_string .= '/' unless $url_string =~ /\/$/; - - $url_string; - -} - -=item table - -Returns HTML tag for beginning a table. - -=cut - -sub table { - use Carp; - carp 'FS::CGI::table deprecated; include /elements/table.html instead'; - - my $col = shift; - if ( $col ) { - qq!!; - } else { - '
'; - } -} - -=item itable - -Returns HTML tag for beginning an (invisible) table. - -=cut - -sub itable { - my $col = shift; - my $cellspacing = shift || 0; - my $width = ( scalar(@_) && shift ) ? '' : 'WIDTH="100%"'; #bah - if ( $col ) { - qq!
!; - } else { - qq!
!; - } -} - -=item ntable - -This is getting silly. - -=cut - -sub ntable { - my $col = shift; - my $cellspacing = shift || 0; - if ( $col ) { - qq!
!; - } else { - '
'; - } - -} - -=item small_custview CUSTNUM || CUST_MAIN_OBJECT, COUNTRYDEFAULT, NOBALANCE_FLAG, URL - -Sheesh. I should just switch to Mason. - -=cut - -sub small_custview { - use FS::Record qw(qsearchs); - use FS::cust_main; - - my $arg = shift; - my $countrydefault = shift || 'US'; - my $nobalance = shift; - my $url = shift; - - my $cust_main = ref($arg) ? $arg - : qsearchs('cust_main', { 'custnum' => $arg } ) - or die "unknown custnum $arg"; - - my $html; - - $html = qq!View ' - if $url; - - $html .= 'Customer #'. $cust_main->custnum. ''. - ' - '. - ucfirst($cust_main->status). ''. - ntable('#e8e8e8'). '
'. ntable("#cccccc",2). - '
Billing
Address
'. - $cust_main->getfield('last'). ', '. $cust_main->first. '
'; - - $html .= $cust_main->company. '
' if $cust_main->company; - $html .= $cust_main->address1. '
'; - $html .= $cust_main->address2. '
' if $cust_main->address2; - $html .= $cust_main->city. ', '. $cust_main->state. ' '. $cust_main->zip. '
'; - $html .= $cust_main->country. '
' - if $cust_main->country && $cust_main->country ne $countrydefault; - - $html .= '
'; - if ( $cust_main->daytime && $cust_main->night ) { - use FS::Msgcat; - $html .= ( FS::Msgcat::_gettext('daytime') || 'Day' ). - ' '. $cust_main->daytime. - '
'. ( FS::Msgcat::_gettext('night') || 'Night' ). - ' '. $cust_main->night; - } elsif ( $cust_main->daytime || $cust_main->night ) { - $html .= $cust_main->daytime || $cust_main->night; - } - if ( $cust_main->fax ) { - $html .= '
Fax '. $cust_main->fax; - } - - $html .= '
'; - - if ( defined $cust_main->dbdef_table->column('ship_last') ) { - - my $pre = $cust_main->ship_last ? 'ship_' : ''; - - $html .= ''. ntable("#cccccc",2). - 'Service
Address'. - $cust_main->get("${pre}last"). ', '. - $cust_main->get("${pre}first"). '
'; - $html .= $cust_main->get("${pre}company"). '
' - if $cust_main->get("${pre}company"); - $html .= $cust_main->get("${pre}address1"). '
'; - $html .= $cust_main->get("${pre}address2"). '
' - if $cust_main->get("${pre}address2"); - $html .= $cust_main->get("${pre}city"). ', '. - $cust_main->get("${pre}state"). ' '. - $cust_main->get("${pre}ship_zip"). '
'; - $html .= $cust_main->get("${pre}country"). '
' - if $cust_main->get("${pre}country") - && $cust_main->get("${pre}country") ne $countrydefault; - - $html .= ''; - - if ( $cust_main->get("${pre}daytime") && $cust_main->get("${pre}night") ) { - use FS::Msgcat; - $html .= ( FS::Msgcat::_gettext('daytime') || 'Day' ). - ' '. $cust_main->get("${pre}daytime"). - '
'. ( FS::Msgcat::_gettext('night') || 'Night' ). - ' '. $cust_main->get("${pre}night"); - } elsif ( $cust_main->get("${pre}daytime") - || $cust_main->get("${pre}night") ) { - $html .= $cust_main->get("${pre}daytime") - || $cust_main->get("${pre}night"); - } - if ( $cust_main->get("${pre}fax") ) { - $html .= '
Fax '. $cust_main->get("${pre}fax"); - } - - $html .= ''; - } - - $html .= ''; - - $html .= '
Balance: $'. $cust_main->balance. '
' - unless $nobalance; - - # last payment might be good here too? - - $html; -} - -=back - -=head1 BUGS - -Not OO. - -Not complete. - -small_custview sooooo doesn't belong here. i should just switch to Mason. - -=head1 SEE ALSO - -L, L - -=cut - -1; - - diff --git a/FS/FS/ClientAPI.pm b/FS/FS/ClientAPI.pm deleted file mode 100644 index 902f58b31..000000000 --- a/FS/FS/ClientAPI.pm +++ /dev/null @@ -1,37 +0,0 @@ -package FS::ClientAPI; - -use strict; -use vars qw(%handler $domain $DEBUG); - -$DEBUG = 0; - -%handler = (); - -#find modules -foreach my $INC ( @INC ) { - my $glob = "$INC/FS/ClientAPI/*.pm"; - warn "FS::ClientAPI: searching $glob" if $DEBUG; - foreach my $file ( glob($glob) ) { - $file =~ /\/(\w+)\.pm$/ or do { - warn "unrecognized ClientAPI file: $file"; - next - }; - my $mod = $1; - warn "using FS::ClientAPI::$mod" if $DEBUG; - eval "use FS::ClientAPI::$mod;"; - die "error using FS::ClientAPI::$mod: $@" if $@; - } -} - -#--- - -sub dispatch { - my ( $self, $name ) = ( shift, shift ); - $name =~ s(/)(::)g; - my $sub = "FS::ClientAPI::$name"; - no strict 'refs'; - &{$sub}(@_); -} - -1; - diff --git a/FS/FS/ClientAPI/Agent.pm b/FS/FS/ClientAPI/Agent.pm deleted file mode 100644 index daede59a8..000000000 --- a/FS/FS/ClientAPI/Agent.pm +++ /dev/null @@ -1,125 +0,0 @@ -package FS::ClientAPI::Agent; - -#some false laziness w/MyAccount - -use strict; -use vars qw($cache); -use subs qw(_cache); -use Digest::MD5 qw(md5_hex); -use FS::Record qw(qsearchs); # qsearch dbdef dbh); -use FS::ClientAPI_SessionCache; -use FS::agent; -use FS::cust_main qw(smart_search); - -sub _cache { - $cache ||= new FS::ClientAPI_SessionCache( { - 'namespace' => 'FS::ClientAPI::Agent', - } ); -} - -sub agent_login { - my $p = shift; - - #don't allow a blank login to first unconfigured agent with no user/pass - return { error => 'Must specify your reseller username and password.' } - unless length($p->{'username'}) && length($p->{'password'}); - - my $agent = qsearchs( 'agent', { - 'username' => $p->{'username'}, - '_password' => $p->{'password'}, - } ); - - unless ( $agent ) { return { error => 'Incorrect password.' } } - - my $session = { - 'agentnum' => $agent->agentnum, - 'agent' => $agent->agent, - }; - - my $session_id; - do { - $session_id = md5_hex(md5_hex(time(). {}. rand(). $$)) - } until ( ! defined _cache->get($session_id) ); #just in case - - _cache->set( $session_id, $session, '1 hour' ); - - { 'error' => '', - 'session_id' => $session_id, - }; -} - -sub agent_logout { - my $p = shift; - if ( $p->{'session_id'} ) { - _cache->remove($p->{'session_id'}); - return { 'error' => '' }; - } else { - return { 'error' => "Can't resume session" }; #better error message - } -} - -sub agent_info { - my $p = shift; - - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - #my %return; - - my $agentnum = $session->{'agentnum'}; - - my $agent = qsearchs( 'agent', { 'agentnum' => $agentnum } ) - or return { 'error' => "unknown agentnum $agentnum" }; - - { 'error' => '', - 'agentnum' => $agentnum, - 'agent' => $agent->agent, - 'num_prospect' => $agent->num_prospect_cust_main, - 'num_active' => $agent->num_active_cust_main, - 'num_susp' => $agent->num_susp_cust_main, - 'num_cancel' => $agent->num_cancel_cust_main, - #%return, - }; - -} - -sub agent_list_customers { - my $p = shift; - - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - #my %return; - - my $agentnum = $session->{'agentnum'}; - - my $agent = qsearchs( 'agent', { 'agentnum' => $agentnum } ) - or return { 'error' => "unknown agentnum $agentnum" }; - - my @cust_main = smart_search( 'search' => $p->{'search'}, - 'agentnum' => $agentnum, - ); - - #aggregate searches - push @cust_main, - map $agent->$_(), map $_.'_cust_main', - grep $p->{$_}, qw( prospect active susp cancel ); - - #eliminate dups? - my %saw = (); - @cust_main = grep { !$saw{$_->custnum}++ } @cust_main; - - { customers => [ map { - my $cust_main = $_; - my $hashref = $cust_main->hashref; - $hashref->{$_} = $cust_main->$_() - foreach qw(name status statuscolor); - delete $hashref->{$_} foreach qw( payinfo paycvv ); - $hashref; - } @cust_main - ], - } - -} - -1; diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm deleted file mode 100644 index 2d3951006..000000000 --- a/FS/FS/ClientAPI/MyAccount.pm +++ /dev/null @@ -1,1291 +0,0 @@ -package FS::ClientAPI::MyAccount; - -use strict; -use vars qw($cache); -use subs qw(_cache); -use Digest::MD5 qw(md5_hex); -use Date::Format; -use Business::CreditCard; -use Time::Duration; -use FS::CGI qw(small_custview); #doh -use FS::UI::Web; -use FS::UI::bytecount; -use FS::Conf; -use FS::Record qw(qsearch qsearchs); -use FS::Msgcat qw(gettext); -use FS::Misc qw(card_types); -use FS::ClientAPI_SessionCache; -use FS::svc_acct; -use FS::svc_domain; -use FS::svc_external; -use FS::part_svc; -use FS::cust_main; -use FS::cust_bill; -use FS::cust_main_county; -use FS::cust_pkg; -use FS::payby; -use FS::acct_rt_transaction; -use HTML::Entities; - -#false laziness with FS::cust_main -BEGIN { - eval "use Time::Local;"; - die "Time::Local minimum version 1.05 required with Perl versions before 5.6" - if $] < 5.006 && !defined($Time::Local::VERSION); - eval "use Time::Local qw(timelocal_nocheck);"; -} - -use vars qw( @cust_main_editable_fields ); -@cust_main_editable_fields = qw( - first last company address1 address2 city - county state zip country daytime night fax - ship_first ship_last ship_company ship_address1 ship_address2 ship_city - ship_state ship_zip ship_country ship_daytime ship_night ship_fax - payby payinfo payname paystart_month paystart_year payissue payip - ss paytype paystate stateid stateid_state -); - -use subs qw(_provision); - -sub _cache { - $cache ||= new FS::ClientAPI_SessionCache( { - 'namespace' => 'FS::ClientAPI::MyAccount', - } ); -} - -#false laziness w/FS::ClientAPI::passwd::passwd -sub login { - my $p = shift; - - my $svc_domain = qsearchs('svc_domain', { 'domain' => $p->{'domain'} } ) - or return { error => 'Domain '. $p->{'domain'}. ' not found' }; - - my $svc_acct = qsearchs( 'svc_acct', { 'username' => $p->{'username'}, - 'domsvc' => $svc_domain->svcnum, } - ); - return { error => 'User not found.' } unless $svc_acct; - - my $conf = new FS::Conf; - my $pkg_svc = $svc_acct->cust_svc->pkg_svc; - return { error => 'Only primary user may log in.' } - if $conf->exists('selfservice_server-primary_only') - && ( ! $pkg_svc || $pkg_svc->primary_svc ne 'Y' ); - - return { error => 'Incorrect password.' } - unless $svc_acct->check_password($p->{'password'}); - - my $session = { - 'svcnum' => $svc_acct->svcnum, - }; - - my $cust_pkg = $svc_acct->cust_svc->cust_pkg; - if ( $cust_pkg ) { - my $cust_main = $cust_pkg->cust_main; - $session->{'custnum'} = $cust_main->custnum; - } - - my $session_id; - do { - $session_id = md5_hex(md5_hex(time(). {}. rand(). $$)) - } until ( ! defined _cache->get($session_id) ); #just in case - - my $timeout = $conf->config('selfservice-session_timeout') || '1 hour'; - _cache->set( $session_id, $session, $timeout ); - - return { 'error' => '', - 'session_id' => $session_id, - }; -} - -sub logout { - my $p = shift; - if ( $p->{'session_id'} ) { - _cache->remove($p->{'session_id'}); - return { 'error' => '' }; - } else { - return { 'error' => "Can't resume session" }; #better error message - } -} - -sub customer_info { - my $p = shift; - - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - my %return; - - my $conf = new FS::Conf; - if ($conf->exists('cust_main-require_address2')) { - $return{'require_address2'} = '1'; - }else{ - $return{'require_address2'} = ''; - } - - if ( $custnum ) { #customer record - - my $search = { 'custnum' => $custnum }; - $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - my $cust_main = qsearchs('cust_main', $search ) - or return { 'error' => "unknown custnum $custnum" }; - - $return{balance} = $cust_main->balance; - - $return{tickets} = [ ($cust_main->tickets) ]; - - my @open = map { - { - invnum => $_->invnum, - date => time2str("%b %o, %Y", $_->_date), - owed => $_->owed, - }; - } $cust_main->open_cust_bill; - $return{open_invoices} = \@open; - - $return{small_custview} = - small_custview( $cust_main, $conf->config('countrydefault') ); - - $return{name} = $cust_main->first. ' '. $cust_main->get('last'); - - for (@cust_main_editable_fields) { - $return{$_} = $cust_main->get($_); - } - - if ( $cust_main->payby =~ /^(CARD|DCRD)$/ ) { - $return{payinfo} = $cust_main->paymask; - @return{'month', 'year'} = $cust_main->paydate_monthyear; - } - - $return{'invoicing_list'} = - join(', ', grep { $_ !~ /^(POST|FAX)$/ } $cust_main->invoicing_list ); - $return{'postal_invoicing'} = - 0 < ( grep { $_ eq 'POST' } $cust_main->invoicing_list ); - - if (scalar($conf->config('support_packages'))) { - my @support_services = (); - foreach ($cust_main->support_services) { - my $seconds = $_->svc_x->seconds; - my $time_remaining = (($seconds < 0) ? '-' : '' ). - int(abs($seconds)/3600)."h". - sprintf("%02d",(abs($seconds)%3600)/60)."m"; - my $cust_pkg = $_->cust_pkg; - my $pkgnum = ''; - my $pkg = ''; - $pkgnum = $cust_pkg->pkgnum if $cust_pkg; - $pkg = $cust_pkg->part_pkg->pkg if $cust_pkg; - push @support_services, { svcnum => $_->svcnum, - time => $time_remaining, - pkgnum => $pkgnum, - pkg => $pkg, - }; - } - $return{support_services} = \@support_services; - } - - } elsif ( $session->{'svcnum'} ) { #no customer record - - my $svc_acct = qsearchs('svc_acct', { 'svcnum' => $session->{'svcnum'} } ) - or die "unknown svcnum"; - $return{name} = $svc_acct->email; - - } else { - - return { 'error' => 'Expired session' }; #XXX redirect to login w/this err! - - } - - return { 'error' => '', - 'custnum' => $custnum, - %return, - }; - -} - -sub edit_info { - my $p = shift; - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - my $custnum = $session->{'custnum'} - or return { 'error' => "no customer record" }; - - my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) - or return { 'error' => "unknown custnum $custnum" }; - - my $new = new FS::cust_main { $cust_main->hash }; - $new->set( $_ => $p->{$_} ) - foreach grep { exists $p->{$_} } @cust_main_editable_fields; - - my $payby = ''; - if (exists($p->{'payby'})) { - $p->{'payby'} =~ /^([A-Z]{4})$/ - or return { 'error' => "illegal_payby " . $p->{'payby'} }; - $payby = $1; - } - - if ( $payby =~ /^(CARD|DCRD)$/ ) { - - $new->paydate($p->{'year'}. '-'. $p->{'month'}. '-01'); - - if ( $new->payinfo eq $cust_main->paymask ) { - $new->payinfo($cust_main->payinfo); - } else { - $new->payinfo($p->{'payinfo'}); - } - - $new->set( 'payby' => $p->{'auto'} ? 'CARD' : 'DCRD' ); - - }elsif ( $payby =~ /^(CHEK|DCHK)$/ ) { - my $payinfo; - $p->{'payinfo1'} =~ /^([\dx]+)$/ - or return { 'error' => "illegal account number ". $p->{'payinfo1'} }; - my $payinfo1 = $1; - $p->{'payinfo2'} =~ /^([\dx]+)$/ - or return { 'error' => "illegal ABA/routing number ". $p->{'payinfo2'} }; - my $payinfo2 = $1; - $payinfo = $payinfo1. '@'. $payinfo2; - - if ( $payinfo eq $cust_main->paymask ) { - $new->payinfo($cust_main->payinfo); - } else { - $new->payinfo($payinfo); - } - - $new->set( 'payby' => $p->{'auto'} ? 'CHEK' : 'DCHK' ); - - }elsif ( $payby =~ /^(BILL)$/ ) { - } elsif ( $payby ) { #notyet ready - return { 'error' => "unknown payby $payby" }; - } - - my @invoicing_list; - if ( exists $p->{'invoicing_list'} || exists $p->{'postal_invoicing'} ) { - #false laziness with httemplate/edit/process/cust_main.cgi - @invoicing_list = split( /\s*\,\s*/, $p->{'invoicing_list'} ); - push @invoicing_list, 'POST' if $p->{'postal_invoicing'}; - } else { - @invoicing_list = $cust_main->invoicing_list; - } - - my $error = $new->replace($cust_main, \@invoicing_list); - return { 'error' => $error } if $error; - #$cust_main = $new; - - return { 'error' => '' }; -} - -sub payment_info { - my $p = shift; - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - ## - #generic - ## - - use vars qw($payment_info); #cache for performance - unless ( $payment_info ) { - - my $conf = new FS::Conf; - my %states = map { $_->state => 1 } - qsearch('cust_main_county', { - 'country' => $conf->config('countrydefault') || 'US' - } ); - - $payment_info = { - - #list all counties/states/countries - 'cust_main_county' => - [ map { $_->hashref } qsearch('cust_main_county', {}) ], - - #shortcut for one-country folks - 'states' => - [ sort { $a cmp $b } keys %states ], - - 'card_types' => card_types(), - - 'paytypes' => [ @FS::cust_main::paytypes ], - - 'paybys' => [ $conf->config('signup_server-payby') ], - - 'stateid_label' => FS::Msgcat::_gettext('stateid'), - 'stateid_state_label' => FS::Msgcat::_gettext('stateid_state'), - - 'show_ss' => $conf->exists('show_ss'), - 'show_stateid' => $conf->exists('show_stateid'), - 'show_paystate' => $conf->exists('show_bankstate'), - }; - - } - - ## - #customer-specific - ## - - my %return = %$payment_info; - - my $custnum = $session->{'custnum'}; - - my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) - or return { 'error' => "unknown custnum $custnum" }; - - $return{balance} = $cust_main->balance; - - $return{payname} = $cust_main->payname - || ( $cust_main->first. ' '. $cust_main->get('last') ); - - $return{$_} = $cust_main->get($_) for qw(address1 address2 city state zip); - - $return{payby} = $cust_main->payby; - $return{stateid_state} = $cust_main->stateid_state; - - if ( $cust_main->payby =~ /^(CARD|DCRD)$/ ) { - $return{card_type} = cardtype($cust_main->payinfo); - $return{payinfo} = $cust_main->paymask; - - @return{'month', 'year'} = $cust_main->paydate_monthyear; - - } - - if ( $cust_main->payby =~ /^(CHEK|DCHK)$/ ) { - my ($payinfo1, $payinfo2) = split '@', $cust_main->paymask; - $return{payinfo1} = $payinfo1; - $return{payinfo2} = $payinfo2; - $return{paytype} = $cust_main->paytype; - $return{paystate} = $cust_main->paystate; - - } - - #doubleclick protection - my $_date = time; - $return{paybatch} = "webui-MyAccount-$_date-$$-". rand() * 2**32; - - return { 'error' => '', - %return, - }; - -}; - -#some false laziness with httemplate/process/payment.cgi - look there for -#ACH and CVV support stuff -sub process_payment { - - my $p = shift; - - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - my %return; - - my $custnum = $session->{'custnum'}; - - my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) - or return { 'error' => "unknown custnum $custnum" }; - - $p->{'payname'} =~ /^([\w \,\.\-\']+)$/ - or return { 'error' => gettext('illegal_name'). " payname: ". $p->{'payname'} }; - my $payname = $1; - - $p->{'paybatch'} =~ /^([\w \!\@\#\$\%\&\(\)\-\+\;\:\'\"\,\.\?\/\=]*)$/ - or return { 'error' => gettext('illegal_text'). " paybatch: ". $p->{'paybatch'} }; - my $paybatch = $1; - - $p->{'payby'} =~ /^([A-Z]{4})$/ - or return { 'error' => "illegal_payby " . $p->{'payby'} }; - my $payby = $1; - - my $payinfo; - my $paycvv = ''; - if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) { - - $p->{'payinfo1'} =~ /^([\dx]+)$/ - or return { 'error' => "illegal account number ". $p->{'payinfo1'} }; - my $payinfo1 = $1; - $p->{'payinfo2'} =~ /^([\dx]+)$/ - or return { 'error' => "illegal ABA/routing number ". $p->{'payinfo2'} }; - my $payinfo2 = $1; - $payinfo = $payinfo1. '@'. $payinfo2; - - $payinfo = $cust_main->payinfo - if $cust_main->paymask eq $payinfo; - - } elsif ( $payby eq 'CARD' || $payby eq 'DCRD' ) { - - $payinfo = $p->{'payinfo'}; - $payinfo =~ s/[^\dx]//g; - $payinfo =~ /^(\d{13,16})$/ - or return { 'error' => gettext('invalid_card') }; # . ": ". $self->payinfo - $payinfo = $1; - - $payinfo = $cust_main->payinfo - if $cust_main->paymask eq $payinfo; - - validate($payinfo) - or return { 'error' => gettext('invalid_card') }; # . ": ". $self->payinfo - return { 'error' => gettext('unknown_card_type') } - if cardtype($payinfo) eq "Unknown"; - - if ( length($p->{'paycvv'}) && $p->{'paycvv'} !~ /^\s*$/ ) { - if ( cardtype($payinfo) eq 'American Express card' ) { - $p->{'paycvv'} =~ /^\s*(\d{4})\s*$/ - or return { 'error' => "CVV2 (CID) for American Express cards is four digits." }; - $paycvv = $1; - } else { - $p->{'paycvv'} =~ /^\s*(\d{3})\s*$/ - or return { 'error' => "CVV2 (CVC2/CID) is three digits." }; - $paycvv = $1; - } - } - - } else { - die "unknown payby $payby"; - } - - my %payby2fields = ( - 'CARD' => [ qw( paystart_month paystart_year payissue address1 address2 city state zip payip ) ], - 'CHEK' => [ qw( ss paytype paystate stateid stateid_state payip ) ], - ); - - my $error = $cust_main->realtime_bop( $FS::payby::payby2bop{$payby}, $p->{'amount'}, - 'quiet' => 1, - 'payinfo' => $payinfo, - 'paydate' => $p->{'year'}. '-'. $p->{'month'}. '-01', - 'payname' => $payname, - 'paybatch' => $paybatch, - 'paycvv' => $paycvv, - map { $_ => $p->{$_} } @{ $payby2fields{$payby} } - ); - return { 'error' => $error } if $error; - - $cust_main->apply_payments; - - if ( $p->{'save'} ) { - my $new = new FS::cust_main { $cust_main->hash }; - if ($payby eq 'CARD' || $payby eq 'DCRD') { - $new->set( $_ => $p->{$_} ) - foreach qw( payname paystart_month paystart_year payissue payip - address1 address2 city state zip payinfo ); - $new->set( 'payby' => $p->{'auto'} ? 'CARD' : 'DCRD' ); - } elsif ($payby eq 'CHEK' || $payby eq 'DCHK') { - $new->set( $_ => $p->{$_} ) - foreach qw( payname payip paytype paystate - stateid stateid_state ); - $new->set( 'payinfo' => $payinfo ); - $new->set( 'payby' => $p->{'auto'} ? 'CHEK' : 'DCHK' ); - } - $new->set( 'paydate' => $p->{'year'}. '-'. $p->{'month'}. '-01' ); - my $error = $new->replace($cust_main); - return { 'error' => $error } if $error; - $cust_main = $new; - } - - return { 'error' => '' }; - -} - -sub process_payment_order_pkg { - my $p = shift; - - my $hr = process_payment($p); - return $hr if $hr->{'error'}; - - order_pkg($p); -} - -sub process_prepay { - - my $p = shift; - - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - my %return; - - my $custnum = $session->{'custnum'}; - - my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) - or return { 'error' => "unknown custnum $custnum" }; - - my( $amount, $seconds, $upbytes, $downbytes, $totalbytes ) = ( 0, 0, 0, 0, 0 ); - my $error = $cust_main->recharge_prepay( $p->{'prepaid_cardnum'}, - \$amount, - \$seconds, - \$upbytes, - \$downbytes, - \$totalbytes, - ); - - return { 'error' => $error } if $error; - - return { 'error' => '', - 'amount' => $amount, - 'seconds' => $seconds, - 'duration' => duration_exact($seconds), - 'upbytes' => $upbytes, - 'upload' => FS::UI::bytecount::bytecount_unexact($upbytes), - 'downbytes' => $downbytes, - 'download' => FS::UI::bytecount::bytecount_unexact($downbytes), - 'totalbytes'=> $totalbytes, - 'totalload' => FS::UI::bytecount::bytecount_unexact($totalbytes), - }; - -} - -sub invoice { - my $p = shift; - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - my $custnum = $session->{'custnum'}; - - my $invnum = $p->{'invnum'}; - - my $cust_bill = qsearchs('cust_bill', { 'invnum' => $invnum, - 'custnum' => $custnum } ) - or return { 'error' => "Can't find invnum" }; - - #my %return; - - return { 'error' => '', - 'invnum' => $invnum, - 'invoice_text' => join('', $cust_bill->print_text ), - 'invoice_html' => $cust_bill->print_html, - }; - -} - -sub invoice_logo { - my $p = shift; - - #sessioning for this? how do we get the session id to the backend invoice - # template so it can add it to the link, blah - - my $templatename = $p->{'templatename'}; - - #false laziness-ish w/view/cust_bill-logo.cgi - - my $conf = new FS::Conf; - if ( $templatename =~ /^([^\.\/]*)$/ && $conf->exists("logo_$1.png") ) { - $templatename = "_$1"; - } else { - $templatename = ''; - } - - my $filename = "logo$templatename.png"; - - return { 'error' => '', - 'logo' => $conf->config_binary($filename), - 'content_type' => 'image/png', #should allow gif, jpg too - }; -} - - -sub list_invoices { - my $p = shift; - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - my $custnum = $session->{'custnum'}; - - my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) - or return { 'error' => "unknown custnum $custnum" }; - - my @cust_bill = $cust_main->cust_bill; - - return { 'error' => '', - 'invoices' => [ map { { 'invnum' => $_->invnum, - '_date' => $_->_date, - } - } @cust_bill - ] - }; -} - -sub cancel { - my $p = shift; - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - my $custnum = $session->{'custnum'}; - - my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) - or return { 'error' => "unknown custnum $custnum" }; - - my @errors = $cust_main->cancel( 'quiet'=>1 ); - - my $error = scalar(@errors) ? join(' / ', @errors) : ''; - - return { 'error' => $error }; - -} - -sub list_pkgs { - my $p = shift; - - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - my $search = { 'custnum' => $custnum }; - $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - my $cust_main = qsearchs('cust_main', $search ) - or return { 'error' => "unknown custnum $custnum" }; - - #return { 'cust_pkg' => [ map { $_->hashref } $cust_main->ncancelled_pkgs ] }; - - my $conf = new FS::Conf; - - { 'svcnum' => $session->{'svcnum'}, - 'custnum' => $custnum, - 'cust_pkg' => [ map { - { $_->hash, - $_->part_pkg->hash, - part_svc => - [ map $_->hashref, $_->available_part_svc ], - cust_svc => - [ map { my $ref = { $_->hash, - label => [ $_->label ], - }; - $ref->{_password} = $_->svc_x->_password - if $context eq 'agent' - && $conf->exists('agent-showpasswords') - && $_->part_svc->svcdb eq 'svc_acct'; - $ref; - } $_->cust_svc - ], - }; - } $cust_main->ncancelled_pkgs - ], - 'small_custview' => - small_custview( $cust_main, $conf->config('countrydefault') ), - }; - -} - -sub list_svcs { - my $p = shift; - - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - my $search = { 'custnum' => $custnum }; - $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - my $cust_main = qsearchs('cust_main', $search ) - or return { 'error' => "unknown custnum $custnum" }; - - my @cust_svc = (); - #foreach my $cust_pkg ( $cust_main->ncancelled_pkgs ) { - foreach my $cust_pkg ( $p->{'ncancelled'} - ? $cust_main->ncancelled_pkgs - : $cust_main->unsuspended_pkgs ) { - push @cust_svc, @{[ $cust_pkg->cust_svc ]}; #@{[ ]} to force array context - } - @cust_svc = grep { $_->part_svc->svcdb eq $p->{'svcdb'} } @cust_svc - if $p->{'svcdb'}; - - #@svc_x = sort { $a->domain cmp $b->domain || $a->username cmp $b->username } - # @svc_x; - - { - #no#'svcnum' => $session->{'svcnum'}, - 'custnum' => $custnum, - 'svcs' => [ map { - my $svc_x = $_->svc_x; - my($label, $value) = $_->label; - my $part_pkg = $svc_x->cust_svc->cust_pkg->part_pkg; - - { 'svcnum' => $_->svcnum, - 'label' => $label, - 'value' => $value, - 'username' => $svc_x->username, - 'email' => $svc_x->email, - 'seconds' => $svc_x->seconds, - 'upbytes' => FS::UI::bytecount::display_bytecount($svc_x->upbytes), - 'downbytes' => FS::UI::bytecount::display_bytecount($svc_x->downbytes), - 'totalbytes'=> FS::UI::bytecount::display_bytecount($svc_x->totalbytes), - 'recharge_amount' => $part_pkg->option('recharge_amount', 1), - 'recharge_seconds' => $part_pkg->option('recharge_seconds', 1), - 'recharge_upbytes' => FS::UI::bytecount::display_bytecount($part_pkg->option('recharge_upbytes', 1)), - 'recharge_downbytes' => FS::UI::bytecount::display_bytecount($part_pkg->option('recharge_downbytes', 1)), - 'recharge_totalbytes' => FS::UI::bytecount::display_bytecount($part_pkg->option('recharge_totalbytes', 1)), - # more... - }; - } - @cust_svc - ], - }; - -} - -sub _list_svc_usage { - my($svc_acct, $begin, $end) = @_; - my @usage = (); - foreach my $part_export ( - map { qsearch ( 'part_export', { 'exporttype' => $_ } ) } - qw (sqlradius sqlradius_withdomain') - ) { - - push @usage, @ { $part_export->usage_sessions($begin, $end, $svc_acct) }; - } - (@usage); -} - -sub list_svc_usage { - _usage_details(\&_list_svc_usage, @_); -} - -sub _list_support_usage { - my($svc_acct, $begin, $end) = @_; - my @usage = (); - foreach ( grep { $begin <= $_->_date && $_->_date <= $end } - qsearch('acct_rt_transaction', { 'svcnum' => $svc_acct->svcnum }) - ) { - push @usage, { 'seconds' => $_->seconds, - 'support' => $_->support, - '_date' => $_->_date, - 'id' => $_->transaction_id, - 'creator' => $_->creator, - 'subject' => $_->subject, - 'status' => $_->status, - 'ticketid' => $_->ticketid, - }; - } - (@usage); -} - -sub list_support_usage { - _usage_details(\&_list_support_usage, @_); -} - -sub _usage_details { - my ($callback, $p) = (shift,shift); - - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - my $search = { 'svcnum' => $p->{'svcnum'} }; - $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - my $svc_acct = qsearchs ( 'svc_acct', $search ); - return { 'error' => 'No service selected in list_svc_usage' } - unless $svc_acct; - - my $freq = $svc_acct->cust_svc->cust_pkg->part_pkg->freq; - my $start = $svc_acct->cust_svc->cust_pkg->setup; - #my $end = $svc_acct->cust_svc->cust_pkg->bill; # or time? - my $end = time; - - unless($p->{beginning}){ - $p->{beginning} = $svc_acct->cust_svc->cust_pkg->last_bill; - $p->{ending} = $end; - } - - my (@usage) = &$callback($svc_acct,$p->{beginning},$p->{ending}); - - #kinda false laziness with FS::cust_main::bill, but perhaps - #we should really change this bit to DateTime and DateTime::Duration - # - #change this bit to use Date::Manip? CAREFUL with timezones (see - # mailing list archive) - my ($nsec,$nmin,$nhour,$nmday,$nmon,$nyear) = - (localtime($p->{ending}) )[0,1,2,3,4,5]; - my ($psec,$pmin,$phour,$pmday,$pmon,$pyear) = - (localtime($p->{beginning}) )[0,1,2,3,4,5]; - - if ( $freq =~ /^\d+$/ ) { - $nmon += $freq; - until ( $nmon < 12 ) { $nmon -= 12; $nyear++; } - $pmon -= $freq; - until ( $pmon >= 0 ) { $pmon += 12; $pyear--; } - } elsif ( $freq =~ /^(\d+)w$/ ) { - my $weeks = $1; - $nmday += $weeks * 7; - $pmday -= $weeks * 7; - } elsif ( $freq =~ /^(\d+)d$/ ) { - my $days = $1; - $nmday += $days; - $pmday -= $days; - } elsif ( $freq =~ /^(\d+)h$/ ) { - my $hours = $1; - $nhour += $hours; - $phour -= $hours; - } else { - return { 'error' => "unparsable frequency: ". $freq }; - } - - my $previous = timelocal_nocheck($psec,$pmin,$phour,$pmday,$pmon,$pyear); - my $next = timelocal_nocheck($nsec,$nmin,$nhour,$nmday,$nmon,$nyear); - - { - 'error' => '', - 'svcnum' => $p->{svcnum}, - 'beginning' => $p->{beginning}, - 'ending' => $p->{ending}, - 'previous' => ($previous > $start) ? $previous : $start, - 'next' => ($next < $end) ? $next : $end, - 'usage' => \@usage, - }; -} - -sub order_pkg { - my $p = shift; - - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - my $search = { 'custnum' => $custnum }; - $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - my $cust_main = qsearchs('cust_main', $search ) - or return { 'error' => "unknown custnum $custnum" }; - - my $status = $cust_main->status; - #false laziness w/ClientAPI/Signup.pm - - my $cust_pkg = new FS::cust_pkg ( { - 'custnum' => $custnum, - 'pkgpart' => $p->{'pkgpart'}, - } ); - my $error = $cust_pkg->check; - return { 'error' => $error } if $error; - - my @svc = (); - unless ( $p->{'svcpart'} eq 'none' ) { - - my $svcdb; - my $svcpart = ''; - if ( $p->{'svcpart'} =~ /^(\d+)$/ ) { - $svcpart = $1; - my $part_svc = qsearchs('part_svc', { 'svcpart' => $svcpart } ); - return { 'error' => "Unknown svcpart $svcpart" } unless $part_svc; - $svcdb = $part_svc->svcdb; - } else { - $svcdb = 'svc_acct'; - } - $svcpart ||= $cust_pkg->part_pkg->svcpart($svcdb); - - my %fields = ( - 'svc_acct' => [ qw( username domsvc _password sec_phrase popnum ) ], - 'svc_domain' => [ qw( domain ) ], - 'svc_external' => [ qw( id title ) ], - ); - - my $svc_x = "FS::$svcdb"->new( { - 'svcpart' => $svcpart, - map { $_ => $p->{$_} } @{$fields{$svcdb}} - } ); - - if ( $svcdb eq 'svc_acct' ) { - my @acct_snarf; - my $snarfnum = 1; - while ( length($p->{"snarf_machine$snarfnum"}) ) { - my $acct_snarf = new FS::acct_snarf ( { - 'machine' => $p->{"snarf_machine$snarfnum"}, - 'protocol' => $p->{"snarf_protocol$snarfnum"}, - 'username' => $p->{"snarf_username$snarfnum"}, - '_password' => $p->{"snarf_password$snarfnum"}, - } ); - $snarfnum++; - push @acct_snarf, $acct_snarf; - } - $svc_x->child_objects( \@acct_snarf ); - } - - my $y = $svc_x->setdefault; # arguably should be in new method - return { 'error' => $y } if $y && !ref($y); - - $error = $svc_x->check; - return { 'error' => $error } if $error; - - push @svc, $svc_x; - - } - - use Tie::RefHash; - tie my %hash, 'Tie::RefHash'; - %hash = ( $cust_pkg => \@svc ); - #msgcat - $error = $cust_main->order_pkgs( \%hash, '', 'noexport' => 1 ); - return { 'error' => $error } if $error; - - my $conf = new FS::Conf; - if ( $conf->exists('signup_server-realtime') ) { - - my $bill_error = _do_bop_realtime( $cust_main, $status ); - - if ($bill_error) { - $cust_pkg->cancel('quiet'=>1); - return $bill_error; - } else { - $cust_pkg->reexport; - } - - } else { - $cust_pkg->reexport; - } - - return { error => '', pkgnum => $cust_pkg->pkgnum }; - -} - -sub change_pkg { - my $p = shift; - - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - my $search = { 'custnum' => $custnum }; - $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - my $cust_main = qsearchs('cust_main', $search ) - or return { 'error' => "unknown custnum $custnum" }; - - my $status = $cust_main->status; - my $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $p->{pkgnum} } ) - or return { 'error' => "unknown package $p->{pkgnum}" }; - - my @newpkg; - my $error = FS::cust_pkg::order( $custnum, - [$p->{pkgpart}], - [$p->{pkgnum}], - \@newpkg, - ); - - my $conf = new FS::Conf; - if ( $conf->exists('signup_server-realtime') ) { - - my $bill_error = _do_bop_realtime( $cust_main, $status ); - - if ($bill_error) { - $newpkg[0]->suspend; - return $bill_error; - } else { - $newpkg[0]->reexport; - } - - } else { - $newpkg[0]->reexport; - } - - return { error => '', pkgnum => $cust_pkg->pkgnum }; - -} - -sub order_recharge { - my $p = shift; - - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - my $search = { 'custnum' => $custnum }; - $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - my $cust_main = qsearchs('cust_main', $search ) - or return { 'error' => "unknown custnum $custnum" }; - - my $status = $cust_main->status; - my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $p->{'svcnum'} } ) - or return { 'error' => "unknown service " . $p->{'svcnum'} }; - - my $svc_x = $cust_svc->svc_x; - my $part_pkg = $cust_svc->cust_pkg->part_pkg; - - my %vhash = - map { $_ =~ /^recharge_(.*)$/; $1, $part_pkg->option($_, 1) } - qw ( recharge_seconds recharge_upbytes recharge_downbytes - recharge_totalbytes ); - my $amount = $part_pkg->option('recharge_amount', 1); - - my ($l, $v, $d) = $cust_svc->label; # blah - my $pkg = "Recharge $v"; - - my $bill_error = $cust_main->charge($amount, $pkg, - "time: $vhash{seconds}, up: $vhash{upbytes}," . - "down: $vhash{downbytes}, total: $vhash{totalbytes}", - $part_pkg->taxclass); #meh - - my $conf = new FS::Conf; - if ( $conf->exists('signup_server-realtime') && !$bill_error ) { - - $bill_error = _do_bop_realtime( $cust_main, $status ); - - if ($bill_error) { - return $bill_error; - } else { - my $error = $svc_x->recharge (\%vhash); - return { 'error' => $error } if $error; - } - - } else { - my $error = $bill_error; - $error ||= $svc_x->recharge (\%vhash); - return { 'error' => $error } if $error; - } - - return { error => '', svc => $cust_svc->part_svc->svc }; - -} - -sub _do_bop_realtime { - my ($cust_main, $status) = (shift, shift); - - my $old_balance = $cust_main->balance; - - my $bill_error = $cust_main->bill - || $cust_main->apply_payments_and_credits - || $cust_main->collect('realtime' => 1); - - if ( $cust_main->balance > $old_balance - && $cust_main->balance > 0 - && ( $cust_main->payby !~ /^(BILL|DCRD|DCHK)$/ ? - 1 : $status eq 'suspended' ) ) { - #this makes sense. credit is "un-doing" the invoice - my $conf = new FS::Conf; - $cust_main->credit( sprintf("%.2f", $cust_main->balance - $old_balance ), - 'self-service decline', - 'reason_type' => $conf->config('signup_credit_type'), - ); - $cust_main->apply_credits( 'order' => 'newest' ); - - return { 'error' => '_decline', 'bill_error' => $bill_error }; - } - - ''; -} - -sub cancel_pkg { - my $p = shift; - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - my $custnum = $session->{'custnum'}; - - my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) - or return { 'error' => "unknown custnum $custnum" }; - - my $pkgnum = $p->{'pkgnum'}; - - my $cust_pkg = qsearchs('cust_pkg', { 'custnum' => $custnum, - 'pkgnum' => $pkgnum, } ) - or return { 'error' => "unknown pkgnum $pkgnum" }; - - my $error = $cust_pkg->cancel( 'quiet'=>1 ); - return { 'error' => $error }; - -} - -sub provision_acct { - my $p = shift; - - return { 'error' => gettext('passwords_dont_match') } - if $p->{'_password'} ne $p->{'_password2'}; - return { 'error' => gettext('empty_password') } - unless length($p->{'_password'}); - - if ($p->{'domsvc'}) { - my %domains = domain_select_hash FS::svc_acct(map { $_ => $p->{$_} } - qw ( svcpart pkgnum ) ); - return { 'error' => gettext('invalid_domain') } - unless ($domains{$p->{'domsvc'}}); - } - - _provision( 'FS::svc_acct', - [qw(username _password domsvc)], - [qw(username _password domsvc)], - $p, - @_ - ); -} - -sub provision_external { - my $p = shift; - #_provision( 'FS::svc_external', [qw(id title)], [qw(id title)], $p, @_ ); - _provision( 'FS::svc_external', - [], - [qw(id title)], - $p, - @_ - ); -} - -sub _provision { - my( $class, $fields, $return_fields, $p ) = splice(@_, 0, 4); - - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - my $search = { 'custnum' => $custnum }; - $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - my $cust_main = qsearchs('cust_main', $search ) - or return { 'error' => "unknown custnum $custnum" }; - - my $pkgnum = $p->{'pkgnum'}; - - my $cust_pkg = qsearchs('cust_pkg', { 'custnum' => $custnum, - 'pkgnum' => $pkgnum, - } ) - or return { 'error' => "unknown pkgnum $pkgnum" }; - - my $part_svc = qsearchs('part_svc', { 'svcpart' => $p->{'svcpart'} } ) - or return { 'error' => "unknown svcpart $p->{'svcpart'}" }; - - my $svc_x = $class->new( { - 'pkgnum' => $p->{'pkgnum'}, - 'svcpart' => $p->{'svcpart'}, - map { $_ => $p->{$_} } @$fields - } ); - my $error = $svc_x->insert; - $svc_x = qsearchs($svc_x->table, { 'svcnum' => $svc_x->svcnum }) - unless $error; - - return { 'svc' => $part_svc->svc, - 'error' => $error, - map { $_ => $svc_x->get($_) } @$return_fields - }; - -} - -sub part_svc_info { - my $p = shift; - - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - my $search = { 'custnum' => $custnum }; - $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - my $cust_main = qsearchs('cust_main', $search ) - or return { 'error' => "unknown custnum $custnum" }; - - my $pkgnum = $p->{'pkgnum'}; - - my $cust_pkg = qsearchs('cust_pkg', { 'custnum' => $custnum, - 'pkgnum' => $pkgnum, - } ) - or return { 'error' => "unknown pkgnum $pkgnum" }; - - my $svcpart = $p->{'svcpart'}; - - my $pkg_svc = qsearchs('pkg_svc', { 'pkgpart' => $cust_pkg->pkgpart, - 'svcpart' => $svcpart, } ) - or return { 'error' => "unknown svcpart $svcpart for pkgnum $pkgnum" }; - my $part_svc = $pkg_svc->part_svc; - - my $conf = new FS::Conf; - - return { - 'svc' => $part_svc->svc, - 'svcdb' => $part_svc->svcdb, - 'pkgnum' => $pkgnum, - 'svcpart' => $svcpart, - 'custnum' => $custnum, - - 'security_phrase' => 0, #XXX ! - 'svc_acct_pop' => [], #XXX ! - 'popnum' => '', - 'init_popstate' => '', - 'popac' => '', - 'acstate' => '', - - 'small_custview' => - small_custview( $cust_main, $conf->config('countrydefault') ), - - }; - -} - -sub unprovision_svc { - my $p = shift; - - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - my $search = { 'custnum' => $custnum }; - $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - my $cust_main = qsearchs('cust_main', $search ) - or return { 'error' => "unknown custnum $custnum" }; - - my $svcnum = $p->{'svcnum'}; - - my $cust_svc = qsearchs('cust_svc', { 'svcnum' => $svcnum, } ) - or return { 'error' => "unknown svcnum $svcnum" }; - - return { 'error' => "Service $svcnum does not belong to customer $custnum" } - unless $cust_svc->cust_pkg->custnum == $custnum; - - my $conf = new FS::Conf; - - return { 'svc' => $cust_svc->part_svc->svc, - 'error' => $cust_svc->cancel, - 'small_custview' => - small_custview( $cust_main, $conf->config('countrydefault') ), - }; - -} - -sub myaccount_passwd { - my $p = shift; - my($context, $session, $custnum) = _custoragent_session_custnum($p); - return { 'error' => $session } if $context eq 'error'; - - return { 'error' => "New passwords don't match." } - if $p->{'new_password'} ne $p->{'new_password2'}; - - return { 'error' => 'Enter new password' } - unless length($p->{'new_password'}); - - #my $search = { 'custnum' => $custnum }; - #$search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; - $custnum =~ /^(\d+)$/ or die "illegal custnum"; - my $search = " AND custnum = $1"; - $search .= " AND agentnum = ". $session->{'agentnum'} if $context eq 'agent'; - - my $svc_acct = qsearchs( { - 'table' => 'svc_acct', - 'addl_from' => 'LEFT JOIN cust_svc USING ( svcnum ) '. - 'LEFT JOIN cust_pkg USING ( pkgnum ) '. - 'LEFT JOIN cust_main USING ( custnum ) ', - 'hashref' => { 'svcnum' => $p->{'svcnum'}, }, - 'extra_sql' => $search, #important - } ) - or return { 'error' => "Service not found" }; - - $svc_acct->_password($p->{'new_password'}); - my $error = $svc_acct->replace(); - - my($label, $value) = $svc_acct->cust_svc->label; - - return { 'error' => $error, - 'label' => $label, - 'value' => $value, - }; - -} - -#-- - -sub _custoragent_session_custnum { - my $p = shift; - - my($context, $session, $custnum); - if ( $p->{'session_id'} ) { - - $context = 'customer'; - $session = _cache->get($p->{'session_id'}) - or return ( 'error' => "Can't resume session" ); #better error message - $custnum = $session->{'custnum'}; - - } elsif ( $p->{'agent_session_id'} ) { - - $context = 'agent'; - my $agent_cache = new FS::ClientAPI_SessionCache( { - 'namespace' => 'FS::ClientAPI::Agent', - } ); - $session = $agent_cache->get($p->{'agent_session_id'}) - or return ( 'error' => "Can't resume session" ); #better error message - $custnum = $p->{'custnum'}; - - } else { - return ( 'error' => "Can't resume session" ); #better error message - } - - ($context, $session, $custnum); - -} - -1; - diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm deleted file mode 100644 index 61325b9e1..000000000 --- a/FS/FS/ClientAPI/Signup.pm +++ /dev/null @@ -1,514 +0,0 @@ -package FS::ClientAPI::Signup; - -use strict; -use vars qw($DEBUG $me); -use Data::Dumper; -use Tie::RefHash; -use FS::Conf; -use FS::Record qw(qsearch qsearchs dbdef); -use FS::Msgcat qw(gettext); -use FS::Misc qw(card_types); -use FS::ClientAPI_SessionCache; -use FS::agent; -use FS::cust_main_county; -use FS::part_pkg; -use FS::svc_acct_pop; -use FS::cust_main; -use FS::cust_pkg; -use FS::svc_acct; -use FS::acct_snarf; -use FS::queue; -use FS::reg_code; - -$DEBUG = 0; -$me = '[FS::ClientAPI::Signup]'; - -sub signup_info { - my $packet = shift; - - warn "$me signup_info called on $packet\n" if $DEBUG; - - my $conf = new FS::Conf; - - my $cache = new FS::ClientAPI_SessionCache( { - 'namespace' => 'FS::ClientAPI::Signup', - } ); - my $signup_info_cache = $cache->get('signup_info_cache'); - - if ( $signup_info_cache ) { - - warn "$me loading cached signup info\n" if $DEBUG > 1; - - } else { - - warn "$me populating signup info cache\n" if $DEBUG > 1; - - my $agentnum2part_pkg = - { - map { - my $href = $_->pkgpart_hashref; - $_->agentnum => - [ - map { { 'payby' => [ $_->payby ], - 'freq_pretty' => $_->freq_pretty, - 'options' => { $_->options }, - %{$_->hashref} - } } - grep { $_->svcpart('svc_acct') && $href->{ $_->pkgpart } } - qsearch( 'part_pkg', { 'disabled' => '' } ) - ]; - } qsearch('agent', { 'disabled' => '' }) - }; - - my $msgcat = { map { $_=>gettext($_) } - qw( passwords_dont_match invalid_card unknown_card_type - not_a empty_password illegal_or_empty_text ) - }; - warn "msgcat: ". Dumper($msgcat). "\n" if $DEBUG > 2; - - my $label = { map { $_ => FS::Msgcat::_gettext($_) } - qw( stateid stateid_state ) - }; - warn "label: ". Dumper($label). "\n" if $DEBUG > 2; - - $signup_info_cache = { - 'cust_main_county' => [ map $_->hashref, - qsearch('cust_main_county', {} ) - ], - - 'agent' => [ map $_->hashref, - qsearch('agent', { 'disabled' => '' } ) - ], - - 'part_referral' => [ map $_->hashref, - qsearch('part_referral', { 'disabled' => '' } ) - ], - - 'agentnum2part_pkg' => $agentnum2part_pkg, - - 'svc_acct_pop' => [ map $_->hashref, qsearch('svc_acct_pop',{} ) ], - - 'emailinvoiceonly' => $conf->exists('emailinvoiceonly'), - - 'security_phrase' => $conf->exists('security_phrase'), - - 'payby' => [ $conf->config('signup_server-payby') ], - - 'card_types' => card_types(), - - 'paytypes' => [ @FS::cust_main::paytypes ], - - 'cvv_enabled' => 1, - - 'stateid_enabled' => $conf->exists('show_stateid'), - - 'paystate_enabled' => $conf->exists('show_bankstate'), - - 'ship_enabled' => 1, - - 'msgcat' => $msgcat, - - 'label' => $label, - - 'statedefault' => scalar($conf->config('statedefault')) || 'CA', - - 'countrydefault' => scalar($conf->config('countrydefault')) || 'US', - - 'refnum' => scalar($conf->config('signup_server-default_refnum')), - - 'default_pkgpart' => scalar($conf->config('signup_server-default_pkgpart')), - - }; - - $cache->set('signup_info_cache', $signup_info_cache); - - } - - my $signup_info = { %$signup_info_cache }; - warn "$me signup info loaded\n" if $DEBUG > 1; - warn Dumper($signup_info). "\n" if $DEBUG > 2; - - my @addl = qw( signup_server-classnum2 signup_server-classnum3 ); - - if ( grep { $conf->exists($_) } @addl ) { - - $signup_info->{optional_packages} = []; - - foreach my $addl ( @addl ) { - - warn "$me adding optional package info\n" if $DEBUG > 1; - - my $classnum = $conf->config($addl) or next; - - my @pkgs = map { { - 'freq_pretty' => $_->freq_pretty, - 'options' => { $_->options }, - %{ $_->hashref } - }; - } - qsearch( 'part_pkg', { classnum => $classnum } ); - - push @{$signup_info->{optional_packages}}, \@pkgs; - - warn "$me done adding opt. package info for $classnum\n" if $DEBUG > 1; - - } - - } - - my $agentnum = $packet->{'agentnum'} - || $conf->config('signup_server-default_agentnum'); - $agentnum =~ /^(\d*)$/ or die "illegal agentnum"; - $agentnum = $1; - - my $session = ''; - if ( exists $packet->{'session_id'} ) { - - warn "$me loading agent session\n" if $DEBUG > 1; - my $cache = new FS::ClientAPI_SessionCache( { - 'namespace' => 'FS::ClientAPI::Agent', - } ); - $session = $cache->get($packet->{'session_id'}); - if ( $session ) { - $agentnum = $session->{'agentnum'}; - } else { - return { 'error' => "Can't resume session" }; #better error message - } - warn "$me done loading agent session\n" if $DEBUG > 1; - - } elsif ( exists $packet->{'customer_session_id'} ) { - - warn "$me loading customer session\n" if $DEBUG > 1; - my $cache = new FS::ClientAPI_SessionCache( { - 'namespace' => 'FS::ClientAPI::MyAccount', - } ); - $session = $cache->get($packet->{'customer_session_id'}); - if ( $session ) { - my $custnum = $session->{'custnum'}; - my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum }); - return { 'error' => "Can't find your customer record" } unless $cust_main; - $agentnum = $cust_main->agentnum; - } else { - return { 'error' => "Can't resume session" }; #better error message - } - warn "$me done loading customer session\n" if $DEBUG > 1; - - } - - $signup_info->{'part_pkg'} = []; - - if ( $packet->{'reg_code'} ) { - - warn "$me setting package list via reg_code\n" if $DEBUG > 1; - - $signup_info->{'part_pkg'} = - [ map { { 'payby' => [ $_->payby ], - 'freq_pretty' => $_->freq_pretty, - 'options' => { $_->options }, - %{$_->hashref} - }; - } - grep { $_->svcpart('svc_acct') } - map { $_->part_pkg } - qsearchs( 'reg_code', { 'code' => $packet->{'reg_code'}, - 'agentnum' => $agentnum, } ) - - ]; - - $signup_info->{'error'} = 'Unknown registration code' - unless @{ $signup_info->{'part_pkg'} }; - - warn "$me done setting package list via reg_code\n" if $DEBUG > 1; - - } elsif ( $packet->{'promo_code'} ) { - - warn "$me setting package list via promo_code\n" if $DEBUG > 1; - - $signup_info->{'part_pkg'} = - [ map { { 'payby' => [ $_->payby ], - 'freq_pretty' => $_->freq_pretty, - 'options' => { $_->options }, - %{$_->hashref} - } } - grep { $_->svcpart('svc_acct') } - qsearch( 'part_pkg', { 'promo_code' => { - op=>'ILIKE', - value=>$packet->{'promo_code'} - }, - 'disabled' => '', } ) - ]; - - $signup_info->{'error'} = 'Unknown promotional code' - unless @{ $signup_info->{'part_pkg'} }; - - warn "$me done setting package list via promo_code\n" if $DEBUG > 1; - } - - if ( $agentnum ) { - - warn "$me setting agent-specific package list\n" if $DEBUG > 1; - $signup_info->{'part_pkg'} = $signup_info->{'agentnum2part_pkg'}{$agentnum} - unless @{ $signup_info->{'part_pkg'} }; - warn "$me done setting agent-specific package list\n" if $DEBUG > 1; - - warn "$me setting agent-specific adv. source list\n" if $DEBUG > 1; - $signup_info->{'part_referral'} = - [ - map { $_->hashref } - qsearch( { - 'table' => 'part_referral', - 'hashref' => { 'disabled' => '' }, - 'extra_sql' => "AND ( agentnum = $agentnum ". - " OR agentnum IS NULL ) ", - }, - ) - ]; - warn "$me done setting agent-specific adv. source list\n" if $DEBUG > 1; - - } - # else { - # delete $signup_info->{'part_pkg'}; - #} - - warn "$me sorting package list\n" if $DEBUG > 1; - $signup_info->{'part_pkg'} = [ sort { $a->{pkg} cmp $b->{pkg} } # case? - @{ $signup_info->{'part_pkg'} } - ]; - warn "$me done sorting package list\n" if $DEBUG > 1; - - if ( exists $packet->{'session_id'} ) { - my $agent_signup_info = { %$signup_info }; - delete $agent_signup_info->{agentnum2part_pkg}; - $agent_signup_info->{'agent'} = $session->{'agent'}; - $agent_signup_info; - } else { - $signup_info; - } - -} - -sub domain_select_hash { - my $packet = shift; - - my $response = {}; - - if ($packet->{pkgpart}) { - my $part_pkg = qsearchs('part_pkg' => { 'pkgpart' => $packet->{pkgpart} } ); - #$packet->{svcpart} = $part_pkg->svcpart('svc_acct') - $packet->{svcpart} = $part_pkg->svcpart - if $part_pkg; - } - - if ($packet->{svcpart}) { - my $part_svc = qsearchs('part_svc' => { 'svcpart' => $packet->{svcpart} } ); - $response->{'domsvc'} = $part_svc->part_svc_column('domsvc')->columnvalue - if ($part_svc && $part_svc->part_svc_column('domsvc')->columnflag eq 'D'); - } - - $response->{'domains'} - = { domain_select_hash FS::svc_acct( map { $_ => $packet->{$_} } - qw(svcpart pkgnum) - ) }; - - $response; -} - -sub new_customer { - my $packet = shift; - - my $conf = new FS::Conf; - - #things that aren't necessary in base class, but are for signup server - #return "Passwords don't match" - # if $hashref->{'_password'} ne $hashref->{'_password2'} - return { 'error' => gettext('empty_password') } - unless length($packet->{'_password'}); - # a bit inefficient for large numbers of pops - return { 'error' => gettext('no_access_number_selected') } - unless $packet->{'popnum'} || !scalar(qsearch('svc_acct_pop',{} )); - - my $agentnum; - if ( exists $packet->{'session_id'} ) { - my $cache = new FS::ClientAPI_SessionCache( { - 'namespace' => 'FS::ClientAPI::Agent', - } ); - my $session = $cache->get($packet->{'session_id'}); - if ( $session ) { - $agentnum = $session->{'agentnum'}; - } else { - return { 'error' => "Can't resume session" }; #better error message - } - } else { - $agentnum = $packet->{agentnum} - || $conf->config('signup_server-default_agentnum'); - } - - #shares some stuff with htdocs/edit/process/cust_main.cgi... take any - # common that are still here and library them. - my $cust_main = new FS::cust_main ( { - #'custnum' => '', - 'agentnum' => $agentnum, - 'refnum' => $packet->{refnum} - || $conf->config('signup_server-default_refnum'), - - map { $_ => $packet->{$_} } qw( - - last first ss company address1 address2 - city county state zip country - daytime night fax stateid stateid_state - - ship_last ship_first ship_ss ship_company ship_address1 ship_address2 - ship_city ship_county ship_state ship_zip ship_country - ship_daytime ship_night ship_fax - - payby - payinfo paycvv paydate payname paystate paytype - paystart_month paystart_year payissue - payip - - referral_custnum comments - ) - - } ); - - return { 'error' => "Illegal payment type" } - unless grep { $_ eq $packet->{'payby'} } - $conf->config('signup_server-payby'); - - $cust_main->payinfo($cust_main->daytime) - if $cust_main->payby eq 'LECB' && ! $cust_main->payinfo; - - my @invoicing_list = $packet->{'invoicing_list'} - ? split( /\s*\,\s*/, $packet->{'invoicing_list'} ) - : (); - - $packet->{'pkgpart'} =~ /^(\d+)$/ or '' =~ /^()$/; - my $pkgpart = $1; - return { 'error' => 'Please select a package' } unless $pkgpart; #msgcat - - my $part_pkg = - qsearchs( 'part_pkg', { 'pkgpart' => $pkgpart } ) - or return { 'error' => "WARNING: unknown pkgpart: $pkgpart" }; - my $svcpart = $part_pkg->svcpart('svc_acct'); - - my $reg_code = ''; - if ( $packet->{'reg_code'} ) { - $reg_code = qsearchs( 'reg_code', { 'code' => $packet->{'reg_code'}, - 'agentnum' => $agentnum, } ) - or return { 'error' => 'Unknown registration code' }; - } - - my $cust_pkg = new FS::cust_pkg ( { - #later#'custnum' => $custnum, - 'pkgpart' => $packet->{'pkgpart'}, - 'promo_code' => $packet->{'promo_code'}, - 'reg_code' => $packet->{'reg_code'}, - } ); - #my $error = $cust_pkg->check; - #return { 'error' => $error } if $error; - - my $svc_acct = new FS::svc_acct ( { - 'svcpart' => $svcpart, - map { $_ => $packet->{$_} } - qw( username _password sec_phrase popnum ), - } ); - - my @acct_snarf; - my $snarfnum = 1; - while ( exists($packet->{"snarf_machine$snarfnum"}) - && length($packet->{"snarf_machine$snarfnum"}) ) { - my $acct_snarf = new FS::acct_snarf ( { - 'machine' => $packet->{"snarf_machine$snarfnum"}, - 'protocol' => $packet->{"snarf_protocol$snarfnum"}, - 'username' => $packet->{"snarf_username$snarfnum"}, - '_password' => $packet->{"snarf_password$snarfnum"}, - } ); - $snarfnum++; - push @acct_snarf, $acct_snarf; - } - $svc_acct->child_objects( \@acct_snarf ); - - my $y = $svc_acct->setdefault; # arguably should be in new method - return { 'error' => $y } if $y && !ref($y); - - #$error = $svc_acct->check; - #return { 'error' => $error } if $error; - - #setup a job dependancy to delay provisioning - my $placeholder = new FS::queue ( { - 'job' => 'FS::ClientAPI::Signup::__placeholder', - 'status' => 'locked', - } ); - my $error = $placeholder->insert; - return { 'error' => $error } if $error; - - use Tie::RefHash; - tie my %hash, 'Tie::RefHash'; - %hash = ( $cust_pkg => [ $svc_acct ] ); - #msgcat - $error = $cust_main->insert( - \%hash, - \@invoicing_list, - 'depend_jobnum' => $placeholder->jobnum, - ); - if ( $error ) { - my $perror = $placeholder->delete; - $error .= " (Additionally, error removing placeholder: $perror)" if $perror; - return { 'error' => $error }; - } - - if ( $conf->exists('signup_server-realtime') ) { - - #warn "[fs_signup_server] Billing customer...\n" if $Debug; - - my $bill_error = $cust_main->bill; - #warn "[fs_signup_server] error billing new customer: $bill_error" - # if $bill_error; - - $bill_error = $cust_main->apply_payments_and_credits; - #warn "[fs_signup_server] error applying payments and credits for". - # " new customer: $bill_error" - # if $bill_error; - - $bill_error = $cust_main->collect('realtime' => 1); - #warn "[fs_signup_server] error collecting from new customer: $bill_error" - # if $bill_error; - - if ( $cust_main->balance > 0 ) { - - #this makes sense. credit is "un-doing" the invoice - $cust_main->credit( $cust_main->balance, 'signup server decline', - 'reason_type' => $conf->config('signup_credit_type'), - ); - $cust_main->apply_credits; - - #should check list for errors... - #$cust_main->suspend; - local $FS::svc_Common::noexport_hack = 1; - $cust_main->cancel('quiet'=>1); - - my $perror = $placeholder->depended_delete; - warn "error removing provisioning jobs after decline: $perror" if $perror; - unless ( $perror ) { - $perror = $placeholder->delete; - warn "error removing placeholder after decline: $perror" if $perror; - } - - return { 'error' => '_decline' }; - } - - } - - if ( $reg_code ) { - $error = $reg_code->delete; - return { 'error' => $error } if $error; - } - - $error = $placeholder->delete; - return { 'error' => $error } if $error; - - return { error => '' }; - -} - -1; diff --git a/FS/FS/ClientAPI/passwd.pm b/FS/FS/ClientAPI/passwd.pm deleted file mode 100644 index b22d7617e..000000000 --- a/FS/FS/ClientAPI/passwd.pm +++ /dev/null @@ -1,46 +0,0 @@ -package FS::ClientAPI::passwd; - -use strict; -use FS::Record qw(qsearchs); -use FS::svc_acct; -use FS::svc_domain; - -sub passwd { - my $packet = shift; - - my $domain = $FS::ClientAPI::domain || $packet->{'domain'}; - my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) - or return { error => "Domain $domain not found" }; - - my $old_password = $packet->{'old_password'}; - my $new_password = $packet->{'new_password'}; - my $new_gecos = $packet->{'new_gecos'}; - my $new_shell = $packet->{'new_shell'}; - - #false laziness w/FS::ClientAPI::MyAccount::login - - my $svc_acct = qsearchs( 'svc_acct', { 'username' => $packet->{'username'}, - 'domsvc' => $svc_domain->svcnum, } - ); - return { error => 'User not found.' } unless $svc_acct; - return { error => 'Incorrect password.' } - unless $svc_acct->check_password($old_password); - - my %hash = $svc_acct->hash; - my $new_svc_acct = new FS::svc_acct ( \%hash ); - $new_svc_acct->setfield('_password', $new_password ) - if $new_password && $new_password ne $old_password; - $new_svc_acct->setfield('finger',$new_gecos) if $new_gecos; - $new_svc_acct->setfield('shell',$new_shell) if $new_shell; - my $error = $new_svc_acct->replace($svc_acct); - - return { error => $error }; - -} - -sub chfn {} - -sub chsh {} - -1; - diff --git a/FS/FS/ClientAPI_SessionCache.pm b/FS/FS/ClientAPI_SessionCache.pm deleted file mode 100644 index bfab8055d..000000000 --- a/FS/FS/ClientAPI_SessionCache.pm +++ /dev/null @@ -1,78 +0,0 @@ -package FS::ClientAPI_SessionCache; - -use strict; -use vars qw($module); -use FS::UID qw(datasrc); - -#ask FS::UID to run this stuff for us later -install_callback FS::UID sub { - my $conf = new FS::Conf; - $module = $conf->config('selfservice_server-cache_module') - || 'Cache::FileCache'; -}; - -=head1 NAME - -FS::ClientAPI_SessionCache; - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -Minimal Cache::Cache-alike interface for storing session cache information. -Backends to Cache::SharedMemoryCache, Cache::FileCache, or an internal -implementation which stores information in the clientapi_session and -clientapi_session_field database tables. - -=head1 METHODS - -=over 4 - -=item new - -=cut - -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - unless ( $module =~ /^_Database$/ ) { - eval "use $module;"; - die $@ if $@; - my $self = $module->new(@_); - $self->set_cache_root('%%%FREESIDE_CACHE%%%/clientapi_session.'.datasrc) - if $module =~ /^Cache::FileCache$/; - $self; - } else { - my $self = shift; - bless ($self, $class); - } -} - -sub get { - my($self, $session_id) = @_; - die '_Database self-service session cache not yet implemented'; -} - -sub set { - my($self, $session_id, $session, $expiration) = @_; - die '_Database self-service session cache not yet implemented'; -} - -sub remove { - my($self, $session_id) = @_; - die '_Database self-service session cache not yet implemented'; -} - -=back - -=head1 BUGS - -Minimal documentation. - -=head1 SEE ALSO - -L, L, L - -=cut - -1; diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm deleted file mode 100644 index b7edd0dee..000000000 --- a/FS/FS/Conf.pm +++ /dev/null @@ -1,2207 +0,0 @@ -package FS::Conf; - -use vars qw($base_dir @config_items @base_items @card_types $DEBUG); -use Carp; -use IO::File; -use File::Basename; -use MIME::Base64; -use FS::ConfItem; -use FS::ConfDefaults; -use FS::Conf_compat17; -use FS::conf; -use FS::Record qw(qsearch qsearchs); -use FS::UID qw(dbh datasrc use_confcompat); - -$base_dir = '%%%FREESIDE_CONF%%%'; - -$DEBUG = 0; - -=head1 NAME - -FS::Conf - Freeside configuration values - -=head1 SYNOPSIS - - use FS::Conf; - - $conf = new FS::Conf; - - $value = $conf->config('key'); - @list = $conf->config('key'); - $bool = $conf->exists('key'); - - $conf->touch('key'); - $conf->set('key' => 'value'); - $conf->delete('key'); - - @config_items = $conf->config_items; - -=head1 DESCRIPTION - -Read and write Freeside configuration values. Keys currently map to filenames, -but this may change in the future. - -=head1 METHODS - -=over 4 - -=item new - -Create a new configuration object. - -=cut - -sub new { - my($proto) = @_; - my($class) = ref($proto) || $proto; - my($self) = { 'base_dir' => $base_dir }; - bless ($self, $class); -} - -=item base_dir - -Returns the base directory. By default this is /usr/local/etc/freeside. - -=cut - -sub base_dir { - my($self) = @_; - my $base_dir = $self->{base_dir}; - -e $base_dir or die "FATAL: $base_dir doesn't exist!"; - -d $base_dir or die "FATAL: $base_dir isn't a directory!"; - -r $base_dir or die "FATAL: Can't read $base_dir!"; - -x $base_dir or die "FATAL: $base_dir not searchable (executable)!"; - $base_dir =~ /^(.*)$/; - $1; -} - -=item config KEY [ AGENTNUM ] - -Returns the configuration value or values (depending on context) for key. -The optional agent number selects an agent specific value instead of the -global default if one is present. - -=cut - -sub _usecompat { - my ($self, $method) = (shift, shift); - carp "NO CONFIGURATION RECORDS FOUND -- USING COMPATIBILITY MODE" - if use_confcompat; - my $compat = new FS::Conf_compat17 ("$base_dir/conf." . datasrc); - $compat->$method(@_); -} - -sub _config { - my($self,$name,$agentnum)=@_; - my $hashref = { 'name' => $name }; - $hashref->{agentnum} = $agentnum; - local $FS::Record::conf = undef; # XXX evil hack prevents recursion - my $cv = FS::Record::qsearchs('conf', $hashref); - if (!$cv && defined($agentnum)) { - $hashref->{agentnum} = ''; - $cv = FS::Record::qsearchs('conf', $hashref); - } - return $cv; -} - -sub config { - my $self = shift; - return $self->_usecompat('config', @_) if use_confcompat; - - my($name,$agentnum)=@_; - my $cv = $self->_config($name, $agentnum) or return; - - if ( wantarray ) { - my $v = $cv->value; - chomp $v; - (split "\n", $v, -1); - } else { - (split("\n", $cv->value))[0]; - } -} - -=item config_binary KEY [ AGENTNUM ] - -Returns the exact scalar value for key. - -=cut - -sub config_binary { - my $self = shift; - return $self->_usecompat('config_binary', @_) if use_confcompat; - - my($name,$agentnum)=@_; - my $cv = $self->_config($name, $agentnum) or return; - decode_base64($cv->value); -} - -=item exists KEY [ AGENTNUM ] - -Returns true if the specified key exists, even if the corresponding value -is undefined. - -=cut - -sub exists { - my $self = shift; - return $self->_usecompat('exists', @_) if use_confcompat; - - my($name,$agentnum)=@_; - defined($self->_config($name, $agentnum)); -} - -#=item config_orbase KEY SUFFIX -# -#Returns the configuration value or values (depending on context) for -#KEY_SUFFIX, if it exists, otherwise for KEY -# -#=cut - -# outmoded as soon as we shift to agentnum based config values -# well, mostly. still useful for e.g. late notices, etc. in that we want -# these to fall back to standard values -sub config_orbase { - my $self = shift; - return $self->_usecompat('config_orbase', @_) if use_confcompat; - - my( $name, $suffix ) = @_; - if ( $self->exists("${name}_$suffix") ) { - $self->config("${name}_$suffix"); - } else { - $self->config($name); - } -} - -=item invoice_templatenames - -Returns all possible invoice template names. - -=cut - -sub invoice_templatenames { - my( $self ) = @_; - - my %templatenames = (); - foreach my $item ( $self->config_items ) { - foreach my $base ( @base_items ) { - my( $main, $ext) = split(/\./, $base); - $ext = ".$ext" if $ext; - if ( $item->key =~ /^${main}_(.+)$ext$/ ) { - $templatenames{$1}++; - } - } - } - - sort keys %templatenames; - -} - -=item touch KEY [ AGENT ]; - -Creates the specified configuration key if it does not exist. - -=cut - -sub touch { - my $self = shift; - return $self->_usecompat('touch', @_) if use_confcompat; - - my($name, $agentnum) = @_; - unless ( $self->exists($name, $agentnum) ) { - $self->set($name, '', $agentnum); - } -} - -=item set KEY VALUE [ AGENTNUM ]; - -Sets the specified configuration key to the given value. - -=cut - -sub set { - my $self = shift; - return $self->_usecompat('set', @_) if use_confcompat; - - my($name, $value, $agentnum) = @_; - $value =~ /^(.*)$/s; - $value = $1; - - warn "[FS::Conf] SET $name\n" if $DEBUG; - - my $old = FS::Record::qsearchs('conf', {name => $name, agentnum => $agentnum}); - my $new = new FS::conf { $old ? $old->hash - : ('name' => $name, 'agentnum' => $agentnum) - }; - $new->value($value); - - my $error; - if ($old) { - $error = $new->replace($old); - } else { - $error = $new->insert; - } - - die "error setting configuration value: $error \n" - if $error; - -} - -=item set_binary KEY VALUE [ AGENTNUM ] - -Sets the specified configuration key to an exact scalar value which -can be retrieved with config_binary. - -=cut - -sub set_binary { - my $self = shift; - return if use_confcompat; - - my($name, $value, $agentnum)=@_; - $self->set($name, encode_base64($value), $agentnum); -} - -=item delete KEY [ AGENTNUM ]; - -Deletes the specified configuration key. - -=cut - -sub delete { - my $self = shift; - return $self->_usecompat('delete', @_) if use_confcompat; - - my($name, $agentnum) = @_; - if ( my $cv = FS::Record::qsearchs('conf', {name => $name, agentnum => $agentnum}) ) { - warn "[FS::Conf] DELETE $name\n"; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $cv->delete; - - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - die "error setting configuration value: $error \n" - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - } -} - -=item import_config_item CONFITEM DIR - - Imports the item specified by the CONFITEM (see L) into -the database as a conf record (see L). Imports from the file -in the directory DIR. - -=cut - -sub import_config_item { - my ($self,$item,$dir) = @_; - my $key = $item->key; - if ( -e "$dir/$key" && ! use_confcompat ) { - warn "Inserting $key\n" if $DEBUG; - local $/; - my $value = readline(new IO::File "$dir/$key"); - if ($item->type eq 'binary') { - $self->set_binary($key, $value); - }else{ - $self->set($key, $value); - } - }else { - warn "Not inserting $key\n" if $DEBUG; - } -} - -=item verify_config_item CONFITEM DIR - - Compares the item specified by the CONFITEM (see L) in -the database to the legacy file value in DIR. - -=cut - -sub verify_config_item { - return '' if use_confcompat; - my ($self,$item,$dir) = @_; - my $key = $item->key; - my $type = $item->type; - - my $compat = new FS::Conf_compat17 $dir; - my $error = ''; - - $error .= "$key fails existential comparison; " - if $self->exists($key) xor $compat->exists($key); - - unless ($type eq 'binary') { - { - no warnings; - $error .= "$key fails scalar comparison; " - unless scalar($self->config($key)) eq scalar($compat->config($key)); - } - - my (@new) = $self->config($key); - my (@old) = $compat->config($key); - unless ( scalar(@new) == scalar(@old)) { - $error .= "$key fails list comparison; "; - }else{ - my $r=1; - foreach (@old) { $r=0 if ($_ cmp shift(@new)); } - $error .= "$key fails list comparison; " - unless $r; - } - } - - if ($type eq 'binary') { - $error .= "$key fails binary comparison; " - unless scalar($self->config_binary($key)) eq scalar($compat->config_binary($key)); - } - - if ($error =~ /existential comparison/ && $item->section eq 'deprecated') { - my $proto; - for ( @config_items ) { $proto = $_; last if $proto->key eq $key; } - unless ($proto->key eq $key) { - warn "removed config item $error\n" if $DEBUG; - $error = ''; - } - } - - $error; -} - -#item _orbase_items OPTIONS -# -#Returns all of the possible extensible config items as FS::ConfItem objects. -#See #L. OPTIONS consists of name value pairs. Possible -#options include -# -# dir - the directory to search for configuration option files instead -# of using the conf records in the database -# -#cut - -#quelle kludge -sub _orbase_items { - my ($self, %opt) = @_; - - my $listmaker = sub { my $v = shift; - $v =~ s/_/!_/g; - if ( $v =~ /\.(png|eps)$/ ) { - $v =~ s/\./!_%./; - }else{ - $v .= '!_%'; - } - map { $_->name } - FS::Record::qsearch( 'conf', - {}, - '', - "WHERE name LIKE '$v' ESCAPE '!'" - ); - }; - - if (exists($opt{dir}) && $opt{dir}) { - $listmaker = sub { my $v = shift; - if ( $v =~ /\.(png|eps)$/ ) { - $v =~ s/\./_*./; - }else{ - $v .= '_*'; - } - map { basename $_ } glob($opt{dir}. "/$v" ); - }; - } - - ( map { - my $proto; - my $base = $_; - for ( @config_items ) { $proto = $_; last if $proto->key eq $base; } - die "don't know about $base items" unless $proto->key eq $base; - - map { new FS::ConfItem { - 'key' => $_, - 'section' => $proto->section, - 'description' => 'Alternate ' . $proto->description . ' See the billing documentation for details.', - 'type' => $proto->type, - }; - } &$listmaker($base); - } @base_items, - ); -} - -=item config_items - -Returns all of the possible global/default configuration items as -FS::ConfItem objects. See L. - -=cut - -sub config_items { - my $self = shift; - return $self->_usecompat('config_items', @_) if use_confcompat; - - ( @config_items, $self->_orbase_items(@_) ); -} - -=back - -=head1 SUBROUTINES - -=over 4 - -=item init-config DIR - -Imports the non-deprecated configuration items from DIR (1.7 compatible) -to conf records in the database. - -=cut - -sub init_config { - my $dir = shift; - - { - local $FS::UID::use_confcompat = 0; - my $conf = new FS::Conf; - foreach my $item ( $conf->config_items(dir => $dir) ) { - $conf->import_config_item($item, $dir); - my $error = $conf->verify_config_item($item, $dir); - return $error if $error; - } - - my $compat = new FS::Conf_compat17 $dir; - foreach my $item ( $compat->config_items ) { - my $error = $conf->verify_config_item($item, $dir); - return $error if $error; - } - } - - $FS::UID::use_confcompat = 0; - ''; #success -} - -=back - -=head1 BUGS - -If this was more than just crud that will never be useful outside Freeside I'd -worry that config_items is freeside-specific and icky. - -=head1 SEE ALSO - -"Configuration" in the web interface (config/config.cgi). - -=cut - -#Business::CreditCard -@card_types = ( - "VISA card", - "MasterCard", - "Discover card", - "American Express card", - "Diner's Club/Carte Blanche", - "enRoute", - "JCB", - "BankCard", - "Switch", - "Solo", -); - -@base_items = qw ( - invoice_template - invoice_latex - invoice_latexreturnaddress - invoice_latexfooter - invoice_latexsmallfooter - invoice_latexnotes - invoice_html - invoice_htmlreturnaddress - invoice_htmlfooter - invoice_htmlnotes - logo.png - logo.eps - ); - -@base_items = qw ( - invoice_template - invoice_latex - invoice_latexreturnaddress - invoice_latexfooter - invoice_latexsmallfooter - invoice_latexnotes - invoice_html - invoice_htmlreturnaddress - invoice_htmlfooter - invoice_htmlnotes - logo.png - logo.eps - ); - -@config_items = map { new FS::ConfItem $_ } ( - - { - 'key' => 'address', - 'section' => 'deprecated', - 'description' => 'This configuration option is no longer used. See invoice_template instead.', - 'type' => 'text', - }, - - { - 'key' => 'alerter_template', - 'section' => 'billing', - 'description' => 'Template file for billing method expiration alerts. See the billing documentation for details.', - 'type' => 'textarea', - }, - - { - 'key' => 'apacheip', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add an apache export instead. Used to be the current IP address to assign to new virtual hosts', - 'type' => 'text', - }, - - { - 'key' => 'encryption', - 'section' => 'billing', - 'description' => 'Enable encryption of credit cards.', - 'type' => 'checkbox', - }, - - { - 'key' => 'encryptionmodule', - 'section' => 'billing', - 'description' => 'Use which module for encryption?', - 'type' => 'text', - }, - - { - 'key' => 'encryptionpublickey', - 'section' => 'billing', - 'description' => 'Your RSA Public Key - Required if Encryption is turned on.', - 'type' => 'textarea', - }, - - { - 'key' => 'encryptionprivatekey', - 'section' => 'billing', - 'description' => 'Your RSA Private Key - Including this will enable the "Bill Now" feature. However if the system is compromised, a hacker can use this key to decode the stored credit card information. This is generally not a good idea.', - 'type' => 'textarea', - }, - - { - 'key' => 'business-onlinepayment', - 'section' => 'billing', - 'description' => 'Business::OnlinePayment support, at least three lines: processor, login, and password. An optional fourth line specifies the action or actions (multiple actions are separated with `,\': for example: `Authorization Only, Post Authorization\'). Optional additional lines are passed to Business::OnlinePayment as %processor_options.', - 'type' => 'textarea', - }, - - { - 'key' => 'business-onlinepayment-ach', - 'section' => 'billing', - 'description' => 'Alternate Business::OnlinePayment support for ACH transactions (defaults to regular business-onlinepayment). At least three lines: processor, login, and password. An optional fourth line specifies the action or actions (multiple actions are separated with `,\': for example: `Authorization Only, Post Authorization\'). Optional additional lines are passed to Business::OnlinePayment as %processor_options.', - 'type' => 'textarea', - }, - - { - 'key' => 'business-onlinepayment-description', - 'section' => 'billing', - 'description' => 'String passed as the description field to Business::OnlinePayment. Evaluated as a double-quoted perl string, with the following variables available: $agent (the agent name), and $pkgs (a comma-separated list of packages for which these charges apply)', - 'type' => 'text', - }, - - { - 'key' => 'business-onlinepayment-email-override', - 'section' => 'billing', - 'description' => 'Email address used instead of customer email address when submitting a BOP transaction.', - 'type' => 'text', - }, - - { - 'key' => 'business-onlinepayment-email_customer', - 'section' => 'billing', - 'description' => 'Controls the "email_customer" flag used by some Business::OnlinePayment processors to enable customer receipts.', - 'type' => 'checkbox', - }, - - { - 'key' => 'countrydefault', - 'section' => 'UI', - 'description' => 'Default two-letter country code (if not supplied, the default is `US\')', - 'type' => 'text', - }, - - { - 'key' => 'date_format', - 'section' => 'UI', - 'description' => 'Format for displaying dates', - 'type' => 'select', - 'select_hash' => [ - '%m/%d/%Y' => 'MM/DD/YYYY', - '%Y/%m/%d' => 'YYYY/MM/DD', - ], - }, - - { - 'key' => 'deletecustomers', - 'section' => 'UI', - 'description' => 'Enable customer deletions. Be very careful! Deleting a customer will remove all traces that this customer ever existed! It should probably only be used when auditing a legacy database. Normally, you cancel all of a customers\' packages if they cancel service.', - 'type' => 'checkbox', - }, - - { - 'key' => 'deletepayments', - 'section' => 'billing', - 'description' => 'Enable deletion of unclosed payments. Really, with voids this is pretty much not recommended in any situation anymore. Be very careful! Only delete payments that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a payment is deleted.', - 'type' => [qw( checkbox text )], - }, - - { - 'key' => 'deletecredits', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, now controlled by ACLs. Used to enable deletion of unclosed credits. Be very careful! Only delete credits that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a credit is deleted.', - 'type' => [qw( checkbox text )], - }, - - { - 'key' => 'deleterefunds', - 'section' => 'billing', - 'description' => 'Enable deletion of unclosed refunds. Be very careful! Only delete refunds that were data-entry errors, not adjustments.', - 'type' => 'checkbox', - }, - - { - 'key' => 'dirhash', - 'section' => 'shell', - 'description' => 'Optional numeric value to control directory hashing. If positive, hashes directories for the specified number of levels from the front of the username. If negative, hashes directories for the specified number of levels from the end of the username. Some examples:

  • 1: user -> /home/u/user
  • 2: user -> /home/u/s/user
  • -1: user -> /home/r/user
  • -2: user -> home/r/e/user
', - 'type' => 'text', - }, - - { - 'key' => 'disable_customer_referrals', - 'section' => 'UI', - 'description' => 'Disable new customer-to-customer referrals in the web interface', - 'type' => 'checkbox', - }, - - { - 'key' => 'editreferrals', - 'section' => 'UI', - 'description' => 'Enable advertising source modification for existing customers', - 'type' => 'checkbox', - }, - - { - 'key' => 'emailinvoiceonly', - 'section' => 'billing', - 'description' => 'Disables postal mail invoices', - 'type' => 'checkbox', - }, - - { - 'key' => 'disablepostalinvoicedefault', - 'section' => 'billing', - 'description' => 'Disables postal mail invoices as the default option in the UI. Be careful not to setup customers which are not sent invoices. See emailinvoiceauto.', - 'type' => 'checkbox', - }, - - { - 'key' => 'emailinvoiceauto', - 'section' => 'billing', - 'description' => 'Automatically adds new accounts to the email invoice list', - 'type' => 'checkbox', - }, - - { - 'key' => 'emailinvoiceautoalways', - 'section' => 'billing', - 'description' => 'Automatically adds new accounts to the email invoice list even when the list contains email addresses', - 'type' => 'checkbox', - }, - - { - 'key' => 'exclude_ip_addr', - 'section' => '', - 'description' => 'Exclude these from the list of available broadband service IP addresses. (One per line)', - 'type' => 'textarea', - }, - - { - 'key' => 'hidecancelledpackages', - 'section' => 'UI', - 'description' => 'Prevent cancelled packages from showing up in listings (though they will still be in the database)', - 'type' => 'checkbox', - }, - - { - 'key' => 'hidecancelledcustomers', - 'section' => 'UI', - 'description' => 'Prevent customers with only cancelled packages from showing up in listings (though they will still be in the database)', - 'type' => 'checkbox', - }, - - { - 'key' => 'home', - 'section' => 'shell', - 'description' => 'For new users, prefixed to username to create a directory name. Should have a leading but not a trailing slash.', - 'type' => 'text', - }, - - { - 'key' => 'invoice_from', - 'section' => 'required', - 'description' => 'Return address on email invoices', - 'type' => 'text', - }, - - { - 'key' => 'invoice_template', - 'section' => 'billing', - 'description' => 'Text template file for invoices. Used if no invoice_html template is defined, and also seen by users using non-HTML capable mail clients. See the billing documentation for details.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_html', - 'section' => 'billing', - 'description' => 'Optional HTML template for invoices. See the billing documentation for details.', - - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_htmlnotes', - 'section' => 'billing', - 'description' => 'Notes section for HTML invoices. Defaults to the same data in invoice_latexnotes if not specified.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_htmlfooter', - 'section' => 'billing', - 'description' => 'Footer for HTML invoices. Defaults to the same data in invoice_latexfooter if not specified.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_htmlreturnaddress', - 'section' => 'billing', - 'description' => 'Return address for HTML invoices. Defaults to the same data in invoice_latexreturnaddress if not specified.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_latex', - 'section' => 'billing', - 'description' => 'Optional LaTeX template for typeset PostScript invoices. See the billing documentation for details.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_latexnotes', - 'section' => 'billing', - 'description' => 'Notes section for LaTeX typeset PostScript invoices.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_latexfooter', - 'section' => 'billing', - 'description' => 'Footer for LaTeX typeset PostScript invoices.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_latexreturnaddress', - 'section' => 'billing', - 'description' => 'Return address for LaTeX typeset PostScript invoices.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_latexsmallfooter', - 'section' => 'billing', - 'description' => 'Optional small footer for multi-page LaTeX typeset PostScript invoices.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_email_pdf', - 'section' => 'billing', - 'description' => 'Send PDF invoice as an attachment to emailed invoices. By default, includes the plain text invoice as the email body, unless invoice_email_pdf_note is set.', - 'type' => 'checkbox' - }, - - { - 'key' => 'invoice_email_pdf_note', - 'section' => 'billing', - 'description' => 'If defined, this text will replace the default plain text invoice as the body of emailed PDF invoices.', - 'type' => 'textarea' - }, - - - { - 'key' => 'invoice_default_terms', - 'section' => 'billing', - 'description' => 'Optional default invoice term, used to calculate a due date printed on invoices.', - 'type' => 'select', - 'select_enum' => [ '', 'Payable upon receipt', 'Net 0', 'Net 10', 'Net 15', 'Net 20', 'Net 30', 'Net 45', 'Net 60' ], - }, - - { - 'key' => 'invoice_sections', - 'section' => 'billing', - 'description' => 'Split invoice into sections and label according to package type when enabled.', - 'type' => 'checkbox', - }, - - { - 'key' => 'payment_receipt_email', - 'section' => 'billing', - 'description' => 'Template file for payment receipts. Payment receipts are sent to the customer email invoice destination(s) when a payment is received. See the Text::Template documentation for details on the template substitution language. The following variables are available:
  • $date
  • $name
  • $paynum - Freeside payment number
  • $paid - Amount of payment
  • $payby - Payment type (Card, Check, Electronic check, etc.)
  • $payinfo - Masked credit card number or check number
  • $balance - New balance
', - 'type' => [qw( checkbox textarea )], - }, - - { - 'key' => 'lpr', - 'section' => 'required', - 'description' => 'Print command for paper invoices, for example `lpr -h\'', - 'type' => 'text', - }, - - { - 'key' => 'lpr-postscript_prefix', - 'section' => 'billing', - 'description' => 'Raw printer commands prepended to the beginning of postscript print jobs (evaluated as a double-quoted perl string - backslash escapes are available)', - 'type' => 'text', - }, - - { - 'key' => 'lpr-postscript_suffix', - 'section' => 'billing', - 'description' => 'Raw printer commands added to the end of postscript print jobs (evaluated as a double-quoted perl string - backslash escapes are available)', - 'type' => 'text', - }, - - { - 'key' => 'money_char', - 'section' => '', - 'description' => 'Currency symbol - defaults to `$\'', - 'type' => 'text', - }, - - { - 'key' => 'defaultrecords', - 'section' => 'BIND', - 'description' => 'DNS entries to add automatically when creating a domain', - 'type' => 'editlist', - 'editlist_parts' => [ { type=>'text' }, - { type=>'immutable', value=>'IN' }, - { type=>'select', - select_enum=>{ map { $_=>$_ } qw(A CNAME MX NS TXT)} }, - { type=> 'text' }, ], - }, - - { - 'key' => 'passwordmin', - 'section' => 'password', - 'description' => 'Minimum password length (default 6)', - 'type' => 'text', - }, - - { - 'key' => 'passwordmax', - 'section' => 'password', - 'description' => 'Maximum password length (default 8) (don\'t set this over 12 if you need to import or export crypt() passwords)', - 'type' => 'text', - }, - - { - 'key' => 'password-noampersand', - 'section' => 'password', - 'description' => 'Disallow ampersands in passwords', - 'type' => 'checkbox', - }, - - { - 'key' => 'password-noexclamation', - 'section' => 'password', - 'description' => 'Disallow exclamations in passwords (Not setting this could break old text Livingston or Cistron Radius servers)', - 'type' => 'checkbox', - }, - - { - 'key' => 'referraldefault', - 'section' => 'UI', - 'description' => 'Default referral, specified by refnum', - 'type' => 'text', - }, - -# { -# 'key' => 'registries', -# 'section' => 'required', -# 'description' => 'Directory which contains domain registry information. Each registry is a directory.', -# }, - - { - 'key' => 'maxsearchrecordsperpage', - 'section' => 'UI', - 'description' => 'If set, number of search records to return per page.', - 'type' => 'text', - }, - - { - 'key' => 'session-start', - 'section' => 'session', - 'description' => 'If defined, the command which is executed on the Freeside machine when a session begins. The contents of the file are treated as a double-quoted perl string, with the following variables available: $ip, $nasip and $nasfqdn, which are the IP address of the starting session, and the IP address and fully-qualified domain name of the NAS this session is on.', - 'type' => 'text', - }, - - { - 'key' => 'session-stop', - 'section' => 'session', - 'description' => 'If defined, the command which is executed on the Freeside machine when a session ends. The contents of the file are treated as a double-quoted perl string, with the following variables available: $ip, $nasip and $nasfqdn, which are the IP address of the starting session, and the IP address and fully-qualified domain name of the NAS this session is on.', - 'type' => 'text', - }, - - { - 'key' => 'shells', - 'section' => 'shell', - 'description' => 'Legal shells (think /etc/shells). You probably want to `cut -d: -f7 /etc/passwd | sort | uniq\' initially so that importing doesn\'t fail with `Illegal shell\' errors, then remove any special entries afterwords. A blank line specifies that an empty shell is permitted.', - 'type' => 'textarea', - }, - - { - 'key' => 'showpasswords', - 'section' => 'UI', - 'description' => 'Display unencrypted user passwords in the backend (employee) web interface', - 'type' => 'checkbox', - }, - - { - 'key' => 'signupurl', - 'section' => 'UI', - 'description' => 'if you are using customer-to-customer referrals, and you enter the URL of your signup server CGI, the customer view screen will display a customized link to the signup server with the appropriate customer as referral', - 'type' => 'text', - }, - - { - 'key' => 'smtpmachine', - 'section' => 'required', - 'description' => 'SMTP relay for Freeside\'s outgoing mail', - 'type' => 'text', - }, - - { - 'key' => 'soadefaultttl', - 'section' => 'BIND', - 'description' => 'SOA default TTL for new domains.', - 'type' => 'text', - }, - - { - 'key' => 'soaemail', - 'section' => 'BIND', - 'description' => 'SOA email for new domains, in BIND form (`.\' instead of `@\'), with trailing `.\'', - 'type' => 'text', - }, - - { - 'key' => 'soaexpire', - 'section' => 'BIND', - 'description' => 'SOA expire for new domains', - 'type' => 'text', - }, - - { - 'key' => 'soamachine', - 'section' => 'BIND', - 'description' => 'SOA machine for new domains, with trailing `.\'', - 'type' => 'text', - }, - - { - 'key' => 'soarefresh', - 'section' => 'BIND', - 'description' => 'SOA refresh for new domains', - 'type' => 'text', - }, - - { - 'key' => 'soaretry', - 'section' => 'BIND', - 'description' => 'SOA retry for new domains', - 'type' => 'text', - }, - - { - 'key' => 'statedefault', - 'section' => 'UI', - 'description' => 'Default state or province (if not supplied, the default is `CA\')', - 'type' => 'text', - }, - - { - 'key' => 'unsuspendauto', - 'section' => 'billing', - 'description' => 'Enables the automatic unsuspension of suspended packages when a customer\'s balance due changes from positive to zero or negative as the result of a payment or credit', - 'type' => 'checkbox', - }, - - { - 'key' => 'unsuspend-always_adjust_next_bill_date', - 'section' => 'billing', - 'description' => 'Global override that causes unsuspensions to always adjust the next bill date under any circumstances. This is now controlled on a per-package bases - probably best not to use this option unless you are a legacy installation that requires this behaviour.', - 'type' => 'checkbox', - }, - - { - 'key' => 'usernamemin', - 'section' => 'username', - 'description' => 'Minimum username length (default 2)', - 'type' => 'text', - }, - - { - 'key' => 'usernamemax', - 'section' => 'username', - 'description' => 'Maximum username length', - 'type' => 'text', - }, - - { - 'key' => 'username-ampersand', - 'section' => 'username', - 'description' => 'Allow the ampersand character (&) in usernames. Be careful when using this option in conjunction with exports which execute shell commands, as the ampersand will be interpreted by the shell if not quoted.', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-letter', - 'section' => 'username', - 'description' => 'Usernames must contain at least one letter', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-letterfirst', - 'section' => 'username', - 'description' => 'Usernames must start with a letter', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-noperiod', - 'section' => 'username', - 'description' => 'Disallow periods in usernames', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-nounderscore', - 'section' => 'username', - 'description' => 'Disallow underscores in usernames', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-nodash', - 'section' => 'username', - 'description' => 'Disallow dashes in usernames', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-uppercase', - 'section' => 'username', - 'description' => 'Allow uppercase characters in usernames. Not recommended for use with FreeRADIUS with MySQL backend, which is case-insensitive by default.', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-percent', - 'section' => 'username', - 'description' => 'Allow the percent character (%) in usernames.', - 'type' => 'checkbox', - }, - - { - 'key' => 'safe-part_bill_event', - 'section' => 'UI', - 'description' => 'Validates invoice event expressions against a preset list. Useful for webdemos, annoying to powerusers.', - 'type' => 'checkbox', - }, - - { - 'key' => 'show_ss', - 'section' => 'UI', - 'description' => 'Turns on display/collection of social security numbers in the web interface. Sometimes required by electronic check (ACH) processors.', - 'type' => 'checkbox', - }, - - { - 'key' => 'show_stateid', - 'section' => 'UI', - 'description' => "Turns on display/collection of driver's license/state issued id numbers in the web interface. Sometimes required by electronic check (ACH) processors.", - 'type' => 'checkbox', - }, - - { - 'key' => 'show_bankstate', - 'section' => 'UI', - 'description' => "Turns on display/collection of state for bank accounts in the web interface. Sometimes required by electronic check (ACH) processors.", - 'type' => 'checkbox', - }, - - { - 'key' => 'agent_defaultpkg', - 'section' => 'UI', - 'description' => 'Setting this option will cause new packages to be available to all agent types by default.', - 'type' => 'checkbox', - }, - - { - 'key' => 'legacy_link', - 'section' => 'UI', - 'description' => 'Display options in the web interface to link legacy pre-Freeside services.', - 'type' => 'checkbox', - }, - - { - 'key' => 'legacy_link-steal', - 'section' => 'UI', - 'description' => 'Allow "stealing" an already-audited service from one customer (or package) to another using the link function.', - 'type' => 'checkbox', - }, - - { - 'key' => 'queue_dangerous_controls', - 'section' => 'UI', - 'description' => 'Enable queue modification controls on account pages and for new jobs. Unless you are a developer working on new export code, you should probably leave this off to avoid causing provisioning problems.', - 'type' => 'checkbox', - }, - - { - 'key' => 'security_phrase', - 'section' => 'password', - 'description' => 'Enable the tracking of a "security phrase" with each account. Not recommended, as it is vulnerable to social engineering.', - 'type' => 'checkbox', - }, - - { - 'key' => 'locale', - 'section' => 'UI', - 'description' => 'Message locale', - 'type' => 'select', - 'select_enum' => [ qw(en_US) ], - }, - - { - 'key' => 'signup_server-payby', - 'section' => '', - 'description' => 'Acceptable payment types for the signup server', - 'type' => 'selectmultiple', - 'select_enum' => [ qw(CARD DCRD CHEK DCHK LECB PREPAY BILL COMP) ], - }, - - { - 'key' => 'signup_server-default_agentnum', - 'section' => '', - 'description' => 'Default agent for the signup server', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::agent; - map { $_->agentnum => $_->agent } - FS::Record::qsearch('agent', { disabled=>'' } ); - }, - 'option_sub' => sub { require FS::Record; - require FS::agent; - my $agent = FS::Record::qsearchs( - 'agent', { 'agentnum'=>shift } - ); - $agent ? $agent->agent : ''; - }, - }, - - { - 'key' => 'signup_server-default_refnum', - 'section' => '', - 'description' => 'Default advertising source for the signup server', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::part_referral; - map { $_->refnum => $_->referral } - FS::Record::qsearch( 'part_referral', - { 'disabled' => '' } - ); - }, - 'option_sub' => sub { require FS::Record; - require FS::part_referral; - my $part_referral = FS::Record::qsearchs( - 'part_referral', { 'refnum'=>shift } ); - $part_referral ? $part_referral->referral : ''; - }, - }, - - { - 'key' => 'signup_server-default_pkgpart', - 'section' => '', - 'description' => 'Default pakcage for the signup server', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::part_pkg; - map { $_->pkgpart => $_->pkg.' - '.$_->comment } - FS::Record::qsearch( 'part_pkg', - { 'disabled' => ''} - ); - }, - 'option_sub' => sub { require FS::Record; - require FS::part_pkg; - my $part_pkg = FS::Record::qsearchs( - 'part_pkg', { 'pkgpart'=>shift } - ); - $part_pkg - ? $part_pkg->pkg.' - '.$part_pkg->comment - : ''; - }, - }, - - { - 'key' => 'show-msgcat-codes', - 'section' => 'UI', - 'description' => 'Show msgcat codes in error messages. Turn this option on before reporting errors to the mailing list.', - 'type' => 'checkbox', - }, - - { - 'key' => 'signup_server-realtime', - 'section' => '', - 'description' => 'Run billing for signup server signups immediately, and do not provision accounts which subsequently have a balance.', - 'type' => 'checkbox', - }, - { - 'key' => 'signup_server-classnum2', - 'section' => '', - 'description' => 'Package Class for first optional purchase', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::pkg_class; - map { $_->classnum => $_->classname } - FS::Record::qsearch('pkg_class', {} ); - }, - 'option_sub' => sub { require FS::Record; - require FS::pkg_class; - my $pkg_class = FS::Record::qsearchs( - 'pkg_class', { 'classnum'=>shift } - ); - $pkg_class ? $pkg_class->classname : ''; - }, - }, - - { - 'key' => 'signup_server-classnum3', - 'section' => '', - 'description' => 'Package Class for second optional purchase', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::pkg_class; - map { $_->classnum => $_->classname } - FS::Record::qsearch('pkg_class', {} ); - }, - 'option_sub' => sub { require FS::Record; - require FS::pkg_class; - my $pkg_class = FS::Record::qsearchs( - 'pkg_class', { 'classnum'=>shift } - ); - $pkg_class ? $pkg_class->classname : ''; - }, - }, - - { - 'key' => 'backend-realtime', - 'section' => '', - 'description' => 'Run billing for backend signups immediately.', - 'type' => 'checkbox', - }, - - { - 'key' => 'declinetemplate', - 'section' => 'billing', - 'description' => 'Template file for credit card decline emails.', - 'type' => 'textarea', - }, - - { - 'key' => 'emaildecline', - 'section' => 'billing', - 'description' => 'Enable emailing of credit card decline notices.', - 'type' => 'checkbox', - }, - - { - 'key' => 'emaildecline-exclude', - 'section' => 'billing', - 'description' => 'List of error messages that should not trigger email decline notices, one per line.', - 'type' => 'textarea', - }, - - { - 'key' => 'cancelmessage', - 'section' => 'billing', - 'description' => 'Template file for cancellation emails.', - 'type' => 'textarea', - }, - - { - 'key' => 'cancelsubject', - 'section' => 'billing', - 'description' => 'Subject line for cancellation emails.', - 'type' => 'text', - }, - - { - 'key' => 'emailcancel', - 'section' => 'billing', - 'description' => 'Enable emailing of cancellation notices. Make sure to fill in the cancelmessage and cancelsubject configuration values as well.', - 'type' => 'checkbox', - }, - - { - 'key' => 'require_cardname', - 'section' => 'billing', - 'description' => 'Require an "Exact name on card" to be entered explicitly; don\'t default to using the first and last name.', - 'type' => 'checkbox', - }, - - { - 'key' => 'enable_taxclasses', - 'section' => 'billing', - 'description' => 'Enable per-package tax classes', - 'type' => 'checkbox', - }, - - { - 'key' => 'require_taxclasses', - 'section' => 'billing', - 'description' => 'Require a taxclass to be entered for every package', - 'type' => 'checkbox', - }, - - { - 'key' => 'welcome_email', - 'section' => '', - 'description' => 'Template file for welcome email. Welcome emails are sent to the customer email invoice destination(s) each time a svc_acct record is created. See the Text::Template documentation for details on the template substitution language. The following variables are available
  • $username
  • $password
  • $first
  • $last
  • $pkg
', - 'type' => 'textarea', - 'per_agent' => 1, - }, - - { - 'key' => 'welcome_email-from', - 'section' => '', - 'description' => 'From: address header for welcome email', - 'type' => 'text', - 'per_agent' => 1, - }, - - { - 'key' => 'welcome_email-subject', - 'section' => '', - 'description' => 'Subject: header for welcome email', - 'type' => 'text', - 'per_agent' => 1, - }, - - { - 'key' => 'welcome_email-mimetype', - 'section' => '', - 'description' => 'MIME type for welcome email', - 'type' => 'select', - 'select_enum' => [ 'text/plain', 'text/html' ], - 'per_agent' => 1, - }, - - { - 'key' => 'welcome_letter', - 'section' => '', - 'description' => 'Optional LaTex template file for a printed welcome letter. A welcome letter is printed the first time a cust_pkg record is created. See the Text::Template documentation and the billing documentation for details on the template substitution language. A variable exists for each fieldname in the customer record ($first, $last, etc). The following additional variables are available
  • $payby - a friendler represenation of the field
  • $payinfo - the masked payment information
  • $expdate - the time at which the payment method expires (a UNIX timestamp)
  • $returnaddress - the invoice return address for this customer\'s agent
', - 'type' => 'textarea', - }, - - { - 'key' => 'warning_email', - 'section' => '', - 'description' => 'Template file for warning email. Warning emails are sent to the customer email invoice destination(s) each time a svc_acct record has its usage drop below a threshold or 0. See the Text::Template documentation for details on the template substitution language. The following variables are available
  • $username
  • $password
  • $first
  • $last
  • $pkg
  • $column
  • $amount
  • $threshold
', - 'type' => 'textarea', - }, - - { - 'key' => 'warning_email-from', - 'section' => '', - 'description' => 'From: address header for warning email', - 'type' => 'text', - }, - - { - 'key' => 'warning_email-cc', - 'section' => '', - 'description' => 'Additional recipient(s) (comma separated) for warning email when remaining usage reaches zero.', - 'type' => 'text', - }, - - { - 'key' => 'warning_email-subject', - 'section' => '', - 'description' => 'Subject: header for warning email', - 'type' => 'text', - }, - - { - 'key' => 'warning_email-mimetype', - 'section' => '', - 'description' => 'MIME type for warning email', - 'type' => 'select', - 'select_enum' => [ 'text/plain', 'text/html' ], - }, - - { - 'key' => 'payby', - 'section' => 'billing', - 'description' => 'Available payment types.', - 'type' => 'selectmultiple', - 'select_enum' => [ qw(CARD DCRD CHEK DCHK LECB BILL CASH WEST MCRD COMP) ], - }, - - { - 'key' => 'payby-default', - 'section' => 'UI', - 'description' => 'Default payment type. HIDE disables display of billing information and sets customers to BILL.', - 'type' => 'select', - 'select_enum' => [ '', qw(CARD DCRD CHEK DCHK LECB BILL CASH WEST MCRD COMP HIDE) ], - }, - - { - 'key' => 'paymentforcedtobatch', - 'section' => 'UI', - 'description' => 'Causes per customer payment entry to be forced to a batch processor rather than performed realtime.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-notes', - 'section' => 'UI', - 'description' => 'Extra HTML to be displayed on the Account View screen.', - 'type' => 'textarea', - }, - - { - 'key' => 'radius-password', - 'section' => '', - 'description' => 'RADIUS attribute for plain-text passwords.', - 'type' => 'select', - 'select_enum' => [ 'Password', 'User-Password' ], - }, - - { - 'key' => 'radius-ip', - 'section' => '', - 'description' => 'RADIUS attribute for IP addresses.', - 'type' => 'select', - 'select_enum' => [ 'Framed-IP-Address', 'Framed-Address' ], - }, - - { - 'key' => 'svc_acct-alldomains', - 'section' => '', - 'description' => 'Allow accounts to select any domain in the database. Normally accounts can only select from the domain set in the service definition and those purchased by the customer.', - 'type' => 'checkbox', - }, - - { - 'key' => 'dump-scpdest', - 'section' => '', - 'description' => 'destination for scp database dumps: user@host:/path', - 'type' => 'text', - }, - - { - 'key' => 'dump-pgpid', - 'section' => '', - 'description' => "Optional PGP public key user or key id for database dumps. The public key should exist on the freeside user's public keyring, and the gpg binary and GnuPG perl module should be installed.", - 'type' => 'text', - }, - - { - 'key' => 'cvv-save', - 'section' => 'billing', - 'description' => 'Save CVV2 information after the initial transaction for the selected credit card types. Enabling this option may be in violation of your merchant agreement(s), so please check them carefully before enabling this option for any credit card types.', - 'type' => 'selectmultiple', - 'select_enum' => \@card_types, - }, - - { - 'key' => 'allow_negative_charges', - 'section' => 'billing', - 'description' => 'Allow negative charges. Normally not used unless importing data from a legacy system that requires this.', - 'type' => 'checkbox', - }, - { - 'key' => 'auto_unset_catchall', - 'section' => '', - 'description' => 'When canceling a svc_acct that is the email catchall for one or more svc_domains, automatically set their catchall fields to null. If this option is not set, the attempt will simply fail.', - 'type' => 'checkbox', - }, - - { - 'key' => 'system_usernames', - 'section' => 'username', - 'description' => 'A list of system usernames that cannot be edited or removed, one per line. Use a bare username to prohibit modification/deletion of the username in any domain, or username@domain to prohibit modification/deletetion of a specific username and domain.', - 'type' => 'textarea', - }, - - { - 'key' => 'cust_pkg-change_svcpart', - 'section' => '', - 'description' => "When changing packages, move services even if svcparts don't match between old and new pacakge definitions.", - 'type' => 'checkbox', - }, - - { - 'key' => 'disable_autoreverse', - 'section' => 'BIND', - 'description' => 'Disable automatic synchronization of reverse-ARPA entries.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_www-enable_subdomains', - 'section' => '', - 'description' => 'Enable selection of specific subdomains for virtual host creation.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_www-usersvc_svcpart', - 'section' => '', - 'description' => 'Allowable service definition svcparts for virtual hosts, one per line.', - 'type' => 'textarea', - }, - - { - 'key' => 'selfservice_server-primary_only', - 'section' => '', - 'description' => 'Only allow primary accounts to access self-service functionality.', - 'type' => 'checkbox', - }, - - { - 'key' => 'card_refund-days', - 'section' => 'billing', - 'description' => 'After a payment, the number of days a refund link will be available for that payment. Defaults to 120.', - 'type' => 'text', - }, - - { - 'key' => 'agent-showpasswords', - 'section' => '', - 'description' => 'Display unencrypted user passwords in the agent (reseller) interface', - 'type' => 'checkbox', - }, - - { - 'key' => 'global_unique-username', - 'section' => 'username', - 'description' => 'Global username uniqueness control: none (usual setting - check uniqueness per exports), username (all usernames are globally unique, regardless of domain or exports), or username@domain (all username@domain pairs are globally unique, regardless of exports). disabled turns off duplicate checking completely and is STRONGLY NOT RECOMMENDED unless you REALLY need to turn this off.', - 'type' => 'select', - 'select_enum' => [ 'none', 'username', 'username@domain', 'disabled' ], - }, - - { - 'key' => 'svc_external-skip_manual', - 'section' => 'UI', - 'description' => 'When provisioning svc_external services, skip manual entry of id and title fields in the UI. Usually used in conjunction with an export that populates these fields (i.e. artera_turbo).', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_external-display_type', - 'section' => 'UI', - 'description' => 'Select a specific svc_external type to enable some UI changes specific to that type (i.e. artera_turbo).', - 'type' => 'select', - 'select_enum' => [ 'generic', 'artera_turbo', ], - }, - - { - 'key' => 'ticket_system', - 'section' => '', - 'description' => 'Ticketing system integration. RT_Internal uses the built-in RT ticketing system (see the integrated ticketing installation instructions). RT_External accesses an external RT installation in a separate database (local or remote).', - 'type' => 'select', - #'select_enum' => [ '', qw(RT_Internal RT_Libs RT_External) ], - 'select_enum' => [ '', qw(RT_Internal RT_External) ], - }, - - { - 'key' => 'ticket_system-default_queueid', - 'section' => '', - 'description' => 'Default queue used when creating new customer tickets.', - 'type' => 'select-sub', - 'options_sub' => sub { - my $conf = new FS::Conf; - if ( $conf->config('ticket_system') ) { - eval "use FS::TicketSystem;"; - die $@ if $@; - FS::TicketSystem->queues(); - } else { - (); - } - }, - 'option_sub' => sub { - my $conf = new FS::Conf; - if ( $conf->config('ticket_system') ) { - eval "use FS::TicketSystem;"; - die $@ if $@; - FS::TicketSystem->queue(shift); - } else { - ''; - } - }, - }, - - { - 'key' => 'ticket_system-priority_reverse', - 'section' => '', - 'description' => 'Enable this to consider lower numbered priorities more important. A bad habit we picked up somewhere. You probably want to avoid it and use the default.', - 'type' => 'checkbox', - }, - - { - 'key' => 'ticket_system-custom_priority_field', - 'section' => '', - 'description' => 'Custom field from the ticketing system to use as a custom priority classification.', - 'type' => 'text', - }, - - { - 'key' => 'ticket_system-custom_priority_field-values', - 'section' => '', - 'description' => 'Values for the custom field from the ticketing system to break down and sort customer ticket lists.', - 'type' => 'textarea', - }, - - { - 'key' => 'ticket_system-custom_priority_field_queue', - 'section' => '', - 'description' => 'Ticketing system queue in which the custom field specified in ticket_system-custom_priority_field is located.', - 'type' => 'text', - }, - - { - 'key' => 'ticket_system-rt_external_datasrc', - 'section' => '', - 'description' => 'With external RT integration, the DBI data source for the external RT installation, for example, DBI:Pg:user=rt_user;password=rt_word;host=rt.example.com;dbname=rt', - 'type' => 'text', - - }, - - { - 'key' => 'ticket_system-rt_external_url', - 'section' => '', - 'description' => 'With external RT integration, the URL for the external RT installation, for example, https://rt.example.com/rt', - 'type' => 'text', - }, - - { - 'key' => 'company_name', - 'section' => 'required', - 'description' => 'Your company name', - 'type' => 'text', - }, - - { - 'key' => 'company_address', - 'section' => 'required', - 'description' => 'Your company address', - 'type' => 'textarea', - }, - - { - 'key' => 'address2-search', - 'section' => 'UI', - 'description' => 'Enable a "Unit" search box which searches the second address field. Useful for multi-tenant applications. See also: cust_main-require_address2', - 'type' => 'checkbox', - }, - - { - 'key' => 'cust_main-require_address2', - 'section' => 'UI', - 'description' => 'Second address field is required (on service address only, if billing and service addresses differ). Also enables "Unit" labeling of address2 on customer view and edit pages. Useful for multi-tenant applications. See also: address2-search', - 'type' => 'checkbox', - }, - - { 'key' => 'referral_credit', - 'section' => 'billing', - 'description' => "Enables one-time referral credits in the amount of one month referred customer's recurring fee (irregardless of frequency).", - 'type' => 'checkbox', - }, - - { 'key' => 'selfservice_server-cache_module', - 'section' => '', - 'description' => 'Module used to store self-service session information. All modules handle any number of self-service servers. Cache::SharedMemoryCache is appropriate for a single database / single Freeside server. Cache::FileCache is useful for multiple databases on a single server, or when IPC::ShareLite is not available (i.e. FreeBSD).', # _Database stores session information in the database and is appropriate for multiple Freeside servers, but may be slower.', - 'type' => 'select', - 'select_enum' => [ 'Cache::SharedMemoryCache', 'Cache::FileCache', ], # '_Database' ], - }, - - { - 'key' => 'hylafax', - 'section' => '', - 'description' => 'Options for a HylaFAX server to enable the FAX invoice destination. They should be in the form of a space separated list of arguments to the Fax::Hylafax::Client::sendfax subroutine. You probably shouldn\'t override things like \'docfile\'. *Note* Only supported when using typeset invoices (see the invoice_latex configuration option).', - 'type' => [qw( checkbox textarea )], - }, - - { - 'key' => 'svc_acct-usage_suspend', - 'section' => 'billing', - 'description' => 'Suspends the package an account belongs to when svc_acct.seconds or a bytecount is decremented to 0 or below (accounts with an empty seconds and up|down|totalbytes value are ignored). Typically used in conjunction with prepaid packages and freeside-sqlradius-radacctd.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-usage_unsuspend', - 'section' => 'billing', - 'description' => 'Unuspends the package an account belongs to when svc_acct.seconds or a bytecount is incremented from 0 or below to a positive value (accounts with an empty seconds and up|down|totalbytes value are ignored). Typically used in conjunction with prepaid packages and freeside-sqlradius-radacctd.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-usage_threshold', - 'section' => 'billing', - 'description' => 'The threshold (expressed as percentage) of acct.seconds or acct.up|down|totalbytes at which a warning message is sent to a service holder. Typically used in conjunction with prepaid packages and freeside-sqlradius-radacctd. Defaults to 80.', - 'type' => 'text', - }, - - { - 'key' => 'cust-fields', - 'section' => 'UI', - 'description' => 'Which customer fields to display on reports by default', - 'type' => 'select', - 'select_hash' => [ FS::ConfDefaults->cust_fields_avail() ], - }, - - { - 'key' => 'cust_pkg-display_times', - 'section' => 'UI', - 'description' => 'Display full timestamps (not just dates) for customer packages. Useful if you are doing real-time things like hourly prepaid.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-edit_uid', - 'section' => 'shell', - 'description' => 'Allow UID editing.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-edit_gid', - 'section' => 'shell', - 'description' => 'Allow GID editing.', - 'type' => 'checkbox', - }, - - { - 'key' => 'zone-underscore', - 'section' => 'BIND', - 'description' => 'Allow underscores in zone names. As underscores are illegal characters in zone names, this option is not recommended.', - 'type' => 'checkbox', - }, - - { - 'key' => 'echeck-nonus', - 'section' => 'billing', - 'description' => 'Disable ABA-format account checking for Electronic Check payment info', - 'type' => 'checkbox', - }, - - { - 'key' => 'voip-cust_cdr_spools', - 'section' => '', - 'description' => 'Enable the per-customer option for individual CDR spools.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_forward-arbitrary_dst', - 'section' => '', - 'description' => "Allow forwards to point to arbitrary strings that don't necessarily look like email addresses. Only used when using forwards for weird, non-email things.", - 'type' => 'checkbox', - }, - - { - 'key' => 'tax-ship_address', - 'section' => 'billing', - 'description' => 'By default, tax calculations are done based on the billing address. Enable this switch to calculate tax based on the shipping address instead. Note: Tax reports can take a long time when enabled.', - 'type' => 'checkbox', - }, - - { - 'key' => 'batch-enable', - 'section' => 'billing', - 'description' => 'Enable credit card and/or ACH batching - leave disabled for real-time installations.', - 'type' => 'checkbox', - }, - - { - 'key' => 'batch-default_format', - 'section' => 'billing', - 'description' => 'Default format for batches.', - 'type' => 'select', - 'select_enum' => [ 'csv-td_canada_trust-merchant_pc_batch', - 'csv-chase_canada-E-xactBatch', 'BoM', 'PAP', - 'ach-spiritone', - ] - }, - - { - 'key' => 'batch-fixed_format-CARD', - 'section' => 'billing', - 'description' => 'Fixed (unchangeable) format for credit card batches.', - 'type' => 'select', - 'select_enum' => [ 'csv-td_canada_trust-merchant_pc_batch', 'BoM', 'PAP' , - 'csv-chase_canada-E-xactBatch', 'BoM', 'PAP' ] - }, - - { - 'key' => 'batch-fixed_format-CHEK', - 'section' => 'billing', - 'description' => 'Fixed (unchangeable) format for electronic check batches.', - 'type' => 'select', - 'select_enum' => [ 'csv-td_canada_trust-merchant_pc_batch', 'BoM', 'PAP', - 'ach-spiritone', - ] - }, - - { - 'key' => 'batch-increment_expiration', - 'section' => 'billing', - 'description' => 'Increment expiration date years in batches until cards are current. Make sure this is acceptable to your batching provider before enabling.', - 'type' => 'checkbox' - }, - - { - 'key' => 'batchconfig-BoM', - 'section' => 'billing', - 'description' => 'Configuration for Bank of Montreal batching, seven lines: 1. Origin ID, 2. Datacenter, 3. Typecode, 4. Short name, 5. Long name, 6. Bank, 7. Bank account', - 'type' => 'textarea', - }, - - { - 'key' => 'batchconfig-PAP', - 'section' => 'billing', - 'description' => 'Configuration for PAP batching, seven lines: 1. Origin ID, 2. Datacenter, 3. Typecode, 4. Short name, 5. Long name, 6. Bank, 7. Bank account', - 'type' => 'textarea', - }, - - { - 'key' => 'batchconfig-csv-chase_canada-E-xactBatch', - 'section' => 'billing', - 'description' => 'Gateway ID for Chase Canada E-xact batching', - 'type' => 'text', - }, - - { - 'key' => 'payment_history-years', - 'section' => 'UI', - 'description' => 'Number of years of payment history to show by default. Currently defaults to 2.', - 'type' => 'text', - }, - - { - 'key' => 'cust_main-use_comments', - 'section' => 'UI', - 'description' => 'Display free form comments on the customer edit screen. Useful as a scratch pad.', - 'type' => 'checkbox', - }, - - { - 'key' => 'cust_main-disable_notes', - 'section' => 'UI', - 'description' => 'Disable new style customer notes - timestamped and user identified customer notes. Useful in tracking who did what.', - 'type' => 'checkbox', - }, - - { - 'key' => 'cust_main_note-display_times', - 'section' => 'UI', - 'description' => 'Display full timestamps (not just dates) for customer notes.', - 'type' => 'checkbox', - }, - - { - 'key' => 'cust_main-ticket_statuses', - 'section' => 'UI', - 'description' => 'Show tickets with these statuses on the customer view page.', - 'type' => 'selectmultiple', - 'select_enum' => [qw( new open stalled resolved rejected deleted )], - }, - - { - 'key' => 'cust_main-max_tickets', - 'section' => 'UI', - 'description' => 'Maximum number of tickets to show on the customer view page.', - 'type' => 'text', - }, - - { - 'key' => 'cust_main-skeleton_tables', - 'section' => '', - 'description' => 'Tables which will have skeleton records inserted into them for each customer. Syntax for specifying tables is unfortunately a tricky perl data structure for now.', - 'type' => 'textarea', - }, - - { - 'key' => 'cust_main-skeleton_custnum', - 'section' => '', - 'description' => 'Customer number specifying the source data to copy into skeleton tables for new customers.', - 'type' => 'text', - }, - - { - 'key' => 'cust_main-enable_birthdate', - 'section' => 'UI', - 'descritpion' => 'Enable tracking of a birth date with each customer record', - 'type' => 'checkbox', - }, - - { - 'key' => 'support-key', - 'section' => '', - 'description' => 'A support key enables access to commercial services delivered over the network, such as the payroll module, access to the internal ticket system, priority support and optional backups.', - 'type' => 'text', - }, - - { - 'key' => 'card-types', - 'section' => 'billing', - 'description' => 'Select one or more card types to enable only those card types. If no card types are selected, all card types are available.', - 'type' => 'selectmultiple', - 'select_enum' => \@card_types, - }, - - { - 'key' => 'disable-fuzzy', - 'section' => 'UI', - 'description' => 'Disable fuzzy searching. Speeds up searching for large sites, but only shows exact matches.', - 'type' => 'checkbox', - }, - - { 'key' => 'pkg_referral', - 'section' => '', - 'description' => 'Enable package-specific advertising sources.', - 'type' => 'checkbox', - }, - - { 'key' => 'pkg_referral-multiple', - 'section' => '', - 'description' => 'In addition, allow multiple advertising sources to be associated with a single package.', - 'type' => 'checkbox', - }, - - { - 'key' => 'dashboard-toplist', - 'section' => 'UI', - 'description' => 'List of items to display on the top of the front page', - 'type' => 'textarea', - }, - - { - 'key' => 'impending_recur_template', - 'section' => 'billing', - 'description' => 'Template file for alerts about looming first time recurrant billing. See the Text::Template documentation for details on the template substitition language. Also see packages with a flat price plan The following variables are available
  • $packages allowing $packages->[0] thru $packages->[n]
  • $package the first package, same as $packages->[0]
  • $recurdates allowing $recurdates->[0] thru $recurdates->[n]
  • $recurdate the first recurdate, same as $recurdate->[0]
  • $first
  • $last
', -#
  • $payby
  • $expdate most likely only confuse - 'type' => 'textarea', - }, - - { - 'key' => 'logo.png', - 'section' => 'billing', #? - 'description' => 'An image to include in some types of invoices', - 'type' => 'binary', - }, - - { - 'key' => 'logo.eps', - 'section' => 'billing', #? - 'description' => 'An image to include in some types of invoices', - 'type' => 'binary', - }, - - { - 'key' => 'selfservice-ignore_quantity', - 'section' => '', - 'description' => 'Ignores service quantity restrictions in self-service context. Strongly not recommended - just set your quantities correctly in the first place.', - 'type' => 'checkbox', - }, - - { - 'key' => 'selfservice-session_timeout', - 'section' => '', - 'description' => 'Self-service session timeout. Defaults to 1 hour.', - 'type' => 'select', - 'select_enum' => [ '1 hour', '2 hours', '4 hours', '8 hours', '1 day', '1 week', ], - }, - - { - 'key' => 'disable_setup_suspended_pkgs', - 'section' => 'billing', - 'description' => 'Disables charging of setup fees for suspended packages.', - 'type' => 'checkbox', - }, - - { - 'key' => 'password-generated-allcaps', - 'section' => 'password', - 'description' => 'Causes passwords automatically generated to consist entirely of capital letters', - 'type' => 'checkbox', - }, - - { - 'key' => 'datavolume-forcemegabytes', - 'section' => 'UI', - 'description' => 'All data volumes are expressed in megabytes', - 'type' => 'checkbox', - }, - - { - 'key' => 'datavolume-significantdigits', - 'section' => 'UI', - 'description' => 'number of significant digits to use to represent data volumes', - 'type' => 'text', - }, - - { - 'key' => 'disable_void_after', - 'section' => 'billing', - 'description' => 'Number of seconds after which freeside won\'t attempt to VOID a payment first when performing a refund.', - 'type' => 'text', - }, - - { - 'key' => 'disable_line_item_date_ranges', - 'section' => 'billing', - 'description' => 'Prevent freeside from automatically generating date ranges on invoice line items.', - 'type' => 'checkbox', - }, - - { - 'key' => 'support_packages', - 'section' => '', - 'description' => 'A list of packages eligible for RT ticket time transfer, one pkgpart per line.', #this should really be a select multiple, or specified in the packages themselves... - 'type' => 'textarea', - }, - - { - 'key' => 'cust_main-require_phone', - 'section' => '', - 'description' => 'Require daytime or night for all customer records.', - 'type' => 'checkbox', - }, - - { - 'key' => 'cust_main-require_invoicing_list_email', - 'section' => '', - 'description' => 'Email address field is required: require at least one invoicing email address for all customer records.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-display_paid_time_remaining', - 'section' => '', - 'description' => 'Show paid time remaining in addition to time remaining.', - 'type' => 'checkbox', - }, - - { - 'key' => 'cancel_credit_type', - 'section' => 'billing', - 'description' => 'The group to use for new, automatically generated credit reasons resulting from cancellation.', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::reason_type; - map { $_->typenum => $_->type } - FS::Record::qsearch('reason_type', { class=>'R' } ); - }, - 'option_sub' => sub { require FS::Record; - require FS::reason_type; - my $reason_type = FS::Record::qsearchs( - 'reason_type', { 'typenum' => shift } - ); - $reason_type ? $reason_type->type : ''; - }, - }, - - { - 'key' => 'referral_credit_type', - 'section' => 'billing', - 'description' => 'The group to use for new, automatically generated credit reasons resulting from referrals.', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::reason_type; - map { $_->typenum => $_->type } - FS::Record::qsearch('reason_type', { class=>'R' } ); - }, - 'option_sub' => sub { require FS::Record; - require FS::reason_type; - my $reason_type = FS::Record::qsearchs( - 'reason_type', { 'typenum' => shift } - ); - $reason_type ? $reason_type->type : ''; - }, - }, - - { - 'key' => 'signup_credit_type', - 'section' => 'billing', - 'description' => 'The group to use for new, automatically generated credit reasons resulting from signup and self-service declines.', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::reason_type; - map { $_->typenum => $_->type } - FS::Record::qsearch('reason_type', { class=>'R' } ); - }, - 'option_sub' => sub { require FS::Record; - require FS::reason_type; - my $reason_type = FS::Record::qsearchs( - 'reason_type', { 'typenum' => shift } - ); - $reason_type ? $reason_type->type : ''; - }, - }, - - { - 'key' => 'cust_main-agent_custid-format', - 'section' => '', - 'description' => 'Enables searching of various formatted values in cust_main.agent_custid', - 'type' => 'select', - 'select_hash' => [ - '' => 'Numeric only', - 'ww?d+' => 'Numeric with one or two letter prefix', - ], - }, - - { - 'key' => 'card_masking_method', - 'section' => 'UI', - 'description' => 'Digits to display when masking credit cards. Note that the first six digits are necessary to canonically identify the credit card type (Visa/MC, Amex, Discover, Maestro, etc.) in all cases. The first four digits can identify the most common credit card types in most cases (Visa/MC, Amex, and Discover). The first two digits can distinguish between Visa/MC and Amex.', - 'type' => 'select', - 'select_hash' => [ - '' => '123456xxxxxx1234', - 'first6last2' => '123456xxxxxxxx12', - 'first4last4' => '1234xxxxxxxx1234', - 'first4last2' => '1234xxxxxxxxxx12', - 'first2last4' => '12xxxxxxxxxx1234', - 'first2last2' => '12xxxxxxxxxxxx12', - 'first0last4' => 'xxxxxxxxxxxx1234', - 'first0last2' => 'xxxxxxxxxxxxxx12', - ], - }, - -); - -1; diff --git a/FS/FS/ConfDefaults.pm b/FS/FS/ConfDefaults.pm deleted file mode 100644 index 79782590d..000000000 --- a/FS/FS/ConfDefaults.pm +++ /dev/null @@ -1,73 +0,0 @@ -package FS::ConfDefaults; - -=head1 NAME - -FS::ConfDefaults - Freeside configuration default and available values - -=head1 SYNOPSIS - - use FS::ConfDefaults; - - @avail_cust_fields = FS::ConfDefaults->cust_fields_avail(); - -=head1 DESCRIPTION - -Just a small class to keep config default and available values - -=head1 METHODS - -=over 4 - -=item cust_fields_avail - -Returns a list, suitable for assigning to a hash, of available values and -labels for customer fields values. - -=cut - -# XXX should use msgcat for "Day phone" and "Night phone", but how? -sub cust_fields_avail { ( - - 'Cust. Status | Customer' => - 'Status | Last, First or Company (Last, First)', - 'Cust# | Cust. Status | Customer' => - 'custnum | Status | Last, First or Company (Last, First)', - - 'Cust. Status | Name | Company' => - 'Status | Last, First | Company', - 'Cust# | Cust. Status | Name | Company' => - 'custnum | Status | Last, First | Company', - - 'Cust. Status | (bill) Customer | (service) Customer' => - 'Status | Last, First or Company (Last, First) | (same for service contact if present)', - 'Cust# | Cust. Status | (bill) Customer | (service) Customer' => - 'custnum | Status | Last, First or Company (Last, First) | (same for service contact if present)', - - 'Cust. Status | (bill) Name | (bill) Company | (service) Name | (service) Company' => - 'Status | Last, First | Company | (same for service address if present)', - 'Cust# | Cust. Status | (bill) Name | (bill) Company | (service) Name | (service) Company' => - 'custnum | Status | Last, First | Company | (same for service address if present)', - - 'Cust# | Cust. Status | Name | Company | Address 1 | Address 2 | City | State | Zip | Country | Day phone | Night phone | Invoicing email(s)' => - 'custnum | Status | Last, First | Company | (all address fields ) | Day phone | Night phone | Invoicing email(s)', - - 'Cust# | Cust. Status | Name | Company | Address 1 | Address 2 | City | State | Zip | Country | Day phone | Night phone | Fax number | Invoicing email(s) | Payment Type' => - 'custnum | Status | Last, First | Company | (all address fields ) | ( all phones ) | Invoicing email(s) | Payment Type', - 'Cust# | Cust. Status | Name | Company | Address 1 | Address 2 | City | State | Zip | Country | Day phone | Night phone | Fax number | Invoicing email(s) | Payment Type | Current Balance' => - 'custnum | Status | Last, First | Company | (all address fields ) | ( all phones ) | Invoicing email(s) | Payment Type | Current Balance', - -); } - -=back - -=head1 BUGS - -Not yet. - -=head1 SEE ALSO - -L - -=cut - -1; diff --git a/FS/FS/ConfItem.pm b/FS/FS/ConfItem.pm deleted file mode 100644 index a0e997ac7..000000000 --- a/FS/FS/ConfItem.pm +++ /dev/null @@ -1,63 +0,0 @@ -package FS::ConfItem; - -=head1 NAME - -FS::ConfItem - Configuration option meta-data. - -=head1 SYNOPSIS - - use FS::Conf; - @config_items = $conf->config_items; - - foreach $item ( @config_items ) { - $key = $item->key; - $section = $item->section; - $description = $item->description; - } - -=head1 DESCRIPTION - -=head1 METHODS - -=over 4 - -=item new - -=cut - -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = @_ ? shift : {}; - bless ($self, $class); -} - -=item key - -=item section - -=item description - -=cut - -sub AUTOLOAD { - my $self = shift; - my $field = $AUTOLOAD; - $field =~ s/.*://; - $self->{$field}; -} - -=back - -=head1 BUGS - -Terse docs. - -=head1 SEE ALSO - -L - -=cut - -1; - diff --git a/FS/FS/Conf_compat17.pm b/FS/FS/Conf_compat17.pm deleted file mode 100644 index bcd78e8c7..000000000 --- a/FS/FS/Conf_compat17.pm +++ /dev/null @@ -1,2196 +0,0 @@ -package FS::Conf_compat17; - -use vars qw($default_dir $base_dir @config_items @card_types $DEBUG ); -use IO::File; -use File::Basename; -use FS::ConfItem; -use FS::ConfDefaults; - -$base_dir = '%%%FREESIDE_CONF%%%'; -$default_dir = '%%%FREESIDE_CONF%%%'; - - -$DEBUG = 0; - -=head1 NAME - -FS::Conf - Freeside configuration values - -=head1 SYNOPSIS - - use FS::Conf; - - $conf = new FS::Conf "/config/directory"; - - $FS::Conf::default_dir = "/config/directory"; - $conf = new FS::Conf; - - $dir = $conf->dir; - - $value = $conf->config('key'); - @list = $conf->config('key'); - $bool = $conf->exists('key'); - - $conf->touch('key'); - $conf->set('key' => 'value'); - $conf->delete('key'); - - @config_items = $conf->config_items; - -=head1 DESCRIPTION - -Read and write Freeside configuration values. Keys currently map to filenames, -but this may change in the future. - -=head1 METHODS - -=over 4 - -=item new [ DIRECTORY ] - -Create a new configuration object. A directory arguement is required if -$FS::Conf::default_dir has not been set. - -=cut - -sub new { - my($proto,$dir) = @_; - my($class) = ref($proto) || $proto; - my($self) = { 'dir' => $dir || $default_dir, - 'base_dir' => $base_dir, - }; - bless ($self, $class); -} - -=item dir - -Returns the conf directory. - -=cut - -sub dir { - my($self) = @_; - my $dir = $self->{dir}; - -e $dir or die "FATAL: $dir doesn't exist!"; - -d $dir or die "FATAL: $dir isn't a directory!"; - -r $dir or die "FATAL: Can't read $dir!"; - -x $dir or die "FATAL: $dir not searchable (executable)!"; - $dir =~ /^(.*)$/; - $1; -} - -=item base_dir - -Returns the base directory. By default this is /usr/local/etc/freeside. - -=cut - -sub base_dir { - my($self) = @_; - my $base_dir = $self->{base_dir}; - -e $base_dir or die "FATAL: $base_dir doesn't exist!"; - -d $base_dir or die "FATAL: $base_dir isn't a directory!"; - -r $base_dir or die "FATAL: Can't read $base_dir!"; - -x $base_dir or die "FATAL: $base_dir not searchable (executable)!"; - $base_dir =~ /^(.*)$/; - $1; -} - -=item config KEY - -Returns the configuration value or values (depending on context) for key. - -=cut - -sub config { - my($self,$file)=@_; - my($dir)=$self->dir; - my $fh = new IO::File "<$dir/$file" or return; - if ( wantarray ) { - map { - /^(.*)$/ - or die "Illegal line (array context) in $dir/$file:\n$_\n"; - $1; - } <$fh>; - } else { - <$fh> =~ /^(.*)$/ - or die "Illegal line (scalar context) in $dir/$file:\n$_\n"; - $1; - } -} - -=item config_binary KEY - -Returns the exact scalar value for key. - -=cut - -sub config_binary { - my($self,$file)=@_; - my($dir)=$self->dir; - my $fh = new IO::File "<$dir/$file" or return; - local $/; - my $content = <$fh>; - $content; -} - -=item exists KEY - -Returns true if the specified key exists, even if the corresponding value -is undefined. - -=cut - -sub exists { - my($self,$file)=@_; - my($dir) = $self->dir; - -e "$dir/$file"; -} - -=item config_orbase KEY SUFFIX - -Returns the configuration value or values (depending on context) for -KEY_SUFFIX, if it exists, otherwise for KEY - -=cut - -sub config_orbase { - my( $self, $file, $suffix ) = @_; - if ( $self->exists("${file}_$suffix") ) { - $self->config("${file}_$suffix"); - } else { - $self->config($file); - } -} - -=item touch KEY - -Creates the specified configuration key if it does not exist. - -=cut - -sub touch { - my($self, $file) = @_; - my $dir = $self->dir; - unless ( $self->exists($file) ) { - warn "[FS::Conf] TOUCH $file\n" if $DEBUG; - system('touch', "$dir/$file"); - } -} - -=item set KEY VALUE - -Sets the specified configuration key to the given value. - -=cut - -sub set { - my($self, $file, $value) = @_; - my $dir = $self->dir; - $value =~ /^(.*)$/s; - $value = $1; - unless ( join("\n", @{[ $self->config($file) ]}) eq $value ) { - warn "[FS::Conf] SET $file\n" if $DEBUG; -# warn "$dir" if is_tainted($dir); -# warn "$dir" if is_tainted($file); - chmod 0644, "$dir/$file"; - my $fh = new IO::File ">$dir/$file" or return; - chmod 0644, "$dir/$file"; - print $fh "$value\n"; - } -} -#sub is_tainted { -# return ! eval { join('',@_), kill 0; 1; }; -# } - -=item delete KEY - -Deletes the specified configuration key. - -=cut - -sub delete { - my($self, $file) = @_; - my $dir = $self->dir; - if ( $self->exists($file) ) { - warn "[FS::Conf] DELETE $file\n"; - unlink "$dir/$file"; - } -} - -=item config_items - -Returns all of the possible configuration items as FS::ConfItem objects. See -L. - -=cut - -sub config_items { - my $self = shift; - #quelle kludge - @config_items, - ( map { - my $basename = basename($_); - $basename =~ /^(.*)$/; - $basename = $1; - new FS::ConfItem { - 'key' => $basename, - 'section' => 'billing', - 'description' => 'Alternate template file for invoices. See the billing documentation for details.', - 'type' => 'textarea', - } - } glob($self->dir. '/invoice_template_*') - ), - ( map { - my $basename = basename($_); - $basename =~ /^(.*)$/; - $basename = $1; - new FS::ConfItem { - 'key' => $basename, - 'section' => 'billing', - 'description' => 'Alternate HTML template for invoices. See the billing documentation for details.', - 'type' => 'textarea', - } - } glob($self->dir. '/invoice_html_*') - ), - ( map { - my $basename = basename($_); - $basename =~ /^(.*)$/; - $basename = $1; - ($latexname = $basename ) =~ s/latex/html/; - new FS::ConfItem { - 'key' => $basename, - 'section' => 'billing', - 'description' => "Alternate Notes section for HTML invoices. Defaults to the same data in $latexname if not specified.", - 'type' => 'textarea', - } - } glob($self->dir. '/invoice_htmlnotes_*') - ), - ( map { - my $basename = basename($_); - $basename =~ /^(.*)$/; - $basename = $1; - new FS::ConfItem { - 'key' => $basename, - 'section' => 'billing', - 'description' => 'Alternate LaTeX template for invoices. See the billing documentation for details.', - 'type' => 'textarea', - } - } glob($self->dir. '/invoice_latex_*') - ), - ( map { - my $basename = basename($_); - $basename =~ /^(.*)$/; - $basename = $1; - new FS::ConfItem { - 'key' => $basename, - 'section' => 'billing', - 'description' => 'Alternate Notes section for LaTeX typeset PostScript invoices. See the billing documentation for details.', - 'type' => 'textarea', - } - } glob($self->dir. '/invoice_latexnotes_*') - ); -} - -=back - -=head1 BUGS - -If this was more than just crud that will never be useful outside Freeside I'd -worry that config_items is freeside-specific and icky. - -=head1 SEE ALSO - -"Configuration" in the web interface (config/config.cgi). - -httemplate/docs/config.html - -=cut - -#Business::CreditCard -@card_types = ( - "VISA card", - "MasterCard", - "Discover card", - "American Express card", - "Diner's Club/Carte Blanche", - "enRoute", - "JCB", - "BankCard", - "Switch", - "Solo", -); - -@config_items = map { new FS::ConfItem $_ } ( - - { - 'key' => 'address', - 'section' => 'deprecated', - 'description' => 'This configuration option is no longer used. See invoice_template instead.', - 'type' => 'text', - }, - - { - 'key' => 'alerter_template', - 'section' => 'billing', - 'description' => 'Template file for billing method expiration alerts. See the billing documentation for details.', - 'type' => 'textarea', - }, - - { - 'key' => 'apacheroot', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a www_shellcommands export instead. The directory containing Apache virtual hosts', - 'type' => 'text', - }, - - { - 'key' => 'apacheip', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add an apache export instead. Used to be the current IP address to assign to new virtual hosts', - 'type' => 'text', - }, - - { - 'key' => 'apachemachine', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a www_shellcommands export instead. A machine with the apacheroot directory and user home directories. The existance of this file enables setup of virtual host directories, and, in conjunction with the `home\' configuration file, symlinks into user home directories.', - 'type' => 'text', - }, - - { - 'key' => 'apachemachines', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add an apache export instead. Used to be Apache machines, one per line. This enables export of `/etc/apache/vhosts.conf\', which can be included in your Apache configuration via the Include directive.', - 'type' => 'textarea', - }, - - { - 'key' => 'bindprimary', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a bind export instead. Your BIND primary nameserver. This enables export of /var/named/named.conf and zone files into /var/named', - 'type' => 'text', - }, - - { - 'key' => 'bindsecondaries', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a bind_slave export instead. Your BIND secondary nameservers, one per line. This enables export of /var/named/named.conf', - 'type' => 'textarea', - }, - - { - 'key' => 'encryption', - 'section' => 'billing', - 'description' => 'Enable encryption of credit cards.', - 'type' => 'checkbox', - }, - - { - 'key' => 'encryptionmodule', - 'section' => 'billing', - 'description' => 'Use which module for encryption?', - 'type' => 'text', - }, - - { - 'key' => 'encryptionpublickey', - 'section' => 'billing', - 'description' => 'Your RSA Public Key - Required if Encryption is turned on.', - 'type' => 'textarea', - }, - - { - 'key' => 'encryptionprivatekey', - 'section' => 'billing', - 'description' => 'Your RSA Private Key - Including this will enable the "Bill Now" feature. However if the system is compromised, a hacker can use this key to decode the stored credit card information. This is generally not a good idea.', - 'type' => 'textarea', - }, - - { - 'key' => 'business-onlinepayment', - 'section' => 'billing', - 'description' => 'Business::OnlinePayment support, at least three lines: processor, login, and password. An optional fourth line specifies the action or actions (multiple actions are separated with `,\': for example: `Authorization Only, Post Authorization\'). Optional additional lines are passed to Business::OnlinePayment as %processor_options.', - 'type' => 'textarea', - }, - - { - 'key' => 'business-onlinepayment-ach', - 'section' => 'billing', - 'description' => 'Alternate Business::OnlinePayment support for ACH transactions (defaults to regular business-onlinepayment). At least three lines: processor, login, and password. An optional fourth line specifies the action or actions (multiple actions are separated with `,\': for example: `Authorization Only, Post Authorization\'). Optional additional lines are passed to Business::OnlinePayment as %processor_options.', - 'type' => 'textarea', - }, - - { - 'key' => 'business-onlinepayment-description', - 'section' => 'billing', - 'description' => 'String passed as the description field to Business::OnlinePayment. Evaluated as a double-quoted perl string, with the following variables available: $agent (the agent name), and $pkgs (a comma-separated list of packages for which these charges apply)', - 'type' => 'text', - }, - - { - 'key' => 'business-onlinepayment-email-override', - 'section' => 'billing', - 'description' => 'Email address used instead of customer email address when submitting a BOP transaction.', - 'type' => 'text', - }, - - { - 'key' => 'bsdshellmachines', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a bsdshell export instead. Your BSD flavored shell (and mail) machines, one per line. This enables export of `/etc/passwd\' and `/etc/master.passwd\'.', - 'type' => 'textarea', - }, - - { - 'key' => 'countrydefault', - 'section' => 'UI', - 'description' => 'Default two-letter country code (if not supplied, the default is `US\')', - 'type' => 'text', - }, - - { - 'key' => 'date_format', - 'section' => 'UI', - 'description' => 'Format for displaying dates', - 'type' => 'select', - 'select_hash' => [ - '%m/%d/%Y' => 'MM/DD/YYYY', - '%Y/%m/%d' => 'YYYY/MM/DD', - ], - }, - - { - 'key' => 'cyrus', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a cyrus export instead. This option used to integrate with Cyrus IMAP Server, three lines: IMAP server, admin username, and admin password. Cyrus::IMAP::Admin should be installed locally and the connection to the server secured.', - 'type' => 'textarea', - }, - - { - 'key' => 'cp_app', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a cp export instead. This option used to integrate with Critial Path Account Provisioning Protocol, four lines: "host:port", username, password, and workgroup (for new users).', - 'type' => 'textarea', - }, - - { - 'key' => 'deletecustomers', - 'section' => 'UI', - 'description' => 'Enable customer deletions. Be very careful! Deleting a customer will remove all traces that this customer ever existed! It should probably only be used when auditing a legacy database. Normally, you cancel all of a customers\' packages if they cancel service.', - 'type' => 'checkbox', - }, - - { - 'key' => 'deletepayments', - 'section' => 'billing', - 'description' => 'Enable deletion of unclosed payments. Really, with voids this is pretty much not recommended in any situation anymore. Be very careful! Only delete payments that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a payment is deleted.', - 'type' => [qw( checkbox text )], - }, - - { - 'key' => 'deletecredits', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, now controlled by ACLs. Used to enable deletion of unclosed credits. Be very careful! Only delete credits that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a credit is deleted.', - 'type' => [qw( checkbox text )], - }, - - { - 'key' => 'deleterefunds', - 'section' => 'billing', - 'description' => 'Enable deletion of unclosed refunds. Be very careful! Only delete refunds that were data-entry errors, not adjustments.', - 'type' => 'checkbox', - }, - - { - 'key' => 'unapplypayments', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, now controlled by ACLs. Used to enable "unapplication" of unclosed payments.', - 'type' => 'checkbox', - }, - - { - 'key' => 'unapplycredits', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, now controlled by ACLs. Used to nable "unapplication" of unclosed credits.', - 'type' => 'checkbox', - }, - - { - 'key' => 'dirhash', - 'section' => 'shell', - 'description' => 'Optional numeric value to control directory hashing. If positive, hashes directories for the specified number of levels from the front of the username. If negative, hashes directories for the specified number of levels from the end of the username. Some examples:
    • 1: user -> /home/u/user
    • 2: user -> /home/u/s/user
    • -1: user -> /home/r/user
    • -2: user -> home/r/e/user
    ', - 'type' => 'text', - }, - - { - 'key' => 'disable_customer_referrals', - 'section' => 'UI', - 'description' => 'Disable new customer-to-customer referrals in the web interface', - 'type' => 'checkbox', - }, - - { - 'key' => 'editreferrals', - 'section' => 'UI', - 'description' => 'Enable advertising source modification for existing customers', - 'type' => 'checkbox', - }, - - { - 'key' => 'emailinvoiceonly', - 'section' => 'billing', - 'description' => 'Disables postal mail invoices', - 'type' => 'checkbox', - }, - - { - 'key' => 'disablepostalinvoicedefault', - 'section' => 'billing', - 'description' => 'Disables postal mail invoices as the default option in the UI. Be careful not to setup customers which are not sent invoices. See emailinvoiceauto.', - 'type' => 'checkbox', - }, - - { - 'key' => 'emailinvoiceauto', - 'section' => 'billing', - 'description' => 'Automatically adds new accounts to the email invoice list', - 'type' => 'checkbox', - }, - - { - 'key' => 'emailinvoiceautoalways', - 'section' => 'billing', - 'description' => 'Automatically adds new accounts to the email invoice list even when the list contains email addresses', - 'type' => 'checkbox', - }, - - { - 'key' => 'exclude_ip_addr', - 'section' => '', - 'description' => 'Exclude these from the list of available broadband service IP addresses. (One per line)', - 'type' => 'textarea', - }, - - { - 'key' => 'erpcdmachines', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, ERPCD is no longer supported. Used to be ERPCD authentication machines, one per line. This enables export of `/usr/annex/acp_passwd\' and `/usr/annex/acp_dialup\'', - 'type' => 'textarea', - }, - - { - 'key' => 'hidecancelledpackages', - 'section' => 'UI', - 'description' => 'Prevent cancelled packages from showing up in listings (though they will still be in the database)', - 'type' => 'checkbox', - }, - - { - 'key' => 'hidecancelledcustomers', - 'section' => 'UI', - 'description' => 'Prevent customers with only cancelled packages from showing up in listings (though they will still be in the database)', - 'type' => 'checkbox', - }, - - { - 'key' => 'home', - 'section' => 'required', - 'description' => 'For new users, prefixed to username to create a directory name. Should have a leading but not a trailing slash.', - 'type' => 'text', - }, - - { - 'key' => 'icradiusmachines', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add an sqlradius export instead. This option used to enable radcheck and radreply table population - by default in the Freeside database, or in the database specified by the icradius_secrets config option (the radcheck and radreply tables needs to be created manually). You do not need to use MySQL for your Freeside database to export to an ICRADIUS/FreeRADIUS MySQL database with this option.
    ADDITIONAL DEPRECATED FUNCTIONALITY (instead use MySQL replication or point icradius_secrets to the external database) - your ICRADIUS machines or FreeRADIUS (with MySQL authentication) machines, one per line. Machines listed in this file will have the radcheck table exported to them. Each line should contain four items, separted by whitespace: machine name, MySQL database name, MySQL username, and MySQL password. For example: "radius.isp.tld radius_db radius_user passw0rd"
    ', - 'type' => [qw( checkbox textarea )], - }, - - { - 'key' => 'icradius_mysqldest', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add an sqlradius export instead. Used to be the destination directory for the MySQL databases, on the ICRADIUS/FreeRADIUS machines. Defaults to "/usr/local/var/".', - 'type' => 'text', - }, - - { - 'key' => 'icradius_mysqlsource', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add an sqlradius export instead. Used to be the source directory for for the MySQL radcheck table files, on the Freeside machine. Defaults to "/usr/local/var/freeside".', - 'type' => 'text', - }, - - { - 'key' => 'icradius_secrets', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add an sqlradius export instead. This option used to specify a database for ICRADIUS/FreeRADIUS export. Three lines: DBI data source, username and password.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_from', - 'section' => 'required', - 'description' => 'Return address on email invoices', - 'type' => 'text', - }, - - { - 'key' => 'invoice_template', - 'section' => 'required', - 'description' => 'Required template file for invoices. See the billing documentation for details.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_html', - 'section' => 'billing', - 'description' => 'Optional HTML template for invoices. See the billing documentation for details.', - - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_htmlnotes', - 'section' => 'billing', - 'description' => 'Notes section for HTML invoices. Defaults to the same data in invoice_latexnotes if not specified.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_htmlfooter', - 'section' => 'billing', - 'description' => 'Footer for HTML invoices. Defaults to the same data in invoice_latexfooter if not specified.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_htmlreturnaddress', - 'section' => 'billing', - 'description' => 'Return address for HTML invoices. Defaults to the same data in invoice_latexreturnaddress if not specified.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_latex', - 'section' => 'billing', - 'description' => 'Optional LaTeX template for typeset PostScript invoices. See the billing documentation for details.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_latexnotes', - 'section' => 'billing', - 'description' => 'Notes section for LaTeX typeset PostScript invoices.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_latexfooter', - 'section' => 'billing', - 'description' => 'Footer for LaTeX typeset PostScript invoices.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_latexreturnaddress', - 'section' => 'billing', - 'description' => 'Return address for LaTeX typeset PostScript invoices.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_latexsmallfooter', - 'section' => 'billing', - 'description' => 'Optional small footer for multi-page LaTeX typeset PostScript invoices.', - 'type' => 'textarea', - }, - - { - 'key' => 'invoice_email_pdf', - 'section' => 'billing', - 'description' => 'Send PDF invoice as an attachment to emailed invoices. By default, includes the plain text invoice as the email body, unless invoice_email_pdf_note is set.', - 'type' => 'checkbox' - }, - - { - 'key' => 'invoice_email_pdf_note', - 'section' => 'billing', - 'description' => 'If defined, this text will replace the default plain text invoice as the body of emailed PDF invoices.', - 'type' => 'textarea' - }, - - - { - 'key' => 'invoice_default_terms', - 'section' => 'billing', - 'description' => 'Optional default invoice term, used to calculate a due date printed on invoices.', - 'type' => 'select', - 'select_enum' => [ '', 'Payable upon receipt', 'Net 0', 'Net 10', 'Net 15', 'Net 30', 'Net 45', 'Net 60' ], - }, - - { - 'key' => 'invoice_send_receipts', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, this used to send an invoice copy on payments and credits. See the payment_receipt_email and XXXX instead.', - 'type' => 'checkbox', - }, - - { - 'key' => 'payment_receipt_email', - 'section' => 'billing', - 'description' => 'Template file for payment receipts. Payment receipts are sent to the customer email invoice destination(s) when a payment is received. See the Text::Template documentation for details on the template substitution language. The following variables are available:
    • $date
    • $name
    • $paynum - Freeside payment number
    • $paid - Amount of payment
    • $payby - Payment type (Card, Check, Electronic check, etc.)
    • $payinfo - Masked credit card number or check number
    • $balance - New balance
    ', - 'type' => [qw( checkbox textarea )], - }, - - { - 'key' => 'lpr', - 'section' => 'required', - 'description' => 'Print command for paper invoices, for example `lpr -h\'', - 'type' => 'text', - }, - - { - 'key' => 'maildisablecatchall', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, now the default. Turning this option on used to disable the requirement that each virtual domain have a catch-all mailbox.', - 'type' => 'checkbox', - }, - - { - 'key' => 'lpr-postscript_prefix', - 'section' => 'billing', - 'description' => 'Raw printer commands prepended to the beginning of postscript print jobs (evaluated as a double-quoted perl string - backslash escapes are available)', - 'type' => 'text', - }, - - { - 'key' => 'lpr-postscript_suffix', - 'section' => 'billing', - 'description' => 'Raw printer commands added to the end of postscript print jobs (evaluated as a double-quoted perl string - backslash escapes are available)', - 'type' => 'text', - }, - - { - 'key' => 'money_char', - 'section' => '', - 'description' => 'Currency symbol - defaults to `$\'', - 'type' => 'text', - }, - - { - 'key' => 'mxmachines', - 'section' => 'deprecated', - 'description' => 'MX entries for new domains, weight and machine, one per line, with trailing `.\'', - 'type' => 'textarea', - }, - - { - 'key' => 'nsmachines', - 'section' => 'deprecated', - 'description' => 'NS nameservers for new domains, one per line, with trailing `.\'', - 'type' => 'textarea', - }, - - { - 'key' => 'defaultrecords', - 'section' => 'BIND', - 'description' => 'DNS entries to add automatically when creating a domain', - 'type' => 'editlist', - 'editlist_parts' => [ { type=>'text' }, - { type=>'immutable', value=>'IN' }, - { type=>'select', - select_enum=>{ map { $_=>$_ } qw(A CNAME MX NS TXT)} }, - { type=> 'text' }, ], - }, - - { - 'key' => 'arecords', - 'section' => 'deprecated', - 'description' => 'A list of tab seperated CNAME records to add automatically when creating a domain', - 'type' => 'textarea', - }, - - { - 'key' => 'cnamerecords', - 'section' => 'deprecated', - 'description' => 'A list of tab seperated CNAME records to add automatically when creating a domain', - 'type' => 'textarea', - }, - - { - 'key' => 'nismachines', - 'section' => 'deprecated', - 'description' => 'DEPRECATED. Your NIS master (not slave master) machines, one per line. This enables export of `/etc/global/passwd\' and `/etc/global/shadow\'.', - 'type' => 'textarea', - }, - - { - 'key' => 'passwordmin', - 'section' => 'password', - 'description' => 'Minimum password length (default 6)', - 'type' => 'text', - }, - - { - 'key' => 'passwordmax', - 'section' => 'password', - 'description' => 'Maximum password length (default 8) (don\'t set this over 12 if you need to import or export crypt() passwords)', - 'type' => 'text', - }, - - { - 'key' => 'password-noampersand', - 'section' => 'password', - 'description' => 'Disallow ampersands in passwords', - 'type' => 'checkbox', - }, - - { - 'key' => 'password-noexclamation', - 'section' => 'password', - 'description' => 'Disallow exclamations in passwords (Not setting this could break old text Livingston or Cistron Radius servers)', - 'type' => 'checkbox', - }, - - { - 'key' => 'qmailmachines', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add qmail and shellcommands exports instead. This option used to export `/var/qmail/control/virtualdomains\', `/var/qmail/control/recipientmap\', and `/var/qmail/control/rcpthosts\'. Setting this option (even if empty) also turns on user `.qmail-extension\' file maintenance in conjunction with the shellmachine option.', - 'type' => [qw( checkbox textarea )], - }, - - { - 'key' => 'radiusmachines', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add an sqlradius export instead. This option used to export to be: your RADIUS authentication machines, one per line. This enables export of `/etc/raddb/users\'.', - 'type' => 'textarea', - }, - - { - 'key' => 'referraldefault', - 'section' => 'UI', - 'description' => 'Default referral, specified by refnum', - 'type' => 'text', - }, - -# { -# 'key' => 'registries', -# 'section' => 'required', -# 'description' => 'Directory which contains domain registry information. Each registry is a directory.', -# }, - - { - 'key' => 'report_template', - 'section' => 'deprecated', - 'description' => 'Deprecated template file for reports.', - 'type' => 'textarea', - }, - - - { - 'key' => 'maxsearchrecordsperpage', - 'section' => 'UI', - 'description' => 'If set, number of search records to return per page.', - 'type' => 'text', - }, - - { - 'key' => 'sendmailconfigpath', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a sendmail export instead. Used to be sendmail configuration file path. Defaults to `/etc\'. Many newer distributions use `/etc/mail\'.', - 'type' => 'text', - }, - - { - 'key' => 'sendmailmachines', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a sendmail export instead. Used to be sendmail machines, one per line. This enables export of `/etc/virtusertable\' and `/etc/sendmail.cw\'.', - 'type' => 'textarea', - }, - - { - 'key' => 'sendmailrestart', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a sendmail export instead. Used to define the command which is run on sendmail machines after files are copied.', - 'type' => 'text', - }, - - { - 'key' => 'session-start', - 'section' => 'session', - 'description' => 'If defined, the command which is executed on the Freeside machine when a session begins. The contents of the file are treated as a double-quoted perl string, with the following variables available: $ip, $nasip and $nasfqdn, which are the IP address of the starting session, and the IP address and fully-qualified domain name of the NAS this session is on.', - 'type' => 'text', - }, - - { - 'key' => 'session-stop', - 'section' => 'session', - 'description' => 'If defined, the command which is executed on the Freeside machine when a session ends. The contents of the file are treated as a double-quoted perl string, with the following variables available: $ip, $nasip and $nasfqdn, which are the IP address of the starting session, and the IP address and fully-qualified domain name of the NAS this session is on.', - 'type' => 'text', - }, - - { - 'key' => 'shellmachine', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a shellcommands export instead. This option used to contain a single machine with user home directories mounted. This enables home directory creation, renaming and archiving/deletion. In conjunction with `qmailmachines\', it also enables `.qmail-extension\' file maintenance.', - 'type' => 'text', - }, - - { - 'key' => 'shellmachine-useradd', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a shellcommands export instead. This option used to contain command(s) to run on shellmachine when an account is created. If the shellmachine option is set but this option is not, useradd -d $dir -m -s $shell -u $uid $username is the default. If this option is set but empty, cp -pr /etc/skel $dir; chown -R $uid.$gid $dir is the default instead. Otherwise the value is evaluated as a double-quoted perl string, with the following variables available: $username, $uid, $gid, $dir, and $shell.', - 'type' => [qw( checkbox text )], - }, - - { - 'key' => 'shellmachine-userdel', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a shellcommands export instead. This option used to contain command(s) to run on shellmachine when an account is deleted. If the shellmachine option is set but this option is not, userdel $username is the default. If this option is set but empty, rm -rf $dir is the default instead. Otherwise the value is evaluated as a double-quoted perl string, with the following variables available: $username and $dir.', - 'type' => [qw( checkbox text )], - }, - - { - 'key' => 'shellmachine-usermod', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a shellcommands export instead. This option used to contain command(s) to run on shellmachine when an account is modified. If the shellmachine option is set but this option is empty, [ -d $old_dir ] && mv $old_dir $new_dir || ( chmod u+t $old_dir; mkdir $new_dir; cd $old_dir; find . -depth -print | cpio -pdm $new_dir; chmod u-t $new_dir; chown -R $uid.$gid $new_dir; rm -rf $old_dir ) is the default. Otherwise the contents of the file are treated as a double-quoted perl string, with the following variables available: $old_dir, $new_dir, $uid and $gid.', - #'type' => [qw( checkbox text )], - 'type' => 'text', - }, - - { - 'key' => 'shellmachines', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a sysvshell export instead. Your Linux and System V flavored shell (and mail) machines, one per line. This enables export of `/etc/passwd\' and `/etc/shadow\' files.', - 'type' => 'textarea', - }, - - { - 'key' => 'shells', - 'section' => 'required', - 'description' => 'Legal shells (think /etc/shells). You probably want to `cut -d: -f7 /etc/passwd | sort | uniq\' initially so that importing doesn\'t fail with `Illegal shell\' errors, then remove any special entries afterwords. A blank line specifies that an empty shell is permitted.', - 'type' => 'textarea', - }, - - { - 'key' => 'showpasswords', - 'section' => 'UI', - 'description' => 'Display unencrypted user passwords in the backend (employee) web interface', - 'type' => 'checkbox', - }, - - { - 'key' => 'signupurl', - 'section' => 'UI', - 'description' => 'if you are using customer-to-customer referrals, and you enter the URL of your signup server CGI, the customer view screen will display a customized link to the signup server with the appropriate customer as referral', - 'type' => 'text', - }, - - { - 'key' => 'smtpmachine', - 'section' => 'required', - 'description' => 'SMTP relay for Freeside\'s outgoing mail', - 'type' => 'text', - }, - - { - 'key' => 'soadefaultttl', - 'section' => 'BIND', - 'description' => 'SOA default TTL for new domains.', - 'type' => 'text', - }, - - { - 'key' => 'soaemail', - 'section' => 'BIND', - 'description' => 'SOA email for new domains, in BIND form (`.\' instead of `@\'), with trailing `.\'', - 'type' => 'text', - }, - - { - 'key' => 'soaexpire', - 'section' => 'BIND', - 'description' => 'SOA expire for new domains', - 'type' => 'text', - }, - - { - 'key' => 'soamachine', - 'section' => 'BIND', - 'description' => 'SOA machine for new domains, with trailing `.\'', - 'type' => 'text', - }, - - { - 'key' => 'soarefresh', - 'section' => 'BIND', - 'description' => 'SOA refresh for new domains', - 'type' => 'text', - }, - - { - 'key' => 'soaretry', - 'section' => 'BIND', - 'description' => 'SOA retry for new domains', - 'type' => 'text', - }, - - { - 'key' => 'statedefault', - 'section' => 'UI', - 'description' => 'Default state or province (if not supplied, the default is `CA\')', - 'type' => 'text', - }, - - { - 'key' => 'radiusprepend', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, real-time text radius now edits an existing file in place - just (turn off freeside-queued and) edit your RADIUS users file directly. The contents used to be be prepended to the top of the RADIUS users file (text exports only).', - 'type' => 'textarea', - }, - - { - 'key' => 'textradiusprepend', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, use RADIUS check attributes instead. The contents used to be prepended to the first line of a user\'s RADIUS entry in text exports.', - 'type' => 'text', - }, - - { - 'key' => 'unsuspendauto', - 'section' => 'billing', - 'description' => 'Enables the automatic unsuspension of suspended packages when a customer\'s balance due changes from positive to zero or negative as the result of a payment or credit', - 'type' => 'checkbox', - }, - - { - 'key' => 'unsuspend-always_adjust_next_bill_date', - 'section' => 'billing', - 'description' => 'Global override that causes unsuspensions to always adjust the next bill date under any circumstances. This is now controlled on a per-package bases - probably best not to use this option unless you are a legacy installation that requires this behaviour.', - 'type' => 'checkbox', - }, - - { - 'key' => 'usernamemin', - 'section' => 'username', - 'description' => 'Minimum username length (default 2)', - 'type' => 'text', - }, - - { - 'key' => 'usernamemax', - 'section' => 'username', - 'description' => 'Maximum username length', - 'type' => 'text', - }, - - { - 'key' => 'username-ampersand', - 'section' => 'username', - 'description' => 'Allow the ampersand character (&) in usernames. Be careful when using this option in conjunction with exports which execute shell commands, as the ampersand will be interpreted by the shell if not quoted.', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-letter', - 'section' => 'username', - 'description' => 'Usernames must contain at least one letter', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-letterfirst', - 'section' => 'username', - 'description' => 'Usernames must start with a letter', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-noperiod', - 'section' => 'username', - 'description' => 'Disallow periods in usernames', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-nounderscore', - 'section' => 'username', - 'description' => 'Disallow underscores in usernames', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-nodash', - 'section' => 'username', - 'description' => 'Disallow dashes in usernames', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-uppercase', - 'section' => 'username', - 'description' => 'Allow uppercase characters in usernames', - 'type' => 'checkbox', - }, - - { - 'key' => 'username-percent', - 'section' => 'username', - 'description' => 'Allow the percent character (%) in usernames.', - 'type' => 'checkbox', - }, - - { - 'key' => 'username_policy', - 'section' => 'deprecated', - 'description' => 'This file controls the mechanism for preventing duplicate usernames in passwd/radius files exported from svc_accts. This should be one of \'prepend domsvc\' \'append domsvc\' \'append domain\' or \'append @domain\'', - 'type' => 'select', - 'select_enum' => [ 'prepend domsvc', 'append domsvc', 'append domain', 'append @domain' ], - #'type' => 'text', - }, - - { - 'key' => 'vpopmailmachines', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a vpopmail export instead. This option used to contain your vpopmail pop toasters, one per line. Each line is of the form "machinename vpopdir vpopuid vpopgid". For example: poptoaster.domain.tld /home/vpopmail 508 508 Note: vpopuid and vpopgid are values taken from the vpopmail machine\'s /etc/passwd', - 'type' => 'textarea', - }, - - { - 'key' => 'vpopmailrestart', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add a vpopmail export instead. This option used to define the shell commands to run on vpopmail machines after files are copied. An example can be found in eg/vpopmailrestart of the source distribution.', - 'type' => 'textarea', - }, - - { - 'key' => 'safe-part_pkg', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, obsolete. Used to validate package definition setup and recur expressions against a preset list. Useful for webdemos, annoying to powerusers.', - 'type' => 'checkbox', - }, - - { - 'key' => 'safe-part_bill_event', - 'section' => 'UI', - 'description' => 'Validates invoice event expressions against a preset list. Useful for webdemos, annoying to powerusers.', - 'type' => 'checkbox', - }, - - { - 'key' => 'show_ss', - 'section' => 'UI', - 'description' => 'Turns on display/collection of SS# in the web interface.', - 'type' => 'checkbox', - }, - - { - 'key' => 'show_stateid', - 'section' => 'UI', - 'description' => "Turns on display/collection of driver's license/state issued id numbers in the web interface. Sometimes required by electronic check (ACH) processors.", - 'type' => 'checkbox', - }, - - { - 'key' => 'show_bankstate', - 'section' => 'UI', - 'description' => "Turns on display/collection of state for bank accounts in the web interface. Sometimes required by electronic check (ACH) processors.", - 'type' => 'checkbox', - }, - - { - 'key' => 'agent_defaultpkg', - 'section' => 'UI', - 'description' => 'Setting this option will cause new packages to be available to all agent types by default.', - 'type' => 'checkbox', - }, - - { - 'key' => 'legacy_link', - 'section' => 'UI', - 'description' => 'Display options in the web interface to link legacy pre-Freeside services.', - 'type' => 'checkbox', - }, - - { - 'key' => 'legacy_link-steal', - 'section' => 'UI', - 'description' => 'Allow "stealing" an already-audited service from one customer (or package) to another using the link function.', - 'type' => 'checkbox', - }, - - { - 'key' => 'queue_dangerous_controls', - 'section' => 'UI', - 'description' => 'Enable queue modification controls on account pages and for new jobs. Unless you are a developer working on new export code, you should probably leave this off to avoid causing provisioning problems.', - 'type' => 'checkbox', - }, - - { - 'key' => 'security_phrase', - 'section' => 'password', - 'description' => 'Enable the tracking of a "security phrase" with each account. Not recommended, as it is vulnerable to social engineering.', - 'type' => 'checkbox', - }, - - { - 'key' => 'locale', - 'section' => 'UI', - 'description' => 'Message locale', - 'type' => 'select', - 'select_enum' => [ qw(en_US) ], - }, - - { - 'key' => 'selfservice_server-quiet', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, the self-service server no longer sends superfluous decline and cancel emails. Used to disable decline and cancel emails generated by transactions initiated by the selfservice server.', - 'type' => 'checkbox', - }, - - { - 'key' => 'signup_server-quiet', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, the signup server is now part of the self-service server and no longer sends superfluous decline and cancel emails. Used to disable decline and cancel emails generated by transactions initiated by the signup server. Does not disable welcome emails.', - 'type' => 'checkbox', - }, - - { - 'key' => 'signup_server-payby', - 'section' => '', - 'description' => 'Acceptable payment types for the signup server', - 'type' => 'selectmultiple', - 'select_enum' => [ qw(CARD DCRD CHEK DCHK LECB PREPAY BILL COMP) ], - }, - - { - 'key' => 'signup_server-email', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, this feature is no longer available. See the ***fill me in*** report instead. Used to contain a comma-separated list of email addresses to receive notification of signups via the signup server.', - 'type' => 'text', - }, - - { - 'key' => 'signup_server-default_agentnum', - 'section' => '', - 'description' => 'Default agent for the signup server', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::agent; - map { $_->agentnum => $_->agent } - FS::Record::qsearch('agent', { disabled=>'' } ); - }, - 'option_sub' => sub { require FS::Record; - require FS::agent; - my $agent = FS::Record::qsearchs( - 'agent', { 'agentnum'=>shift } - ); - $agent ? $agent->agent : ''; - }, - }, - - { - 'key' => 'signup_server-default_refnum', - 'section' => '', - 'description' => 'Default advertising source for the signup server', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::part_referral; - map { $_->refnum => $_->referral } - FS::Record::qsearch( 'part_referral', - { 'disabled' => '' } - ); - }, - 'option_sub' => sub { require FS::Record; - require FS::part_referral; - my $part_referral = FS::Record::qsearchs( - 'part_referral', { 'refnum'=>shift } ); - $part_referral ? $part_referral->referral : ''; - }, - }, - - { - 'key' => 'signup_server-default_pkgpart', - 'section' => '', - 'description' => 'Default pakcage for the signup server', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::part_pkg; - map { $_->pkgpart => $_->pkg.' - '.$_->comment } - FS::Record::qsearch( 'part_pkg', - { 'disabled' => ''} - ); - }, - 'option_sub' => sub { require FS::Record; - require FS::part_pkg; - my $part_pkg = FS::Record::qsearchs( - 'part_pkg', { 'pkgpart'=>shift } - ); - $part_pkg - ? $part_pkg->pkg.' - '.$part_pkg->comment - : ''; - }, - }, - - { - 'key' => 'show-msgcat-codes', - 'section' => 'UI', - 'description' => 'Show msgcat codes in error messages. Turn this option on before reporting errors to the mailing list.', - 'type' => 'checkbox', - }, - - { - 'key' => 'signup_server-realtime', - 'section' => '', - 'description' => 'Run billing for signup server signups immediately, and do not provision accounts which subsequently have a balance.', - 'type' => 'checkbox', - }, - { - 'key' => 'signup_server-classnum2', - 'section' => '', - 'description' => 'Package Class for first optional purchase', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::pkg_class; - map { $_->classnum => $_->classname } - FS::Record::qsearch('pkg_class', {} ); - }, - 'option_sub' => sub { require FS::Record; - require FS::pkg_class; - my $pkg_class = FS::Record::qsearchs( - 'pkg_class', { 'classnum'=>shift } - ); - $pkg_class ? $pkg_class->classname : ''; - }, - }, - - { - 'key' => 'signup_server-classnum3', - 'section' => '', - 'description' => 'Package Class for second optional purchase', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::pkg_class; - map { $_->classnum => $_->classname } - FS::Record::qsearch('pkg_class', {} ); - }, - 'option_sub' => sub { require FS::Record; - require FS::pkg_class; - my $pkg_class = FS::Record::qsearchs( - 'pkg_class', { 'classnum'=>shift } - ); - $pkg_class ? $pkg_class->classname : ''; - }, - }, - - { - 'key' => 'backend-realtime', - 'section' => '', - 'description' => 'Run billing for backend signups immediately.', - 'type' => 'checkbox', - }, - - { - 'key' => 'declinetemplate', - 'section' => 'billing', - 'description' => 'Template file for credit card decline emails.', - 'type' => 'textarea', - }, - - { - 'key' => 'emaildecline', - 'section' => 'billing', - 'description' => 'Enable emailing of credit card decline notices.', - 'type' => 'checkbox', - }, - - { - 'key' => 'emaildecline-exclude', - 'section' => 'billing', - 'description' => 'List of error messages that should not trigger email decline notices, one per line.', - 'type' => 'textarea', - }, - - { - 'key' => 'cancelmessage', - 'section' => 'billing', - 'description' => 'Template file for cancellation emails.', - 'type' => 'textarea', - }, - - { - 'key' => 'cancelsubject', - 'section' => 'billing', - 'description' => 'Subject line for cancellation emails.', - 'type' => 'text', - }, - - { - 'key' => 'emailcancel', - 'section' => 'billing', - 'description' => 'Enable emailing of cancellation notices.', - 'type' => 'checkbox', - }, - - { - 'key' => 'require_cardname', - 'section' => 'billing', - 'description' => 'Require an "Exact name on card" to be entered explicitly; don\'t default to using the first and last name.', - 'type' => 'checkbox', - }, - - { - 'key' => 'enable_taxclasses', - 'section' => 'billing', - 'description' => 'Enable per-package tax classes', - 'type' => 'checkbox', - }, - - { - 'key' => 'require_taxclasses', - 'section' => 'billing', - 'description' => 'Require a taxclass to be entered for every package', - 'type' => 'checkbox', - }, - - { - 'key' => 'welcome_email', - 'section' => '', - 'description' => 'Template file for welcome email. Welcome emails are sent to the customer email invoice destination(s) each time a svc_acct record is created. See the Text::Template documentation for details on the template substitution language. The following variables are available
    • $username
    • $password
    • $first
    • $last
    • $pkg
    ', - 'type' => 'textarea', - }, - - { - 'key' => 'welcome_email-from', - 'section' => '', - 'description' => 'From: address header for welcome email', - 'type' => 'text', - }, - - { - 'key' => 'welcome_email-subject', - 'section' => '', - 'description' => 'Subject: header for welcome email', - 'type' => 'text', - }, - - { - 'key' => 'welcome_email-mimetype', - 'section' => '', - 'description' => 'MIME type for welcome email', - 'type' => 'select', - 'select_enum' => [ 'text/plain', 'text/html' ], - }, - - { - 'key' => 'welcome_letter', - 'section' => '', - 'description' => 'Optional LaTex template file for a printed welcome letter. A welcome letter is printed the first time a cust_pkg record is created. See the Text::Template documentation and the billing documentation for details on the template substitution language. A variable exists for each fieldname in the customer record ($first, $last, etc). The following additional variables are available
    • $payby - a friendler represenation of the field
    • $payinfo - the masked payment information
    • $expdate - the time at which the payment method expires (a UNIX timestamp)
    • $returnaddress - the invoice return address for this customer\'s agent
    ', - 'type' => 'textarea', - }, - - { - 'key' => 'warning_email', - 'section' => '', - 'description' => 'Template file for warning email. Warning emails are sent to the customer email invoice destination(s) each time a svc_acct record has its usage drop below a threshold or 0. See the Text::Template documentation for details on the template substitution language. The following variables are available
    • $username
    • $password
    • $first
    • $last
    • $pkg
    • $column
    • $amount
    • $threshold
    ', - 'type' => 'textarea', - }, - - { - 'key' => 'warning_email-from', - 'section' => '', - 'description' => 'From: address header for warning email', - 'type' => 'text', - }, - - { - 'key' => 'warning_email-cc', - 'section' => '', - 'description' => 'Additional recipient(s) (comma separated) for warning email when remaining usage reaches zero.', - 'type' => 'text', - }, - - { - 'key' => 'warning_email-subject', - 'section' => '', - 'description' => 'Subject: header for warning email', - 'type' => 'text', - }, - - { - 'key' => 'warning_email-mimetype', - 'section' => '', - 'description' => 'MIME type for warning email', - 'type' => 'select', - 'select_enum' => [ 'text/plain', 'text/html' ], - }, - - { - 'key' => 'payby', - 'section' => 'billing', - 'description' => 'Available payment types.', - 'type' => 'selectmultiple', - 'select_enum' => [ qw(CARD DCRD CHEK DCHK LECB BILL CASH WEST MCRD COMP) ], - }, - - { - 'key' => 'payby-default', - 'section' => 'UI', - 'description' => 'Default payment type. HIDE disables display of billing information and sets customers to BILL.', - 'type' => 'select', - 'select_enum' => [ '', qw(CARD DCRD CHEK DCHK LECB BILL CASH WEST MCRD COMP HIDE) ], - }, - - { - 'key' => 'paymentforcedtobatch', - 'section' => 'UI', - 'description' => 'Causes per customer payment entry to be forced to a batch processor rather than performed realtime.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-notes', - 'section' => 'UI', - 'description' => 'Extra HTML to be displayed on the Account View screen.', - 'type' => 'textarea', - }, - - { - 'key' => 'radius-password', - 'section' => '', - 'description' => 'RADIUS attribute for plain-text passwords.', - 'type' => 'select', - 'select_enum' => [ 'Password', 'User-Password' ], - }, - - { - 'key' => 'radius-ip', - 'section' => '', - 'description' => 'RADIUS attribute for IP addresses.', - 'type' => 'select', - 'select_enum' => [ 'Framed-IP-Address', 'Framed-Address' ], - }, - - { - 'key' => 'svc_acct-alldomains', - 'section' => '', - 'description' => 'Allow accounts to select any domain in the database. Normally accounts can only select from the domain set in the service definition and those purchased by the customer.', - 'type' => 'checkbox', - }, - - { - 'key' => 'dump-scpdest', - 'section' => '', - 'description' => 'destination for scp database dumps: user@host:/path', - 'type' => 'text', - }, - - { - 'key' => 'dump-pgpid', - 'section' => '', - 'description' => "Optional PGP public key user or key id for database dumps. The public key should exist on the freeside user's public keyring, and the gpg binary and GnuPG perl module should be installed.", - 'type' => 'text', - }, - - { - 'key' => 'users-allow_comp', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, enable the Complimentary customer access right instead. Was: Usernames (Freeside users, created with freeside-adduser) which can create complimentary customers, one per line. If no usernames are entered, all users can create complimentary accounts.', - 'type' => 'textarea', - }, - - { - 'key' => 'cvv-save', - 'section' => 'billing', - 'description' => 'Save CVV2 information after the initial transaction for the selected credit card types. Enabling this option may be in violation of your merchant agreement(s), so please check them carefully before enabling this option for any credit card types.', - 'type' => 'selectmultiple', - 'select_enum' => \@card_types, - }, - - { - 'key' => 'allow_negative_charges', - 'section' => 'billing', - 'description' => 'Allow negative charges. Normally not used unless importing data from a legacy system that requires this.', - 'type' => 'checkbox', - }, - { - 'key' => 'auto_unset_catchall', - 'section' => '', - 'description' => 'When canceling a svc_acct that is the email catchall for one or more svc_domains, automatically set their catchall fields to null. If this option is not set, the attempt will simply fail.', - 'type' => 'checkbox', - }, - - { - 'key' => 'system_usernames', - 'section' => 'username', - 'description' => 'A list of system usernames that cannot be edited or removed, one per line. Use a bare username to prohibit modification/deletion of the username in any domain, or username@domain to prohibit modification/deletetion of a specific username and domain.', - 'type' => 'textarea', - }, - - { - 'key' => 'cust_pkg-change_svcpart', - 'section' => '', - 'description' => "When changing packages, move services even if svcparts don't match between old and new pacakge definitions.", - 'type' => 'checkbox', - }, - - { - 'key' => 'disable_autoreverse', - 'section' => 'BIND', - 'description' => 'Disable automatic synchronization of reverse-ARPA entries.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_www-enable_subdomains', - 'section' => '', - 'description' => 'Enable selection of specific subdomains for virtual host creation.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_www-usersvc_svcpart', - 'section' => '', - 'description' => 'Allowable service definition svcparts for virtual hosts, one per line.', - 'type' => 'textarea', - }, - - { - 'key' => 'selfservice_server-primary_only', - 'section' => '', - 'description' => 'Only allow primary accounts to access self-service functionality.', - 'type' => 'checkbox', - }, - - { - 'key' => 'card_refund-days', - 'section' => 'billing', - 'description' => 'After a payment, the number of days a refund link will be available for that payment. Defaults to 120.', - 'type' => 'text', - }, - - { - 'key' => 'agent-showpasswords', - 'section' => '', - 'description' => 'Display unencrypted user passwords in the agent (reseller) interface', - 'type' => 'checkbox', - }, - - { - 'key' => 'global_unique-username', - 'section' => 'username', - 'description' => 'Global username uniqueness control: none (usual setting - check uniqueness per exports), username (all usernames are globally unique, regardless of domain or exports), or username@domain (all username@domain pairs are globally unique, regardless of exports). disabled turns off duplicate checking completely and is STRONGLY NOT RECOMMENDED unless you REALLY need to turn this off.', - 'type' => 'select', - 'select_enum' => [ 'none', 'username', 'username@domain', 'disabled' ], - }, - - { - 'key' => 'svc_external-skip_manual', - 'section' => 'UI', - 'description' => 'When provisioning svc_external services, skip manual entry of id and title fields in the UI. Usually used in conjunction with an export that populates these fields (i.e. artera_turbo).', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_external-display_type', - 'section' => 'UI', - 'description' => 'Select a specific svc_external type to enable some UI changes specific to that type (i.e. artera_turbo).', - 'type' => 'select', - 'select_enum' => [ 'generic', 'artera_turbo', ], - }, - - { - 'key' => 'ticket_system', - 'section' => '', - 'description' => 'Ticketing system integration. RT_Internal uses the built-in RT ticketing system (see the integrated ticketing installation instructions). RT_External accesses an external RT installation in a separate database (local or remote).', - 'type' => 'select', - #'select_enum' => [ '', qw(RT_Internal RT_Libs RT_External) ], - 'select_enum' => [ '', qw(RT_Internal RT_External) ], - }, - - { - 'key' => 'ticket_system-default_queueid', - 'section' => '', - 'description' => 'Default queue used when creating new customer tickets.', - 'type' => 'select-sub', - 'options_sub' => sub { - my $conf = new FS::Conf; - if ( $conf->config('ticket_system') ) { - eval "use FS::TicketSystem;"; - die $@ if $@; - FS::TicketSystem->queues(); - } else { - (); - } - }, - 'option_sub' => sub { - my $conf = new FS::Conf; - if ( $conf->config('ticket_system') ) { - eval "use FS::TicketSystem;"; - die $@ if $@; - FS::TicketSystem->queue(shift); - } else { - ''; - } - }, - }, - - { - 'key' => 'ticket_system-custom_priority_field', - 'section' => '', - 'description' => 'Custom field from the ticketing system to use as a custom priority classification.', - 'type' => 'text', - }, - - { - 'key' => 'ticket_system-custom_priority_field-values', - 'section' => '', - 'description' => 'Values for the custom field from the ticketing system to break down and sort customer ticket lists.', - 'type' => 'textarea', - }, - - { - 'key' => 'ticket_system-custom_priority_field_queue', - 'section' => '', - 'description' => 'Ticketing system queue in which the custom field specified in ticket_system-custom_priority_field is located.', - 'type' => 'text', - }, - - { - 'key' => 'ticket_system-rt_external_datasrc', - 'section' => '', - 'description' => 'With external RT integration, the DBI data source for the external RT installation, for example, DBI:Pg:user=rt_user;password=rt_word;host=rt.example.com;dbname=rt', - 'type' => 'text', - - }, - - { - 'key' => 'ticket_system-rt_external_url', - 'section' => '', - 'description' => 'With external RT integration, the URL for the external RT installation, for example, https://rt.example.com/rt', - 'type' => 'text', - }, - - { - 'key' => 'company_name', - 'section' => 'required', - 'description' => 'Your company name', - 'type' => 'text', - }, - - { - 'key' => 'echeck-void', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, now controlled by ACLs. Used to enable local-only voiding of echeck payments in addition to refunds against the payment gateway', - 'type' => 'checkbox', - }, - - { - 'key' => 'cc-void', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, now controlled by ACLs. Used to enable local-only voiding of credit card payments in addition to refunds against the payment gateway', - 'type' => 'checkbox', - }, - - { - 'key' => 'unvoid', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, now controlled by ACLs. Used to enable unvoiding of voided payments', - 'type' => 'checkbox', - }, - - { - 'key' => 'address2-search', - 'section' => 'UI', - 'description' => 'Enable a "Unit" search box which searches the second address field', - 'type' => 'checkbox', - }, - - { 'key' => 'referral_credit', - 'section' => 'billing', - 'description' => "Enables one-time referral credits in the amount of one month referred customer's recurring fee (irregardless of frequency).", - 'type' => 'checkbox', - }, - - { 'key' => 'selfservice_server-cache_module', - 'section' => '', - 'description' => 'Module used to store self-service session information. All modules handle any number of self-service servers. Cache::SharedMemoryCache is appropriate for a single database / single Freeside server. Cache::FileCache is useful for multiple databases on a single server, or when IPC::ShareLite is not available (i.e. FreeBSD).', # _Database stores session information in the database and is appropriate for multiple Freeside servers, but may be slower.', - 'type' => 'select', - 'select_enum' => [ 'Cache::SharedMemoryCache', 'Cache::FileCache', ], # '_Database' ], - }, - - { - 'key' => 'hylafax', - 'section' => '', - 'description' => 'Options for a HylaFAX server to enable the FAX invoice destination. They should be in the form of a space separated list of arguments to the Fax::Hylafax::Client::sendfax subroutine. You probably shouldn\'t override things like \'docfile\'. *Note* Only supported when using typeset invoices (see the invoice_latex configuration option).', - 'type' => [qw( checkbox textarea )], - }, - - { - 'key' => 'svc_acct-usage_suspend', - 'section' => 'billing', - 'description' => 'Suspends the package an account belongs to when svc_acct.seconds or a bytecount is decremented to 0 or below (accounts with an empty seconds and up|down|totalbytes value are ignored). Typically used in conjunction with prepaid packages and freeside-sqlradius-radacctd.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-usage_unsuspend', - 'section' => 'billing', - 'description' => 'Unuspends the package an account belongs to when svc_acct.seconds or a bytecount is incremented from 0 or below to a positive value (accounts with an empty seconds and up|down|totalbytes value are ignored). Typically used in conjunction with prepaid packages and freeside-sqlradius-radacctd.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-usage_threshold', - 'section' => 'billing', - 'description' => 'The threshold (expressed as percentage) of acct.seconds or acct.up|down|totalbytes at which a warning message is sent to a service holder. Typically used in conjunction with prepaid packages and freeside-sqlradius-radacctd. Defaults to 80.', - 'type' => 'text', - }, - - { - 'key' => 'cust-fields', - 'section' => 'UI', - 'description' => 'Which customer fields to display on reports by default', - 'type' => 'select', - 'select_hash' => [ FS::ConfDefaults->cust_fields_avail() ], - }, - - { - 'key' => 'cust_pkg-display_times', - 'section' => 'UI', - 'description' => 'Display full timestamps (not just dates) for customer packages. Useful if you are doing real-time things like hourly prepaid.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-edit_uid', - 'section' => 'shell', - 'description' => 'Allow UID editing.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_acct-edit_gid', - 'section' => 'shell', - 'description' => 'Allow GID editing.', - 'type' => 'checkbox', - }, - - { - 'key' => 'zone-underscore', - 'section' => 'BIND', - 'description' => 'Allow underscores in zone names. As underscores are illegal characters in zone names, this option is not recommended.', - 'type' => 'checkbox', - }, - - #these should become per-user... - { - 'key' => 'vonage-username', - 'section' => '', - 'description' => 'Vonage Click2Call username (see https://secure.click2callu.com/)', - 'type' => 'text', - }, - { - 'key' => 'vonage-password', - 'section' => '', - 'description' => 'Vonage Click2Call username (see https://secure.click2callu.com/)', - 'type' => 'text', - }, - { - 'key' => 'vonage-fromnumber', - 'section' => '', - 'description' => 'Vonage Click2Call number (see https://secure.click2callu.com/)', - 'type' => 'text', - }, - - { - 'key' => 'echeck-nonus', - 'section' => 'billing', - 'description' => 'Disable ABA-format account checking for Electronic Check payment info', - 'type' => 'checkbox', - }, - - { - 'key' => 'voip-cust_cdr_spools', - 'section' => '', - 'description' => 'Enable the per-customer option for individual CDR spools.', - 'type' => 'checkbox', - }, - - { - 'key' => 'svc_forward-arbitrary_dst', - 'section' => '', - 'description' => "Allow forwards to point to arbitrary strings that don't necessarily look like email addresses. Only used when using forwards for weird, non-email things.", - 'type' => 'checkbox', - }, - - { - 'key' => 'tax-ship_address', - 'section' => 'billing', - 'description' => 'By default, tax calculations are done based on the billing address. Enable this switch to calculate tax based on the shipping address instead. Note: Tax reports can take a long time when enabled.', - 'type' => 'checkbox', - }, - - { - 'key' => 'batch-enable', - 'section' => 'billing', - 'description' => 'Enable credit card and/or ACH batching - leave disabled for real-time installations.', - 'type' => 'checkbox', - }, - - { - 'key' => 'batch-default_format', - 'section' => 'billing', - 'description' => 'Default format for batches.', - 'type' => 'select', - 'select_enum' => [ 'csv-td_canada_trust-merchant_pc_batch', - 'csv-chase_canada-E-xactBatch', 'BoM', 'PAP', - 'ach-spiritone', - ] - }, - - { - 'key' => 'batch-fixed_format-CARD', - 'section' => 'billing', - 'description' => 'Fixed (unchangeable) format for credit card batches.', - 'type' => 'select', - 'select_enum' => [ 'csv-td_canada_trust-merchant_pc_batch', 'BoM', 'PAP' , - 'csv-chase_canada-E-xactBatch', 'BoM', 'PAP' ] - }, - - { - 'key' => 'batch-fixed_format-CHEK', - 'section' => 'billing', - 'description' => 'Fixed (unchangeable) format for electronic check batches.', - 'type' => 'select', - 'select_enum' => [ 'csv-td_canada_trust-merchant_pc_batch', 'BoM', 'PAP', - 'ach-spiritone', - ] - }, - - { - 'key' => 'batch-increment_expiration', - 'section' => 'billing', - 'description' => 'Increment expiration date years in batches until cards are current. Make sure this is acceptable to your batching provider before enabling.', - 'type' => 'checkbox' - }, - - { - 'key' => 'batchconfig-BoM', - 'section' => 'billing', - 'description' => 'Configuration for Bank of Montreal batching, seven lines: 1. Origin ID, 2. Datacenter, 3. Typecode, 4. Short name, 5. Long name, 6. Bank, 7. Bank account', - 'type' => 'textarea', - }, - - { - 'key' => 'batchconfig-PAP', - 'section' => 'billing', - 'description' => 'Configuration for PAP batching, seven lines: 1. Origin ID, 2. Datacenter, 3. Typecode, 4. Short name, 5. Long name, 6. Bank, 7. Bank account', - 'type' => 'textarea', - }, - - { - 'key' => 'batchconfig-csv-chase_canada-E-xactBatch', - 'section' => 'billing', - 'description' => 'Gateway ID for Chase Canada E-xact batching', - 'type' => 'text', - }, - - { - 'key' => 'payment_history-years', - 'section' => 'UI', - 'description' => 'Number of years of payment history to show by default. Currently defaults to 2.', - 'type' => 'text', - }, - - { - 'key' => 'cust_main-use_comments', - 'section' => 'UI', - 'description' => 'Display free form comments on the customer edit screen. Useful as a scratch pad.', - 'type' => 'checkbox', - }, - - { - 'key' => 'cust_main-disable_notes', - 'section' => 'UI', - 'description' => 'Disable new style customer notes - timestamped and user identified customer notes. Useful in tracking who did what.', - 'type' => 'checkbox', - }, - - { - 'key' => 'cust_main_note-display_times', - 'section' => 'UI', - 'description' => 'Display full timestamps (not just dates) for customer notes.', - 'type' => 'checkbox', - }, - - { - 'key' => 'cust_main-ticket_statuses', - 'section' => 'UI', - 'description' => 'Show tickets with these statuses on the customer view page.', - 'type' => 'selectmultiple', - 'select_enum' => [qw( new open stalled resolved rejected deleted )], - }, - - { - 'key' => 'cust_main-max_tickets', - 'section' => 'UI', - 'description' => 'Maximum number of tickets to show on the customer view page.', - 'type' => 'text', - }, - - { - 'key' => 'cust_main-skeleton_tables', - 'section' => '', - 'description' => 'Tables which will have skeleton records inserted into them for each customer. Syntax for specifying tables is unfortunately a tricky perl data structure for now.', - 'type' => 'textarea', - }, - - { - 'key' => 'cust_main-skeleton_custnum', - 'section' => '', - 'description' => 'Customer number specifying the source data to copy into skeleton tables for new customers.', - 'type' => 'text', - }, - - { - 'key' => 'cust_main-enable_birthdate', - 'section' => 'UI', - 'descritpion' => 'Enable tracking of a birth date with each customer record', - 'type' => 'checkbox', - }, - - { - 'key' => 'support-key', - 'section' => '', - 'description' => 'A support key enables access to commercial services delivered over the network, such as the payroll module, access to the internal ticket system, priority support and optional backups.', - 'type' => 'text', - }, - - { - 'key' => 'card-types', - 'section' => 'billing', - 'description' => 'Select one or more card types to enable only those card types. If no card types are selected, all card types are available.', - 'type' => 'selectmultiple', - 'select_enum' => \@card_types, - }, - - { - 'key' => 'dashboard-toplist', - 'section' => 'UI', - 'description' => 'List of items to display on the top of the front page', - 'type' => 'textarea', - }, - - { - 'key' => 'impending_recur_template', - 'section' => 'billing', - 'description' => 'Template file for alerts about looming first time recurrant billing. See the Text::Template documentation for details on the template substitition language. Also see packages with a flat price plan The following variables are available
    • $packages allowing $packages->[0] thru $packages->[n]
    • $package the first package, same as $packages->[0]
    • $recurdates allowing $recurdates->[0] thru $recurdates->[n]
    • $recurdate the first recurdate, same as $recurdate->[0]
    • $first
    • $last
    ', -#
  • $payby
  • $expdate most likely only confuse - 'type' => 'textarea', - }, - - { - 'key' => 'disable_setup_suspended_pkgs', - 'section' => 'billing', - 'description' => 'Disables charging of setup fees for suspended packages.', - 'type' => 'checkbox', - }, - - { - 'key' => 'password-generated-allcaps', - 'section' => 'password', - 'description' => 'Causes passwords automatically generated to consist entirely of capital letters', - 'type' => 'checkbox', - }, - - { - 'key' => 'datavolume-forcemegabytes', - 'section' => 'UI', - 'description' => 'All data volumes are expressed in megabytes', - 'type' => 'checkbox', - }, - - { - 'key' => 'datavolume-significantdigits', - 'section' => 'UI', - 'description' => 'number of significant digits to use to represent data volumes', - 'type' => 'text', - }, - - { - 'key' => 'disable_void_after', - 'section' => 'billing', - 'description' => 'Number of seconds after which freeside won\'t attempt to VOID a payment first when performing a refund.', - 'type' => 'text', - }, - - { - 'key' => 'disable_line_item_date_ranges', - 'section' => 'billing', - 'description' => 'Prevent freeside from automatically generating date ranges on invoice line items.', - 'type' => 'checkbox', - }, - - { - 'key' => 'cancel_credit_type', - 'section' => 'billing', - 'description' => 'The group to use for new, automatically generated credit reasons resulting from cancellation.', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::reason_type; - map { $_->typenum => $_->type } - FS::Record::qsearch('reason_type', { class=>'R' } ); - }, - 'option_sub' => sub { require FS::Record; - require FS::reason_type; - my $reason_type = FS::Record::qsearchs( - 'reason_type', { 'typenum' => shift } - ); - $reason_type ? $reason_type->type : ''; - }, - }, - - { - 'key' => 'referral_credit_type', - 'section' => 'billing', - 'description' => 'The group to use for new, automatically generated credit reasons resulting from referrals.', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::reason_type; - map { $_->typenum => $_->type } - FS::Record::qsearch('reason_type', { class=>'R' } ); - }, - 'option_sub' => sub { require FS::Record; - require FS::reason_type; - my $reason_type = FS::Record::qsearchs( - 'reason_type', { 'typenum' => shift } - ); - $reason_type ? $reason_type->type : ''; - }, - }, - - { - 'key' => 'signup_credit_type', - 'section' => 'billing', - 'description' => 'The group to use for new, automatically generated credit reasons resulting from signup and self-service declines.', - 'type' => 'select-sub', - 'options_sub' => sub { require FS::Record; - require FS::reason_type; - map { $_->typenum => $_->type } - FS::Record::qsearch('reason_type', { class=>'R' } ); - }, - 'option_sub' => sub { require FS::Record; - require FS::reason_type; - my $reason_type = FS::Record::qsearchs( - 'reason_type', { 'typenum' => shift } - ); - $reason_type ? $reason_type->type : ''; - }, - }, - -); - -1; - diff --git a/FS/FS/Cron/backup.pm b/FS/FS/Cron/backup.pm deleted file mode 100644 index 204069a12..000000000 --- a/FS/FS/Cron/backup.pm +++ /dev/null @@ -1,43 +0,0 @@ -package FS::Cron::backup; - -use strict; -use vars qw( @ISA @EXPORT_OK ); -use Exporter; -use FS::UID qw(driver_name datasrc); - -@ISA = qw( Exporter ); -@EXPORT_OK = qw( backup_scp ); - -sub backup_scp { - my $conf = new FS::Conf; - my $dest = $conf->config('dump-scpdest'); - if ( $dest ) { - datasrc =~ /dbname=([\w\.]+)$/ or die "unparsable datasrc ". datasrc; - my $database = $1; - eval "use Net::SCP qw(scp);"; - die $@ if $@; - if ( driver_name eq 'Pg' ) { - system("pg_dump $database >/var/tmp/$database.sql") - } else { - die "database dumps not yet supported for ". driver_name; - } - if ( $conf->config('dump-pgpid') ) { - eval 'use GnuPG;'; - die $@ if $@; - my $gpg = new GnuPG; - $gpg->encrypt( plaintext => "/var/tmp/$database.sql", - output => "/var/tmp/$database.gpg", - recipient => $conf->config('dump-pgpid'), - ); - chmod 0600, '/var/tmp/$database.gpg'; - scp("/var/tmp/$database.gpg", $dest); - unlink "/var/tmp/$database.gpg" or die $!; - } else { - chmod 0600, '/var/tmp/$database.sql'; - scp("/var/tmp/$database.sql", $dest); - } - unlink "/var/tmp/$database.sql" or die $!; - } -} - -1; diff --git a/FS/FS/Cron/bill.pm b/FS/FS/Cron/bill.pm deleted file mode 100644 index 7de2ff2f6..000000000 --- a/FS/FS/Cron/bill.pm +++ /dev/null @@ -1,150 +0,0 @@ -package FS::Cron::bill; - -use strict; -use vars qw( @ISA @EXPORT_OK ); -use Exporter; -use Date::Parse; -use FS::UID qw(dbh); -use FS::Record qw(qsearchs); -use FS::cust_main; -use FS::part_event; -use FS::part_event_condition; - -@ISA = qw( Exporter ); -@EXPORT_OK = qw ( bill ); - -sub bill { - - my %opt = @_; - - my $check_freq = $opt{'check_freq'} || '1d'; - - my $debug = 0; - $debug = 1 if $opt{'v'}; - $debug = $opt{'l'} if $opt{'l'}; - - $FS::cust_main::DEBUG = $debug; - #$FS::cust_event::DEBUG = $opt{'l'} if $opt{'l'}; - - my @search = (); - - push @search, "cust_main.payby = '". $opt{'p'}. "'" - if $opt{'p'}; - push @search, "cust_main.agentnum = ". $opt{'a'} - if $opt{'a'}; - - if ( @ARGV ) { - push @search, "( ". - join(' OR ', map "cust_main.custnum = $_", @ARGV ). - " )"; - } - - ### - # generate where_pkg/where_event search clause - ### - - #we're at now now (and later). - my($time)= $opt{'d'} ? str2time($opt{'d'}) : $^T; - $time += $opt{'y'} * 86400 if $opt{'y'}; - - my $invoice_time = $opt{'n'} ? $^T : $time; - - # select * from cust_main where - my $where_pkg = <<"END"; - 0 < ( select count(*) from cust_pkg - where cust_main.custnum = cust_pkg.custnum - and ( cancel is null or cancel = 0 ) - and ( setup is null or setup = 0 - or bill is null or bill <= $time - or ( expire is not null and expire <= $^T ) - or ( adjourn is not null and adjourn <= $^T ) - ) - ) -END - - my $where_event = join(' OR ', map { - my $eventtable = $_; - - my $join = FS::part_event_condition->join_conditions_sql( $eventtable ); - my $where = FS::part_event_condition->where_conditions_sql( $eventtable, - 'time'=>$time, - ); - - my $are_part_event = - "0 < ( SELECT COUNT(*) FROM part_event $join - WHERE check_freq = '$check_freq' - AND eventtable = '$eventtable' - AND ( disabled = '' OR disabled IS NULL ) - AND $where - ) - "; - - if ( $eventtable eq 'cust_main' ) { - $are_part_event; - } else { - "0 < ( SELECT COUNT(*) FROM $eventtable - WHERE cust_main.custnum = $eventtable.custnum - AND $are_part_event - ) - "; - } - - } FS::part_event->eventtables); - - push @search, "( $where_pkg OR $where_event )"; - - ### - # get a list of custnums - ### - - warn "searching for customers:\n". join("\n", @search). "\n" - if $opt{'v'} || $opt{'l'}; - - my $sth = dbh->prepare( - "SELECT custnum FROM cust_main". - " WHERE ". join(' AND ', @search) - ) or die dbh->errstr; - - $sth->execute or die $sth->errstr; - - my @custnums = map { $_->[0] } @{ $sth->fetchall_arrayref }; - - ### - # for each custnum, queue or make one customer object and bill - # (one at a time, to reduce memory footprint with large #s of customers) - ### - - foreach my $custnum ( @custnums ) { - - if ( $opt{'m'} ) { - - #add job to queue that calls bill_and_collect with options - my $queue = new FS::queue { - 'job' => 'FS::cust_main::queued_bill', - 'secure' => 'Y', - }; - my $error = $queue->insert( - 'custnum' => $custnum, - 'time' => $time, - 'invoice_time' => $invoice_time, - 'check_freq' => $check_freq, - 'resetup' => $opt{'s'} ? $opt{'s'} : 0, - ); - - } else { - - my $cust_main = qsearchs( 'cust_main', { 'custnum' => $custnum } ); - - $cust_main->bill_and_collect( - 'time' => $time, - 'invoice_time' => $invoice_time, - 'check_freq' => $check_freq, - 'resetup' => $opt{'s'}, - 'debug' => $debug, - ); - - } - - } - -} diff --git a/FS/FS/Cron/expire_user_pref.pm b/FS/FS/Cron/expire_user_pref.pm deleted file mode 100644 index 32269271e..000000000 --- a/FS/FS/Cron/expire_user_pref.pm +++ /dev/null @@ -1,20 +0,0 @@ -package FS::Cron::expire_user_pref; - -use vars qw( @ISA @EXPORT_OK); -use Exporter; -use FS::UID qw(dbh); - -@ISA = qw( Exporter ); -@EXPORT_OK = qw( expire_user_pref ); - -sub expire_user_pref { - my $sql = "DELETE FROM access_user_pref WHERE expiration IS NOT NULL". - " AND expiration < ?"; - my $sth = dbh->prepare($sql) or die dbh->errstr; - $sth->execute(time) or die $sth->errstr; - - dbh->commit or die dbh->errstr if $FS::UID::AutoCommit - -} - -1; diff --git a/FS/FS/Cron/notify.pm b/FS/FS/Cron/notify.pm deleted file mode 100644 index 23cf920b2..000000000 --- a/FS/FS/Cron/notify.pm +++ /dev/null @@ -1,149 +0,0 @@ -package FS::Cron::notify; - -use strict; -use vars qw( @ISA @EXPORT_OK $DEBUG ); -use Exporter; -use FS::UID qw( dbh driver_name ); -use FS::Record qw(qsearch); -use FS::cust_main; -use FS::cust_pkg; - -@ISA = qw( Exporter ); -@EXPORT_OK = qw ( notify_flat_delay ); -$DEBUG = 0; - -sub notify_flat_delay { - - my %opt = @_; - - my $oldAutoCommit = $FS::UID::AutoCommit; - $DEBUG = 1 if $opt{'v'}; - - #we're at now now (and later). - my($time) = $^T; - - my $integer = driver_name =~ /^mysql/ ? 'SIGNED' : 'INTEGER'; - - # select * from cust_pkg where - my $where_pkg = <<"END"; - where ( cancel is null or cancel = 0 ) - and ( bill > 0 ) - and - 0 < ( select count(*) from part_pkg - where cust_pkg.pkgpart = part_pkg.pkgpart - and part_pkg.plan = 'flat_delayed' - and 0 < ( select count(*) from part_pkg_option - where part_pkg.pkgpart = part_pkg_option.pkgpart - and part_pkg_option.optionname = 'recur_notify' - and part_pkg_option.optionvalue > 0 - and 0 <= ( $time - + CAST( part_pkg_option.optionvalue AS $integer ) - * 86400 - - cust_pkg.bill - ) - and ( cust_pkg.expire is null - or cust_pkg.expire > ( $time - + CAST( part_pkg_option.optionvalue AS $integer ) - * 86400 - ) -END - -#/* and ( cust_pkg.adjourn is null -# or cust_pkg.adjourn > $time -#-- Should notify suspended ones + cast(part_pkg_option.optionvalue as $integer) -# * 86400 -#*/ - - $where_pkg .= <<"END"; - ) - ) - ) - and - 0 = ( select count(*) from cust_pkg_option - where cust_pkg.pkgnum = cust_pkg_option.pkgnum - and cust_pkg_option.optionname = 'impending_recur_notification_sent' - and cust_pkg_option.optionvalue = 1 - ) -END - - if ($opt{a}) { - $where_pkg .= <cust_main; - my $custnum = $cust_pkg[0]->custnum; - warn "working on $custnum" if $DEBUG; - while (scalar(@cust_pkg)){ - last if ($cust_pkg[0]->custnum != $custnum); - warn "storing information on " . $cust_pkg[0]->pkgnum if $DEBUG; - push @packages, $cust_pkg[0]->part_pkg->pkg; - push @recurdates, $cust_pkg[0]->bill; - push @cust_pkgs, $cust_pkg[0]; - shift @cust_pkg; - } - my $error = - $cust_main->notify( 'impending_recur_template', - 'extra_fields' => { 'packages' => \@packages, - 'recurdates' => \@recurdates, - 'package' => $packages[0], - 'recurdate' => $recurdates[0], - }, - ); - warn "Error notifying, custnum ". $cust_main->custnum. ": $error" if $error; - - unless ($error) { - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - for (@cust_pkgs) { - my %options = ($_->options, 'impending_recur_notification_sent' => 1 ); - $error = $_->replace( $_, options => \%options ); - if ($error){ - $dbh->rollback or die $dbh->errstr if $oldAutoCommit; - die "Error updating package options for customer". $cust_main->custnum. - ": $error" if $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - } - - @packages = (); - @recurdates = (); - @cust_pkgs = (); - - } - - dbh->commit or die dbh->errstr if $oldAutoCommit; - -} - -1; diff --git a/FS/FS/Cron/vacuum.pm b/FS/FS/Cron/vacuum.pm deleted file mode 100644 index 075572d50..000000000 --- a/FS/FS/Cron/vacuum.pm +++ /dev/null @@ -1,23 +0,0 @@ -package FS::Cron::vacuum; - -use vars qw( @ISA @EXPORT_OK); -use Exporter; -use FS::UID qw(driver_name dbh); -use FS::Schema qw(dbdef); - -@ISA = qw( Exporter ); -@EXPORT_OK = qw( vacuum ); - -sub vacuum { - - if ( driver_name eq 'Pg' ) { - dbh->{AutoCommit} = 1; #so we can vacuum - foreach my $table ( dbdef->tables ) { - my $sth = dbh->prepare("VACUUM ANALYZE $table") or die dbh->errstr; - $sth->execute or die $sth->errstr; - } - } - -} - -1; diff --git a/FS/FS/CurrentUser.pm b/FS/FS/CurrentUser.pm deleted file mode 100644 index bcd337d2c..000000000 --- a/FS/FS/CurrentUser.pm +++ /dev/null @@ -1,67 +0,0 @@ -package FS::CurrentUser; - -use vars qw($CurrentUser $upgrade_hack); - -#not at compile-time, circular dependancey causes trouble -#use FS::Record qw(qsearchs); -#use FS::access_user; - -$upgrade_hack = 0; - -=head1 NAME - -FS::CurrentUser - Package representing the current user - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=cut - -sub load_user { - my( $class, $user ) = @_; #, $pass - - if ( $upgrade_hack ) { - return $CurrentUser = new FS::CurrentUser::BootstrapUser; - } - - #return "" if $user =~ /^fs_(queue|selfservice)$/; - - #not the best thing in the world... - eval "use FS::Record qw(qsearchs);"; - die $@ if $@; - eval "use FS::access_user;"; - die $@ if $@; - - $CurrentUser = qsearchs('access_user', { - 'username' => $user, - #'_password' => - 'disabled' => '', - } ); - - die "unknown user: $user" unless $CurrentUser; # or bad password - - $CurrentUser; -} - -=head1 BUGS - -Creepy crawlies - -=head1 SEE ALSO - -=cut - -package FS::CurrentUser::BootstrapUser; - -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); -} - -sub AUTOLOAD { 1 }; - -1; - diff --git a/FS/FS/Daemon.pm b/FS/FS/Daemon.pm deleted file mode 100644 index 7e0d45c20..000000000 --- a/FS/FS/Daemon.pm +++ /dev/null @@ -1,92 +0,0 @@ -package FS::Daemon; - -use vars qw( @ISA @EXPORT_OK ); -use vars qw( $pid_dir $me $pid_file $sigint $sigterm $logfile ); -use Exporter; -use Fcntl qw(:flock); -use POSIX qw(setsid); -use IO::File; -use Date::Format; - -#this is a simple refactoring of the stuff from freeside-queued, just to -#avoid duplicate code. eventually this should use something from CPAN. - -@ISA = qw(Exporter); -@EXPORT_OK = qw( daemonize1 drop_root daemonize2 sigint sigterm logfile ); - -$pid_dir = '/var/run'; - -sub daemonize1 { - $me = shift; - - $pid_file = "$pid_dir/$me"; - $pid_file .= '.'.shift if scalar(@_); - $pid_file .= '.pid'; - - chdir "/" or die "Can't chdir to /: $!"; - open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; - defined(my $pid = fork) or die "Can't fork: $!"; - if ( $pid ) { - print "$me started with pid $pid\n"; #logging to $log_file\n"; - exit unless $pid_file; - my $pidfh = new IO::File ">$pid_file" or exit; - print $pidfh "$pid\n"; - exit; - } - - #sub REAPER { my $pid = wait; $SIG{CHLD} = \&REAPER; $kids--; } - #$SIG{CHLD} = \&REAPER; - $sigterm = 0; - $sigint = 0; - $SIG{INT} = sub { warn "SIGINT received; shutting down\n"; $sigint++; }; - $SIG{TERM} = sub { warn "SIGTERM received; shutting down\n"; $sigterm++; }; -} - -sub drop_root { - my $freeside_gid = scalar(getgrnam('freeside')) - or die "can't find freeside group\n"; - $) = $freeside_gid; - $( = $freeside_gid; - #if freebsd can't setuid(), presumably it can't setgid() either. grr fleabsd - ($(,$)) = ($),$(); - $) = $freeside_gid; - - $> = $FS::UID::freeside_uid; - $< = $FS::UID::freeside_uid; - #freebsd is sofa king broken, won't setuid() - ($<,$>) = ($>,$<); - $> = $FS::UID::freeside_uid; -} - -sub daemonize2 { - open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!"; - setsid or die "Can't start a new session: $!"; - open STDERR, '>&STDOUT' or die "Can't dup stdout: $!"; - - $SIG{__DIE__} = \&_die; - $SIG{__WARN__} = \&_logmsg; - - warn "$me starting\n"; -} - -sub sigint { $sigint; } -sub sigterm { $sigterm; } - -sub logfile { $logfile = shift; } #_logmsg('test'); } - -sub _die { - my $msg = shift; - unlink $pid_file if -e $pid_file; - _logmsg($msg); -} - -sub _logmsg { - chomp( my $msg = shift ); - my $log = new IO::File ">>$logfile"; - flock($log, LOCK_EX); - seek($log, 0, 2); - print $log "[". time2str("%a %b %e %T %Y",time). "] [$$] $msg\n"; - flock($log, LOCK_UN); - close $log; -} - diff --git a/FS/FS/InitHandler.pm b/FS/FS/InitHandler.pm deleted file mode 100644 index 5038cf352..000000000 --- a/FS/FS/InitHandler.pm +++ /dev/null @@ -1,91 +0,0 @@ -package FS::InitHandler; - -# this leaks memory under graceful restarts and i wouldn't use it on any -# modern server. useful for very slow machines with memory to spare, just -# always do a full restart - -use strict; -use vars qw($DEBUG); -use FS::UID qw(adminsuidsetup); -use FS::Record; - -$DEBUG = 1; - -sub handler { - - use Date::Format; - use Date::Parse; - use Tie::IxHash; - use HTML::Entities; - use IO::Handle; - use IO::File; - use String::Approx; - use HTML::Widgets::SelectLayers 0.02; - #use FS::UID; - #use FS::Record; - use FS::Conf; - use FS::CGI; - use FS::Msgcat; - - use FS::agent; - use FS::agent_type; - use FS::domain_record; - use FS::cust_bill; - use FS::cust_bill_pay; - use FS::cust_credit; - use FS::cust_credit_bill; - use FS::cust_main; - use FS::cust_main_county; - use FS::cust_pay; - use FS::cust_pkg; - use FS::cust_refund; - use FS::cust_svc; - use FS::nas; - use FS::part_bill_event; - use FS::part_pkg; - use FS::part_referral; - use FS::part_svc; - use FS::pkg_svc; - use FS::port; - use FS::queue; - use FS::raddb; - use FS::session; - use FS::svc_acct; - use FS::svc_acct_pop; - use FS::svc_domain; - use FS::svc_forward; - use FS::svc_www; - use FS::type_pkgs; - use FS::part_export; - use FS::part_export_option; - use FS::export_svc; - use FS::msgcat; - - warn "[FS::InitHandler] handler called\n" if $DEBUG; - - #this is sure to be broken on freebsd - $> = $FS::UID::freeside_uid; - - open(MAPSECRETS,"<$FS::UID::conf_dir/mapsecrets") - or die "can't read $FS::UID::conf_dir/mapsecrets: $!"; - - my %seen; - while () { - next if /^\s*(#|$)/; - /^([\w\-\.]+)\s(.*)$/ - or do { warn "strange line in mapsecrets: $_"; next; }; - my($user, $datasrc) = ($1, $2); - next if $seen{$datasrc}++; - warn "[FS::InitHandler] preloading $datasrc for $user\n" if $DEBUG; - adminsuidsetup($user); - } - - close MAPSECRETS; - - #lalala probably broken on freebsd - ($<, $>) = ($>, $<); - $< = 0; - -} - -1; diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm deleted file mode 100644 index 54467a1fb..000000000 --- a/FS/FS/Misc.pm +++ /dev/null @@ -1,576 +0,0 @@ -package FS::Misc; - -use strict; -use vars qw ( @ISA @EXPORT_OK $DEBUG ); -use Exporter; -use Carp; -use Data::Dumper; -#do NOT depend on any FS:: modules here, causes weird (sometimes unreproducable -#until on client machine) dependancy loops. put them in FS::Misc::Something -#instead - -@ISA = qw( Exporter ); -@EXPORT_OK = qw( send_email send_fax - states_hash counties state_label - card_types - generate_ps do_print - ); - -$DEBUG = 0; - -=head1 NAME - -FS::Misc - Miscellaneous subroutines - -=head1 SYNOPSIS - - use FS::Misc qw(send_email); - - send_email(); - -=head1 DESCRIPTION - -Miscellaneous subroutines. This module contains miscellaneous subroutines -called from multiple other modules. These are not OO or necessarily related, -but are collected here to elimiate code duplication. - -=head1 SUBROUTINES - -=over 4 - -=item send_email OPTION => VALUE ... - -Options: - -I - (required) - -I - (required) comma-separated scalar or arrayref of recipients - -I - (required) - -I - (optional) MIME type for the body - -I - (required unless I is true) arrayref of body text lines - -I - (optional, but required if I is true) arrayref of MIME::Entity->build PARAMHASH refs or MIME::Entity objects. These will be passed as arguments to MIME::Entity->attach(). - -I - (optional) when set true, send_email will ignore the I option and simply construct a message with the given I. In this case, -I, if specified, overrides the default "multipart/mixed" for the outermost MIME container. - -I - (optional) when using nobody, optional top-level MIME -encoding which, if specified, overrides the default "7bit". - -I - (optional) type parameter for multipart/related messages - -=cut - -use vars qw( $conf ); -use Date::Format; -use Mail::Header; -use Mail::Internet 2.00; -use MIME::Entity; -use FS::UID; - -FS::UID->install_callback( sub { - $conf = new FS::Conf; -} ); - -sub send_email { - my(%options) = @_; - if ( $DEBUG ) { - my %doptions = %options; - $doptions{'body'} = '(full body not shown in debug)'; - warn "FS::Misc::send_email called with options:\n ". Dumper(\%doptions); -# join("\n", map { " $_: ". $options{$_} } keys %options ). "\n" - } - - $ENV{MAILADDRESS} = $options{'from'}; - my $to = ref($options{to}) ? join(', ', @{ $options{to} } ) : $options{to}; - - my @mimeargs = (); - my @mimeparts = (); - if ( $options{'nobody'} ) { - - croak "'mimeparts' option required when 'nobody' option given\n" - unless $options{'mimeparts'}; - - @mimeparts = @{$options{'mimeparts'}}; - - @mimeargs = ( - 'Type' => ( $options{'content-type'} || 'multipart/mixed' ), - 'Encoding' => ( $options{'content-encoding'} || '7bit' ), - ); - - } else { - - @mimeparts = @{$options{'mimeparts'}} - if ref($options{'mimeparts'}) eq 'ARRAY'; - - if (scalar(@mimeparts)) { - - @mimeargs = ( - 'Type' => 'multipart/mixed', - 'Encoding' => '7bit', - ); - - unshift @mimeparts, { - 'Type' => ( $options{'content-type'} || 'text/plain' ), - 'Data' => $options{'body'}, - 'Encoding' => ( $options{'content-type'} ? '-SUGGEST' : '7bit' ), - 'Disposition' => 'inline', - }; - - } else { - - @mimeargs = ( - 'Type' => ( $options{'content-type'} || 'text/plain' ), - 'Data' => $options{'body'}, - 'Encoding' => ( $options{'content-type'} ? '-SUGGEST' : '7bit' ), - ); - - } - - } - - my $domain; - if ( $options{'from'} =~ /\@([\w\.\-]+)/ ) { - $domain = $1; - } else { - warn 'no domain found in invoice from address '. $options{'from'}. - '; constructing Message-ID @example.com'; - $domain = 'example.com'; - } - my $message_id = join('.', rand()*(2**32), $$, time). "\@$domain"; - - my $message = MIME::Entity->build( - 'From' => $options{'from'}, - 'To' => $to, - 'Sender' => $options{'from'}, - 'Reply-To' => $options{'from'}, - 'Date' => time2str("%a, %d %b %Y %X %z", time), - 'Subject' => $options{'subject'}, - 'Message-ID' => "<$message_id>", - @mimeargs, - ); - - if ( $options{'type'} ) { - #false laziness w/cust_bill::generate_email - $message->head->replace('Content-type', - $message->mime_type. - '; boundary="'. $message->head->multipart_boundary. '"'. - '; type='. $options{'type'} - ); - } - - foreach my $part (@mimeparts) { - - if ( UNIVERSAL::isa($part, 'MIME::Entity') ) { - - warn "attaching MIME part from MIME::Entity object\n" - if $DEBUG; - $message->add_part($part); - - } elsif ( ref($part) eq 'HASH' ) { - - warn "attaching MIME part from hashref:\n". - join("\n", map " $_: ".$part->{$_}, keys %$part ). "\n" - if $DEBUG; - $message->attach(%$part); - - } else { - croak "mimepart $part isn't a hashref or MIME::Entity object!"; - } - - } - - my $smtpmachine = $conf->config('smtpmachine'); - $!=0; - - $message->mysmtpsend( 'Host' => $smtpmachine, - 'MailFrom' => $options{'from'}, - ); - -} - -#this kludges a "mysmtpsend" method into Mail::Internet for send_email above -#now updated for MailTools v2! -package Mail::Internet; - -use Mail::Address; -use Net::SMTP; -use Net::Domain; - -sub Mail::Internet::mysmtpsend($@) { - my ($self, %opt) = @_; - - my $host = $opt{Host}; - my $envelope = $opt{MailFrom}; # || mailaddress(); - my $quit = 1; - - my ($smtp, @hello); - - push @hello, Hello => $opt{Hello} - if defined $opt{Hello}; - - push @hello, Port => $opt{Port} - if exists $opt{Port}; - - push @hello, Debug => $opt{Debug} - if exists $opt{Debug}; - -# if(!defined $host) -# { local $SIG{__DIE__}; -# my @hosts = qw(mailhost localhost); -# unshift @hosts, split /\:/, $ENV{SMTPHOSTS} -# if defined $ENV{SMTPHOSTS}; -# -# foreach $host (@hosts) -# { $smtp = eval { Net::SMTP->new($host, @hello) }; -# last if defined $smtp; -# } -# } -# elsif(ref($host) && UNIVERSAL::isa($host,'Net::SMTP')) - if(ref($host) && UNIVERSAL::isa($host,'Net::SMTP')) - { $smtp = $host; - $quit = 0; - } - else - { #local $SIG{__DIE__}; - #$smtp = eval { Net::SMTP->new($host, @hello) }; - $smtp = Net::SMTP->new($host, @hello); - } - - unless ( defined($smtp) ) { - my $err = $!; - $err =~ s/Invalid argument/Unknown host/; - return "can't connect to $host: $err" - } - - my $head = $self->cleaned_header_dup; - - $head->delete('Bcc'); - - # Who is it to - - my @rcpt = map { ref $_ ? @$_ : $_ } grep { defined } @opt{'To','Cc','Bcc'}; - @rcpt = map { $head->get($_) } qw(To Cc Bcc) - unless @rcpt; - - my @addr = map {$_->address} Mail::Address->parse(@rcpt); - #@addr or return (); - return 'No valid destination addresses found!' - unless(@addr); - - # Send it - - my $ok = $smtp->mail($envelope) - && $smtp->to(@addr) - && $smtp->data(join("", @{$head->header}, "\n", @{$self->body})); - - #$quit && $smtp->quit; - #$ok ? @addr : (); - if ( $ok ) { - $quit && $smtp->quit; - return ''; - } else { - return $smtp->code. ' '. $smtp->message; - } -} -package FS::Misc; -#eokludge - -=item send_fax OPTION => VALUE ... - -Options: - -I - (required) 10-digit phone number w/ area code - -I - (required) Array ref containing PostScript or TIFF Class F document - --or- - -I - (required) Filename of PostScript TIFF Class F document - -...any other options will be passed to L - - -=cut - -sub send_fax { - - my %options = @_; - - die 'HylaFAX support has not been configured.' - unless $conf->exists('hylafax'); - - eval { - require Fax::Hylafax::Client; - }; - - if ($@) { - if ($@ =~ /^Can't locate Fax.*/) { - die "You must have Fax::Hylafax::Client installed to use invoice faxing." - } else { - die $@; - } - } - - my %hylafax_opts = map { split /\s+/ } $conf->config('hylafax'); - - die 'Called send_fax without a \'dialstring\'.' - unless exists($options{'dialstring'}); - - if (exists($options{'docdata'}) and ref($options{'docdata'}) eq 'ARRAY') { - my $dir = $FS::UID::conf_dir. "/cache.". $FS::UID::datasrc; - my $fh = new File::Temp( - TEMPLATE => 'faxdoc.'. $options{'dialstring'} . '.XXXXXXXX', - DIR => $dir, - UNLINK => 0, - ) or die "can't open temp file: $!\n"; - - $options{docfile} = $fh->filename; - - print $fh @{$options{'docdata'}}; - close $fh; - - delete $options{'docdata'}; - } - - die 'Called send_fax without a \'docfile\' or \'docdata\'.' - unless exists($options{'docfile'}); - - #FIXME: Need to send canonical dialstring to HylaFAX, but this only - # works in the US. - - $options{'dialstring'} =~ s/[^\d\+]//g; - if ($options{'dialstring'} =~ /^\d{10}$/) { - $options{dialstring} = '+1' . $options{'dialstring'}; - } else { - return 'Invalid dialstring ' . $options{'dialstring'} . '.'; - } - - my $faxjob = &Fax::Hylafax::Client::sendfax(%options, %hylafax_opts); - - if ($faxjob->success) { - warn "Successfully queued fax to '$options{dialstring}' with jobid " . - $faxjob->jobid - if $DEBUG; - return ''; - } else { - return 'Error while sending FAX: ' . $faxjob->trace; - } - -} - -=item states_hash COUNTRY - -Returns a list of key/value pairs containing state (or other sub-country -division) abbriviations and names. - -=cut - -use FS::Record qw(qsearch); -use Locale::SubCountry; - -sub states_hash { - my($country) = @_; - - my @states = -# sort - map { s/[\n\r]//g; $_; } - map { $_->state; } - qsearch({ - 'select' => 'state', - 'table' => 'cust_main_county', - 'hashref' => { 'country' => $country }, - 'extra_sql' => 'GROUP BY state', - }); - - #it could throw a fatal "Invalid country code" error (for example "AX") - my $subcountry = eval { new Locale::SubCountry($country) } - or return ( '', '(n/a)' ); - - #"i see your schwartz is as big as mine!" - map { ( $_->[0] => $_->[1] ) } - sort { $a->[1] cmp $b->[1] } - map { [ $_ => state_label($_, $subcountry) ] } - @states; -} - -=item counties STATE COUNTRY - -Returns a list of counties for this state and country. - -=cut - -sub counties { - my( $state, $country ) = @_; - - sort map { s/[\n\r]//g; $_; } - map { $_->county } - qsearch({ - 'select' => 'DISTINCT county', - 'table' => 'cust_main_county', - 'hashref' => { 'state' => $state, - 'country' => $country, - }, - }); -} - -=item state_label STATE COUNTRY_OR_LOCALE_SUBCOUNRY_OBJECT - -=cut - -sub state_label { - my( $state, $country ) = @_; - - unless ( ref($country) ) { - $country = eval { new Locale::SubCountry($country) } - or return'(n/a)'; - - } - - # US kludge to avoid changing existing behaviour - # also we actually *use* the abbriviations... - my $full_name = $country->country_code eq 'US' - ? '' - : $country->full_name($state); - - $full_name = '' if $full_name eq 'unknown'; - $full_name =~ s/\(see also.*\)\s*$//; - $full_name .= " ($state)" if $full_name; - - $full_name || $state || '(n/a)'; - -} - -=item card_types - -Returns a hash reference of the accepted credit card types. Keys are shorter -identifiers and values are the longer strings used by the system (see -L). - -=cut - -#$conf from above - -sub card_types { - my $conf = new FS::Conf; - - my %card_types = ( - #displayname #value (Business::CreditCard) - "VISA" => "VISA card", - "MasterCard" => "MasterCard", - "Discover" => "Discover card", - "American Express" => "American Express card", - "Diner's Club/Carte Blanche" => "Diner's Club/Carte Blanche", - "enRoute" => "enRoute", - "JCB" => "JCB", - "BankCard" => "BankCard", - "Switch" => "Switch", - "Solo" => "Solo", - ); - my @conf_card_types = grep { ! /^\s*$/ } $conf->config('card-types'); - if ( @conf_card_types ) { - #perhaps the hash is backwards for this, but this way works better for - #usage in selfservice - %card_types = map { $_ => $card_types{$_} } - grep { - my $d = $_; - grep { $card_types{$d} eq $_ } @conf_card_types - } - keys %card_types; - } - - \%card_types; -} - -=item generate_ps FILENAME - -Returns an postscript rendition of the LaTex file, as a scalar. -FILENAME does not contain the .tex suffix and is unlinked by this function. - -=cut - -use String::ShellQuote; - -sub generate_ps { - my $file = shift; - - my $dir = $FS::UID::conf_dir. "/cache.". $FS::UID::datasrc; - chdir($dir); - - my $sfile = shell_quote $file; - - system("pslatex $sfile.tex >/dev/null 2>&1") == 0 - or die "pslatex $file.tex failed; see $file.log for details?\n"; - system("pslatex $sfile.tex >/dev/null 2>&1") == 0 - or die "pslatex $file.tex failed; see $file.log for details?\n"; - - system('dvips', '-q', '-t', 'letter', "$file.dvi", '-o', "$file.ps" ) == 0 - or die "dvips failed"; - - open(POSTSCRIPT, "<$file.ps") - or die "can't open $file.ps: $! (error in LaTeX template?)\n"; - - unlink("$file.dvi", "$file.log", "$file.aux", "$file.ps", "$file.tex"); - - my $ps = ''; - - if ( $conf->exists('lpr-postscript_prefix') ) { - my $prefix = $conf->config('lpr-postscript_prefix'); - $ps .= eval qq("$prefix"); - } - - while () { - $ps .= $_; - } - - close POSTSCRIPT; - - if ( $conf->exists('lpr-postscript_suffix') ) { - my $suffix = $conf->config('lpr-postscript_suffix'); - $ps .= eval qq("$suffix"); - } - - return $ps; - -} - -=item print ARRAYREF - -Sends the lines in ARRAYREF to the printer. - -=cut - -use IPC::Run3; - -sub do_print { - my $data = shift; - - my $lpr = $conf->config('lpr'); - - my $outerr = ''; - run3 $lpr, $data, \$outerr, \$outerr; - if ( $? ) { - $outerr = ": $outerr" if length($outerr); - die "Error from $lpr (exit status ". ($?>>8). ")$outerr\n"; - } - -} - -=back - -=head1 BUGS - -This package exists. - -=head1 SEE ALSO - -L, L, L, the base documentation. - -L - -=cut - -1; diff --git a/FS/FS/Misc/prune.pm b/FS/FS/Misc/prune.pm deleted file mode 100644 index 371f31cbb..000000000 --- a/FS/FS/Misc/prune.pm +++ /dev/null @@ -1,126 +0,0 @@ -package FS::Misc::prune; - -use strict; -use vars qw ( @ISA @EXPORT_OK $DEBUG ); -use Exporter; -use FS::Record qw(dbh qsearch); -use FS::cust_credit_refund; -#use FS::cust_credit_bill; -#use FS::cust_bill_pay; -#use FS::cust_pay_refund; - -@ISA = qw( Exporter ); -@EXPORT_OK = qw( prune_applications ); - -=head1 NAME - -FS::Misc::prune - misc. pruning subroutines - -=head1 SYNOPSIS - -use FS::Misc::prune qw(prune_applications); - -prune_applications(); - -=item prune_applications OPTION_HASH - -Removes applications of credits to refunds in the event that the database -is corrupt and either the credits or refunds are missing (see -L, L, and L). -If the OPTION_HASH contains the element 'dry_run' then a report of -affected records is returned rather than actually deleting the records. - -=cut - -sub prune_applications { - my $options = shift; - my $dbh = dbh - - local $DEBUG = 1 if exists($options->{debug}); - my $ccr = < { clause => $ccr, - link1 => 'crednum', - link2 => 'refundnum', - }, -# 'cust_credit_bill' => { clause => $ccb, -# link1 => 'crednum', -# link2 => 'refundnum', -# }, -# 'cust_bill_pay' => { clause => $cbp, -# link1 => 'crednum', -# link2 => 'refundnum', -# }, -# 'cust_pay_refund' => { clause => $cpr, -# link1 => 'crednum', -# link2 => 'refundnum', -# }, - ); - - if ( exists($options->{dry_run}) ) { - my @response = (); - foreach my $table (keys %strays) { - my $clause = $strays{$table}->{clause}; - my $link1 = $strays{$table}->{link1}; - my $link2 = $strays{$table}->{link2}; - my @rec = qsearch($table, {}, '', $clause); - my $keyname = $rec[0]->primary_key if $rec[0]; - foreach (@rec) { - push @response, "$table " .$_->$keyname . " claims attachment to ". - "$link1 " . $_->$link1 . " and $link2 " . $_->$link2 . "\n"; - } - } - return (@response); - } else { - foreach (keys %strays) { - my $statement = "DELETE FROM $_ " . $strays{$_}->{clause}; - warn $statement if $DEBUG; - my $sth = $dbh->prepare($statement) - or die $dbh->errstr; - $sth->execute - or die $sth->errstr; - } - return (); - } -} - -=back - -=head1 BUGS - -=cut - -1; - diff --git a/FS/FS/Msgcat.pm b/FS/FS/Msgcat.pm deleted file mode 100644 index 625743dc0..000000000 --- a/FS/FS/Msgcat.pm +++ /dev/null @@ -1,98 +0,0 @@ -package FS::Msgcat; - -use strict; -use vars qw( @ISA @EXPORT_OK $conf $locale $debug ); -use Exporter; -use FS::UID; -#use FS::Record qw( qsearchs ); # wtf? won't import... -use FS::Record; -use FS::Conf; -use FS::msgcat; - -@ISA = qw(Exporter); -@EXPORT_OK = qw( gettext geterror ); - -$FS::UID::callback{'Msgcat'} = sub { - $conf = new FS::Conf; - $locale = $conf->config('locale') || 'en_US'; - $debug = $conf->exists('show-msgcat-codes') -}; - -=head1 NAME - -FS::Msgcat - Message catalog functions - -=head1 SYNOPSIS - - use FS::Msgcat qw(gettext geterror); - - #simple interface for retreiving messages... - $message = gettext('msgcode'); - #or errors (includes the error code) - $message = geterror('msgcode'); - -=head1 DESCRIPTION - -FS::Msgcat provides functions to use the message catalog. If you want to -maintain the message catalog database, see L instead. - -=head1 SUBROUTINES - -=over 4 - -=item gettext MSGCODE - -Returns the full message for the supplied message code. - -=cut - -sub gettext { - $debug ? geterror(@_) : _gettext(@_); -} - -sub _gettext { - my $msgcode = shift; - my $msgcat = FS::Record::qsearchs('msgcat', { - 'msgcode' => $msgcode, - 'locale' => $locale - } ); - if ( $msgcat ) { - $msgcat->msg; - } else { - warn "WARNING: message for msgcode $msgcode in locale $locale not found"; - $msgcode; - } - -} - -=item geterror MSGCODE - -Returns the full message for the supplied message code, including the message -code. - -=cut - -sub geterror { - my $msgcode = shift; - my $msg = _gettext($msgcode); - if ( $msg eq $msgcode ) { - "Error code $msgcode (message for locale $locale not found)"; - } else { - "$msg (error code $msgcode)"; - } -} - -=back - -=head1 BUGS - -i18n/l10n, eek - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/Pony.pm b/FS/FS/Pony.pm deleted file mode 100644 index c37dd7855..000000000 --- a/FS/FS/Pony.pm +++ /dev/null @@ -1,23 +0,0 @@ -package FS::Pony; - -=head1 NAME - -FS::Pony - A pony - -=head1 SYNOPSYS - -use FS::Pony; # <-- yours! - -=head1 DESCRIPTION - -We told you it came with a pony. - -=head1 BUGS - -=head1 SEE ALSO - -http://420.am/~ivan/nopony.jpg - -=cut - -1; diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm deleted file mode 100644 index db940034d..000000000 --- a/FS/FS/Record.pm +++ /dev/null @@ -1,2351 +0,0 @@ -package FS::Record; - -use strict; -use vars qw( $AUTOLOAD @ISA @EXPORT_OK $DEBUG - $conf $me - %virtual_fields_cache $nowarn_identical $no_update_diff ); -use Exporter; -use Carp qw(carp cluck croak confess); -use File::CounterFile; -use Locale::Country; -use DBI qw(:sql_types); -use DBIx::DBSchema 0.33; -use FS::UID qw(dbh getotaker datasrc driver_name); -use FS::CurrentUser; -use FS::Schema qw(dbdef); -use FS::SearchCache; -use FS::Msgcat qw(gettext); -use FS::Conf; - -use FS::part_virtual_field; - -use Tie::IxHash; - -@ISA = qw(Exporter); - -#export dbdef for now... everything else expects to find it here -@EXPORT_OK = qw(dbh fields hfields qsearch qsearchs dbdef jsearch str2time_sql); - -$DEBUG = 0; -$me = '[FS::Record]'; - -$nowarn_identical = 0; -$no_update_diff = 0; - -my $rsa_module; -my $rsa_loaded; -my $rsa_encrypt; -my $rsa_decrypt; - -FS::UID->install_callback( sub { - $conf = new FS::Conf; - $File::CounterFile::DEFAULT_DIR = $conf->base_dir . "/counters.". datasrc; -} ); - - -=head1 NAME - -FS::Record - Database record objects - -=head1 SYNOPSIS - - use FS::Record; - use FS::Record qw(dbh fields qsearch qsearchs); - - $record = new FS::Record 'table', \%hash; - $record = new FS::Record 'table', { 'column' => 'value', ... }; - - $record = qsearchs FS::Record 'table', \%hash; - $record = qsearchs FS::Record 'table', { 'column' => 'value', ... }; - @records = qsearch FS::Record 'table', \%hash; - @records = qsearch FS::Record 'table', { 'column' => 'value', ... }; - - $table = $record->table; - $dbdef_table = $record->dbdef_table; - - $value = $record->get('column'); - $value = $record->getfield('column'); - $value = $record->column; - - $record->set( 'column' => 'value' ); - $record->setfield( 'column' => 'value' ); - $record->column('value'); - - %hash = $record->hash; - - $hashref = $record->hashref; - - $error = $record->insert; - - $error = $record->delete; - - $error = $new_record->replace($old_record); - - # external use deprecated - handled by the database (at least for Pg, mysql) - $value = $record->unique('column'); - - $error = $record->ut_float('column'); - $error = $record->ut_floatn('column'); - $error = $record->ut_number('column'); - $error = $record->ut_numbern('column'); - $error = $record->ut_snumber('column'); - $error = $record->ut_snumbern('column'); - $error = $record->ut_money('column'); - $error = $record->ut_text('column'); - $error = $record->ut_textn('column'); - $error = $record->ut_alpha('column'); - $error = $record->ut_alphan('column'); - $error = $record->ut_phonen('column'); - $error = $record->ut_anything('column'); - $error = $record->ut_name('column'); - - $quoted_value = _quote($value,'table','field'); - - #deprecated - $fields = hfields('table'); - if ( $fields->{Field} ) { # etc. - - @fields = fields 'table'; #as a subroutine - @fields = $record->fields; #as a method call - - -=head1 DESCRIPTION - -(Mostly) object-oriented interface to database records. Records are currently -implemented on top of DBI. FS::Record is intended as a base class for -table-specific classes to inherit from, i.e. FS::cust_main. - -=head1 CONSTRUCTORS - -=over 4 - -=item new [ TABLE, ] HASHREF - -Creates a new record. It doesn't store it in the database, though. See -L<"insert"> for that. - -Note that the object stores this hash reference, not a distinct copy of the -hash it points to. You can ask the object for a copy with the I -method. - -TABLE can only be omitted when a dervived class overrides the table method. - -=cut - -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); - - unless ( defined ( $self->table ) ) { - $self->{'Table'} = shift; - carp "warning: FS::Record::new called with table name ". $self->{'Table'}; - } - - $self->{'Hash'} = shift; - - foreach my $field ( grep !defined($self->{'Hash'}{$_}), $self->fields ) { - $self->{'Hash'}{$field}=''; - } - - $self->_rebless if $self->can('_rebless'); - - $self->{'modified'} = 0; - - $self->_cache($self->{'Hash'}, shift) if $self->can('_cache') && @_; - - $self; -} - -sub new_or_cached { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); - - $self->{'Table'} = shift unless defined ( $self->table ); - - my $hashref = $self->{'Hash'} = shift; - my $cache = shift; - if ( defined( $cache->cache->{$hashref->{$cache->key}} ) ) { - my $obj = $cache->cache->{$hashref->{$cache->key}}; - $obj->_cache($hashref, $cache) if $obj->can('_cache'); - $obj; - } else { - $cache->cache->{$hashref->{$cache->key}} = $self->new($hashref, $cache); - } - -} - -sub create { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); - if ( defined $self->table ) { - cluck "create constructor is deprecated, use new!"; - $self->new(@_); - } else { - croak "FS::Record::create called (not from a subclass)!"; - } -} - -=item qsearch PARAMS_HASHREF | TABLE, HASHREF, SELECT, EXTRA_SQL, CACHE_OBJ, ADDL_FROM - -Searches the database for all records matching (at least) the key/value pairs -in HASHREF. Returns all the records found as `FS::TABLE' objects if that -module is loaded (i.e. via `use FS::cust_main;'), otherwise returns FS::Record -objects. - -The preferred usage is to pass a hash reference of named parameters: - - my @records = qsearch( { - 'table' => 'table_name', - 'hashref' => { 'field' => 'value' - 'field' => { 'op' => '<', - 'value' => '420', - }, - }, - - #these are optional... - 'select' => '*', - 'extra_sql' => 'AND field ', - 'order_by' => 'ORDER BY something', - #'cache_obj' => '', #optional - 'addl_from' => 'LEFT JOIN othtable USING ( field )', - 'debug' => 1, - } - ); - -Much code still uses old-style positional parameters, this is also probably -fine in the common case where there are only two parameters: - - my @records = qsearch( 'table', { 'field' => 'value' } ); - -###oops, argh, FS::Record::new only lets us create database fields. -#Normal behaviour if SELECT is not specified is `*', as in -#C!; - $county_html .= ''; - } else { - $county_html .= - qq!!; - } - - my $state_html = qq!'; - - $state_html .= ''; - - my $country_html = qq!'; - - ($county_html, $state_html, $country_html); - -} - -=back - -=head1 BUGS - -regionselector? putting web ui components in here? they should probably live -somewhere else... - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/cust_main_invoice.pm b/FS/FS/cust_main_invoice.pm deleted file mode 100644 index 71029d096..000000000 --- a/FS/FS/cust_main_invoice.pm +++ /dev/null @@ -1,173 +0,0 @@ -package FS::cust_main_invoice; - -use strict; -use vars qw(@ISA $conf); -use Exporter; -use FS::Record qw( qsearchs ); -use FS::Conf; -use FS::cust_main; -use FS::svc_acct; -use FS::Msgcat qw(gettext); - -@ISA = qw( FS::Record ); - -=head1 NAME - -FS::cust_main_invoice - Object methods for cust_main_invoice records - -=head1 SYNOPSIS - - use FS::cust_main_invoice; - - $record = new FS::cust_main_invoice \%hash; - $record = new FS::cust_main_invoice { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $email_address = $record->address; - -=head1 DESCRIPTION - -An FS::cust_main_invoice object represents an invoice destination. FS::cust_main_invoice inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item destnum - primary key - -=item custnum - customer (see L) - -=item dest - Invoice destination: If numeric, a svcnum (see L), if string, a literal email address, `POST' to enable mailing (the default if no cust_main_invoice records exist), or `FAX' to enable faxing via a HylaFAX server. - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new invoice destination. To add the invoice destination to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -sub table { 'cust_main_invoice'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=item delete - -Delete this record from the database. - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -sub replace { - my ( $new, $old ) = ( shift, shift ); - - return "Can't change custnum!" unless $old->custnum == $new->custnum; - - $new->SUPER::replace($old); -} - - -=item check - -Checks all fields to make sure this is a valid invoice destination. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - my $error = $self->ut_numbern('destnum') - || $self->ut_number('custnum') - || $self->checkdest; - ; - return $error if $error; - - return "Unknown customer" - unless qsearchs('cust_main',{ 'custnum' => $self->custnum }); - - $self->SUPER::check; -} - -=item checkdest - -Checks the dest field only. - -#If it finds that the account ends in the -#same domain configured as the B configuration file, it will change the -#invoice destination from an email address to a service number (see -#L). - -=cut - -sub checkdest { - my $self = shift; - - my $error = $self->ut_text('dest'); - return $error if $error; - - if ( $self->dest =~ /^(POST|FAX)$/ ) { - #contemplate our navel - } elsif ( $self->dest =~ /^(\d+)$/ ) { - return "Unknown local account (specified by svcnum: ". $self->dest. ")" - unless qsearchs( 'svc_acct', { 'svcnum' => $self->dest } ); - } elsif ( $self->dest =~ /^([\w\.\-\&\+]+)\@(([\w\.\-]+\.)+\w+)$/ ) { - my($user, $domain) = ($1, $2); - $self->dest("$1\@$2"); - } else { - return gettext("illegal_email_invoice_address"). ': '. $self->dest; - } - - ''; #no error -} - -=item address - -Returns the literal email address for this record (or `POST' or `FAX'). - -=cut - -sub address { - my $self = shift; - if ( $self->dest =~ /^(\d+)$/ ) { - my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $1 } ) - or return undef; - $svc_acct->email; - } else { - $self->dest; - } -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L - -=cut - -1; - diff --git a/FS/FS/cust_main_note.pm b/FS/FS/cust_main_note.pm deleted file mode 100644 index 4732d12ce..000000000 --- a/FS/FS/cust_main_note.pm +++ /dev/null @@ -1,131 +0,0 @@ -package FS::cust_main_note; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::cust_main_note - Object methods for cust_main_note records - -=head1 SYNOPSIS - - use FS::cust_main_note; - - $record = new FS::cust_main_note \%hash; - $record = new FS::cust_main_note { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::cust_main_note object represents a note attachted to a customer. -FS::cust_main_note inherits from FS::Record. The following fields are -currently supported: - -=over 4 - -=item notenum - primary key - -=item custnum - - -=item _date - - -=item otaker - - -=item comments - - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new customer note. To add the note to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'cust_main_note'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid example. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('notenum') - || $self->ut_number('custnum') - || $self->ut_numbern('_date') - || $self->ut_text('otaker') - || $self->ut_anything('comments') - ; - return $error if $error; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -Lurking in the cracks. - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm deleted file mode 100644 index 358dfdc3d..000000000 --- a/FS/FS/cust_pay.pm +++ /dev/null @@ -1,888 +0,0 @@ -package FS::cust_pay; - -use strict; -use vars qw( @ISA $DEBUG $me $conf @encrypted_fields - $unsuspendauto $ignore_noapply - ); -use Date::Format; -use Business::CreditCard; -use Text::Template; -use FS::UID qw( getotaker ); -use FS::Misc qw( send_email ); -use FS::Record qw( dbh qsearch qsearchs ); -use FS::payby; -use FS::cust_main_Mixin; -use FS::payinfo_Mixin; -use FS::cust_bill; -use FS::cust_bill_pay; -use FS::cust_pay_refund; -use FS::cust_main; -use FS::cust_pay_void; - -@ISA = qw(FS::Record FS::cust_main_Mixin FS::payinfo_Mixin ); - -$DEBUG = 0; - -$me = '[FS::cust_pay]'; - -$ignore_noapply = 0; - -#ask FS::UID to run this stuff for us later -FS::UID->install_callback( sub { - $conf = new FS::Conf; - $unsuspendauto = $conf->exists('unsuspendauto'); -} ); - -@encrypted_fields = ('payinfo'); - -=head1 NAME - -FS::cust_pay - Object methods for cust_pay objects - -=head1 SYNOPSIS - - use FS::cust_pay; - - $record = new FS::cust_pay \%hash; - $record = new FS::cust_pay { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::cust_pay object represents a payment; the transfer of money from a -customer. FS::cust_pay inherits from FS::Record. The following fields are -currently supported: - -=over 4 - -=item paynum - primary key (assigned automatically for new payments) - -=item custnum - customer (see L) - -=item _date - specified as a UNIX timestamp; see L. Also see -L and L for conversion functions. - -=item paid - Amount of this payment - -=item otaker - order taker (assigned automatically, see L) - -=item payby - Payment Type (See L for valid payby values) - -=item payinfo - Payment Information (See L for data format) - -=item paymask - Masked payinfo (See L for how this works) - -=item paybatch - text field for tracking card processing or other batch grouping - -=item payunique - Optional unique identifer to prevent duplicate transactions. - -=item closed - books closed flag, empty or `Y' - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new payment. To add the payment to the databse, see L<"insert">. - -=cut - -sub table { 'cust_pay'; } -sub cust_linked { $_[0]->cust_main_custnum; } -sub cust_unlinked_msg { - my $self = shift; - "WARNING: can't find cust_main.custnum ". $self->custnum. - ' (cust_pay.paynum '. $self->paynum. ')'; -} - -=item insert - -Adds this payment to the database. - -For backwards-compatibility and convenience, if the additional field invnum -is defined, an FS::cust_bill_pay record for the full amount of the payment -will be created. In this case, custnum is optional. An hash of optional -arguments may be passed. Currently "manual" is supported. If true, a -payment receipt is sent instead of a statement when 'payment_receipt_email' -configuration option is set. - -=cut - -sub insert { - my ($self, %options) = @_; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $cust_bill; - if ( $self->invnum ) { - $cust_bill = qsearchs('cust_bill', { 'invnum' => $self->invnum } ) - or do { - $dbh->rollback if $oldAutoCommit; - return "Unknown cust_bill.invnum: ". $self->invnum; - }; - $self->custnum($cust_bill->custnum ); - } - - - my $error = $self->check; - return $error if $error; - - my $cust_main = $self->cust_main; - my $old_balance = $cust_main->balance; - - $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error inserting $self: $error"; - } - - if ( $self->invnum ) { - my $cust_bill_pay = new FS::cust_bill_pay { - 'invnum' => $self->invnum, - 'paynum' => $self->paynum, - 'amount' => $self->paid, - '_date' => $self->_date, - }; - $error = $cust_bill_pay->insert; - if ( $error ) { - if ( $ignore_noapply ) { - warn "warning: error inserting $cust_bill_pay: $error ". - "(ignore_noapply flag set; inserting cust_pay record anyway)\n"; - } else { - $dbh->rollback if $oldAutoCommit; - return "error inserting $cust_bill_pay: $error"; - } - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - #false laziness w/ cust_credit::insert - if ( $unsuspendauto && $old_balance && $cust_main->balance <= 0 ) { - my @errors = $cust_main->unsuspend; - #return - # side-fx with nested transactions? upstack rolls back? - warn "WARNING:Errors unsuspending customer ". $cust_main->custnum. ": ". - join(' / ', @errors) - if @errors; - } - #eslaf - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - #my $cust_main = $self->cust_main; - if ( $conf->exists('payment_receipt_email') - && grep { $_ !~ /^(POST|FAX)$/ } $cust_main->invoicing_list - ) { - - $cust_bill ||= ($cust_main->cust_bill)[-1]; #rather inefficient though? - - my $error; - if ( ( exists($options{'manual'}) && $options{'manual'} ) - || ! $conf->exists('invoice_html_statement') - || ! $cust_bill - ) { - - my $receipt_template = new Text::Template ( - TYPE => 'ARRAY', - SOURCE => [ map "$_\n", $conf->config('payment_receipt_email') ], - ) or do { - warn "can't create payment receipt template: $Text::Template::ERROR"; - return ''; - }; - - my @invoicing_list = grep { $_ !~ /^(POST|FAX)$/ } - $cust_main->invoicing_list; - - my $payby = $self->payby; - my $payinfo = $self->payinfo; - $payby =~ s/^BILL$/Check/ if $payinfo; - $payinfo = $self->paymask if $payby eq 'CARD' || $payby eq 'CHEK'; - $payby =~ s/^CHEK$/Electronic check/; - - $error = send_email( - 'from' => $conf->config('invoice_from'), #??? well as good as any - 'to' => \@invoicing_list, - 'subject' => 'Payment receipt', - 'body' => [ $receipt_template->fill_in( HASH => { - 'date' => time2str("%a %B %o, %Y", $self->_date), - 'name' => $cust_main->name, - 'paynum' => $self->paynum, - 'paid' => sprintf("%.2f", $self->paid), - 'payby' => ucfirst(lc($payby)), - 'payinfo' => $payinfo, - 'balance' => $cust_main->balance, - } ) ], - ); - - } else { - - my $queue = new FS::queue { - 'paynum' => $self->paynum, - 'job' => 'FS::cust_bill::queueable_email', - }; - $error = $queue->insert( - 'invnum' => $cust_bill->invnum, - 'template' => 'statement', - ); - - } - - if ( $error ) { - warn "can't send payment receipt/statement: $error"; - } - - } - - ''; - -} - -=item void [ REASON ] - -Voids this payment: deletes the payment and all associated applications and -adds a record of the voided payment to the FS::cust_pay_void table. - -=cut - -sub void { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $cust_pay_void = new FS::cust_pay_void ( { - map { $_ => $self->get($_) } $self->fields - } ); - $cust_pay_void->reason(shift) if scalar(@_); - my $error = $cust_pay_void->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $error = $self->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item delete - -Unless the closed flag is set, deletes this payment and all associated -applications (see L and L). In most -cases, you want to use the void method instead to leave a record of the -deleted payment. - -=cut - -# very similar to FS::cust_credit::delete -sub delete { - my $self = shift; - return "Can't delete closed payment" if $self->closed =~ /^Y/i; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $app ( $self->cust_bill_pay, $self->cust_pay_refund ) { - my $error = $app->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - my $error = $self->SUPER::delete(@_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( $conf->config('deletepayments') ne '' ) { - - my $cust_main = $self->cust_main; - - my $error = send_email( - 'from' => $conf->config('invoice_from'), #??? well as good as any - 'to' => $conf->config('deletepayments'), - 'subject' => 'FREESIDE NOTIFICATION: Payment deleted', - 'body' => [ - "This is an automatic message from your Freeside installation\n", - "informing you that the following payment has been deleted:\n", - "\n", - 'paynum: '. $self->paynum. "\n", - 'custnum: '. $self->custnum. - " (". $cust_main->last. ", ". $cust_main->first. ")\n", - 'paid: $'. sprintf("%.2f", $self->paid). "\n", - 'date: '. time2str("%a %b %e %T %Y", $self->_date). "\n", - 'payby: '. $self->payby. "\n", - 'payinfo: '. $self->paymask. "\n", - 'paybatch: '. $self->paybatch. "\n", - ], - ); - - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "can't send payment deletion notification: $error"; - } - - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item replace OLD_RECORD - -You can, but probably shouldn't modify payments... - -=cut - -sub replace { - #return "Can't modify payment!" - my $self = shift; - return "Can't modify closed payment" if $self->closed =~ /^Y/i; - $self->SUPER::replace(@_); -} - -=item check - -Checks all fields to make sure this is a valid payment. If there is an error, -returns the error, otherwise returns false. Called by the insert method. - -=cut - -sub check { - my $self = shift; - - $self->otaker(getotaker) unless ($self->otaker); - - my $error = - $self->ut_numbern('paynum') - || $self->ut_numbern('custnum') - || $self->ut_numbern('_date') - || $self->ut_money('paid') - || $self->ut_alpha('otaker') - || $self->ut_textn('paybatch') - || $self->ut_textn('payunique') - || $self->ut_enum('closed', [ '', 'Y' ]) - || $self->payinfo_check() - ; - return $error if $error; - - return "paid must be > 0 " if $self->paid <= 0; - - return "unknown cust_main.custnum: ". $self->custnum - unless $self->invnum - || qsearchs( 'cust_main', { 'custnum' => $self->custnum } ); - - $self->_date(time) unless $self->_date; - -#i guess not now, with cust_pay_pending, if we actually make it here, we _do_ want to record it -# # UNIQUE index should catch this too, without race conditions, but this -# # should give a better error message the other 99.9% of the time... -# if ( length($self->payunique) -# && qsearchs('cust_pay', { 'payunique' => $self->payunique } ) ) { -# #well, it *could* be a better error message -# return "duplicate transaction". -# " - a payment with unique identifer ". $self->payunique. -# " already exists"; -# } - - $self->SUPER::check; -} - -=item batch_insert CUST_PAY_OBJECT, ... - -Class method which inserts multiple payments. Takes a list of FS::cust_pay -objects. Returns a list, each element representing the status of inserting the -corresponding payment - empty. If there is an error inserting any payment, the -entire transaction is rolled back, i.e. all payments are inserted or none are. - -For example: - - my @errors = FS::cust_pay->batch_insert(@cust_pay); - my $num_errors = scalar(grep $_, @errors); - if ( $num_errors == 0 ) { - #success; all payments were inserted - } else { - #failure; no payments were inserted. - } - -=cut - -sub batch_insert { - my $self = shift; #class method - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $errors = 0; - - my @errors = map { - my $error = $_->insert( 'manual' => 1 ); - if ( $error ) { - $errors++; - } else { - $_->cust_main->apply_payments; - } - $error; - } @_; - - if ( $errors ) { - $dbh->rollback if $oldAutoCommit; - } else { - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - } - - @errors; - -} - -=item cust_bill_pay - -Returns all applications to invoices (see L) for this -payment. - -=cut - -sub cust_bill_pay { - my $self = shift; - sort { $a->_date <=> $b->_date - || $a->invnum <=> $b->invnum } - qsearch( 'cust_bill_pay', { 'paynum' => $self->paynum } ) - ; -} - -=item cust_pay_refund - -Returns all applications of refunds (see L) to this -payment. - -=cut - -sub cust_pay_refund { - my $self = shift; - sort { $a->_date <=> $b->_date } - qsearch( 'cust_pay_refund', { 'paynum' => $self->paynum } ) - ; -} - - -=item unapplied - -Returns the amount of this payment that is still unapplied; which is -paid minus all payment applications (see L) and refund -applications (see L). - -=cut - -sub unapplied { - my $self = shift; - my $amount = $self->paid; - $amount -= $_->amount foreach ( $self->cust_bill_pay ); - $amount -= $_->amount foreach ( $self->cust_pay_refund ); - sprintf("%.2f", $amount ); -} - -=item unrefunded - -Returns the amount of this payment that has not been refuned; which is -paid minus all refund applications (see L). - -=cut - -sub unrefunded { - my $self = shift; - my $amount = $self->paid; - $amount -= $_->amount foreach ( $self->cust_pay_refund ); - sprintf("%.2f", $amount ); -} - - -=item cust_main - -Returns the parent customer object (see L). - -=cut - -sub cust_main { - my $self = shift; - qsearchs( 'cust_main', { 'custnum' => $self->custnum } ); -} - -=item payby_name - -Returns a name for the payby field. - -=cut - -sub payby_name { - my $self = shift; - FS::payby->shortname( $self->payby ); -} - -=item gatewaynum - -Returns a gatewaynum for the processing gateway. - -=item processor - -Returns a name for the processing gateway. - -=item authorization - -Returns a name for the processing gateway. - -=item order_number - -Returns a name for the processing gateway. - -=cut - -sub gatewaynum { shift->_parse_paybatch->{'gatewaynum'}; } -sub processor { shift->_parse_paybatch->{'processor'}; } -sub authorization { shift->_parse_paybatch->{'authorization'}; } -sub order_number { shift->_parse_paybatch->{'order_number'}; } - -#sucks that this stuff is in paybatch like this in the first place, -#but at least other code can start to use new field names -#(code nicked from FS::cust_main::realtime_refund_bop) -sub _parse_paybatch { - my $self = shift; - - $self->paybatch =~ /^((\d+)\-)?(\w+):\s*([\w\-\/ ]*)(:([\w\-]+))?$/ - or return {}; - #"Can't parse paybatch for paynum $options{'paynum'}: ". - # $cust_pay->paybatch; - - my( $gatewaynum, $processor, $auth, $order_number ) = ( $2, $3, $4, $6 ); - - if ( $gatewaynum ) { #gateway for the payment to be refunded - - my $payment_gateway = - qsearchs('payment_gateway', { 'gatewaynum' => $gatewaynum } ); - - die "payment gateway $gatewaynum not found" #? - unless $payment_gateway; - - $processor = $payment_gateway->gateway_module; - - } - - { - 'gatewaynum' => $gatewaynum, - 'processor' => $processor, - 'authorization' => $auth, - 'order_number' => $order_number, - }; - -} - -=back - -=head1 CLASS METHODS - -=over 4 - -=item unapplied_sql - -Returns an SQL fragment to retreive the unapplied amount. - -=cut - -sub unapplied_sql { - #my $class = shift; - - "paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - "; - -} - -# _upgrade_data -# -# Used by FS::Upgrade to migrate to a new database. - -use FS::h_cust_pay; - -sub _upgrade_data { #class method - my ($class, %opts) = @_; - - warn "$me upgrading $class\n" if $DEBUG; - - #not the most efficient, but hey, it only has to run once - - my $where = "WHERE ( otaker IS NULL OR otaker = '' OR otaker = 'ivan' ) ". - " AND 0 < ( SELECT COUNT(*) FROM cust_main ". - " WHERE cust_main.custnum = cust_pay.custnum ) "; - - my $count_sql = "SELECT COUNT(*) FROM cust_pay $where"; - - my $sth = dbh->prepare($count_sql) or die dbh->errstr; - $sth->execute or die $sth->errstr; - my $total = $sth->fetchrow_arrayref->[0]; - - local($DEBUG) = 2 if $total > 1000; #could be a while, force progress info - - my $count = 0; - my $lastprog = 0; - - my @cust_pay = qsearch( { - 'table' => 'cust_pay', - 'hashref' => {}, - 'extra_sql' => $where, - 'order_by' => 'ORDER BY paynum', - } ); - - foreach my $cust_pay (@cust_pay) { - - my $h_cust_pay = $cust_pay->h_search('insert'); - if ( $h_cust_pay ) { - $cust_pay->otaker($h_cust_pay->history_user); - } else { - $cust_pay->otaker('legacy'); - } - - delete $FS::payby::hash{'COMP'}->{cust_pay}; #quelle kludge - my $error = $cust_pay->replace; - - if ( $error ) { - warn " *** WARNING: Error updaating order taker for payment paynum". - $cust_pay->paynun. ": $error\n"; - next; - } - - $FS::payby::hash{'COMP'}->{cust_pay} = ''; #restore it - - $count++; - if ( $DEBUG > 1 && $lastprog + 30 < time ) { - warn "$me $count/$total (". sprintf('%.2f',100*$count/$total). '%)'. "\n"; - $lastprog = time; - } - - } - -} - -=back - -=head1 SUBROUTINES - -=over 4 - -=item batch_import HASHREF - -Inserts new payments. - -=cut - -sub batch_import { - my $param = shift; - - my $fh = $param->{filehandle}; - my $agentnum = $param->{agentnum}; - my $format = $param->{'format'}; - my $paybatch = $param->{'paybatch'}; - - # here is the agent virtualization - my $extra_sql = ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql; - - my @fields; - my $payby; - if ( $format eq 'simple' ) { - @fields = qw( custnum agent_custid paid payinfo ); - $payby = 'BILL'; - } elsif ( $format eq 'extended' ) { - die "unimplemented\n"; - @fields = qw( ); - $payby = 'BILL'; - } else { - die "unknown format $format"; - } - - eval "use Text::CSV_XS;"; - die $@ if $@; - - my $csv = new Text::CSV_XS; - - my $imported = 0; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $line; - while ( defined($line=<$fh>) ) { - - $csv->parse($line) or do { - $dbh->rollback if $oldAutoCommit; - return "can't parse: ". $csv->error_input(); - }; - - my @columns = $csv->fields(); - - my %cust_pay = ( - payby => $payby, - paybatch => $paybatch, - ); - - my $cust_main; - foreach my $field ( @fields ) { - - if ( $field eq 'agent_custid' - && $agentnum - && $columns[0] =~ /\S+/ ) - { - - my $agent_custid = $columns[0]; - my %hash = ( 'agent_custid' => $agent_custid, - 'agentnum' => $agentnum, - ); - - if ( $cust_pay{'custnum'} !~ /^\s*$/ ) { - $dbh->rollback if $oldAutoCommit; - return "can't specify custnum with agent_custid $agent_custid"; - } - - $cust_main = qsearchs({ - 'table' => 'cust_main', - 'hashref' => \%hash, - 'extra_sql' => $extra_sql, - }); - - unless ( $cust_main ) { - $dbh->rollback if $oldAutoCommit; - return "can't find customer with agent_custid $agent_custid"; - } - - $field = 'custnum'; - $columns[0] = $cust_main->custnum; - } - - $cust_pay{$field} = shift @columns; - } - - my $cust_pay = new FS::cust_pay( \%cust_pay ); - my $error = $cust_pay->insert; - - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "can't insert payment for $line: $error"; - } - - if ( $format eq 'simple' ) { - # include agentnum for less surprise? - $cust_main = qsearchs({ - 'table' => 'cust_main', - 'hashref' => { 'custnum' => $cust_pay->custnum }, - 'extra_sql' => $extra_sql, - }) - unless $cust_main; - - unless ( $cust_main ) { - $dbh->rollback if $oldAutoCommit; - return "can't find customer to which payments apply at line: $line"; - } - - $error = $cust_main->apply_payments_and_credits; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "can't apply payments to customer for $line: $error"; - } - - } - - $imported++; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - return "Empty file!" unless $imported; - - ''; #no error - -} - -=back - -=head1 BUGS - -Delete and replace methods. - -=head1 SEE ALSO - -L, L, L, L, -schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/cust_pay_batch.pm b/FS/FS/cust_pay_batch.pm deleted file mode 100644 index 9ef1e1cc1..000000000 --- a/FS/FS/cust_pay_batch.pm +++ /dev/null @@ -1,277 +0,0 @@ -package FS::cust_pay_batch; - -use strict; -use vars qw( @ISA $DEBUG ); -use Carp qw( confess ); -use Business::CreditCard 0.28; -use FS::Record qw(dbh qsearch qsearchs); -use FS::payinfo_Mixin; -use FS::cust_main; -use FS::cust_bill; - -@ISA = qw( FS::payinfo_Mixin FS::Record ); - -# 1 is mostly method/subroutine entry and options -# 2 traces progress of some operations -# 3 is even more information including possibly sensitive data -$DEBUG = 0; - -=head1 NAME - -FS::cust_pay_batch - Object methods for batch cards - -=head1 SYNOPSIS - - use FS::cust_pay_batch; - - $record = new FS::cust_pay_batch \%hash; - $record = new FS::cust_pay_batch { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - #deprecated# $error = $record->retriable; - -=head1 DESCRIPTION - -An FS::cust_pay_batch object represents a credit card transaction ready to be -batched (sent to a processor). FS::cust_pay_batch inherits from FS::Record. -Typically called by the collect method of an FS::cust_main object. The -following fields are currently supported: - -=over 4 - -=item paybatchnum - primary key (automatically assigned) - -=item batchnum - indentifies group in batch - -=item payby - CARD/CHEK/LECB/BILL/COMP - -=item payinfo - -=item exp - card expiration - -=item amount - -=item invnum - invoice - -=item custnum - customer - -=item payname - name on card - -=item first - name - -=item last - name - -=item address1 - -=item address2 - -=item city - -=item state - -=item zip - -=item country - -=item status - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new record. To add the record to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -sub table { 'cust_pay_batch'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=item delete - -Delete this record from the database. If there is an error, returns the error, -otherwise returns false. - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=item check - -Checks all fields to make sure this is a valid transaction. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('paybatchnum') - || $self->ut_numbern('trancode') #deprecated - || $self->ut_money('amount') - || $self->ut_number('invnum') - || $self->ut_number('custnum') - || $self->ut_text('address1') - || $self->ut_textn('address2') - || $self->ut_text('city') - || $self->ut_textn('state') - ; - - return $error if $error; - - $self->getfield('last') =~ /^([\w \,\.\-\']+)$/ or return "Illegal last name"; - $self->setfield('last',$1); - - $self->first =~ /^([\w \,\.\-\']+)$/ or return "Illegal first name"; - $self->first($1); - - $error = $self->payinfo_check(); - return $error if $error; - - if ( $self->exp eq '' ) { - return "Expiration date required" - unless $self->payby =~ /^(CHEK|DCHK|LECB|WEST)$/; - $self->exp(''); - } else { - if ( $self->exp =~ /^(\d{4})[\/\-](\d{1,2})[\/\-](\d{1,2})$/ ) { - $self->exp("$1-$2-$3"); - } elsif ( $self->exp =~ /^(\d{1,2})[\/\-](\d{2}(\d{2})?)$/ ) { - if ( length($2) == 4 ) { - $self->exp("$2-$1-01"); - } elsif ( $2 > 98 ) { #should pry change to check for "this year" - $self->exp("19$2-$1-01"); - } else { - $self->exp("20$2-$1-01"); - } - } else { - return "Illegal expiration date"; - } - } - - if ( $self->payname eq '' ) { - $self->payname( $self->first. " ". $self->getfield('last') ); - } else { - $self->payname =~ /^([\w \,\.\-\']+)$/ - or return "Illegal billing name"; - $self->payname($1); - } - - #we have lots of old zips in there... don't hork up batch results cause of em - $self->zip =~ /^\s*(\w[\w\-\s]{2,8}\w)\s*$/ - or return "Illegal zip: ". $self->zip; - $self->zip($1); - - $self->country =~ /^(\w\w)$/ or return "Illegal country: ". $self->country; - $self->country($1); - - #$error = $self->ut_zip('zip', $self->country); - #return $error if $error; - - #check invnum, custnum, ? - - $self->SUPER::check; -} - -=item cust_main - -Returns the customer (see L) for this batched credit card -payment. - -=cut - -sub cust_main { - my $self = shift; - qsearchs( 'cust_main', { 'custnum' => $self->custnum } ); -} - -#you know what, screw this in the new world of events. we should be able to -#get the event defs to retry (remove once.pm condition, add every.pm) without -#mucking about with statuses of previous cust_event records. right? -# -#=item retriable -# -#Marks the corresponding event (see L) for this batched -#credit card payment as retriable. Useful if the corresponding financial -#institution account was declined for temporary reasons and/or a manual -#retry is desired. -# -#Implementation details: For the named customer's invoice, changes the -#statustext of the 'done' (without statustext) event to 'retriable.' -# -#=cut - -sub retriable { - - confess "deprecated method cust_pay_batch->retriable called; try removing ". - "the once condition and adding an every condition?"; - - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; #Hmm - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $cust_bill = qsearchs('cust_bill', { 'invnum' => $self->invnum } ) - or return "event $self->eventnum references nonexistant invoice $self->invnum"; - - warn "cust_pay_batch->retriable working with self of " . $self->paybatchnum . " and invnum of " . $self->invnum; - my @cust_bill_event = - sort { $a->part_bill_event->seconds <=> $b->part_bill_event->seconds } - grep { - $_->part_bill_event->eventcode =~ /\$cust_bill->batch_card/ - && $_->status eq 'done' - && ! $_->statustext - } - $cust_bill->cust_bill_event; - # complain loudly if scalar(@cust_bill_event) > 1 ? - my $error = $cust_bill_event[0]->retriable; - if ($error ) { - # gah, even with transactions. - $dbh->commit if $oldAutoCommit; #well. - return "error marking invoice event retriable: $error"; - } - ''; -} - -=back - -=head1 BUGS - -There should probably be a configuration file with a list of allowed credit -card types. - -=head1 SEE ALSO - -L, L - -=cut - -1; - diff --git a/FS/FS/cust_pay_pending.pm b/FS/FS/cust_pay_pending.pm deleted file mode 100644 index ad39b10d7..000000000 --- a/FS/FS/cust_pay_pending.pm +++ /dev/null @@ -1,229 +0,0 @@ -package FS::cust_pay_pending; - -use strict; -use vars qw( @ISA @encrypted_fields ); -use FS::Record qw( qsearch qsearchs ); -use FS::payby; -use FS::payinfo_Mixin; -use FS::cust_main; -use FS::cust_pay; - -@ISA = qw(FS::Record FS::payinfo_Mixin); - -@encrypted_fields = ('payinfo'); - -=head1 NAME - -FS::cust_pay_pending - Object methods for cust_pay_pending records - -=head1 SYNOPSIS - - use FS::cust_pay_pending; - - $record = new FS::cust_pay_pending \%hash; - $record = new FS::cust_pay_pending { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::cust_pay_pending object represents an pending payment. It reflects -local state through the multiple stages of processing a real-time transaction -with an external gateway. FS::cust_pay_pending inherits from FS::Record. The -following fields are currently supported: - -=over 4 - -=item paypendingnum - -Primary key - -=item custnum - -Customer (see L) - -=item paid - -Amount of this payment - -=item _date - -Specified as a UNIX timestamp; see L. Also see -L and L for conversion functions. - -=item payby - -Payment Type (See L for valid payby values) - -=item payinfo - -Payment Information (See L for data format) - -=item paymask - -Masked payinfo (See L for how this works) - -=item paydate - -Expiration date - -=item payunique - -Unique identifer to prevent duplicate transactions. - -=item status - -Pending transaction status, one of the following: - -=over 4 - -=item new - -Aquires basic lock on payunique - -=item pending - -Transaction is pending with the gateway - -=item authorized - -Only used for two-stage transactions that require a separate capture step - -=item captured - -Transaction completed with payment gateway (sucessfully), not yet recorded in -the database - -=item declined - -Transaction completed with payment gateway (declined), not yet recorded in -the database - -=item done - -Transaction recorded in database - -=back - -=item statustext - -Additional status information. - -=cut - -#=item cust_balance - - -=item paynum - - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new pending payment. To add the pending payment to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'cust_pay_pending'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid pending payment. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('paypendingnum') - || $self->ut_foreign_key('custnum', 'cust_main', 'custnum') - || $self->ut_money('paid') - || $self->ut_numbern('_date') - || $self->ut_textn('payunique') - || $self->ut_text('status') - #|| $self->ut_textn('statustext') - || $self->ut_anything('statustext') - #|| $self->ut_money('cust_balance') - || $self->ut_foreign_keyn('paynum', 'cust_pay', 'paynum' ) - || $self->payinfo_check() #payby/payinfo/paymask/paydate - ; - return $error if $error; - - $self->_date(time) unless $self->_date; - - # UNIQUE index should catch this too, without race conditions, but this - # should give a better error message the other 99.9% of the time... - if ( length($self->payunique) ) { - my $cust_pay_pending = qsearchs('cust_pay_pending', { - 'payunique' => $self->payunique, - 'paypendingnum' => { op=>'!=', value=>$self->paypendingnum }, - }); - if ( $cust_pay_pending ) { - #well, it *could* be a better error message - return "duplicate transaction - a payment with unique identifer ". - $self->payunique. " already exists"; - } - } - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/cust_pay_refund.pm b/FS/FS/cust_pay_refund.pm deleted file mode 100644 index cb9dbcef2..000000000 --- a/FS/FS/cust_pay_refund.pm +++ /dev/null @@ -1,188 +0,0 @@ -package FS::cust_pay_refund; - -use strict; -use vars qw( @ISA ); #$conf ); -use FS::UID qw( getotaker ); -use FS::Record qw( qsearchs ); # qsearch ); -use FS::cust_main; -use FS::cust_pay; -use FS::cust_refund; - -@ISA = qw( FS::Record ); - -#ask FS::UID to run this stuff for us later -#FS::UID->install_callback( sub { -# $conf = new FS::Conf; -#} ); - -=head1 NAME - -FS::cust_pay_refund - Object methods for cust_pay_refund records - -=head1 SYNOPSIS - - use FS::cust_pay_refund; - - $record = new FS::cust_pay_refund \%hash; - $record = new FS::cust_pay_refund { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::cust_pay_refund object represents application of a refund (see -L) to an payment (see L). FS::cust_pay_refund -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item payrefundnum - primary key - -=item paynum - credit being applied - -=item refundnum - invoice to which credit is applied (see L) - -=item amount - amount of the credit applied - -=item _date - specified as a UNIX timestamp; see L. Also see -L and L for conversion functions. - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new cust_pay_refund. To add the cust_pay_refund to the database, -see L<"insert">. - -=cut - -sub table { 'cust_pay_refund'; } - -=item insert - -Adds this cust_pay_refund to the database. If there is an error, returns the -error, otherwise returns false. - -=cut - -sub insert { - my $self = shift; - return "Can't apply refund to closed payment" - if $self->cust_pay->closed =~ /^Y/i; - return "Can't apply payment to closed refund" - if $self->cust_refund->closed =~ /^Y/i; - $self->SUPER::insert(@_); -} - -=item delete - -=cut - -sub delete { - my $self = shift; - return "Can't remove refund from closed payment" - if $self->cust_pay->closed =~ /^Y/i; - return "Can't remove payment from closed refund" - if $self->cust_refund->closed =~ /^Y/i; - $self->SUPER::delete(@_); -} - -=item replace OLD_RECORD - -Application of refunds to payments may not be modified. - -=cut - -sub replace { - return "Can't modify application of a refund to payment!" -} - -=item check - -Checks all fields to make sure this is a valid refund application to a payment. -If there is an error, returns the error, otherwise returns false. Called by -the insert and replace methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('payrefundnum') - || $self->ut_number('paynum') - || $self->ut_number('refundnum') - || $self->ut_numbern('_date') - || $self->ut_money('amount') - ; - return $error if $error; - - return "amount must be > 0" if $self->amount <= 0; - - return "Unknown payment" - unless my $cust_pay = - qsearchs( 'cust_pay', { 'paynum' => $self->paynum } ); - - return "Unknown refund" - unless my $cust_refund = - qsearchs( 'cust_refund', { 'refundnum' => $self->refundnum } ); - - $self->_date(time) unless $self->_date; - - return 'Cannot apply ($'. $self->amount. ') more than'. - ' remaining value of refund ($'. $cust_refund->unapplied. ')' - unless $self->amount <= $cust_refund->unapplied; - - return "Cannot apply more than remaining value of payment" - unless $self->amount <= $cust_pay->unapplied; - - $self->SUPER::check; -} - -=item sub cust_pay - -Returns the payment (see L) - -=cut - -sub cust_pay { - my $self = shift; - qsearchs( 'cust_pay', { 'paynum' => $self->paynum } ); -} - -=item cust_refund - -Returns the refund (see L) - -=cut - -sub cust_refund { - my $self = shift; - qsearchs( 'cust_refund', { 'refundnum' => $self->refundnum } ); -} - -=back - -=head1 BUGS - -The delete method. - -=head1 SEE ALSO - -L, L, L, L, -schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/cust_pay_void.pm b/FS/FS/cust_pay_void.pm deleted file mode 100644 index de05f710b..000000000 --- a/FS/FS/cust_pay_void.pm +++ /dev/null @@ -1,225 +0,0 @@ -package FS::cust_pay_void; -use strict; -use vars qw( @ISA @encrypted_fields ); -use Business::CreditCard; -use FS::UID qw(getotaker); -use FS::Record qw(qsearchs dbh fields); # qsearch ); -use FS::cust_pay; -#use FS::cust_bill; -#use FS::cust_bill_pay; -#use FS::cust_pay_refund; -#use FS::cust_main; - -@ISA = qw( FS::Record FS::payinfo_Mixin ); - -@encrypted_fields = ('payinfo'); - -=head1 NAME - -FS::cust_pay_void - Object methods for cust_pay_void objects - -=head1 SYNOPSIS - - use FS::cust_pay_void; - - $record = new FS::cust_pay_void \%hash; - $record = new FS::cust_pay_void { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::cust_pay_void object represents a voided payment. The following fields -are currently supported: - -=over 4 - -=item paynum - primary key (assigned automatically for new payments) - -=item custnum - customer (see L) - -=item paid - Amount of this payment - -=item _date - specified as a UNIX timestamp; see L. Also see -L and L for conversion functions. - -=item payby - `CARD' (credit cards), `CHEK' (electronic check/ACH), -`LECB' (phone bill billing), `BILL' (billing), `CASH' (cash), -`WEST' (Western Union), `MCRD' (Manual credit card), or `COMP' (free) - -=item payinfo - card number, check #, or comp issuer (4-8 lowercase alphanumerics; think username), respectively - -=item paybatch - text field for tracking card processing - -=item closed - books closed flag, empty or `Y' - -=item void_date - -=item reason - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new payment. To add the payment to the databse, see L<"insert">. - -=cut - -sub table { 'cust_pay_void'; } - -=item insert - -Adds this voided payment to the database. - -=item unvoid - -"Un-void"s this payment: Deletes the voided payment from the database and adds -back a normal payment. - -=cut - -sub unvoid { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $cust_pay = new FS::cust_pay ( { - map { $_ => $self->get($_) } fields('cust_pay') - } ); - my $error = $cust_pay->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $error = $self->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item delete - -Deletes this voided payment. You probably don't want to use this directly; see -the B method to add the original payment back. - -=item replace OLD_RECORD - -Currently unimplemented. - -=cut - -sub replace { - return "Can't modify voided payments!"; -} - -=item check - -Checks all fields to make sure this is a valid voided payment. If there is an -error, returns the error, otherwise returns false. Called by the insert -method. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('paynum') - || $self->ut_numbern('custnum') - || $self->ut_money('paid') - || $self->ut_number('_date') - || $self->ut_textn('paybatch') - || $self->ut_enum('closed', [ '', 'Y' ]) - || $self->ut_numbern('void_date') - || $self->ut_textn('reason') - ; - return $error if $error; - - return "paid must be > 0 " if $self->paid <= 0; - - return "unknown cust_main.custnum: ". $self->custnum - unless $self->invnum - || qsearchs( 'cust_main', { 'custnum' => $self->custnum } ); - - $self->void_date(time) unless $self->void_date; - - $self->payby =~ /^(CARD|CHEK|LECB|BILL|COMP|PREP|CASH|WEST|MCRD)$/ - or return "Illegal payby"; - $self->payby($1); - - #false laziness with cust_refund::check - if ( $self->payby eq 'CARD' ) { - my $payinfo = $self->payinfo; - $payinfo =~ s/\D//g; - $self->payinfo($payinfo); - if ( $self->payinfo ) { - $self->payinfo =~ /^(\d{13,16})$/ - or return "Illegal (mistyped?) credit card number (payinfo)"; - $self->payinfo($1); - validate($self->payinfo) or return "Illegal credit card number"; - return "Unknown card type" if cardtype($self->payinfo) eq "Unknown"; - } else { - $self->payinfo('N/A'); - } - - } else { - $error = $self->ut_textn('payinfo'); - return $error if $error; - } - - $self->otaker(getotaker); - - $self->SUPER::check; -} - -=item cust_main - -Returns the parent customer object (see L). - -=cut - -sub cust_main { - my $self = shift; - qsearchs( 'cust_main', { 'custnum' => $self->custnum } ); -} - -=back - -=head1 BUGS - -Delete and replace methods. - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm deleted file mode 100644 index d41359634..000000000 --- a/FS/FS/cust_pkg.pm +++ /dev/null @@ -1,2091 +0,0 @@ -package FS::cust_pkg; - -use strict; -use vars qw(@ISA $disable_agentcheck $DEBUG); -use List::Util qw(max); -use Tie::IxHash; -use FS::UID qw( getotaker dbh ); -use FS::Misc qw( send_email ); -use FS::Record qw( qsearch qsearchs ); -use FS::m2m_Common; -use FS::cust_main_Mixin; -use FS::cust_svc; -use FS::part_pkg; -use FS::cust_main; -use FS::type_pkgs; -use FS::pkg_svc; -use FS::cust_bill_pkg; -use FS::cust_event; -use FS::h_cust_svc; -use FS::reg_code; -use FS::part_svc; -use FS::cust_pkg_reason; -use FS::reason; -use FS::UI::Web; - -# need to 'use' these instead of 'require' in sub { cancel, suspend, unsuspend, -# setup } -# because they load configuration by setting FS::UID::callback (see TODO) -use FS::svc_acct; -use FS::svc_domain; -use FS::svc_www; -use FS::svc_forward; - -# for sending cancel emails in sub cancel -use FS::Conf; - -@ISA = qw( FS::m2m_Common FS::cust_main_Mixin FS::option_Common FS::Record ); - -$DEBUG = 0; - -$disable_agentcheck = 0; - -sub _cache { - my $self = shift; - my ( $hashref, $cache ) = @_; - #if ( $hashref->{'pkgpart'} ) { - if ( $hashref->{'pkg'} ) { - # #@{ $self->{'_pkgnum'} } = (); - # my $subcache = $cache->subcache('pkgpart', 'part_pkg'); - # $self->{'_pkgpart'} = $subcache; - # #push @{ $self->{'_pkgnum'} }, - # FS::part_pkg->new_or_cached($hashref, $subcache); - $self->{'_pkgpart'} = FS::part_pkg->new($hashref); - } - if ( exists $hashref->{'svcnum'} ) { - #@{ $self->{'_pkgnum'} } = (); - my $subcache = $cache->subcache('svcnum', 'cust_svc', $hashref->{pkgnum}); - $self->{'_svcnum'} = $subcache; - #push @{ $self->{'_pkgnum'} }, - FS::cust_svc->new_or_cached($hashref, $subcache) if $hashref->{svcnum}; - } -} - -=head1 NAME - -FS::cust_pkg - Object methods for cust_pkg objects - -=head1 SYNOPSIS - - use FS::cust_pkg; - - $record = new FS::cust_pkg \%hash; - $record = new FS::cust_pkg { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->cancel; - - $error = $record->suspend; - - $error = $record->unsuspend; - - $part_pkg = $record->part_pkg; - - @labels = $record->labels; - - $seconds = $record->seconds_since($timestamp); - - $error = FS::cust_pkg::order( $custnum, \@pkgparts ); - $error = FS::cust_pkg::order( $custnum, \@pkgparts, \@remove_pkgnums ] ); - -=head1 DESCRIPTION - -An FS::cust_pkg object represents a customer billing item. FS::cust_pkg -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item pkgnum - primary key (assigned automatically for new billing items) - -=item custnum - Customer (see L) - -=item pkgpart - Billing item definition (see L) - -=item setup - date - -=item bill - date (next bill date) - -=item last_bill - last bill date - -=item adjourn - date - -=item susp - date - -=item expire - date - -=item cancel - date - -=item otaker - order taker (assigned automatically if null, see L) - -=item manual_flag - If this field is set to 1, disables the automatic -unsuspension of this package when using the B config file. - -=back - -Note: setup, bill, adjourn, susp, expire and cancel are specified as UNIX timestamps; -see L. Also see L and L for -conversion functions. - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Create a new billing item. To add the item to the database, see L<"insert">. - -=cut - -sub table { 'cust_pkg'; } -sub cust_linked { $_[0]->cust_main_custnum; } -sub cust_unlinked_msg { - my $self = shift; - "WARNING: can't find cust_main.custnum ". $self->custnum. - ' (cust_pkg.pkgnum '. $self->pkgnum. ')'; -} - -=item insert [ OPTION => VALUE ... ] - -Adds this billing item to the database ("Orders" the item). If there is an -error, returns the error, otherwise returns false. - -If the additional field I is defined instead of I, it -will be used to look up the package definition and agent restrictions will be -ignored. - -If the additional field I is defined, an FS::pkg_referral record will -be created and inserted. Multiple FS::pkg_referral records can be created by -setting I to an array reference of refnums or a hash reference with -refnums as keys. If no I is defined, a default FS::pkg_referral -record will be created corresponding to cust_main.refnum. - -The following options are available: I - -I, if set true, supresses any referral credit to a referring customer. - -=cut - -sub insert { - my( $self, %options ) = @_; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::insert($options{options} ? %{$options{options}} : ()); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $self->refnum($self->cust_main->refnum) unless $self->refnum; - $self->refnum( [ $self->refnum ] ) unless ref($self->refnum); - $self->process_m2m( 'link_table' => 'pkg_referral', - 'target_table' => 'part_referral', - 'params' => $self->refnum, - ); - - #if ( $self->reg_code ) { - # my $reg_code = qsearchs('reg_code', { 'code' => $self->reg_code } ); - # $error = $reg_code->delete; - # if ( $error ) { - # $dbh->rollback if $oldAutoCommit; - # return $error; - # } - #} - - my $conf = new FS::Conf; - my $cust_main = $self->cust_main; - my $part_pkg = $self->part_pkg; - if ( $conf->exists('referral_credit') - && $cust_main->referral_custnum - && ! $options{'change'} - && $part_pkg->freq !~ /^0\D?$/ - ) - { - my $referring_cust_main = $cust_main->referring_cust_main; - if ( $referring_cust_main->status ne 'cancelled' ) { - my $error; - if ( $part_pkg->freq !~ /^\d+$/ ) { - warn 'WARNING: Not crediting customer '. $cust_main->referral_custnum. - ' for package '. $self->pkgnum. - ' ( customer '. $self->custnum. ')'. - ' - One-time referral credits not (yet) available for '. - ' packages with '. $part_pkg->freq_pretty. ' frequency'; - } else { - - my $amount = sprintf( "%.2f", $part_pkg->base_recur / $part_pkg->freq ); - my $error = - $referring_cust_main-> - credit( $amount, - 'Referral credit for '.$cust_main->name, - 'reason_type' => $conf->config('referral_credit_type') - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error crediting customer ". $cust_main->referral_custnum. - " for referral: $error"; - } - - } - - } - } - - if ($conf->config('welcome_letter') && $self->cust_main->num_pkgs == 1) { - my $queue = new FS::queue { - 'job' => 'FS::cust_main::queueable_print', - }; - $error = $queue->insert( - 'custnum' => $self->custnum, - 'template' => 'welcome_letter', - ); - - if ($error) { - warn "can't send welcome letter: $error"; - } - - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=item delete - -This method now works but you probably shouldn't use it. - -You don't want to delete billing items, because there would then be no record -the customer ever purchased the item. Instead, see the cancel method. - -=cut - -#sub delete { -# return "Can't delete cust_pkg records!"; -#} - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -Currently, custnum, setup, bill, adjourn, susp, expire, and cancel may be changed. - -Changing pkgpart may have disasterous effects. See the order subroutine. - -setup and bill are normally updated by calling the bill method of a customer -object (see L). - -suspend is normally updated by the suspend and unsuspend methods. - -cancel is normally updated by the cancel method (and also the order subroutine -in some cases). - -Calls - -=cut - -sub replace { - my( $new, $old, %options ) = @_; - - # We absolutely have to have an old vs. new record to make this work. - if (!defined($old)) { - $old = qsearchs( 'cust_pkg', { 'pkgnum' => $new->pkgnum } ); - } - #return "Can't (yet?) change pkgpart!" if $old->pkgpart != $new->pkgpart; - return "Can't change otaker!" if $old->otaker ne $new->otaker; - - #allow this *sigh* - #return "Can't change setup once it exists!" - # if $old->getfield('setup') && - # $old->getfield('setup') != $new->getfield('setup'); - - #some logic for bill, susp, cancel? - - local($disable_agentcheck) = 1 if $old->pkgpart == $new->pkgpart; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $method ( qw(adjourn expire) ) { # How many reasons? - if ($options{'reason'} && $new->$method && $old->$method ne $new->$method) { - my $error = $new->insert_reason( 'reason' => $options{'reason'}, - 'date' => $new->$method, - ); - if ( $error ) { - dbh->rollback if $oldAutoCommit; - return "Error inserting cust_pkg_reason: $error"; - } - } - } - - #save off and freeze RADIUS attributes for any associated svc_acct records - my @svc_acct = (); - if ( $old->part_pkg->is_prepaid || $new->part_pkg->is_prepaid ) { - - #also check for specific exports? - # to avoid spurious modify export events - @svc_acct = map { $_->svc_x } - grep { $_->part_svc->svcdb eq 'svc_acct' } - $old->cust_svc; - - $_->snapshot foreach @svc_acct; - - } - - my $error = $new->SUPER::replace($old, - $options{options} ? ${options{options}} : () - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - #for prepaid packages, - #trigger export of new RADIUS Expiration attribute when cust_pkg.bill changes - foreach my $old_svc_acct ( @svc_acct ) { - my $new_svc_acct = new FS::svc_acct { $old_svc_acct->hash }; - my $s_error = $new_svc_acct->replace($old_svc_acct); - if ( $s_error ) { - $dbh->rollback if $oldAutoCommit; - return $s_error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=item check - -Checks all fields to make sure this is a valid billing item. If there is an -error, returns the error, otherwise returns false. Called by the insert and -replace methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('pkgnum') - || $self->ut_foreign_key('custnum', 'cust_main', 'custnum') - || $self->ut_numbern('pkgpart') - || $self->ut_numbern('setup') - || $self->ut_numbern('bill') - || $self->ut_numbern('susp') - || $self->ut_numbern('cancel') - || $self->ut_numbern('adjourn') - || $self->ut_numbern('expire') - ; - return $error if $error; - - if ( $self->reg_code ) { - - unless ( grep { $self->pkgpart == $_->pkgpart } - map { $_->reg_code_pkg } - qsearchs( 'reg_code', { 'code' => $self->reg_code, - 'agentnum' => $self->cust_main->agentnum }) - ) { - return "Unknown registration code"; - } - - } elsif ( $self->promo_code ) { - - my $promo_part_pkg = - qsearchs('part_pkg', { - 'pkgpart' => $self->pkgpart, - 'promo_code' => { op=>'ILIKE', value=>$self->promo_code }, - } ); - return 'Unknown promotional code' unless $promo_part_pkg; - - } else { - - unless ( $disable_agentcheck ) { - my $agent = - qsearchs( 'agent', { 'agentnum' => $self->cust_main->agentnum } ); - my $pkgpart_href = $agent->pkgpart_hashref; - return "agent ". $agent->agentnum. - " can't purchase pkgpart ". $self->pkgpart - unless $pkgpart_href->{ $self->pkgpart }; - } - - $error = $self->ut_foreign_key('pkgpart', 'part_pkg', 'pkgpart' ); - return $error if $error; - - } - - $self->otaker(getotaker) unless $self->otaker; - $self->otaker =~ /^(\w{1,32})$/ or return "Illegal otaker"; - $self->otaker($1); - - if ( $self->dbdef_table->column('manual_flag') ) { - $self->manual_flag('') if $self->manual_flag eq ' '; - $self->manual_flag =~ /^([01]?)$/ - or return "Illegal manual_flag ". $self->manual_flag; - $self->manual_flag($1); - } - - $self->SUPER::check; -} - -=item cancel [ OPTION => VALUE ... ] - -Cancels and removes all services (see L and L) -in this package, then cancels the package itself (sets the cancel field to -now). - -Available options are: - -=over 4 - -=item quiet - can be set true to supress email cancellation notices. - -=item time - can be set to cancel the package based on a specific future or historical date. Using time ensures that the remaining amount is calculated correctly. Note however that this is an immediate cancel and just changes the date. You are PROBABLY looking to expire the account instead of using this. - -=item reason - can be set to a cancellation reason (see L), either a reasonnum of an existing reason, or passing a hashref will create a new reason. The hashref should have the following keys: typenum - Reason type (see L, reason - Text of the new reason. - -=back - -If there is an error, returns the error, otherwise returns false. - -=cut - -sub cancel { - my( $self, %options ) = @_; - - warn "cust_pkg::cancel called with options". - join(', ', map { "$_: $options{$_}" } keys %options ). "\n" - if $DEBUG; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $cancel_time = $options{'time'} || time; - - my $error; - - if ( $options{'reason'} ) { - $error = $self->insert_reason( 'reason' => $options{'reason'} ); - if ( $error ) { - dbh->rollback if $oldAutoCommit; - return "Error inserting cust_pkg_reason: $error"; - } - } - - my %svc; - foreach my $cust_svc ( - #schwartz - map { $_->[0] } - sort { $a->[1] <=> $b->[1] } - map { [ $_, $_->svc_x->table_info->{'cancel_weight'} ]; } - qsearch( 'cust_svc', { 'pkgnum' => $self->pkgnum } ) - ) { - - my $error = $cust_svc->cancel; - - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error cancelling cust_svc: $error"; - } - } - - unless ( $self->getfield('cancel') ) { - # Add a credit for remaining service - my $remaining_value = $self->calc_remain(time=>$cancel_time); - if ( $remaining_value > 0 && !$options{'no_credit'} ) { - my $conf = new FS::Conf; - my $error = $self->cust_main->credit( - $remaining_value, - 'Credit for unused time on '. $self->part_pkg->pkg, - 'reason_type' => $conf->config('cancel_credit_type'), - ); - if ($error) { - $dbh->rollback if $oldAutoCommit; - return "Error crediting customer \$$remaining_value for unused time on". - $self->part_pkg->pkg. ": $error"; - } - } - my %hash = $self->hash; - $hash{'cancel'} = $cancel_time; - my $new = new FS::cust_pkg ( \%hash ); - $error = $new->replace( $self, options => { $self->options } ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - my $conf = new FS::Conf; - my @invoicing_list = grep { $_ !~ /^(POST|FAX)$/ } $self->cust_main->invoicing_list; - if ( !$options{'quiet'} && $conf->exists('emailcancel') && @invoicing_list ) { - my $conf = new FS::Conf; - my $error = send_email( - 'from' => $conf->config('invoice_from'), - 'to' => \@invoicing_list, - 'subject' => ( $conf->config('cancelsubject') || 'Cancellation Notice' ), - 'body' => [ map "$_\n", $conf->config('cancelmessage') ], - ); - #should this do something on errors? - } - - ''; #no errors - -} - -=item cancel_if_expired [ NOW_TIMESTAMP ] - -Cancels this package if its expire date has been reached. - -=cut - -sub cancel_if_expired { - my $self = shift; - my $time = shift || time; - return '' unless $self->expire && $self->expire <= $time; - my $error = $self->cancel; - if ( $error ) { - return "Error cancelling expired pkg ". $self->pkgnum. " for custnum ". - $self->custnum. ": $error"; - } - ''; -} - -=item suspend [ OPTION => VALUE ... ] - -Suspends all services (see L and L) in this -package, then suspends the package itself (sets the susp field to now). - -Available options are: - -=over 4 - -=item reason - can be set to a cancellation reason (see L), either a reasonnum of an existing reason, or passing a hashref will create a new reason. The hashref should have the following keys: typenum - Reason type (see L, reason - Text of the new reason. - -=back - -If there is an error, returns the error, otherwise returns false. - -=cut - -sub suspend { - my( $self, %options ) = @_; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error; - - if ( $options{'reason'} ) { - $error = $self->insert_reason( 'reason' => $options{'reason'} ); - if ( $error ) { - dbh->rollback if $oldAutoCommit; - return "Error inserting cust_pkg_reason: $error"; - } - } - - foreach my $cust_svc ( - qsearch( 'cust_svc', { 'pkgnum' => $self->pkgnum } ) - ) { - my $part_svc = qsearchs( 'part_svc', { 'svcpart' => $cust_svc->svcpart } ); - - $part_svc->svcdb =~ /^([\w\-]+)$/ or do { - $dbh->rollback if $oldAutoCommit; - return "Illegal svcdb value in part_svc!"; - }; - my $svcdb = $1; - require "FS/$svcdb.pm"; - - my $svc = qsearchs( $svcdb, { 'svcnum' => $cust_svc->svcnum } ); - if ($svc) { - $error = $svc->suspend; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - } - - unless ( $self->getfield('susp') ) { - my %hash = $self->hash; - $hash{'susp'} = time; - my $new = new FS::cust_pkg ( \%hash ); - $error = $new->replace( $self, options => { $self->options } ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; #no errors -} - -=item unsuspend [ OPTION => VALUE ... ] - -Unsuspends all services (see L and L) in this -package, then unsuspends the package itself (clears the susp field and the -adjourn field if it is in the past). - -Available options are: I. - -I can be set true to adjust the next bill date forward by -the amount of time the account was inactive. This was set true by default -since 1.4.2 and 1.5.0pre6; however, starting with 1.7.0 this needs to be -explicitly requested. Price plans for which this makes sense (anniversary-date -based than prorate or subscription) could have an option to enable this -behaviour? - -If there is an error, returns the error, otherwise returns false. - -=cut - -sub unsuspend { - my( $self, %opt ) = @_; - my $error; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $cust_svc ( - qsearch('cust_svc',{'pkgnum'=> $self->pkgnum } ) - ) { - my $part_svc = qsearchs( 'part_svc', { 'svcpart' => $cust_svc->svcpart } ); - - $part_svc->svcdb =~ /^([\w\-]+)$/ or do { - $dbh->rollback if $oldAutoCommit; - return "Illegal svcdb value in part_svc!"; - }; - my $svcdb = $1; - require "FS/$svcdb.pm"; - - my $svc = qsearchs( $svcdb, { 'svcnum' => $cust_svc->svcnum } ); - if ($svc) { - $error = $svc->unsuspend; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - } - - unless ( ! $self->getfield('susp') ) { - my %hash = $self->hash; - my $inactive = time - $hash{'susp'}; - - my $conf = new FS::Conf; - - $hash{'bill'} = ( $hash{'bill'} || $hash{'setup'} ) + $inactive - if ( $opt{'adjust_next_bill'} - || $conf->config('unsuspend-always_adjust_next_bill_date') ) - && $inactive > 0 && ( $hash{'bill'} || $hash{'setup'} ); - - $hash{'susp'} = ''; - $hash{'adjourn'} = '' if $hash{'adjourn'} < time; - my $new = new FS::cust_pkg ( \%hash ); - $error = $new->replace( $self, options => { $self->options } ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; #no errors -} - -=item last_bill - -Returns the last bill date, or if there is no last bill date, the setup date. -Useful for billing metered services. - -=cut - -sub last_bill { - my $self = shift; - if ( $self->dbdef_table->column('last_bill') ) { - return $self->setfield('last_bill', $_[0]) if @_; - return $self->getfield('last_bill') if $self->getfield('last_bill'); - } - my $cust_bill_pkg = qsearchs('cust_bill_pkg', { 'pkgnum' => $self->pkgnum, - 'edate' => $self->bill, } ); - $cust_bill_pkg ? $cust_bill_pkg->sdate : $self->setup || 0; -} - -=item last_reason - -Returns the most recent FS::reason associated with the package. - -=cut - -sub last_reason { - my $self = shift; - my $cust_pkg_reason = qsearchs( { - 'table' => 'cust_pkg_reason', - 'hashref' => { 'pkgnum' => $self->pkgnum, }, - 'extra_sql'=> 'ORDER BY date DESC LIMIT 1', - } ); - qsearchs ( 'reason', { 'reasonnum' => $cust_pkg_reason->reasonnum } ) - if $cust_pkg_reason; -} - -=item part_pkg - -Returns the definition for this billing item, as an FS::part_pkg object (see -L). - -=cut - -sub part_pkg { - my $self = shift; - #exists( $self->{'_pkgpart'} ) - $self->{'_pkgpart'} - ? $self->{'_pkgpart'} - : qsearchs( 'part_pkg', { 'pkgpart' => $self->pkgpart } ); -} - -=item old_cust_pkg - -Returns the cancelled package this package was changed from, if any. - -=cut - -sub old_cust_pkg { - my $self = shift; - return '' unless $self->change_pkgnum; - qsearchs('cust_pkg', { 'pkgnum' => $self->change_pkgnum } ); -} - -=item calc_setup - -Calls the I of the FS::part_pkg object associated with this billing -item. - -=cut - -sub calc_setup { - my $self = shift; - $self->part_pkg->calc_setup($self, @_); -} - -=item calc_recur - -Calls the I of the FS::part_pkg object associated with this billing -item. - -=cut - -sub calc_recur { - my $self = shift; - $self->part_pkg->calc_recur($self, @_); -} - -=item calc_remain - -Calls the I of the FS::part_pkg object associated with this -billing item. - -=cut - -sub calc_remain { - my $self = shift; - $self->part_pkg->calc_remain($self, @_); -} - -=item calc_cancel - -Calls the I of the FS::part_pkg object associated with this -billing item. - -=cut - -sub calc_cancel { - my $self = shift; - $self->part_pkg->calc_cancel($self, @_); -} - -=item cust_bill_pkg - -Returns any invoice line items for this package (see L). - -=cut - -sub cust_bill_pkg { - my $self = shift; - qsearch( 'cust_bill_pkg', { 'pkgnum' => $self->pkgnum } ); -} - -=item cust_event - -Returns the new-style customer billing events (see L) for this invoice. - -=cut - -#false laziness w/cust_bill.pm -sub cust_event { - my $self = shift; - qsearch({ - 'table' => 'cust_event', - 'addl_from' => 'JOIN part_event USING ( eventpart )', - 'hashref' => { 'tablenum' => $self->pkgnum }, - 'extra_sql' => " AND eventtable = 'cust_pkg' ", - }); -} - -=item num_cust_event - -Returns the number of new-style customer billing events (see L) for this invoice. - -=cut - -#false laziness w/cust_bill.pm -sub num_cust_event { - my $self = shift; - my $sql = - "SELECT COUNT(*) FROM cust_event JOIN part_event USING ( eventpart ) ". - " WHERE tablenum = ? AND eventtable = 'cust_pkg'"; - my $sth = dbh->prepare($sql) or die dbh->errstr. " preparing $sql"; - $sth->execute($self->pkgnum) or die $sth->errstr. " executing $sql"; - $sth->fetchrow_arrayref->[0]; -} - -=item cust_svc [ SVCPART ] - -Returns the services for this package, as FS::cust_svc objects (see -L). If a svcpart is specified, return only the matching -services. - -=cut - -sub cust_svc { - my $self = shift; - - if ( @_ ) { - return qsearch( 'cust_svc', { 'pkgnum' => $self->pkgnum, - 'svcpart' => shift, } ); - } - - #if ( $self->{'_svcnum'} ) { - # values %{ $self->{'_svcnum'}->cache }; - #} else { - $self->_sort_cust_svc( - [ qsearch( 'cust_svc', { 'pkgnum' => $self->pkgnum } ) ] - ); - #} - -} - -=item overlimit [ SVCPART ] - -Returns the services for this package which have exceeded their -usage limit as FS::cust_svc objects (see L). If a svcpart -is specified, return only the matching services. - -=cut - -sub overlimit { - my $self = shift; - grep { $_->overlimit } $self->cust_svc; -} - -=item h_cust_svc END_TIMESTAMP [ START_TIMESTAMP ] - -Returns historical services for this package created before END TIMESTAMP and -(optionally) not cancelled before START_TIMESTAMP, as FS::h_cust_svc objects -(see L). - -=cut - -sub h_cust_svc { - my $self = shift; - - $self->_sort_cust_svc( - [ qsearch( 'h_cust_svc', - { 'pkgnum' => $self->pkgnum, }, - FS::h_cust_svc->sql_h_search(@_), - ) - ] - ); -} - -sub _sort_cust_svc { - my( $self, $arrayref ) = @_; - - map { $_->[0] } - sort { $b->[1] cmp $a->[1] or $a->[2] <=> $b->[2] } - map { - my $pkg_svc = qsearchs( 'pkg_svc', { 'pkgpart' => $self->pkgpart, - 'svcpart' => $_->svcpart } ); - [ $_, - $pkg_svc ? $pkg_svc->primary_svc : '', - $pkg_svc ? $pkg_svc->quantity : 0, - ]; - } - @$arrayref; - -} - -=item num_cust_svc [ SVCPART ] - -Returns the number of provisioned services for this package. If a svcpart is -specified, counts only the matching services. - -=cut - -sub num_cust_svc { - my $self = shift; - my $sql = 'SELECT COUNT(*) FROM cust_svc WHERE pkgnum = ?'; - $sql .= ' AND svcpart = ?' if @_; - my $sth = dbh->prepare($sql) or die dbh->errstr; - $sth->execute($self->pkgnum, @_) or die $sth->errstr; - $sth->fetchrow_arrayref->[0]; -} - -=item available_part_svc - -Returns a list of FS::part_svc objects representing services included in this -package but not yet provisioned. Each FS::part_svc object also has an extra -field, I, which specifies the number of available services. - -=cut - -sub available_part_svc { - my $self = shift; - grep { $_->num_avail > 0 } - map { - my $part_svc = $_->part_svc; - $part_svc->{'Hash'}{'num_avail'} = #evil encapsulation-breaking - $_->quantity - $self->num_cust_svc($_->svcpart); - $part_svc; - } - $self->part_pkg->pkg_svc; -} - -=item part_svc - -Returns a list of FS::part_svc objects representing provisioned and available -services included in this package. Each FS::part_svc object also has the -following extra fields: - -=over 4 - -=item num_cust_svc (count) - -=item num_avail (quantity - count) - -=item cust_pkg_svc (services) - array reference containing the provisioned services, as cust_svc objects - -svcnum -label -> ($cust_svc->label)[1] - -=back - -=cut - -sub part_svc { - my $self = shift; - - #XXX some sort of sort order besides numeric by svcpart... - my @part_svc = sort { $a->svcpart <=> $b->svcpart } map { - my $pkg_svc = $_; - my $part_svc = $pkg_svc->part_svc; - my $num_cust_svc = $self->num_cust_svc($part_svc->svcpart); - $part_svc->{'Hash'}{'num_cust_svc'} = $num_cust_svc; #more evil - $part_svc->{'Hash'}{'num_avail'} = - max( 0, $pkg_svc->quantity - $num_cust_svc ); - $part_svc->{'Hash'}{'cust_pkg_svc'} = [ $self->cust_svc($part_svc->svcpart) ]; - $part_svc; - } $self->part_pkg->pkg_svc; - - #extras - push @part_svc, map { - my $part_svc = $_; - my $num_cust_svc = $self->num_cust_svc($part_svc->svcpart); - $part_svc->{'Hash'}{'num_cust_svc'} = $num_cust_svc; #speak no evail - $part_svc->{'Hash'}{'num_avail'} = 0; #0-$num_cust_svc ? - $part_svc->{'Hash'}{'cust_pkg_svc'} = [ $self->cust_svc($part_svc->svcpart) ]; - $part_svc; - } $self->extra_part_svc; - - @part_svc; - -} - -=item extra_part_svc - -Returns a list of FS::part_svc objects corresponding to services in this -package which are still provisioned but not (any longer) available in the -package definition. - -=cut - -sub extra_part_svc { - my $self = shift; - - my $pkgnum = $self->pkgnum; - my $pkgpart = $self->pkgpart; - - qsearch( { - 'table' => 'part_svc', - 'hashref' => {}, - 'extra_sql' => "WHERE 0 = ( SELECT COUNT(*) FROM pkg_svc - WHERE pkg_svc.svcpart = part_svc.svcpart - AND pkg_svc.pkgpart = $pkgpart - AND quantity > 0 - ) - AND 0 < ( SELECT count(*) - FROM cust_svc - LEFT JOIN cust_pkg using ( pkgnum ) - WHERE cust_svc.svcpart = part_svc.svcpart - AND pkgnum = $pkgnum - )", - } ); -} - -=item status - -Returns a short status string for this package, currently: - -=over 4 - -=item not yet billed - -=item one-time charge - -=item active - -=item suspended - -=item cancelled - -=back - -=cut - -sub status { - my $self = shift; - - my $freq = length($self->freq) ? $self->freq : $self->part_pkg->freq; - - return 'cancelled' if $self->get('cancel'); - return 'suspended' if $self->susp; - return 'not yet billed' unless $self->setup; - return 'one-time charge' if $freq =~ /^(0|$)/; - return 'active'; -} - -=item statuses - -Class method that returns the list of possible status strings for packages -(see L). For example: - - @statuses = FS::cust_pkg->statuses(); - -=cut - -tie my %statuscolor, 'Tie::IxHash', - 'not yet billed' => '000000', - 'one-time charge' => '000000', - 'active' => '00CC00', - 'suspended' => 'FF9900', - 'cancelled' => 'FF0000', -; - -sub statuses { - my $self = shift; #could be class... - grep { $_ !~ /^(not yet billed)$/ } #this is a dumb status anyway - # mayble split btw one-time vs. recur - keys %statuscolor; -} - -=item statuscolor - -Returns a hex triplet color string for this package's status. - -=cut - -sub statuscolor { - my $self = shift; - $statuscolor{$self->status}; -} - -=item labels - -Returns a list of lists, calling the label method for all services -(see L) of this billing item. - -=cut - -sub labels { - my $self = shift; - map { [ $_->label ] } $self->cust_svc; -} - -=item h_labels END_TIMESTAMP [ START_TIMESTAMP ] - -Like the labels method, but returns historical information on services that -were active as of END_TIMESTAMP and (optionally) not cancelled before -START_TIMESTAMP. - -Returns a list of lists, calling the label method for all (historical) services -(see L) of this billing item. - -=cut - -sub h_labels { - my $self = shift; - map { [ $_->label(@_) ] } $self->h_cust_svc(@_); -} - -=item h_labels_short END_TIMESTAMP [ START_TIMESTAMP ] - -Like h_labels, except returns a simple flat list, and shortens long -(currently >5) lists of identical services to one line that lists the service -label and the number of individual services rather than individual items. - -=cut - -sub h_labels_short { - my $self = shift; - - my %labels; - #tie %labels, 'Tie::IxHash'; - push @{ $labels{$_->[0]} }, $_->[1] - foreach $self->h_labels(@_); - my @labels; - foreach my $label ( keys %labels ) { - my @values = @{ $labels{$label} }; - my $num = scalar(@values); - if ( $num > 5 ) { - push @labels, "$label ($num)"; - } else { - push @labels, map { "$label: $_" } @values; - } - } - - @labels; - -} - -=item cust_main - -Returns the parent customer object (see L). - -=cut - -sub cust_main { - my $self = shift; - qsearchs( 'cust_main', { 'custnum' => $self->custnum } ); -} - -=item seconds_since TIMESTAMP - -Returns the number of seconds all accounts (see L) in this -package have been online since TIMESTAMP, according to the session monitor. - -TIMESTAMP is specified as a UNIX timestamp; see L. Also see -L and L for conversion functions. - -=cut - -sub seconds_since { - my($self, $since) = @_; - my $seconds = 0; - - foreach my $cust_svc ( - grep { $_->part_svc->svcdb eq 'svc_acct' } $self->cust_svc - ) { - $seconds += $cust_svc->seconds_since($since); - } - - $seconds; - -} - -=item seconds_since_sqlradacct TIMESTAMP_START TIMESTAMP_END - -Returns the numbers of seconds all accounts (see L) in this -package have been online between TIMESTAMP_START (inclusive) and TIMESTAMP_END -(exclusive). - -TIMESTAMP_START and TIMESTAMP_END are specified as UNIX timestamps; see -L. Also see L and L for conversion -functions. - - -=cut - -sub seconds_since_sqlradacct { - my($self, $start, $end) = @_; - - my $seconds = 0; - - foreach my $cust_svc ( - grep { - my $part_svc = $_->part_svc; - $part_svc->svcdb eq 'svc_acct' - && scalar($part_svc->part_export('sqlradius')); - } $self->cust_svc - ) { - $seconds += $cust_svc->seconds_since_sqlradacct($start, $end); - } - - $seconds; - -} - -=item attribute_since_sqlradacct TIMESTAMP_START TIMESTAMP_END ATTRIBUTE - -Returns the sum of the given attribute for all accounts (see L) -in this package for sessions ending between TIMESTAMP_START (inclusive) and -TIMESTAMP_END -(exclusive). - -TIMESTAMP_START and TIMESTAMP_END are specified as UNIX timestamps; see -L. Also see L and L for conversion -functions. - -=cut - -sub attribute_since_sqlradacct { - my($self, $start, $end, $attrib) = @_; - - my $sum = 0; - - foreach my $cust_svc ( - grep { - my $part_svc = $_->part_svc; - $part_svc->svcdb eq 'svc_acct' - && scalar($part_svc->part_export('sqlradius')); - } $self->cust_svc - ) { - $sum += $cust_svc->attribute_since_sqlradacct($start, $end, $attrib); - } - - $sum; - -} - -=item transfer DEST_PKGNUM | DEST_CUST_PKG, [ OPTION => VALUE ... ] - -Transfers as many services as possible from this package to another package. - -The destination package can be specified by pkgnum by passing an FS::cust_pkg -object. The destination package must already exist. - -Services are moved only if the destination allows services with the correct -I (not svcdb), unless the B option is set true. Use -this option with caution! No provision is made for export differences -between the old and new service definitions. Probably only should be used -when your exports for all service definitions of a given svcdb are identical. -(attempt a transfer without it first, to move all possible svcpart-matching -services) - -Any services that can't be moved remain in the original package. - -Returns an error, if there is one; otherwise, returns the number of services -that couldn't be moved. - -=cut - -sub transfer { - my ($self, $dest_pkgnum, %opt) = @_; - - my $remaining = 0; - my $dest; - my %target; - - if (ref ($dest_pkgnum) eq 'FS::cust_pkg') { - $dest = $dest_pkgnum; - $dest_pkgnum = $dest->pkgnum; - } else { - $dest = qsearchs('cust_pkg', { pkgnum => $dest_pkgnum }); - } - - return ('Package does not exist: '.$dest_pkgnum) unless $dest; - - foreach my $pkg_svc ( $dest->part_pkg->pkg_svc ) { - $target{$pkg_svc->svcpart} = $pkg_svc->quantity; - } - - foreach my $cust_svc ($dest->cust_svc) { - $target{$cust_svc->svcpart}--; - } - - my %svcpart2svcparts = (); - if ( exists $opt{'change_svcpart'} && $opt{'change_svcpart'} ) { - warn "change_svcpart option received, creating alternates list\n" if $DEBUG; - foreach my $svcpart ( map { $_->svcpart } $self->cust_svc ) { - next if exists $svcpart2svcparts{$svcpart}; - my $part_svc = qsearchs('part_svc', { 'svcpart' => $svcpart } ); - $svcpart2svcparts{$svcpart} = [ - map { $_->[0] } - sort { $b->[1] cmp $a->[1] or $a->[2] <=> $b->[2] } - map { - my $pkg_svc = qsearchs( 'pkg_svc', { 'pkgpart' => $dest->pkgpart, - 'svcpart' => $_ } ); - [ $_, - $pkg_svc ? $pkg_svc->primary_svc : '', - $pkg_svc ? $pkg_svc->quantity : 0, - ]; - } - - grep { $_ != $svcpart } - map { $_->svcpart } - qsearch('part_svc', { 'svcdb' => $part_svc->svcdb } ) - ]; - warn "alternates for svcpart $svcpart: ". - join(', ', @{$svcpart2svcparts{$svcpart}}). "\n" - if $DEBUG; - } - } - - foreach my $cust_svc ($self->cust_svc) { - if($target{$cust_svc->svcpart} > 0) { - $target{$cust_svc->svcpart}--; - my $new = new FS::cust_svc { $cust_svc->hash }; - $new->pkgnum($dest_pkgnum); - my $error = $new->replace($cust_svc); - return $error if $error; - } elsif ( exists $opt{'change_svcpart'} && $opt{'change_svcpart'} ) { - if ( $DEBUG ) { - warn "looking for alternates for svcpart ". $cust_svc->svcpart. "\n"; - warn "alternates to consider: ". - join(', ', @{$svcpart2svcparts{$cust_svc->svcpart}}). "\n"; - } - my @alternate = grep { - warn "considering alternate svcpart $_: ". - "$target{$_} available in new package\n" - if $DEBUG; - $target{$_} > 0; - } @{$svcpart2svcparts{$cust_svc->svcpart}}; - if ( @alternate ) { - warn "alternate(s) found\n" if $DEBUG; - my $change_svcpart = $alternate[0]; - $target{$change_svcpart}--; - my $new = new FS::cust_svc { $cust_svc->hash }; - $new->svcpart($change_svcpart); - $new->pkgnum($dest_pkgnum); - my $error = $new->replace($cust_svc); - return $error if $error; - } else { - $remaining++; - } - } else { - $remaining++ - } - } - return $remaining; -} - -=item reexport - -This method is deprecated. See the I option to the insert and -order_pkgs methods in FS::cust_main for a better way to defer provisioning. - -=cut - -sub reexport { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $cust_svc ( $self->cust_svc ) { - #false laziness w/svc_Common::insert - my $svc_x = $cust_svc->svc_x; - foreach my $part_export ( $cust_svc->part_svc->part_export ) { - my $error = $part_export->export_insert($svc_x); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=back - -=head1 CLASS METHODS - -=over 4 - -=item recurring_sql - -Returns an SQL expression identifying recurring packages. - -=cut - -sub recurring_sql { " - '0' != ( select freq from part_pkg - where cust_pkg.pkgpart = part_pkg.pkgpart ) -"; } - -=item onetime_sql - -Returns an SQL expression identifying one-time packages. - -=cut - -sub onetime_sql { " - '0' = ( select freq from part_pkg - where cust_pkg.pkgpart = part_pkg.pkgpart ) -"; } - -=item active_sql - -Returns an SQL expression identifying active packages. - -=cut - -sub active_sql { " - ". $_[0]->recurring_sql(). " - AND ( cust_pkg.cancel IS NULL OR cust_pkg.cancel = 0 ) - AND ( cust_pkg.susp IS NULL OR cust_pkg.susp = 0 ) -"; } - -=item inactive_sql - -Returns an SQL expression identifying inactive packages (one-time packages -that are otherwise unsuspended/uncancelled). - -=cut - -sub inactive_sql { " - ". $_[0]->onetime_sql(). " - AND ( cust_pkg.cancel IS NULL OR cust_pkg.cancel = 0 ) - AND ( cust_pkg.susp IS NULL OR cust_pkg.susp = 0 ) -"; } - -=item susp_sql -=item suspended_sql - -Returns an SQL expression identifying suspended packages. - -=cut - -sub suspended_sql { susp_sql(@_); } -sub susp_sql { - #$_[0]->recurring_sql(). ' AND '. - " - ( cust_pkg.cancel IS NULL OR cust_pkg.cancel = 0 ) - AND cust_pkg.susp IS NOT NULL AND cust_pkg.susp != 0 - "; -} - -=item cancel_sql -=item cancelled_sql - -Returns an SQL exprression identifying cancelled packages. - -=cut - -sub cancelled_sql { cancel_sql(@_); } -sub cancel_sql { - #$_[0]->recurring_sql(). ' AND '. - "cust_pkg.cancel IS NOT NULL AND cust_pkg.cancel != 0"; -} - -=item search_sql HREF - -Returns a qsearch hash expression to search for parameters specified in HREF. -Valid parameters are - -=over 4 -=item agentnum -=item magic - /^(active|inactive|suspended|cancell?ed)$/ -=item status - /^(active|inactive|suspended|one-time charge|inactive|cancell?ed)$/ -=item classnum -=item pkgpart - list specified how? -=item setup - arrayref of beginning and ending epoch date -=item last_bill - arrayref of beginning and ending epoch date -=item bill - arrayref of beginning and ending epoch date -=item adjourn - arrayref of beginning and ending epoch date -=item susp - arrayref of beginning and ending epoch date -=item expire - arrayref of beginning and ending epoch date -=item cancel - arrayref of beginning and ending epoch date -=item query - /^(pkgnum/APKG_pkgnum)$/ -=item cust_fields - a value suited to passing to FS::UI::Web::cust_header -=item CurrentUser - specifies the user for agent virtualization -=back - -=cut - -sub search_sql { - my ($class, $params) = @_; - my @where = (); - - ## - # parse agent - ## - - if ( $params->{'agentnum'} =~ /^(\d+)$/ and $1 ) { - push @where, - "cust_main.agentnum = $1"; - } - - ## - # parse status - ## - - if ( $params->{'magic'} eq 'active' - || $params->{'status'} eq 'active' ) { - - push @where, FS::cust_pkg->active_sql(); - - } elsif ( $params->{'magic'} eq 'inactive' - || $params->{'status'} eq 'inactive' ) { - - push @where, FS::cust_pkg->inactive_sql(); - - } elsif ( $params->{'magic'} eq 'suspended' - || $params->{'status'} eq 'suspended' ) { - - push @where, FS::cust_pkg->suspended_sql(); - - } elsif ( $params->{'magic'} =~ /^cancell?ed$/ - || $params->{'status'} =~ /^cancell?ed$/ ) { - - push @where, FS::cust_pkg->cancelled_sql(); - - } elsif ( $params->{'status'} =~ /^(one-time charge|inactive)$/ ) { - - push @where, FS::cust_pkg->inactive_sql(); - - } - - ### - # parse package class - ### - - #false lazinessish w/graph/cust_bill_pkg.cgi - my $classnum = 0; - my @pkg_class = (); - if ( exists($params->{'classnum'}) - && $params->{'classnum'} =~ /^(\d*)$/ - ) - { - $classnum = $1; - if ( $classnum ) { #a specific class - push @where, "classnum = $classnum"; - - #@pkg_class = ( qsearchs('pkg_class', { 'classnum' => $classnum } ) ); - #die "classnum $classnum not found!" unless $pkg_class[0]; - #$title .= $pkg_class[0]->classname.' '; - - } elsif ( $classnum eq '' ) { #the empty class - - push @where, "classnum IS NULL"; - #$title .= 'Empty class '; - #@pkg_class = ( '(empty class)' ); - } elsif ( $classnum eq '0' ) { - #@pkg_class = qsearch('pkg_class', {} ); # { 'disabled' => '' } ); - #push @pkg_class, '(empty class)'; - } else { - die "illegal classnum"; - } - } - #eslaf - - ### - # parse part_pkg - ### - - my $pkgpart = join (' OR pkgpart=', - grep {$_} map { /^(\d+)$/; } ($params->{'pkgpart'})); - push @where, '(pkgpart=' . $pkgpart . ')' if $pkgpart; - - ### - # parse dates - ### - - my $orderby = ''; - - #false laziness w/report_cust_pkg.html - my %disable = ( - 'all' => {}, - 'one-time charge' => { 'last_bill'=>1, 'bill'=>1, 'adjourn'=>1, 'susp'=>1, 'expire'=>1, 'cancel'=>1, }, - 'active' => { 'susp'=>1, 'cancel'=>1 }, - 'suspended' => { 'cancel' => 1 }, - 'cancelled' => {}, - '' => {}, - ); - - foreach my $field (qw( setup last_bill bill adjourn susp expire cancel )) { - - next unless exists($params->{$field}); - - my($beginning, $ending) = @{$params->{$field}}; - - next if $beginning == 0 && $ending == 4294967295; - - push @where, - "cust_pkg.$field IS NOT NULL", - "cust_pkg.$field >= $beginning", - "cust_pkg.$field <= $ending"; - - $orderby ||= "ORDER BY cust_pkg.$field"; - - } - - $orderby ||= 'ORDER BY bill'; - - ### - # parse magic, legacy, etc. - ### - - if ( $params->{'magic'} && - $params->{'magic'} =~ /^(active|inactive|suspended|cancell?ed)$/ - ) { - - $orderby = 'ORDER BY pkgnum'; - - if ( $params->{'pkgpart'} =~ /^(\d+)$/ ) { - push @where, "pkgpart = $1"; - } - - } elsif ( $params->{'query'} eq 'pkgnum' ) { - - $orderby = 'ORDER BY pkgnum'; - - } elsif ( $params->{'query'} eq 'APKG_pkgnum' ) { - - $orderby = 'ORDER BY pkgnum'; - - push @where, '0 < ( - SELECT count(*) FROM pkg_svc - WHERE pkg_svc.pkgpart = cust_pkg.pkgpart - AND pkg_svc.quantity > ( SELECT count(*) FROM cust_svc - WHERE cust_svc.pkgnum = cust_pkg.pkgnum - AND cust_svc.svcpart = pkg_svc.svcpart - ) - )'; - - } - - ## - # setup queries, links, subs, etc. for the search - ## - - # here is the agent virtualization - if ($params->{CurrentUser}) { - my $access_user = - qsearchs('access_user', { username => $params->{CurrentUser} }); - - if ($access_user) { - push @where, $access_user->agentnums_sql('table'=>'cust_main'); - }else{ - push @where, "1=0"; - } - }else{ - push @where, $FS::CurrentUser::CurrentUser->agentnums_sql('table'=>'cust_main'); - } - - my $extra_sql = scalar(@where) ? ' WHERE '. join(' AND ', @where) : ''; - - my $addl_from = 'LEFT JOIN cust_main USING ( custnum ) '. - 'LEFT JOIN part_pkg USING ( pkgpart ) '. - 'LEFT JOIN pkg_class USING ( classnum ) '; - - my $count_query = "SELECT COUNT(*) FROM cust_pkg $addl_from $extra_sql"; - - my $sql_query = { - 'table' => 'cust_pkg', - 'hashref' => {}, - 'select' => join(', ', - 'cust_pkg.*', - ( map "part_pkg.$_", qw( pkg freq ) ), - 'pkg_class.classname', - 'cust_main.custnum as cust_main_custnum', - FS::UI::Web::cust_sql_fields( - $params->{'cust_fields'} - ), - ), - 'extra_sql' => "$extra_sql $orderby", - 'addl_from' => $addl_from, - 'count_query' => $count_query, - }; - -} - -=head1 SUBROUTINES - -=over 4 - -=item order CUSTNUM, PKGPARTS_ARYREF, [ REMOVE_PKGNUMS_ARYREF [ RETURN_CUST_PKG_ARRAYREF [ REFNUM ] ] ] - -CUSTNUM is a customer (see L) - -PKGPARTS is a list of pkgparts specifying the the billing item definitions (see -L) to order for this customer. Duplicates are of course -permitted. - -REMOVE_PKGNUMS is an optional list of pkgnums specifying the billing items to -remove for this customer. The services (see L) are moved to the -new billing items. An error is returned if this is not possible (see -L). An empty arrayref is equivalent to not specifying this -parameter. - -RETURN_CUST_PKG_ARRAYREF, if specified, will be filled in with the -newly-created cust_pkg objects. - -REFNUM, if specified, will specify the FS::pkg_referral record to be created -and inserted. Multiple FS::pkg_referral records can be created by -setting I to an array reference of refnums or a hash reference with -refnums as keys. If no I is defined, a default FS::pkg_referral -record will be created corresponding to cust_main.refnum. - -=cut - -sub order { - my ($custnum, $pkgparts, $remove_pkgnum, $return_cust_pkg, $refnum) = @_; - - my $conf = new FS::Conf; - - # Transactionize this whole mess - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error; - my $cust_main = qsearchs('cust_main', { custnum => $custnum }); - return "Customer not found: $custnum" unless $cust_main; - - my @old_cust_pkg = map { qsearchs('cust_pkg', { pkgnum => $_ }) } - @$remove_pkgnum; - - my $change = scalar(@old_cust_pkg) != 0; - - my %hash = (); - if ( scalar(@old_cust_pkg) == 1 && scalar(@$pkgparts) == 1 ) { - - my $time = time; - - #$hash{$_} = $old_cust_pkg[0]->$_() foreach qw( last_bill bill ); - - #$hash{$_} = $old_cust_pkg[0]->$_() foreach qw( setup ); - $hash{'setup'} = $time if $old_cust_pkg[0]->setup; - - $hash{'change_date'} = $time; - $hash{"change_$_"} = $old_cust_pkg[0]->$_() foreach qw( pkgnum pkgpart ); - } - - # Create the new packages. - foreach my $pkgpart (@$pkgparts) { - my $cust_pkg = new FS::cust_pkg { custnum => $custnum, - pkgpart => $pkgpart, - refnum => $refnum, - %hash, - }; - $error = $cust_pkg->insert( 'change' => $change ); - if ($error) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - push @$return_cust_pkg, $cust_pkg; - } - # $return_cust_pkg now contains refs to all of the newly - # created packages. - - # Transfer services and cancel old packages. - foreach my $old_pkg (@old_cust_pkg) { - - foreach my $new_pkg (@$return_cust_pkg) { - $error = $old_pkg->transfer($new_pkg); - if ($error and $error == 0) { - # $old_pkg->transfer failed. - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - if ( $error > 0 && $conf->exists('cust_pkg-change_svcpart') ) { - warn "trying transfer again with change_svcpart option\n" if $DEBUG; - foreach my $new_pkg (@$return_cust_pkg) { - $error = $old_pkg->transfer($new_pkg, 'change_svcpart'=>1 ); - if ($error and $error == 0) { - # $old_pkg->transfer failed. - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - if ($error > 0) { - # Transfers were successful, but we went through all of the - # new packages and still had services left on the old package. - # We can't cancel the package under the circumstances, so abort. - $dbh->rollback if $oldAutoCommit; - return "Unable to transfer all services from package ".$old_pkg->pkgnum; - } - $error = $old_pkg->cancel( quiet=>1 ); - if ($error) { - $dbh->rollback; - return $error; - } - } - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; -} - -=item insert_reason - -Associates this package with a (suspension or cancellation) reason (see -L, possibly inserting a new reason on the fly (see -L). - -Available options are: - -=over 4 - -=item reason - can be set to a cancellation reason (see L), either a reasonnum of an existing reason, or passing a hashref will create a new reason. The hashref should have the following keys: typenum - Reason type (see L, reason - Text of the new reason. - -=item date - -=back - -If there is an error, returns the error, otherwise returns false. - -=cut - -=item bulk_change PKGPARTS_ARYREF, REMOVE_PKGNUMS_ARYREF [ RETURN_CUST_PKG_ARRAYREF ] - -PKGPARTS is a list of pkgparts specifying the the billing item definitions (see -L) to order for this customer. Duplicates are of course -permitted. - -REMOVE_PKGNUMS is an list of pkgnums specifying the billing items to -replace. The services (see L) are moved to the -new billing items. An error is returned if this is not possible (see -L). - -RETURN_CUST_PKG_ARRAYREF, if specified, will be filled in with the -newly-created cust_pkg objects. - -=cut - -sub bulk_change { - my ($pkgparts, $remove_pkgnum, $return_cust_pkg) = @_; - - # Transactionize this whole mess - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my @errors; - my @old_cust_pkg = map { qsearchs('cust_pkg', { pkgnum => $_ }) } - @$remove_pkgnum; - - while(scalar(@old_cust_pkg)) { - my @return = (); - my $custnum = $old_cust_pkg[0]->custnum; - my (@remove) = map { $_->pkgnum } - grep { $_->custnum == $custnum } @old_cust_pkg; - @old_cust_pkg = grep { $_->custnum != $custnum } @old_cust_pkg; - - my $error = order $custnum, $pkgparts, \@remove, \@return; - - push @errors, $error - if $error; - push @$return_cust_pkg, @return; - } - - if (scalar(@errors)) { - $dbh->rollback if $oldAutoCommit; - return join(' / ', @errors); - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; -} - -sub insert_reason { - my ($self, %options) = @_; - - my $otaker = $FS::CurrentUser::CurrentUser->username; - - my $reasonnum; - if ( $options{'reason'} =~ /^(\d+)$/ ) { - - $reasonnum = $1; - - } elsif ( ref($options{'reason'}) ) { - - return 'Enter a new reason (or select an existing one)' - unless $options{'reason'}->{'reason'} !~ /^\s*$/; - - my $reason = new FS::reason({ - 'reason_type' => $options{'reason'}->{'typenum'}, - 'reason' => $options{'reason'}->{'reason'}, - }); - my $error = $reason->insert; - return $error if $error; - - $reasonnum = $reason->reasonnum; - - } else { - return "Unparsable reason: ". $options{'reason'}; - } - - my $cust_pkg_reason = - new FS::cust_pkg_reason({ 'pkgnum' => $self->pkgnum, - 'reasonnum' => $reasonnum, - 'otaker' => $otaker, - 'date' => $options{'date'} - ? $options{'date'} - : time, - }); - - $cust_pkg_reason->insert; -} - -=item set_usage USAGE_VALUE_HASHREF - -USAGE_VALUE_HASHREF is a hashref of svc_acct usage columns and the amounts -to which they should be set (see L). Currently seconds, -upbytes, downbytes, and totalbytes are appropriate keys. - -All svc_accts which are part of this package have their values reset. - -=cut - -sub set_usage { - my ($self, $valueref) = @_; - - foreach my $cust_svc ($self->cust_svc){ - my $svc_x = $cust_svc->svc_x; - $svc_x->set_usage($valueref) - if $svc_x->can("set_usage"); - } -} - -=item recharge USAGE_VALUE_HASHREF - -USAGE_VALUE_HASHREF is a hashref of svc_acct usage columns and the amounts -to which they should be set (see L). Currently seconds, -upbytes, downbytes, and totalbytes are appropriate keys. - -All svc_accts which are part of this package have their values incremented. - -=cut - -sub recharge { - my ($self, $valueref) = @_; - - foreach my $cust_svc ($self->cust_svc){ - my $svc_x = $cust_svc->svc_x; - $svc_x->recharge($valueref) - if $svc_x->can("recharge"); - } -} - -=back - -=head1 BUGS - -sub order is not OO. Perhaps it should be moved to FS::cust_main and made so? - -In sub order, the @pkgparts array (passed by reference) is clobbered. - -Also in sub order, no money is adjusted. Once FS::part_pkg defines a standard -method to pass dates to the recur_prog expression, it should do so. - -FS::svc_acct, FS::svc_domain, FS::svc_www, FS::svc_ip and FS::svc_forward are -loaded via 'use' at compile time, rather than via 'require' in sub { setup, -suspend, unsuspend, cancel } because they use %FS::UID::callback to load -configuration values. Probably need a subroutine which decides what to do -based on whether or not we've fetched the user yet, rather than a hash. See -FS::UID and the TODO. - -Now that things are transactional should the check in the insert method be -moved to check ? - -=head1 SEE ALSO - -L, L, L, L, -L, schema.html from the base documentation - -=cut - -1; - diff --git a/FS/FS/cust_pkg_option.pm b/FS/FS/cust_pkg_option.pm deleted file mode 100644 index 43a153095..000000000 --- a/FS/FS/cust_pkg_option.pm +++ /dev/null @@ -1,115 +0,0 @@ -package FS::cust_pkg_option; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::cust_pkg_option - Object methods for cust_pkg_option records - -=head1 SYNOPSIS - - use FS::cust_pkg_option; - - $record = new FS::cust_pkg_option \%hash; - $record = new FS::cust_pkg_option { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::cust_pkg_option object represents an option key an value for a -customer package. FS::cust_pkg_option inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item optionnum - primary key - -=item pkgnum - - -=item optionname - - -=item optionvalue - - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new option. To add the option to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -sub table { 'cust_pkg_option'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -=item delete - -Delete this record from the database. - -=cut - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -=item check - -Checks all fields to make sure this is a valid option. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('optionnum') - || $self->ut_foreign_key('pkgnum', 'cust_pkg', 'pkgnum') - || $self->ut_text('optionname') - || $self->ut_textn('optionvalue') - ; - return $error if $error; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/cust_pkg_reason.pm b/FS/FS/cust_pkg_reason.pm deleted file mode 100644 index 2f927401f..000000000 --- a/FS/FS/cust_pkg_reason.pm +++ /dev/null @@ -1,122 +0,0 @@ -package FS::cust_pkg_reason; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::cust_pkg_reason - Object methods for cust_pkg_reason records - -=head1 SYNOPSIS - - use FS::cust_pkg_reason; - - $record = new FS::cust_pkg_reason \%hash; - $record = new FS::cust_pkg_reason { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::cust_pkg_reason object represents a relationship between a cust_pkg -and a reason, for example cancellation or suspension reasons. -FS::cust_pkg_reason inherits from FS::Record. The following fields are -currently supported: - -=over 4 - -=item num - primary key - -=item pkgnum - - -=item reasonnum - - -=item otaker - - -=item date - - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new cust_pkg_reason. To add the example to the database, see -L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -sub table { 'cust_pkg_reason'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -=item delete - -Delete this record from the database. - -=cut - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -=item check - -Checks all fields to make sure this is a valid cust_pkg_reason. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('num') - || $self->ut_number('pkgnum') - || $self->ut_number('reasonnum') - || $self->ut_text('otaker') - || $self->ut_numbern('date') - ; - return $error if $error; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -Here be termites. Don't use on wooden computers. - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/cust_refund.pm b/FS/FS/cust_refund.pm deleted file mode 100644 index 498179553..000000000 --- a/FS/FS/cust_refund.pm +++ /dev/null @@ -1,353 +0,0 @@ -package FS::cust_refund; - -use strict; -use vars qw( @ISA @encrypted_fields ); -use Business::CreditCard; -use FS::Record qw( qsearch qsearchs dbh ); -use FS::UID qw(getotaker); -use FS::cust_credit; -use FS::cust_credit_refund; -use FS::cust_pay_refund; -use FS::cust_main; -use FS::payinfo_Mixin; - -@ISA = qw( FS::Record FS::payinfo_Mixin ); - -@encrypted_fields = ('payinfo'); - -=head1 NAME - -FS::cust_refund - Object method for cust_refund objects - -=head1 SYNOPSIS - - use FS::cust_refund; - - $record = new FS::cust_refund \%hash; - $record = new FS::cust_refund { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::cust_refund represents a refund: the transfer of money to a customer; -equivalent to a negative payment (see L). FS::cust_refund -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item refundnum - primary key (assigned automatically for new refunds) - -=item custnum - customer (see L) - -=item refund - Amount of the refund - -=item reason - Reason for the refund - -=item _date - specified as a UNIX timestamp; see L. Also see -L and L for conversion functions. - -=item payby - Payment Type (See L for valid payby values) - -=item payinfo - Payment Information (See L for data format) - -=item paymask - Masked payinfo (See L for how this works) - -=item paybatch - text field for tracking card processing - -=item otaker - order taker (assigned automatically, see L) - -=item closed - books closed flag, empty or `Y' - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new refund. To add the refund to the database, see L<"insert">. - -=cut - -sub table { 'cust_refund'; } - -=item insert - -Adds this refund to the database. - -For backwards-compatibility and convenience, if the additional field crednum is -defined, an FS::cust_credit_refund record for the full amount of the refund -will be created. Or (this time for convenience and consistancy), if the -additional field paynum is defined, an FS::cust_pay_refund record for the full -amount of the refund will be created. In both cases, custnum is optional. - -=cut - -sub insert { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - if ( $self->crednum ) { - my $cust_credit = qsearchs('cust_credit', { 'crednum' => $self->crednum } ) - or do { - $dbh->rollback if $oldAutoCommit; - return "Unknown cust_credit.crednum: ". $self->crednum; - }; - $self->custnum($cust_credit->custnum); - } elsif ( $self->paynum ) { - my $cust_pay = qsearchs('cust_pay', { 'paynum' => $self->paynum } ) - or do { - $dbh->rollback if $oldAutoCommit; - return "Unknown cust_pay.paynum: ". $self->paynum; - }; - $self->custnum($cust_pay->custnum); - } - - my $error = $self->check; - return $error if $error; - - $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( $self->crednum ) { - my $cust_credit_refund = new FS::cust_credit_refund { - 'crednum' => $self->crednum, - 'refundnum' => $self->refundnum, - 'amount' => $self->refund, - '_date' => $self->_date, - }; - $error = $cust_credit_refund->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - #$self->custnum($cust_credit_refund->cust_credit->custnum); - } elsif ( $self->paynum ) { - my $cust_pay_refund = new FS::cust_pay_refund { - 'paynum' => $self->paynum, - 'refundnum' => $self->refundnum, - 'amount' => $self->refund, - '_date' => $self->_date, - }; - $error = $cust_pay_refund->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item delete - -Unless the closed flag is set, deletes this refund and all associated -applications (see L and L). - -=cut - -sub delete { - my $self = shift; - return "Can't delete closed refund" if $self->closed =~ /^Y/i; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $cust_credit_refund ( $self->cust_credit_refund ) { - my $error = $cust_credit_refund->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - foreach my $cust_pay_refund ( $self->cust_pay_refund ) { - my $error = $cust_pay_refund->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - my $error = $self->SUPER::delete(@_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item replace OLD_RECORD - -Currently unimplemented (accounting reasons). - -=cut - -sub replace { - my $self = shift; - $self->SUPER::replace(@_); -} - -=item check - -Checks all fields to make sure this is a valid refund. If there is an error, -returns the error, otherwise returns false. Called by the insert method. - -=cut - -sub check { - my $self = shift; - - $self->otaker(getotaker) unless ($self->otaker); - - my $error = - $self->ut_numbern('refundnum') - || $self->ut_numbern('custnum') - || $self->ut_money('refund') - || $self->ut_alpha('otaker') - || $self->ut_text('reason') - || $self->ut_numbern('_date') - || $self->ut_textn('paybatch') - || $self->ut_enum('closed', [ '', 'Y' ]) - ; - return $error if $error; - - return "refund must be > 0 " if $self->refund <= 0; - - $self->_date(time) unless $self->_date; - - return "unknown cust_main.custnum: ". $self->custnum - unless $self->crednum - || qsearchs( 'cust_main', { 'custnum' => $self->custnum } ); - - $error = $self->payinfo_check; - return $error if $error; - - $self->SUPER::check; -} - -=item cust_credit_refund - -Returns all applications to credits (see L) for this -refund. - -=cut - -sub cust_credit_refund { - my $self = shift; - sort { $a->_date <=> $b->_date } - qsearch( 'cust_credit_refund', { 'refundnum' => $self->refundnum } ) - ; -} - -=item cust_pay_refund - -Returns all applications to payments (see L) for this -refund. - -=cut - -sub cust_pay_refund { - my $self = shift; - sort { $a->_date <=> $b->_date } - qsearch( 'cust_pay_refund', { 'refundnum' => $self->refundnum } ) - ; -} - -=item unapplied - -Returns the amount of this refund that is still unapplied; which is -amount minus all credit applications (see L) and -payment applications (see L). - -=cut - -sub unapplied { - my $self = shift; - my $amount = $self->refund; - $amount -= $_->amount foreach ( $self->cust_credit_refund ); - $amount -= $_->amount foreach ( $self->cust_pay_refund ); - sprintf("%.2f", $amount ); -} - -=back - -=head1 CLASS METHODS - -=over 4 - -=item unapplied_sql - -Returns an SQL fragment to retreive the unapplied amount. - -=cut - -sub unapplied_sql { - #my $class = shift; - - "refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - "; - -} - -=back - -=head1 BUGS - -Delete and replace methods. - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm deleted file mode 100644 index f16856779..000000000 --- a/FS/FS/cust_svc.pm +++ /dev/null @@ -1,709 +0,0 @@ -package FS::cust_svc; - -use strict; -use vars qw( @ISA $DEBUG $me $ignore_quantity ); -use Carp; -use FS::Conf; -use FS::Record qw( qsearch qsearchs dbh str2time_sql ); -use FS::cust_pkg; -use FS::part_pkg; -use FS::part_svc; -use FS::pkg_svc; -use FS::domain_record; -use FS::part_export; -use FS::cdr; - -#most FS::svc_ classes are autoloaded in svc_x emthod -use FS::svc_acct; #this one is used in the cache stuff - -@ISA = qw( FS::cust_main_Mixin FS::Record ); - -$DEBUG = 0; -$me = '[cust_svc]'; - -$ignore_quantity = 0; - -sub _cache { - my $self = shift; - my ( $hashref, $cache ) = @_; - if ( $hashref->{'username'} ) { - $self->{'_svc_acct'} = FS::svc_acct->new($hashref, ''); - } - if ( $hashref->{'svc'} ) { - $self->{'_svcpart'} = FS::part_svc->new($hashref); - } -} - -=head1 NAME - -FS::cust_svc - Object method for cust_svc objects - -=head1 SYNOPSIS - - use FS::cust_svc; - - $record = new FS::cust_svc \%hash - $record = new FS::cust_svc { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - ($label, $value) = $record->label; - -=head1 DESCRIPTION - -An FS::cust_svc represents a service. FS::cust_svc inherits from FS::Record. -The following fields are currently supported: - -=over 4 - -=item svcnum - primary key (assigned automatically for new services) - -=item pkgnum - Package (see L) - -=item svcpart - Service definition (see L) - -=item overlimit - date the service exceeded its usage limit - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new service. To add the refund to the database, see L<"insert">. -Services are normally created by creating FS::svc_ objects (see -L, L, and L, among others). - -=cut - -sub table { 'cust_svc'; } - -=item insert - -Adds this service to the database. If there is an error, returns the error, -otherwise returns false. - -=item delete - -Deletes this service from the database. If there is an error, returns the -error, otherwise returns false. Note that this only removes the cust_svc -record - you should probably use the B method instead. - -=item cancel - -Cancels the relevant service by calling the B method of the associated -FS::svc_XXX object (i.e. an FS::svc_acct object or FS::svc_domain object), -deleting the FS::svc_XXX record and then deleting this record. - -If there is an error, returns the error, otherwise returns false. - -=cut - -sub cancel { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $part_svc = $self->part_svc; - - $part_svc->svcdb =~ /^([\w\-]+)$/ or do { - $dbh->rollback if $oldAutoCommit; - return "Illegal svcdb value in part_svc!"; - }; - my $svcdb = $1; - require "FS/$svcdb.pm"; - - my $svc = $self->svc_x; - if ($svc) { - - my $error = $svc->cancel; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error canceling service: $error"; - } - $error = $svc->delete; #this deletes this cust_svc record as well - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error deleting service: $error"; - } - - } else { - - #huh? - warn "WARNING: no svc_ record found for svcnum ". $self->svcnum. - "; deleting cust_svc only\n"; - - my $error = $self->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error deleting cust_svc: $error"; - } - - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; #no errors - -} - -=item overlimit [ ACTION ] - -Retrieves or sets the overlimit date. If ACTION is absent, return -the present value of overlimit. If ACTION is present, it can -have the value 'suspend' or 'unsuspend'. In the case of 'suspend' overlimit -is set to the current time if it is not already set. The 'unsuspend' value -causes the time to be cleared. - -If there is an error on setting, returns the error, otherwise returns false. - -=cut - -sub overlimit { - my $self = shift; - my $action = shift or return $self->getfield('overlimit'); - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - if ( $action eq 'suspend' ) { - $self->setfield('overlimit', time) unless $self->getfield('overlimit'); - }elsif ( $action eq 'unsuspend' ) { - $self->setfield('overlimit', ''); - }else{ - die "unexpected action value: $action"; - } - - local $ignore_quantity = 1; - my $error = $self->replace; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error setting overlimit: $error"; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; #no errors - -} - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -sub replace { - my ( $new, $old ) = ( shift, shift ); - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - $old = $new->replace_old unless defined($old); - - if ( $new->svcpart != $old->svcpart ) { - my $svc_x = $new->svc_x; - my $new_svc_x = ref($svc_x)->new({$svc_x->hash, svcpart=>$new->svcpart }); - local($FS::Record::nowarn_identical) = 1; - my $error = $new_svc_x->replace($svc_x); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error if $error; - } - } - - my $error = $new->SUPER::replace($old); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error if $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; #no error - -} - -=item check - -Checks all fields to make sure this is a valid service. If there is an error, -returns the error, otherwise returns false. Called by the insert and -replace methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('svcnum') - || $self->ut_numbern('pkgnum') - || $self->ut_number('svcpart') - || $self->ut_numbern('overlimit') - ; - return $error if $error; - - my $part_svc = qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } ); - return "Unknown svcpart" unless $part_svc; - - if ( $self->pkgnum ) { - my $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $self->pkgnum } ); - return "Unknown pkgnum" unless $cust_pkg; - my $pkg_svc = qsearchs( 'pkg_svc', { - 'pkgpart' => $cust_pkg->pkgpart, - 'svcpart' => $self->svcpart, - }); - # or new FS::pkg_svc ( { 'pkgpart' => $cust_pkg->pkgpart, - # 'svcpart' => $self->svcpart, - # 'quantity' => 0 } ); - my $quantity = $pkg_svc ? $pkg_svc->quantity : 0; - - my @cust_svc = qsearch('cust_svc', { - 'pkgnum' => $self->pkgnum, - 'svcpart' => $self->svcpart, - }); - return "Already ". scalar(@cust_svc). " ". $part_svc->svc. - " services for pkgnum ". $self->pkgnum - if scalar(@cust_svc) >= $quantity && !$ignore_quantity; - } - - $self->SUPER::check; -} - -=item part_svc - -Returns the definition for this service, as a FS::part_svc object (see -L). - -=cut - -sub part_svc { - my $self = shift; - $self->{'_svcpart'} - ? $self->{'_svcpart'} - : qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } ); -} - -=item cust_pkg - -Returns the package this service belongs to, as a FS::cust_pkg object (see -L). - -=cut - -sub cust_pkg { - my $self = shift; - qsearchs( 'cust_pkg', { 'pkgnum' => $self->pkgnum } ); -} - -=item pkg_svc - -Returns the pkg_svc record for for this service, if applicable. - -=cut - -sub pkg_svc { - my $self = shift; - my $cust_pkg = $self->cust_pkg; - return undef unless $cust_pkg; - - qsearchs( 'pkg_svc', { 'svcpart' => $self->svcpart, - 'pkgpart' => $cust_pkg->pkgpart, - } - ); -} - -=item date_inserted - -Returns the date this service was inserted. - -=cut - -sub date_inserted { - my $self = shift; - $self->h_date('insert'); -} - -=item label - -Returns a list consisting of: -- The name of this service (from part_svc) -- A meaningful identifier (username, domain, or mail alias) -- The table name (i.e. svc_domain) for this service -- svcnum - -Usage example: - - my($label, $value, $svcdb) = $cust_svc->label; - -=cut - -sub label { - my $self = shift; - carp "FS::cust_svc::label called on $self" if $DEBUG; - my $svc_x = $self->svc_x - or return "can't find ". $self->part_svc->svcdb. '.svcnum '. $self->svcnum; - - $self->_svc_label($svc_x); -} - -sub _svc_label { - my( $self, $svc_x ) = ( shift, shift ); - - ( - $self->part_svc->svc, - $svc_x->label(@_), - $self->part_svc->svcdb, - $self->svcnum - ); - -} - -=item export_links - -Returns a list of html elements associated with this services exports. - -=cut - -sub export_links { - my $self = shift; - my $svc_x = $self->svc_x - or return "can't find ". $self->part_svc->svcdb. '.svcnum '. $self->svcnum; - - $svc_x->export_links; -} - -=item svc_x - -Returns the FS::svc_XXX object for this service (i.e. an FS::svc_acct object or -FS::svc_domain object, etc.) - -=cut - -sub svc_x { - my $self = shift; - my $svcdb = $self->part_svc->svcdb; - if ( $svcdb eq 'svc_acct' && $self->{'_svc_acct'} ) { - $self->{'_svc_acct'}; - } else { - require "FS/$svcdb.pm"; - warn "$me svc_x: part_svc.svcpart ". $self->part_svc->svcpart. - ", so searching for $svcdb.svcnum ". $self->svcnum. "\n" - if $DEBUG; - qsearchs( $svcdb, { 'svcnum' => $self->svcnum } ); - } -} - -=item seconds_since TIMESTAMP - -See L. Equivalent to -$cust_svc->svc_x->seconds_since, but more efficient. Meaningless for records -where B is not "svc_acct". - -=cut - -#note: implementation here, POD in FS::svc_acct -sub seconds_since { - my($self, $since) = @_; - my $dbh = dbh; - my $sth = $dbh->prepare(' SELECT SUM(logout-login) FROM session - WHERE svcnum = ? - AND login >= ? - AND logout IS NOT NULL' - ) or die $dbh->errstr; - $sth->execute($self->svcnum, $since) or die $sth->errstr; - $sth->fetchrow_arrayref->[0]; -} - -=item seconds_since_sqlradacct TIMESTAMP_START TIMESTAMP_END - -See L. Equivalent to -$cust_svc->svc_x->seconds_since_sqlradacct, but more efficient. Meaningless -for records where B is not "svc_acct". - -=cut - -#note: implementation here, POD in FS::svc_acct -sub seconds_since_sqlradacct { - my($self, $start, $end) = @_; - - my $svc_x = $self->svc_x; - - my @part_export = $self->part_svc->part_export_usage; - die "no accounting-capable exports are enabled for ". $self->part_svc->svc. - " service definition" - unless @part_export; - #or return undef; - - my $seconds = 0; - foreach my $part_export ( @part_export ) { - - next if $part_export->option('ignore_accounting'); - - my $dbh = DBI->connect( map { $part_export->option($_) } - qw(datasrc username password) ) - or die "can't connect to sqlradius database: ". $DBI::errstr; - - #select a unix time conversion function based on database type - my $str2time = str2time_sql( $dbh->{Driver}->{Name} ); - - my $username = $part_export->export_username($svc_x); - - my $query; - - #find closed sessions completely within the given range - my $sth = $dbh->prepare("SELECT SUM(acctsessiontime) - FROM radacct - WHERE UserName = ? - AND $str2time AcctStartTime) >= ? - AND $str2time AcctStopTime ) < ? - AND $str2time AcctStopTime ) > 0 - AND AcctStopTime IS NOT NULL" - ) or die $dbh->errstr; - $sth->execute($username, $start, $end) or die $sth->errstr; - my $regular = $sth->fetchrow_arrayref->[0]; - - #find open sessions which start in the range, count session start->range end - $query = "SELECT SUM( ? - $str2time AcctStartTime ) ) - FROM radacct - WHERE UserName = ? - AND $str2time AcctStartTime ) >= ? - AND $str2time AcctStartTime ) < ? - AND ( ? - $str2time AcctStartTime ) ) < 86400 - AND ( $str2time AcctStopTime ) = 0 - OR AcctStopTime IS NULL )"; - $sth = $dbh->prepare($query) or die $dbh->errstr; - $sth->execute($end, $username, $start, $end, $end) - or die $sth->errstr. " executing query $query"; - my $start_during = $sth->fetchrow_arrayref->[0]; - - #find closed sessions which start before the range but stop during, - #count range start->session end - $sth = $dbh->prepare("SELECT SUM( $str2time AcctStopTime ) - ? ) - FROM radacct - WHERE UserName = ? - AND $str2time AcctStartTime ) < ? - AND $str2time AcctStopTime ) >= ? - AND $str2time AcctStopTime ) < ? - AND $str2time AcctStopTime ) > 0 - AND AcctStopTime IS NOT NULL" - ) or die $dbh->errstr; - $sth->execute($start, $username, $start, $start, $end ) or die $sth->errstr; - my $end_during = $sth->fetchrow_arrayref->[0]; - - #find closed (not anymore - or open) sessions which start before the range - # but stop after, or are still open, count range start->range end - # don't count open sessions (probably missing stop record) - $sth = $dbh->prepare("SELECT COUNT(*) - FROM radacct - WHERE UserName = ? - AND $str2time AcctStartTime ) < ? - AND ( $str2time AcctStopTime ) >= ? - )" - # OR AcctStopTime = 0 - # OR AcctStopTime IS NULL )" - ) or die $dbh->errstr; - $sth->execute($username, $start, $end ) or die $sth->errstr; - my $entire_range = ($end-$start) * $sth->fetchrow_arrayref->[0]; - - $seconds += $regular + $end_during + $start_during + $entire_range; - - } - - $seconds; - -} - -=item attribute_since_sqlradacct TIMESTAMP_START TIMESTAMP_END ATTRIBUTE - -See L. Equivalent to -$cust_svc->svc_x->attribute_since_sqlradacct, but more efficient. Meaningless -for records where B is not "svc_acct". - -=cut - -#note: implementation here, POD in FS::svc_acct -#(false laziness w/seconds_since_sqlradacct above) -sub attribute_since_sqlradacct { - my($self, $start, $end, $attrib) = @_; - - my $svc_x = $self->svc_x; - - my @part_export = $self->part_svc->part_export_usage; - die "no accounting-capable exports are enabled for ". $self->part_svc->svc. - " service definition" - unless @part_export; - #or return undef; - - my $sum = 0; - - foreach my $part_export ( @part_export ) { - - next if $part_export->option('ignore_accounting'); - - my $dbh = DBI->connect( map { $part_export->option($_) } - qw(datasrc username password) ) - or die "can't connect to sqlradius database: ". $DBI::errstr; - - #select a unix time conversion function based on database type - my $str2time = str2time_sql( $dbh->{Driver}->{Name} ); - - my $username = $part_export->export_username($svc_x); - - my $sth = $dbh->prepare("SELECT SUM($attrib) - FROM radacct - WHERE UserName = ? - AND $str2time AcctStopTime ) >= ? - AND $str2time AcctStopTime ) < ? - AND AcctStopTime IS NOT NULL" - ) or die $dbh->errstr; - $sth->execute($username, $start, $end) or die $sth->errstr; - - $sum += $sth->fetchrow_arrayref->[0]; - - } - - $sum; - -} - -=item get_session_history TIMESTAMP_START TIMESTAMP_END - -See L. Equivalent to -$cust_svc->svc_x->get_session_history, but more efficient. Meaningless for -records where B is not "svc_acct". - -=cut - -sub get_session_history { - my($self, $start, $end, $attrib) = @_; - - #$attrib ??? - - my @part_export = $self->part_svc->part_export_usage; - die "no accounting-capable exports are enabled for ". $self->part_svc->svc. - " service definition" - unless @part_export; - #or return undef; - - my @sessions = (); - - foreach my $part_export ( @part_export ) { - push @sessions, - @{ $part_export->usage_sessions( $start, $end, $self->svc_x ) }; - } - - @sessions; - -} - -=item get_cdrs_for_update - -Returns (and SELECTs "FOR UPDATE") all unprocessed (freesidestatus NULL) CDR -objects (see L) associated with this service. - -CDRs are associated with svc_phone services via svc_phone.phonenum - -=cut - -sub get_cdrs_for_update { - my($self, %options) = @_; - - my @cdrs = $self->get_cdrs_fromfield('charged_party', %options); - - push @cdrs, $self->get_cdrs_fromfield('src', %options) - unless $options{'disable_src'}; - - @cdrs; -} - -sub get_cdrs_fromfield { - my($self, $field, %options) = @_; - - my $default_prefix = $options{'default_prefix'}; - - #CDRs are now associated with svc_phone services via svc_phone.phonenum - #return () unless $self->svc_x->isa('FS::svc_phone'); - return () unless $self->part_svc->svcdb eq 'svc_phone'; - my $number = $self->svc_x->phonenum; - - my @cdrs = - qsearch( { - 'table' => 'cdr', - 'hashref' => { 'freesidestatus' => '', - $field => $number - }, - 'extra_sql' => 'FOR UPDATE', - } ); - - if ( length($default_prefix) ) { - push @cdrs, - qsearch( { - 'table' => 'cdr', - 'hashref' => { 'freesidestatus' => '', - $field => "$default_prefix$number", - }, - 'extra_sql' => 'FOR UPDATE', - } ); - } - - @cdrs; -} - -=back - -=head1 BUGS - -Behaviour of changing the svcpart of cust_svc records is undefined and should -possibly be prohibited, and pkg_svc records are not checked. - -pkg_svc records are not checked in general (here). - -Deleting this record doesn't check or delete the svc_* record associated -with this record. - -In seconds_since_sqlradacct, specifying a DATASRC/USERNAME/PASSWORD instead of -a DBI database handle is not yet implemented. - -=head1 SEE ALSO - -L, L, L, L, -schema.html from the base documentation - -=cut - -1; - diff --git a/FS/FS/cust_tax_exempt.pm b/FS/FS/cust_tax_exempt.pm deleted file mode 100644 index 3e398877a..000000000 --- a/FS/FS/cust_tax_exempt.pm +++ /dev/null @@ -1,151 +0,0 @@ -package FS::cust_tax_exempt; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); -use FS::cust_main; -use FS::cust_main_county; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::cust_tax_exempt - Object methods for cust_tax_exempt records - -=head1 SYNOPSIS - - use FS::cust_tax_exempt; - - $record = new FS::cust_tax_exempt \%hash; - $record = new FS::cust_tax_exempt { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::cust_tax_exempt object represents a record of an old-style customer tax -exemption. Currently this is only used for "texas tax". FS::cust_tax_exempt -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item exemptnum - primary key - -=item custnum - customer (see L) - -=item taxnum - tax rate (see L) - -=item year - -=item month - -=item amount - -=back - -=head1 NOTE - -Old-style customer tax exemptions are only useful for legacy migrations - if -you are looking for current customer tax exemption data see -L. - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new exemption record. To add the example to the database, see -L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'cust_tax_exempt'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid example. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - $self->ut_numbern('exemptnum') - || $self->ut_foreign_key('custnum', 'cust_main', 'custnum') - || $self->ut_foreign_key('taxnum', 'cust_main_county', 'taxnum') - || $self->ut_number('year') #check better - || $self->ut_number('month') #check better - || $self->ut_money('amount') - || $self->SUPER::check - ; -} - -=item cust_main_county - -Returns the FS::cust_main_county object associated with this tax exemption. - -=cut - -sub cust_main_county { - my $self = shift; - qsearchs( 'cust_main_county', { 'taxnum' => $self->taxnum } ); -} - -=back - -=head1 BUGS - -Texas tax is a royal pain in the ass. - -=head1 SEE ALSO - -L, L, L, schema.html from the -base documentation. - -=cut - -1; - diff --git a/FS/FS/cust_tax_exempt_pkg.pm b/FS/FS/cust_tax_exempt_pkg.pm deleted file mode 100644 index 128921b9c..000000000 --- a/FS/FS/cust_tax_exempt_pkg.pm +++ /dev/null @@ -1,136 +0,0 @@ -package FS::cust_tax_exempt_pkg; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); -use FS::cust_main_Mixin; -use FS::cust_bill_pkg; -use FS::cust_main_county; - -@ISA = qw( FS::cust_main_Mixin FS::Record ); - -=head1 NAME - -FS::cust_tax_exempt_pkg - Object methods for cust_tax_exempt_pkg records - -=head1 SYNOPSIS - - use FS::cust_tax_exempt_pkg; - - $record = new FS::cust_tax_exempt_pkg \%hash; - $record = new FS::cust_tax_exempt_pkg { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::cust_tax_exempt_pkg object represents a record of a customer tax -exemption. Currently this is only used for "texas tax". FS::cust_tax_exempt -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item exemptpkgnum - primary key - -=item billpkgnum - invoice line item (see L) - -=item taxnum - tax rate (see L) - -=item year - -=item month - -=item amount - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new exemption record. To add the examption record to the database, -see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'cust_tax_exempt_pkg'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid exemption record. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - $self->ut_numbern('exemptnum') -# || $self->ut_foreign_key('custnum', 'cust_main', 'custnum') - || $self->ut_foreign_key('billpkgnum', 'cust_bill_pkg', 'billpkgnum') - || $self->ut_foreign_key('taxnum', 'cust_main_county', 'taxnum') - || $self->ut_number('year') #check better - || $self->ut_number('month') #check better - || $self->ut_money('amount') - || $self->SUPER::check - ; -} - -=back - -=head1 BUGS - -Texas tax is still a royal pain in the ass. - -=head1 SEE ALSO - -L, L, L, schema.html from -the base documentation. - -=cut - -1; - diff --git a/FS/FS/domain_record.pm b/FS/FS/domain_record.pm deleted file mode 100644 index 6513abf25..000000000 --- a/FS/FS/domain_record.pm +++ /dev/null @@ -1,438 +0,0 @@ -package FS::domain_record; - -use strict; -use vars qw( @ISA $noserial_hack $DEBUG ); -use FS::Conf; -#use FS::Record qw( qsearch qsearchs ); -use FS::Record qw( qsearchs dbh ); -use FS::svc_domain; -use FS::svc_www; - -@ISA = qw(FS::Record); - -$DEBUG = 0; - -=head1 NAME - -FS::domain_record - Object methods for domain_record records - -=head1 SYNOPSIS - - use FS::domain_record; - - $record = new FS::domain_record \%hash; - $record = new FS::domain_record { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::domain_record object represents an entry in a DNS zone. -FS::domain_record inherits from FS::Record. The following fields are currently -supported: - -=over 4 - -=item recnum - primary key - -=item svcnum - Domain (see L) of this entry - -=item reczone - partial (or full) zone for this entry - -=item recaf - address family for this entry, currently only `IN' is recognized. - -=item rectype - record type for this entry (A, MX, etc.) - -=item recdata - data for this entry - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new entry. To add the entry to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -sub table { 'domain_record'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -sub insert { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - if ( $self->rectype eq '_mstr' ) { #delete all other records - foreach my $domain_record ( reverse $self->svc_domain->domain_record ) { - my $error = $domain_record->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - my $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - unless ( $self->rectype =~ /^(SOA|_mstr)$/ ) { - my $error = $self->increment_serial; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - my $conf = new FS::Conf; - if ( $self->rectype =~ /^A$/ && ! $conf->exists('disable_autoreverse') ) { - my $reverse = $self->reverse_record; - if ( $reverse && ! $reverse->recnum ) { - my $error = $reverse->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error adding corresponding reverse-ARPA record: $error"; - } - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item delete - -Delete this record from the database. - -=cut - -sub delete { - my $self = shift; - - return "Can't delete a domain record which has a website!" - if qsearchs( 'svc_www', { 'recnum' => $self->recnum } ); - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - unless ( $self->rectype =~ /^(SOA|_mstr)$/ ) { - my $error = $self->increment_serial; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - my $conf = new FS::Conf; - if ( $self->rectype =~ /^A$/ && ! $conf->exists('disable_autoreverse') ) { - my $reverse = $self->reverse_record; - if ( $reverse && $reverse->recnum && $reverse->recdata eq $self->zone.'.' ){ - my $error = $reverse->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error removing corresponding reverse-ARPA record: $error"; - } - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -sub replace { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::replace(@_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - unless ( $self->rectype eq 'SOA' ) { - my $error = $self->increment_serial; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item check - -Checks all fields to make sure this is a valid entry. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('recnum') - || $self->ut_number('svcnum') - ; - return $error if $error; - - return "Unknown svcnum (in svc_domain)" - unless qsearchs('svc_domain', { 'svcnum' => $self->svcnum } ); - - my $conf = new FS::Conf; - - if ( $conf->exists('zone-underscore') ) { - $self->reczone =~ /^(@|[a-z0-9_\.\-\*]+)$/i - or return "Illegal reczone: ". $self->reczone; - $self->reczone($1); - } else { - $self->reczone =~ /^(@|[a-z0-9\.\-\*]+)$/i - or return "Illegal reczone: ". $self->reczone; - $self->reczone($1); - } - - $self->recaf =~ /^(IN)$/ or return "Illegal recaf: ". $self->recaf; - $self->recaf($1); - - $self->rectype =~ /^(SOA|NS|MX|A|PTR|CNAME|TXT|_mstr)$/ - or return "Illegal rectype (only SOA NS MX A PTR CNAME TXT recognized): ". - $self->rectype; - $self->rectype($1); - - return "Illegal reczone for ". $self->rectype. ": ". $self->reczone - if $self->rectype !~ /^MX$/i && $self->reczone =~ /\*/; - - if ( $self->rectype eq 'SOA' ) { - my $recdata = $self->recdata; - $recdata =~ s/\s+/ /g; - $recdata =~ /^([a-z0-9\.\-]+ [\w\-\+]+\.[a-z0-9\.\-]+ \( ((\d+|((\d+[WDHMS])+)) ){5}\))$/i - or return "Illegal data for SOA record: $recdata"; - $self->recdata($1); - } elsif ( $self->rectype eq 'NS' ) { - $self->recdata =~ /^([a-z0-9\.\-]+)$/i - or return "Illegal data for NS record: ". $self->recdata; - $self->recdata($1); - } elsif ( $self->rectype eq 'MX' ) { - $self->recdata =~ /^(\d+)\s+([a-z0-9\.\-]+)$/i - or return "Illegal data for MX record: ". $self->recdata; - $self->recdata("$1 $2"); - } elsif ( $self->rectype eq 'A' ) { - $self->recdata =~ /^((\d{1,3}\.){3}\d{1,3})$/ - or return "Illegal data for A record: ". $self->recdata; - $self->recdata($1); - } elsif ( $self->rectype eq 'PTR' ) { - if ( $conf->exists('zone-underscore') ) { - $self->recdata =~ /^([a-z0-9_\.\-]+)$/i - or return "Illegal data for PTR record: ". $self->recdata; - $self->recdata($1); - } else { - $self->recdata =~ /^([a-z0-9\.\-]+)$/i - or return "Illegal data for PTR record: ". $self->recdata; - $self->recdata($1); - } - } elsif ( $self->rectype eq 'CNAME' ) { - $self->recdata =~ /^([a-z0-9\.\-]+|\@)$/i - or return "Illegal data for CNAME record: ". $self->recdata; - $self->recdata($1); - } elsif ( $self->rectype eq 'TXT' ) { - if ( $self->recdata =~ /^((?:\S+)|(?:".+"))$/ ) { - $self->recdata($1); - } else { - $self->recdata('"'. $self->recdata. '"'); #? - } - # or return "Illegal data for TXT record: ". $self->recdata; - } elsif ( $self->rectype eq '_mstr' ) { - $self->recdata =~ /^((\d{1,3}\.){3}\d{1,3})$/ - or return "Illegal data for _master pseudo-record: ". $self->recdata; - } else { - die "ack!"; - } - - $self->SUPER::check; -} - -=item increment_serial - -=cut - -sub increment_serial { - return '' if $noserial_hack; - my $self = shift; - - my $soa = qsearchs('domain_record', { - svcnum => $self->svcnum, - reczone => '@', - recaf => 'IN', - rectype => 'SOA', } ) - || qsearchs('domain_record', { - svcnum => $self->svcnum, - reczone => $self->svc_domain->domain.'.', - recaf => 'IN', - rectype => 'SOA', - } ) - or return "soa record not found; can't increment serial"; - - my $data = $soa->recdata; - $data =~ s/(\(\D*)(\d+)/$1.($2+1)/e; #well, it works. - - my %hash = $soa->hash; - $hash{recdata} = $data; - my $new = new FS::domain_record \%hash; - $new->replace($soa); -} - -=item svc_domain - -Returns the domain (see L) for this record. - -=cut - -sub svc_domain { - my $self = shift; - qsearchs('svc_domain', { svcnum => $self->svcnum } ); -} - -=item zone - -Returns the canonical zone name. - -=cut - -sub zone { - my $self = shift; - my $zone = $self->reczone; # or die ? - if ( $zone =~ /\.$/ ) { - $zone =~ s/\.$//; - } else { - my $svc_domain = $self->svc_domain; # or die ? - $zone .= '.'. $svc_domain->domain; - $zone =~ s/^\@\.//; - } - $zone; -} - -=item reverse_record - -Returns the corresponding reverse-ARPA record as another FS::domain_record -object. If the specific record does not exist in the database but the -reverse-ARPA zone itself does, an appropriate new record is created. If no -reverse-ARPA zone is available at all, returns false. - -(You can test whether or not record itself exists in the database or is a new -object that might need to be inserted by checking the recnum field) - -Mostly used by the insert and delete methods - probably should see them for -examples. - -=cut - -sub reverse_record { - my $self = shift; - warn "reverse_record called\n" if $DEBUG; - #should support classless reverse-ARPA ala rfc2317 too - $self->recdata =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ - or return ''; - my $domain = "$3.$2.$1.in-addr.arpa"; - my $ptr_reczone = $4; - warn "reverse_record: searching for domain: $domain\n" if $DEBUG; - my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) - or return ''; - warn "reverse_record: found domain: $domain\n" if $DEBUG; - my %hash = ( - 'svcnum' => $svc_domain->svcnum, - 'reczone' => $ptr_reczone, - 'recaf' => 'IN', - 'rectype' => 'PTR', - ); - qsearchs('domain_record', \%hash ) - or new FS::domain_record { %hash, 'recdata' => $self->zone.'.' }; -} - -=back - -=head1 BUGS - -The data validation doesn't check everything it could. In particular, -there is no protection against bad data that passes the regex, duplicate -SOA records, forgetting the trailing `.', impossible IP addersses, etc. Of -course, it's still better than editing the zone files directly. :) - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/export_svc.pm b/FS/FS/export_svc.pm deleted file mode 100644 index 0370f5f0b..000000000 --- a/FS/FS/export_svc.pm +++ /dev/null @@ -1,322 +0,0 @@ -package FS::export_svc; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs dbh ); -use FS::part_export; -use FS::part_svc; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::export_svc - Object methods for export_svc records - -=head1 SYNOPSIS - - use FS::export_svc; - - $record = new FS::export_svc \%hash; - $record = new FS::export_svc { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::export_svc object links a service definition (see L) to -an export (see L). FS::export_svc inherits from FS::Record. -The following fields are currently supported: - -=over 4 - -=item exportsvcnum - primary key - -=item exportnum - export (see L) - -=item svcpart - service definition (see L) - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new record. To add the record to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'export_svc'; } - -=item insert [ JOB, OFFSET, MULTIPLIER ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -TODOC: JOB, OFFSET, MULTIPLIER - -=cut - -sub insert { - my $self = shift; - my( $job, $offset, $mult ) = ( '', 0, 100); - $job = shift if @_; - $offset = shift if @_; - $mult = shift if @_; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->check; - return $error if $error; - - #check for duplicates! - my @checks = (); - my $svcdb = $self->part_svc->svcdb; - if ( $svcdb eq 'svc_acct' ) { - - if ( $self->part_export->nodomain =~ /^Y/i ) { - push @checks, { - label => 'usernames', - method => 'username', - sortby => sub { $a cmp $b }, - }; - } else { - push @checks, { - label => 'username@domain', - method => 'email', - sortby => sub { - my($auser, $adomain) = split('@', $a); - my($buser, $bdomain) = split('@', $b); - $adomain cmp $bdomain || $auser cmp $buser; - }, - }; - } - - unless ( $self->part_svc->part_svc_column('uid')->columnflag eq 'F' ) { - push @checks, { - label => 'uids', - method => 'uid', - sortby => sub { $a <=> $b }, - }; - } - - } elsif ( $svcdb eq 'svc_domain' ) { - push @checks, { - label => 'domains', - method => 'domain', - sortby => sub { $a cmp $b }, - }; - } else { - warn "WARNING: No duplicate checking done on merge of $svcdb exports"; - } - - if ( @checks ) { - - my $done = 0; - my $percheck = $mult / scalar(@checks); - - foreach my $check ( @checks ) { - - if ( $job ) { - $error = $job->update_statustext(int( $offset + ($done+.33) *$percheck )); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - my @current_svc = $self->part_export->svc_x; - #warn "current: ". scalar(@current_svc). " $current_svc[0]\n"; - - if ( $job ) { - $error = $job->update_statustext(int( $offset + ($done+.67) *$percheck )); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - my @new_svc = $self->part_svc->svc_x; - #warn "new: ". scalar(@new_svc). " $new_svc[0]\n"; - - if ( $job ) { - $error = $job->update_statustext(int( $offset + ($done+1) *$percheck )); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - my $method = $check->{'method'}; - my %cur_svc = map { $_->$method() => $_ } @current_svc; - my @dup_svc = grep { $cur_svc{$_->$method()} } @new_svc; - #my @diff_customer = grep { - # $_->cust_pkg->custnum != $cur_svc{$_->$method()}->cust_pkg->custnum - # } @dup_svc; - - - - if ( @dup_svc ) { #aye, that's the rub - #error out for now, eventually accept different options of adjustments - # to make to allow us to continue forward - $dbh->rollback if $oldAutoCommit; - - my @diff_customer_svc = grep { - my $cust_pkg = $_->cust_svc->cust_pkg; - my $custnum = $cust_pkg ? $cust_pkg->custnum : 0; - my $other_cust_pkg = $cur_svc{$_->$method()}->cust_svc->cust_pkg; - my $other_custnum = $other_cust_pkg ? $other_cust_pkg->custnum : 0; - $custnum != $other_custnum; - } @dup_svc; - - my $label = $check->{'label'}; - my $sortby = $check->{'sortby'}; - return "Can't export ". - $self->part_svc->svcpart.':'.$self->part_svc->svc. " service to ". - $self->part_export->exportnum.':'.$self->part_export->exporttype. - ' on '. $self->part_export->machine. - ' : '. scalar(@dup_svc). " duplicate $label". - ' ('. scalar(@diff_customer_svc). " from different customers)". - ": ". join(', ', sort $sortby map { $_->$method() } @dup_svc ) - #": ". join(', ', sort $sortby map { $_->$method() } @diff_customer_svc ) - ; - } - - $done++; - } - - } #end of duplicate check, whew - - $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - -# if ( $self->part_svc->svcdb eq 'svc_acct' ) { -# -# if ( $self->part_export->nodomain =~ /^Y/i ) { -# -# select username from svc_acct where svcpart = $svcpart -# group by username having count(*) > 1; -# -# } else { -# -# select username, domain -# from svc_acct -# join svc_domain on ( svc_acct.domsvc = svc_domain.svcnum ) -# group by username, domain having count(*) > 1; -# -# } -# -# } elsif ( $self->part_svc->svcdb eq 'svc_domain' ) { -# -# #similar but easier domain checking one -# -# } #etc.? -# -# my @services = -# map { $_->part_svc } -# grep { $_->svcpart != $self->svcpart } -# $self->part_export->export_svc; - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; #no error -} - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid record. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - $self->ut_numbern('exportsvcnum') - || $self->ut_number('exportnum') - || $self->ut_foreign_key('exportnum', 'part_export', 'exportnum') - || $self->ut_number('svcpart') - || $self->ut_foreign_key('svcpart', 'part_svc', 'svcpart') - || $self->SUPER::check - ; -} - -=item part_export - -Returns the FS::part_export object (see L). - -=cut - -sub part_export { - my $self = shift; - qsearchs( 'part_export', { 'exportnum' => $self->exportnum } ); -} - -=item part_svc - -Returns the FS::part_svc object (see L). - -=cut - -sub part_svc { - my $self = shift; - qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } ); -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_Common.pm b/FS/FS/h_Common.pm deleted file mode 100644 index ca13e1ba5..000000000 --- a/FS/FS/h_Common.pm +++ /dev/null @@ -1,124 +0,0 @@ -package FS::h_Common; - -use strict; -use FS::Record qw(dbdef); -use Carp qw(confess); - -=head1 NAME - -FS::h_Common - History table "mixin" common base class - -=head1 SYNOPSIS - -package FS::h_tablename; -@ISA = qw( FS::h_Common FS::tablename ); - -sub table { 'h_table_name'; } - -sub insert { return "can't insert history records manually"; } -sub delete { return "can't delete history records"; } -sub replace { return "can't modify history records"; } - -=head1 DESCRIPTION - -FS::h_Common is intended as a "mixin" base class for history table classes to -inherit from. - -=head1 METHODS - -=over 4 - -=item sql_h_search END_TIMESTAMP [ START_TIMESTAMP ] - -Returns an a list consisting of the "SELECT", "EXTRA_SQL", SQL fragments, a -placeholder for "CACHE_OBJ" and an "AS" SQL fragment, to search for the -appropriate history records created before END_TIMESTAMP and (optionally) not -deleted before START_TIMESTAMP. - -=cut - -sub sql_h_search { - my( $self, $end ) = ( shift, shift ); - - my $table = $self->table; - my $real_table = ($table =~ /^h_(.*)$/) ? $1 : $table; - my $pkey = dbdef->table($real_table)->primary_key - or die "can't (yet) search history table $real_table without a primary key"; - - unless ($end) { - confess 'Called sql_h_search without END_TIMESTAMP'; - } - - my( $notdeleted, $notdeleted_mr ) = ( '', '' ); - if ( scalar(@_) && $_[0] ) { - $notdeleted = - "AND 0 = ( SELECT COUNT(*) FROM $table as notdel - WHERE notdel.$pkey = maintable.$pkey - AND notdel.history_action = 'delete' - AND notdel.history_date > maintable.history_date - AND notdel.history_date <= $_[0] - )"; - $notdeleted_mr = - "AND 0 = ( SELECT COUNT(*) FROM $table as notdel_mr - WHERE notdel_mr.$pkey = mostrecent.$pkey - AND notdel_mr.history_action = 'delete' - AND notdel_mr.history_date > mostrecent.history_date - AND notdel_mr.history_date <= $_[0] - )"; - } - - ( - #"DISTINCT ON ( $pkey ) *", - "*", - - "AND history_date <= $end - AND ( history_action = 'insert' - OR history_action = 'replace_new' - ) - $notdeleted - AND history_date = ( SELECT MAX(mostrecent.history_date) - FROM $table AS mostrecent - WHERE mostrecent.$pkey = maintable.$pkey - AND mostrecent.history_date <= $end - AND ( mostrecent.history_action = 'insert' - OR mostrecent.history_action = 'replace_new' - ) - $notdeleted_mr - ) - - ORDER BY $pkey ASC", - #ORDER BY $pkey ASC, history_date DESC", - - '', - - 'AS maintable', - ); - -} - -=item sql_h_searchs END_TIMESTAMP [ START_TIMESTAMP ] - -Like sql_h_search, but limited to the single most recent record (before -END_TIMESTAMP) - -=cut - -sub sql_h_searchs { - my $self = shift; - my($select, $where, $cacheobj, $as) = $self->sql_h_search(@_); - $where .= ' LIMIT 1'; - ($select, $where, $cacheobj, $as); -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, schema.html from the base documentation - -=cut - -1; - diff --git a/FS/FS/h_cust_bill.pm b/FS/FS/h_cust_bill.pm deleted file mode 100644 index 7a3d81146..000000000 --- a/FS/FS/h_cust_bill.pm +++ /dev/null @@ -1,33 +0,0 @@ -package FS::h_cust_bill; - -use strict; -use vars qw( @ISA ); -use FS::h_Common; -use FS::cust_bill; - -@ISA = qw( FS::h_Common FS::cust_bill ); - -sub table { 'h_cust_bill' }; - -=head1 NAME - -FS::h_cust_bill - Historical record of customer tax changes (old-style) - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -An FS::h_cust_bill object represents historical changes to invoices. -FS::h_cust_bill inherits from FS::h_Common and FS::cust_bill. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_cust_credit.pm b/FS/FS/h_cust_credit.pm deleted file mode 100644 index 1425a26a6..000000000 --- a/FS/FS/h_cust_credit.pm +++ /dev/null @@ -1,33 +0,0 @@ -package FS::h_cust_credit; - -use strict; -use vars qw( @ISA ); -use FS::h_Common; -use FS::cust_credit; - -@ISA = qw( FS::h_Common FS::cust_credit ); - -sub table { 'h_cust_credit' }; - -=head1 NAME - -FS::h_cust_credit - Historical record of customer credit changes - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -An FS::h_cust_credit object represents historical changes to credits. -FS::h_cust_credit inherits from FS::h_Common and FS::cust_credit. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_cust_pay.pm b/FS/FS/h_cust_pay.pm deleted file mode 100644 index 6434b3f07..000000000 --- a/FS/FS/h_cust_pay.pm +++ /dev/null @@ -1,33 +0,0 @@ -package FS::h_cust_pay; - -use strict; -use vars qw( @ISA ); -use FS::h_Common; -use FS::cust_pay; - -@ISA = qw( FS::h_Common FS::cust_pay ); - -sub table { 'h_cust_pay' }; - -=head1 NAME - -FS::h_cust_pay - Historical record of customer payment changes - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -An FS::h_cust_pay object represents historical changes to payments. -FS::h_cust_pay inherits from FS::h_Common and FS::cust_pay. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_cust_svc.pm b/FS/FS/h_cust_svc.pm deleted file mode 100644 index 921be3ab9..000000000 --- a/FS/FS/h_cust_svc.pm +++ /dev/null @@ -1,161 +0,0 @@ -package FS::h_cust_svc; - -use strict; -use vars qw( @ISA $DEBUG ); -use Carp; -use FS::Record qw(qsearchs); -use FS::h_Common; -use FS::cust_svc; - -@ISA = qw( FS::h_Common FS::cust_svc ); - -$DEBUG = 0; - -sub table { 'h_cust_svc'; } - -=head1 NAME - -FS::h_cust_svc - Object method for h_cust_svc objects - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -An FS::h_cust_svc object represents a historical service. FS::h_cust_svc -inherits from FS::h_Common and FS::cust_svc. - -=head1 METHODS - -=over 4 - -=item date_deleted - -Returns the date this service was deleted, if any. - -=cut - -sub date_deleted { - my $self = shift; - $self->h_date('delete'); -} - -=item label END_TIMESTAMP [ START_TIMESTAMP ] - -Returns a label for this historical service, if the service was created before -END_TIMESTAMP and (optionally) not deleted before START_TIMESTAMP. Otherwise, -returns an empty list. - -If a service is found, returns a list consisting of: -- The name of this historical service (from part_svc) -- A meaningful identifier (username, domain, or mail alias) -- The table name (i.e. svc_domain) for this historical service - -=cut - -sub label { - my $self = shift; - carp "FS::h_cust_svc::label called on $self" if $DEBUG; - my $svc_x = $self->h_svc_x(@_); - return () unless $svc_x; - my $part_svc = $self->part_svc; - - unless ($svc_x) { - carp "can't find h_". $self->part_svc->svcdb. '.svcnum '. $self->svcnum if $DEBUG; - return $part_svc->svc, 'n/a', $part_svc->svcdb; - } - - my @label; - eval { @label = $self->_svc_label($svc_x, @_); }; - - if ($@) { - carp 'while resolving history record for svcdb/svcnum ' . - $part_svc->svcdb . '/' . $self->svcnum . ': ' . $@ if $DEBUG; - return $part_svc->svc, 'n/a', $part_svc->svcdb; - } else { - return @label; - } - -} - -=item h_svc_x END_TIMESTAMP [ START_TIMESTAMP ] - -Returns the FS::h_svc_XXX object for this service as of END_TIMESTAMP (i.e. an -FS::h_svc_acct object or FS::h_svc_domain object, etc.) and (optionally) not -cancelled before START_TIMESTAMP. - -=cut - -#false laziness w/cust_pkg::h_cust_svc -sub h_svc_x { - my $self = shift; - my $svcdb = $self->part_svc->svcdb; - - warn "requiring FS/h_$svcdb.pm" if $DEBUG; - require "FS/h_$svcdb.pm"; - my $svc_x = qsearchs( - "h_$svcdb", - { 'svcnum' => $self->svcnum, }, - "FS::h_$svcdb"->sql_h_searchs(@_), - ) || $self->SUPER::svc_x; - - if ($svc_x) { - carp "Using $svcdb in place of missing h_${svcdb} record." - if ($svc_x->isa('FS::' . $svcdb) and $DEBUG); - return $svc_x; - } else { - return ''; - } - -} - -# _upgrade_data -# -# Used by FS::Upgrade to migrate to a new database. -# -# - -use FS::UID qw( driver_name dbh ); - -sub _upgrade_data { # class method - my ($class, %opts) = @_; - - warn "[FS::h_cust_svc] upgrading $class\n" if $DEBUG; - - return if driver_name =~ /^mysql/; #You can't specify target table 'h_cust_svc' for update in FROM clause - - my $sql = " - DELETE FROM h_cust_svc - WHERE history_action = 'delete' - AND historynum != ( SELECT min(historynum) FROM h_cust_svc AS main - WHERE main.history_date = h_cust_svc.history_date - AND main.history_user = h_cust_svc.history_user - AND main.svcnum = h_cust_svc.svcnum - AND main.svcpart = h_cust_svc.svcpart - AND ( main.pkgnum = h_cust_svc.pkgnum - OR ( main.pkgnum IS NULL AND h_cust_svc.pkgnum IS NULL ) - ) - AND ( main.overlimit = h_cust_svc.overlimit - OR ( main.overlimit IS NULL AND h_cust_svc.overlimit IS NULL ) - ) - ) - "; - - warn $sql if $DEBUG; - my $sth = dbh->prepare($sql) or die dbh->errstr; - $sth->execute or die $sth->errstr; - -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_cust_tax_exempt.pm b/FS/FS/h_cust_tax_exempt.pm deleted file mode 100644 index 9d2318bd5..000000000 --- a/FS/FS/h_cust_tax_exempt.pm +++ /dev/null @@ -1,40 +0,0 @@ -package FS::h_cust_tax_exempt; - -use strict; -use vars qw( @ISA ); -use FS::h_Common; -use FS::cust_tax_exempt; - -@ISA = qw( FS::h_Common FS::cust_tax_exempt ); - -sub table { 'h_cust_tax_exempt' }; - -=head1 NAME - -FS::h_cust_tax_exempt - Historical record of customer tax changes (old-style) - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -An FS::h_cust_tax_exempt object represents historical changes to old-style -customer tax exemptions. FS::h_cust_tax_exempt inherits from FS::h_Common and -FS::cust_tax_exempt. - -=head1 NOTE - -Old-style customer tax exemptions are only useful for legacy migrations - if -you are looking for current customer tax exemption data see -L. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/h_domain_record.pm b/FS/FS/h_domain_record.pm deleted file mode 100644 index 0ab974fe2..000000000 --- a/FS/FS/h_domain_record.pm +++ /dev/null @@ -1,33 +0,0 @@ -package FS::h_domain_record; - -use strict; -use vars qw( @ISA ); -use FS::h_Common; -use FS::domain_record; - -@ISA = qw( FS::h_Common FS::domain_record ); - -sub table { 'h_domain_record' }; - -=head1 NAME - -FS::h_domain_record - Historical DNS entry objects - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -An FS::h_domain_record object represents a historical entry in a DNS zone. -FS::h_domain_record inherits from FS::h_Common and FS::domain_record. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_svc_acct.pm b/FS/FS/h_svc_acct.pm deleted file mode 100644 index 247d20c9a..000000000 --- a/FS/FS/h_svc_acct.pm +++ /dev/null @@ -1,78 +0,0 @@ -package FS::h_svc_acct; - -use strict; -use vars qw( @ISA $DEBUG ); -use Carp qw(carp); -use FS::Record qw(qsearchs); -use FS::h_Common; -use FS::svc_acct; -use FS::svc_domain; -use FS::h_svc_domain; - -@ISA = qw( FS::h_Common FS::svc_acct ); - -$DEBUG = 0; - -sub table { 'h_svc_acct' }; - -=head1 NAME - -FS::h_svc_acct - Historical account objects - -=head1 SYNOPSIS - -=head1 METHODS - -=over 4 - -=item svc_domain - -=cut - -sub svc_domain { - my $self = shift; - qsearchs( 'h_svc_domain', - { 'svcnum' => $self->domsvc }, - FS::h_svc_domain->sql_h_searchs(@_), - ); -} - -=item domain - -Returns the domain associated with this account. - -=cut - -sub domain { - my $self = shift; - die "svc_acct.domsvc is null for svcnum ". $self->svcnum unless $self->domsvc; - - my $svc_domain = $self->svc_domain(@_) || $self->SUPER::svc_domain() - or die 'no history svc_domain.svcnum for svc_acct.domsvc ' . $self->domsvc; - - carp 'Using FS::svc_acct record in place of missing FS::h_svc_acct record.' - if ($svc_domain->isa('FS::svc_acct') and $DEBUG); - - $svc_domain->domain; - -} - - -=back - -=head1 DESCRIPTION - -An FS::h_svc_acct object represents a historical account. FS::h_svc_acct -inherits from FS::h_Common and FS::svc_acct. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_svc_broadband.pm b/FS/FS/h_svc_broadband.pm deleted file mode 100644 index d6038fbe8..000000000 --- a/FS/FS/h_svc_broadband.pm +++ /dev/null @@ -1,33 +0,0 @@ -package FS::h_svc_broadband; - -use strict; -use vars qw( @ISA ); -use FS::h_Common; -use FS::svc_broadband; - -@ISA = qw( FS::h_Common FS::svc_broadband ); - -sub table { 'h_svc_broadband' }; - -=head1 NAME - -FS::h_svc_broadband - Historical broadband connection objects - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -An FS::h_svc_broadband object represents a historical broadband connection. -FS::h_svc_broadband inherits from FS::h_Common and FS::svc_broadband. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_svc_domain.pm b/FS/FS/h_svc_domain.pm deleted file mode 100644 index 60d54f7d1..000000000 --- a/FS/FS/h_svc_domain.pm +++ /dev/null @@ -1,33 +0,0 @@ -package FS::h_svc_domain; - -use strict; -use vars qw( @ISA ); -use FS::h_Common; -use FS::svc_domain; - -@ISA = qw( FS::h_Common FS::svc_domain ); - -sub table { 'h_svc_domain' }; - -=head1 NAME - -FS::h_svc_domain - Historical domain objects - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -An FS::h_svc_domain object represents a historical domain. FS::h_svc_domain -inherits from FS::h_Common and FS::svc_domain. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_svc_external.pm b/FS/FS/h_svc_external.pm deleted file mode 100644 index 5eb706410..000000000 --- a/FS/FS/h_svc_external.pm +++ /dev/null @@ -1,33 +0,0 @@ -package FS::h_svc_external; - -use strict; -use vars qw( @ISA ); -use FS::h_Common; -use FS::svc_external; - -@ISA = qw( FS::h_Common FS::svc_external ); - -sub table { 'h_svc_external' }; - -=head1 NAME - -FS::h_svc_external - Historical externally tracked service objects - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -An FS::h_svc_external object represents a historical externally tracked service. -FS::h_svc_external inherits from FS::h_Common and FS::svc_external. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_svc_forward.pm b/FS/FS/h_svc_forward.pm deleted file mode 100644 index 25b203904..000000000 --- a/FS/FS/h_svc_forward.pm +++ /dev/null @@ -1,85 +0,0 @@ -package FS::h_svc_forward; - -use strict; -use vars qw( @ISA $DEBUG ); -use FS::Record qw(qsearchs); -use FS::h_Common; -use FS::svc_forward; -use FS::svc_acct; -use FS::h_svc_acct; - -use Carp qw(carp); - -$DEBUG = 0; - -@ISA = qw( FS::h_Common FS::svc_forward ); - -sub table { 'h_svc_forward' }; - -=head1 NAME - -FS::h_svc_forward - Historical mail forwarding alias objects - -=head1 SYNOPSIS - -=head1 METHODS - -=over 4 - -=item srcsvc_acct - -=cut - -sub srcsvc_acct { - my $self = shift; - my $h_svc_acct = qsearchs( - 'h_svc_acct', - { 'svcnum' => $self->srcsvc }, - FS::h_svc_acct->sql_h_searchs(@_), - ) || $self->SUPER::srcsvc_acct - or die "no history svc_acct.svcnum for svc_forward.srcsvc ". $self->srcsvc; - - carp 'Using svc_acct in place of missing h_svc_acct record.' - if ($h_svc_acct->isa('FS::domain_record') and $DEBUG); - - return $h_svc_acct; - -} - -=item dstsvc_acct - -=cut - -sub dstsvc_acct { - my $self = shift; - my $h_svc_acct = qsearchs( - 'h_svc_acct', - { 'svcnum' => $self->dstsvc }, - FS::h_svc_acct->sql_h_searchs(@_), - ) || $self->SUPER::dstsvc_acct - or die "no history svc_acct.svcnum for svc_forward.dstsvc ". $self->dstsvc; - - carp 'Using svc_acct in place of missing h_svc_acct record.' - if ($h_svc_acct->isa('FS::domain_record') and $DEBUG); - - return $h_svc_acct; -} - -=back - -=head1 DESCRIPTION - -An FS::h_svc_forward object represents a historical mail forwarding alias. -FS::h_svc_forward inherits from FS::h_Common and FS::svc_forward. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_svc_phone.pm b/FS/FS/h_svc_phone.pm deleted file mode 100644 index 95898c7b0..000000000 --- a/FS/FS/h_svc_phone.pm +++ /dev/null @@ -1,33 +0,0 @@ -package FS::h_svc_phone; - -use strict; -use vars qw( @ISA ); -use FS::h_Common; -use FS::svc_phone; - -@ISA = qw( FS::h_Common FS::svc_phone ); - -sub table { 'h_svc_phone' }; - -=head1 NAME - -FS::h_svc_phone - Historical phone number objects - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -An FS::h_svc_phone object represents a historical phone number. -FS::h_svc_phone inherits from FS::h_Common and FS::svc_phone. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/h_svc_www.pm b/FS/FS/h_svc_www.pm deleted file mode 100644 index 2a3b6dca6..000000000 --- a/FS/FS/h_svc_www.pm +++ /dev/null @@ -1,67 +0,0 @@ -package FS::h_svc_www; - -use strict; -use vars qw( @ISA $DEBUG ); -use Carp qw(carp); -use FS::Record qw(qsearchs); -use FS::h_Common; -use FS::svc_www; -use FS::h_domain_record; - -@ISA = qw( FS::h_Common FS::svc_www ); - -$DEBUG = 0; - -sub table { 'h_svc_www' }; - -=head1 NAME - -FS::h_svc_www - Historical web virtual host objects - -=head1 SYNOPSIS - -=head1 METHODS - -=over 4 - -=item domain_record - -=cut - -sub domain_record { - my $self = shift; - - carp 'Called FS::h_svc_www->domain_record on svcnum ' . $self->svcnum if $DEBUG; - - my $domain_record = qsearchs( - 'h_domain_record', - { 'recnum' => $self->recnum }, - FS::h_domain_record->sql_h_searchs(@_), - ) || $self->SUPER::domain_record - or die "no history domain_record.recnum for svc_www.recnum ". $self->domsvc; - - carp 'Using domain_record in place of missing h_domain_record record.' - if ($domain_record->isa('FS::domain_record') and $DEBUG); - - return $domain_record; - -} - -=back - -=head1 DESCRIPTION - -An FS::h_svc_www object represents a historical web virtual host. -FS::h_svc_www inherits from FS::h_Common and FS::svc_www. - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/inventory_class.pm b/FS/FS/inventory_class.pm deleted file mode 100644 index 508889bca..000000000 --- a/FS/FS/inventory_class.pm +++ /dev/null @@ -1,164 +0,0 @@ -package FS::inventory_class; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( dbh qsearch qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::inventory_class - Object methods for inventory_class records - -=head1 SYNOPSIS - - use FS::inventory_class; - - $record = new FS::inventory_class \%hash; - $record = new FS::inventory_class { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::inventory_class object represents a class of inventory, such as "DID -numbers" or "physical equipment serials". FS::inventory_class inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item classnum - primary key - -=item classname - Name of this class - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new inventory class. To add the class to the database, see -L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'inventory_class'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid inventory class. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('classnum') - || $self->ut_textn('classname') - ; - return $error if $error; - - $self->SUPER::check; -} - -=item num_avail - -Returns the number of available (unused/unallocated) inventory items of this -class (see L). - -=cut - -sub num_avail { - shift->num_sql('( svcnum IS NULL OR svcnum = 0 )'); -} - -sub num_sql { - my( $self, $sql ) = @_; - $sql = "AND $sql" if length($sql); - my $statement = - "SELECT COUNT(*) FROM inventory_item WHERE classnum = ? $sql"; - my $sth = dbh->prepare($statement) or die dbh->errstr. " preparing $statement"; - $sth->execute($self->classnum) or die $sth->errstr. " executing $statement"; - $sth->fetchrow_arrayref->[0]; -} - -=item num_used - -Returns the number of used (allocated) inventory items of this class (see -L). - -=cut - -sub num_used { - shift->num_sql("svcnum IS NOT NULL AND svcnum > 0 "); -} - -=item num_total - -Returns the total number of inventory items of this class (see -L). - -=cut - -sub num_total { - shift->num_sql(''); -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/inventory_item.pm b/FS/FS/inventory_item.pm deleted file mode 100644 index 7fa350f2a..000000000 --- a/FS/FS/inventory_item.pm +++ /dev/null @@ -1,204 +0,0 @@ -package FS::inventory_item; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( dbh qsearch qsearchs ); -use FS::cust_main_Mixin; -use FS::inventory_class; -use FS::cust_svc; - -@ISA = qw( FS::cust_main_Mixin FS::Record ); - -=head1 NAME - -FS::inventory_item - Object methods for inventory_item records - -=head1 SYNOPSIS - - use FS::inventory_item; - - $record = new FS::inventory_item \%hash; - $record = new FS::inventory_item { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::inventory_item object represents a specific piece of (real or virtual) -inventory, such as a specific DID or serial number. FS::inventory_item -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item itemnum - primary key - -=item classnum - Inventory class (see L) - -=item item - Item identifier (unique within its inventory class) - -=item svcnum - Customer servcie (see L) - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new item. To add the item to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'inventory_item'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid item. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('itemnum') - || $self->ut_foreign_key('classnum', 'inventory_class', 'classnum' ) - || $self->ut_text('item') - || $self->ut_foreign_keyn('svcnum', 'cust_svc', 'svcnum' ) - ; - return $error if $error; - - $self->SUPER::check; -} - -=item cust_svc - -Returns the customer service associated with this inventory item, if the -item has been used (see L). - -=cut - -sub cust_svc { - my $self = shift; - return '' unless $self->svcnum; - qsearchs( 'cust_svc', { 'svcnum' => $self->svcnum } ); -} - -=back - -=head1 CLASS METHODS - -=over 4 - -=item batch_import - -=cut - -sub batch_import { - my $param = shift; - - my $fh = $param->{filehandle}; - - my $imported = 0; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $line; - while ( defined($line=<$fh>) ) { - - chomp $line; - - my $inventory_item = new FS::inventory_item { - 'classnum' => $param->{'classnum'}, - 'item' => $line, - }; - - my $error = $inventory_item->insert; - - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - - #or just skip? - #next; - } - - $imported++; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - #might want to disable this if we skip records for any reason... - return "Empty file!" unless $imported; - - ''; - -} - -=back - -=head1 BUGS - -maybe batch_import should be a regular method in FS::inventory_class - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/m2m_Common.pm b/FS/FS/m2m_Common.pm deleted file mode 100644 index 5dc2a8ec8..000000000 --- a/FS/FS/m2m_Common.pm +++ /dev/null @@ -1,144 +0,0 @@ -package FS::m2m_Common; - -use strict; -use vars qw( @ISA $DEBUG ); -use FS::Schema qw( dbdef ); -use FS::Record qw( qsearch qsearchs dbh ); - -#hmm. well. we seem to be used as a mixin. -#@ISA = qw( FS::Record ); - -$DEBUG = 0; - -=head1 NAME - -FS::m2m_Common - Mixin class for classes in a many-to-many relationship - -=head1 SYNOPSIS - -use FS::m2m_Common; - -@ISA = qw( FS::m2m_Common FS::Record ); - -=head1 DESCRIPTION - -FS::m2m_Common is intended as a mixin class for classes which have a -many-to-many relationship with another table (via a linking table). - -Note: It is currently assumed that the link table contains two fields -named the same as the primary keys of ths base and target tables. - -=head1 METHODS - -=over 4 - -=item process_m2m OPTION => VALUE, ... - -Available options: - -link_table (required) - - -target_table (required) - - -params (required) - hashref; keys are primary key values in target_table (values are boolean). For convenience, keys may optionally be prefixed with the name -of the primary key, as in agentnum54 instead of 54, or passed as an arrayref -of values. - -=cut - -sub process_m2m { - my( $self, %opt ) = @_; - - my $self_pkey = $self->dbdef_table->primary_key; - my %hash = ( $self_pkey => $self->$self_pkey() ); - - my $link_table = $self->_load_table($opt{'link_table'}); - - my $target_table = $self->_load_table($opt{'target_table'}); - my $target_pkey = dbdef->table($target_table)->primary_key; - - if ( ref($opt{'params'}) eq 'ARRAY' ) { - $opt{'params'} = { map { $_=>1 } @{$opt{'params'}} }; - } - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $del_obj ( - grep { - my $targetnum = $_->$target_pkey(); - ( ! $opt{'params'}->{$targetnum} - && ! $opt{'params'}->{"$target_pkey$targetnum"} - ); - } - qsearch( $link_table, \%hash ) - ) { - my $error = $del_obj->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - foreach my $add_targetnum ( - grep { ! qsearchs( $link_table, { %hash, $target_pkey => $_ } ) } - map { /^($target_pkey)?(\d+)$/; $2; } - grep { /^($target_pkey)?(\d+)$/ } - grep { $opt{'params'}->{$_} } - keys %{ $opt{'params'} } - ) { - - my $add_obj = "FS::$link_table"->new( { - %hash, - $target_pkey => $add_targetnum, - }); - my $error = $add_obj->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; -} - -sub _load_table { - my( $self, $table ) = @_; - eval "use FS::$table"; - die $@ if $@; - $table; -} - -#=item target_table -# -#=cut -# -#sub target_table { -# my $self = shift; -# my $target_table = $self->_target_table; -# eval "use FS::$target_table"; -# die $@ if $@; -# $target_table; -#} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L - -=cut - -1; - diff --git a/FS/FS/m2name_Common.pm b/FS/FS/m2name_Common.pm deleted file mode 100644 index e9dcee9b9..000000000 --- a/FS/FS/m2name_Common.pm +++ /dev/null @@ -1,177 +0,0 @@ -package FS::m2name_Common; - -use strict; -use vars qw( $DEBUG $me ); -use Carp; -use FS::Schema qw( dbdef ); -use FS::Record qw( qsearchs ); #qsearch dbh ); - -$DEBUG = 0; - -$me = '[FS::m2name_Common]'; - -=head1 NAME - -FS::m2name_Common - Mixin class for tables with a related table listing names - -=head1 SYNOPSIS - -use FS::m2name_Common; - -@ISA = qw( FS::m2name_Common FS::Record ); - -=head1 DESCRIPTION - -FS::m2name_Common is intended as a mixin class for classes which have a -related table that lists names. - -=head1 METHODS - -=over 4 - -=item process_m2name OPTION => VALUE, ... - -Available options: - -link_table (required) - Table into which the records are inserted. - -num_col (optional) - Column in link_table which links to the primary key of the base table. If not specified, it is assumed this has the same name. - -name_col (required) - Name of the column in link_table that stores the string names. - -names_list (required) - List reference of the possible string name values. - -params (required) - Hashref of keys and values, often passed as CVars)> from a form. Processing is controlled by the B option. - -param_style (required) - Controls processing of B. I<'link_table.value checkboxes'> specifies that parameters keys are in the form C, and the values are booleans controlling whether or not to insert that name into link_table. I<'name_colN values'> specifies that parameter keys are in the form C, C, and so on, and values are the names inserted into link_table. - -args_callback (optional) - Coderef. Optional callback that may modify arguments for insert and replace operations. The callback is run with four arguments: the first argument is object being inserted or replaced (i.e. FS::I object), the second argument is a prefix to use when retreiving CGI arguements from the params hashref, the third argument is the params hashref (see above), and the final argument is a listref of arguments that the callback should modify. - -=cut - -sub process_m2name { - my( $self, %opt ) = @_; - - my $self_pkey = $self->dbdef_table->primary_key; - my $link_sourcekey = $opt{'num_col'} || $self_pkey; - - my $link_table = $self->_load_table($opt{'link_table'}); - - my $link_static = $opt{'link_static'} || {}; - - warn "$me processing m2name from ". $self->table. ".$link_sourcekey". - " to $link_table\n" - if $DEBUG; - - foreach my $name ( @{ $opt{'names_list'} } ) { - - warn "$me checking $name\n" if $DEBUG; - - my $name_col = $opt{'name_col'}; - - my $obj = qsearchs( $link_table, { - $link_sourcekey => $self->$self_pkey(), - $name_col => $name, - %$link_static, - }); - - my $param = ''; - my $prefix = ''; - if ( $opt{'param_style'} =~ /link_table.value\s+checkboxes/i ) { - #access_group.html style - my $paramname = "$link_table.$name"; - $param = $opt{'params'}->{$paramname}; - } elsif ( $opt{'param_style'} =~ /name_colN values/i ) { - #part_event.html style - - my @fields = grep { /^$name_col\d+$/ } - keys %{$opt{'params'}}; - - $param = grep { $name eq $opt{'params'}->{$_} } @fields; - - if ( $param ) { - #this depends on their being one condition per name... - #which needs to be enforced on the edit page... - #(it is on part_event and access_group edit) - foreach my $field (@fields) { - $prefix = "$field." if $name eq $opt{'params'}->{$field}; - } - warn "$me prefix $prefix\n" if $DEBUG; - } - } else { #?? - croak "unknown param_style: ". $opt{'param_style'}; - $param = $opt{'params'}->{$name}; - } - - if ( $obj && ! $param ) { - - warn "$me deleting $name\n" if $DEBUG; - - my $d_obj = $obj; #need to save $obj for below. - my $error = $d_obj->delete; - die "error deleting $d_obj for $link_table.$name: $error" if $error; - - } elsif ( $param && ! $obj ) { - - warn "$me inserting $name\n" if $DEBUG; - - #ok to clobber it now (but bad form nonetheless?) - #$obj = new "FS::$link_table" ( { - $obj = "FS::$link_table"->new( { - $link_sourcekey => $self->$self_pkey(), - $opt{'name_col'} => $name, - %$link_static, - }); - - my @args = (); - if ( $opt{'args_callback'} ) { #edit/process/part_event.html - &{ $opt{'args_callback'} }( $obj, - $prefix, - $opt{'params'}, - \@args - ); - } - - my $error = $obj->insert( @args ); - die "error inserting $obj for $link_table.$name: $error" if $error; - - } elsif ( $param && $obj && $opt{'args_callback'} ) { - - my @args = (); - if ( $opt{'args_callback'} ) { #edit/process/part_event.html - &{ $opt{'args_callback'} }( $obj, - $prefix, - $opt{'params'}, - \@args - ); - } - - my $error = $obj->replace( $obj, @args ); - die "error replacing $obj for $link_table.$name: $error" if $error; - - } - - } - - ''; -} - -sub _load_table { - my( $self, $table ) = @_; - eval "use FS::$table"; - die $@ if $@; - $table; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L - -=cut - -1; - diff --git a/FS/FS/msgcat.pm b/FS/FS/msgcat.pm deleted file mode 100644 index cbdc1d633..000000000 --- a/FS/FS/msgcat.pm +++ /dev/null @@ -1,133 +0,0 @@ -package FS::msgcat; - -use strict; -use vars qw( @ISA ); -use Exporter; -use FS::UID; -use FS::Record qw( qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::msgcat - Object methods for message catalog entries - -=head1 SYNOPSIS - - use FS::msgcat; - - $record = new FS::msgcat \%hash; - $record = new FS::msgcat { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::msgcat object represents an message catalog entry. FS::msgcat inherits -from FS::Record. The following fields are currently supported: - -=over 4 - -=item msgnum - primary key - -=item msgcode - Error code - -=item locale - Locale - -=item msg - Message - -=back - -If you just want to B message catalogs, see L. - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new message catalog entry. To add the message catalog entry to the -database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'msgcat'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid message catalog entry. If there -is an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('msgnum') - || $self->ut_text('msgcode') - || $self->ut_text('msg') - ; - return $error if $error; - - $self->locale =~ /^([\w\@]+)$/ or return "illegal locale: ". $self->locale; - $self->locale($1); - - $self->SUPER::check -} - -=back - -=head1 BUGS - -i18n/l10n, eek - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/nas.pm b/FS/FS/nas.pm deleted file mode 100644 index 97b0ea17d..000000000 --- a/FS/FS/nas.pm +++ /dev/null @@ -1,150 +0,0 @@ -package FS::nas; - -use strict; -use vars qw( @ISA ); -use FS::Record qw(qsearchs); #qsearch); -use FS::UID qw( dbh ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::nas - Object methods for nas records - -=head1 SYNOPSIS - - use FS::nas; - - $record = new FS::nas \%hash; - $record = new FS::nas { - 'nasnum' => 1, - 'nasip' => '10.4.20.23', - 'nasfqdn' => 'box1.brc.nv.us.example.net', - }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->heartbeat($timestamp); - -=head1 DESCRIPTION - -An FS::nas object represents an Network Access Server on your network, such as -a terminal server or equivalent. FS::nas inherits from FS::Record. The -following fields are currently supported: - -=over 4 - -=item nasnum - primary key - -=item nas - NAS name - -=item nasip - NAS ip address - -=item nasfqdn - NAS fully-qualified domain name - -=item last - timestamp indicating the last instant the NAS was in a known - state (used by the session monitoring). - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new NAS. To add the NAS to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'nas'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid NAS. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - $self->ut_numbern('nasnum') - || $self->ut_text('nas') - || $self->ut_ip('nasip') - || $self->ut_domain('nasfqdn') - || $self->ut_numbern('last') - || $self->SUPER::check - ; -} - -=item heartbeat TIMESTAMP - -Updates the timestamp for this nas - -=cut - -sub heartbeat { - my($self, $timestamp) = @_; - my $dbh = dbh; - my $sth = - $dbh->prepare("UPDATE nas SET last = ? WHERE nasnum = ? AND last < ?"); - $sth->execute($timestamp, $self->nasnum, $timestamp) or die $sth->errstr; - $self->last($timestamp); -} - -=back - -=head1 BUGS - -heartbeat method uses SQL directly and doesn't update history tables. - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/option_Common.pm b/FS/FS/option_Common.pm deleted file mode 100644 index 441e798d2..000000000 --- a/FS/FS/option_Common.pm +++ /dev/null @@ -1,345 +0,0 @@ -package FS::option_Common; - -use strict; -use vars qw( @ISA $DEBUG ); -use Scalar::Util qw( blessed ); -use FS::Record qw( qsearch qsearchs dbh ); - -@ISA = qw( FS::Record ); - -$DEBUG = 0; - -=head1 NAME - -FS::option_Common - Base class for option sub-classes - -=head1 SYNOPSIS - -use FS::option_Common; - -@ISA = qw( FS::option_Common ); - -#optional for non-standard names -sub _option_table { 'table_name'; } #defaults to ${table}_option -sub _option_namecol { 'column_name'; } #defaults to optionname -sub _option_valuecol { 'column_name'; } #defaults to optionvalue - -=head1 DESCRIPTION - -FS::option_Common is intended as a base class for classes which have a -simple one-to-many class associated with them, used to store a hash-like data -structure of keys and values. - -=head1 METHODS - -=over 4 - -=item insert [ HASHREF | OPTION => VALUE ... ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -If a list or hash reference of options is supplied, option records are also -created. - -=cut - -#false laziness w/queue.pm -sub insert { - my $self = shift; - my $options = - ( ref($_[0]) eq 'HASH' ) - ? shift - : { @_ }; - warn "FS::option_Common::insert called on $self with options ". - join(', ', map "$_ => ".$options->{$_}, keys %$options) - if $DEBUG; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - my $pkey = $self->primary_key; - my $option_table = $self->option_table; - - my $namecol = $self->_option_namecol; - my $valuecol = $self->_option_valuecol; - - foreach my $optionname ( keys %{$options} ) { - - my $optionvalue = $options->{$optionname}; - - my $href = { - $pkey => $self->get($pkey), - $namecol => $optionname, - $valuecol => ( ref($optionvalue) || $optionvalue ), - }; - - #my $option_record = eval "new FS::$option_table \$href"; - #if ( $@ ) { - # $dbh->rollback if $oldAutoCommit; - # return $@; - #} - my $option_record = "FS::$option_table"->new($href); - - my @args = (); - push @args, $optionvalue if ref($optionvalue); #only hashes supported so far - - $error = $option_record->insert(@args); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item delete - -Delete this record from the database. Any associated option records are also -deleted. - -=cut - -#foreign keys would make this much less tedious... grr dumb mysql -sub delete { - my $self = shift; - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - my $pkey = $self->primary_key; - #my $option_table = $self->option_table; - - foreach my $obj ( $self->option_objects ) { - my $error = $obj->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item replace [ OLD_RECORD ] [ HASHREF | OPTION => VALUE ... ] - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -If a list hash reference of options is supplied, option records are created or -modified. - -=cut - -sub replace { - my $self = shift; - - my $old = ( blessed($_[0]) && $_[0]->isa('FS::Record') ) - ? shift - : $self->replace_old; - - my $options = - ( ref($_[0]) eq 'HASH' ) - ? shift - : { @_ }; - - warn "FS::option_Common::replace called on $self with options ". - join(', ', map "$_ => ". $options->{$_}, keys %$options) - if $DEBUG; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::replace($old); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - my $pkey = $self->primary_key; - my $option_table = $self->option_table; - - my $namecol = $self->_option_namecol; - my $valuecol = $self->_option_valuecol; - - foreach my $optionname ( keys %{$options} ) { - - warn "FS::option_Common::replace: inserting or replacing option: $optionname" - if $DEBUG > 1; - - my $oldopt = qsearchs( $option_table, { - $pkey => $self->get($pkey), - $namecol => $optionname, - } ); - - my $optionvalue = $options->{$optionname}; - - my %oldhash = $oldopt ? $oldopt->hash : (); - - my $href = { - %oldhash, - $pkey => $self->get($pkey), - $namecol => $optionname, - $valuecol => ( ref($optionvalue) || $optionvalue ), - }; - - #my $newopt = eval "new FS::$option_table \$href"; - #if ( $@ ) { - # $dbh->rollback if $oldAutoCommit; - # return $@; - #} - my $newopt = "FS::$option_table"->new($href); - - my $opt_pkey = $newopt->primary_key; - - $newopt->$opt_pkey($oldopt->$opt_pkey) if $oldopt; - - my @args = (); - push @args, $optionvalue if ref($optionvalue); #only hashes supported so far - - warn "FS::option_Common::replace: ". - ( $oldopt ? "$newopt -> replace($oldopt)" : "$newopt -> insert" ) - if $DEBUG > 2; - my $error = $oldopt ? $newopt->replace($oldopt, @args) - : $newopt->insert( @args); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - #remove extraneous old options - foreach my $opt ( - grep { !exists $options->{$_->$namecol()} } $old->option_objects - ) { - my $error = $opt->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item option_objects - -Returns all options as FS::I_option objects. - -=cut - -sub option_objects { - my $self = shift; - my $pkey = $self->primary_key; - my $option_table = $self->option_table; - qsearch($option_table, { $pkey => $self->get($pkey) } ); -} - -=item options - -Returns a list of option names and values suitable for assigning to a hash. - -=cut - -sub options { - my $self = shift; - my $namecol = $self->_option_namecol; - my $valuecol = $self->_option_valuecol; - map { $_->$namecol() => $_->$valuecol() } $self->option_objects; -} - -=item option OPTIONNAME - -Returns the option value for the given name, or the empty string. - -=cut - -sub option { - my $self = shift; - my $pkey = $self->primary_key; - my $option_table = $self->option_table; - my $namecol = $self->_option_namecol; - my $valuecol = $self->_option_valuecol; - my $hashref = { - $pkey => $self->get($pkey), - $namecol => shift, - }; - warn "$self -> option: searching for ". - join(' / ', map { "$_ => ". $hashref->{$_} } keys %$hashref ) - if $DEBUG; - my $obj = qsearchs($option_table, $hashref); - $obj ? $obj->$valuecol() : ''; -} - - -sub option_table { - my $self = shift; - my $option_table = $self->_option_table; - eval "use FS::$option_table"; - die $@ if $@; - $option_table; -} - -#defaults -sub _option_table { shift->table .'_option'; } -sub _option_namecol { 'optionname'; } -sub _option_valuecol { 'optionvalue'; } - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L - -=cut - -1; - diff --git a/FS/FS/part_bill_event.pm b/FS/FS/part_bill_event.pm deleted file mode 100644 index 1d48af9fc..000000000 --- a/FS/FS/part_bill_event.pm +++ /dev/null @@ -1,363 +0,0 @@ -package FS::part_bill_event; - -use strict; -use vars qw( @ISA $DEBUG @EXPORT_OK ); -use Carp qw(cluck confess); -use FS::Record qw( dbh qsearch qsearchs ); -use FS::Conf; - -@ISA = qw( FS::Record ); -@EXPORT_OK = qw( due_events ); -$DEBUG = 0; - -=head1 NAME - -FS::part_bill_event - Object methods for part_bill_event records - -=head1 SYNOPSIS - - use FS::part_bill_event; - - $record = new FS::part_bill_event \%hash; - $record = new FS::part_bill_event { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->do_event( $direct_object ); - - @events = due_events ( { 'record' => $event_triggering_record, - 'payby' => $payby, - 'event_time => $_date, - 'extra_sql => $extra } ); - -=head1 DESCRIPTION - -An FS::part_bill_event object represents a deprecated, old-style invoice event -definition - a callback which is triggered when an invoice is a certain amount -of time overdue. FS::part_bill_event inherits from FS::Record. The following -fields are currently supported: - -=over 4 - -=item eventpart - primary key - -=item payby - CARD, DCRD, CHEK, DCHK, LECB, BILL, or COMP - -=item event - event name - -=item eventcode - event action - -=item seconds - how long after the invoice date events of this type are triggered - -=item weight - ordering for events with identical seconds - -=item plan - eventcode plan - -=item plandata - additional plan data - -=item reason - an associated reason for this event to fire - -=item disabled - Disabled flag, empty or `Y' - -=back - -=head1 NOTE - -Old-style invoice events are only useful for legacy migrations - if you are -looking for current events see L. - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new invoice event definition. To add the invoice event definition to -the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'part_bill_event'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid invoice event definition. If -there is an error, returns the error, otherwise returns false. Called by the -insert and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - $self->weight(0) unless $self->weight; - - my $conf = new FS::Conf; - if ( $conf->exists('safe-part_bill_event') ) { - my $error = $self->ut_anything('eventcode'); - return $error if $error; - - my $c = $self->eventcode; - - #yay, these regexen will go away with the event refactor - - $c =~ /^\s*\$cust_main\->(suspend|cancel|invoicing_list_addpost|bill|collect)\(\);\s*("";)?\s*$/ - - or $c =~ /^\s*\$cust_bill\->(comp|realtime_(card|ach|lec)|batch_card|send)\((%options)*\);\s*$/ - - or $c =~ /^\s*\$cust_bill\->send(_if_newest)?\(\'[\w\-\s]+\'\s*(,\s*(\d+|\[\s*\d+(,\s*\d+)*\s*\])\s*,\s*'[\w\@\.\-\+]*'\s*)?\);\s*$/ - -# or $c =~ /^\s*\$cust_main\->apply_payments; \$cust_main->apply_credits; "";\s*$/ - or $c =~ /^\s*\$cust_main\->apply_payments_and_credits; "";\s*$/ - - or $c =~ /^\s*\$cust_main\->charge\( \s*\d*\.?\d*\s*,\s*\'[\w \!\@\#\$\%\&\(\)\-\+\;\:\"\,\.\?\/]*\'\s*\);\s*$/ - - or $c =~ /^\s*\$cust_main\->suspend_(if|unless)_pkgpart\([\d\,\s]*\);\s*$/ - - or $c =~ /^\s*\$cust_bill\->cust_suspend_if_balance_over\([\d\.\s]*\);\s*$/ - - or do { - #log - return "illegal eventcode: $c"; - }; - - } - - my $error = $self->ut_numbern('eventpart') - || $self->ut_enum('payby', [qw( CARD DCLN DCRD CHEK DCHK LECB BILL COMP )] ) - || $self->ut_text('event') - || $self->ut_anything('eventcode') - || $self->ut_number('seconds') - || $self->ut_enum('disabled', [ '', 'Y' ] ) - || $self->ut_number('weight') - || $self->ut_textn('plan') - || $self->ut_anything('plandata') - || $self->ut_numbern('reason') - ; - #|| $self->ut_snumber('seconds') - return $error if $error; - - #quelle kludge - if ( $self->plandata =~ /^(agent_)?templatename\s+(.*)$/m ) { - my $name= $2; - - foreach my $file (qw( template - latex latexnotes latexreturnaddress latexfooter - latexsmallfooter - html htmlnotes htmlreturnaddress htmlfooter - )) - { - unless ( $conf->exists("invoice_${file}_$name") ) { - $conf->set( - "invoice_${file}_$name" => - join("\n", $conf->config("invoice_$file") ) - ); - } - } - } - - if ($self->reason){ - my $reasonr = qsearchs('reason', {'reasonnum' => $self->reason}); - return "Unknown reason" unless $reasonr; - } - - $self->SUPER::check; -} - -=item templatename - -Returns the alternate invoice template name, if any, or false if there is -no alternate template for this invoice event. - -=cut - -sub templatename { - my $self = shift; - if ( $self->plan =~ /^send_(alternate|agent)$/ - && $self->plandata =~ /^(agent_)?templatename (.*)$/m - ) - { - $2; - } else { - ''; - } -} - -=item due_events - -Returns the list of events due, if any, or false if there is none. -Requires record and payby, but event_time and extra_sql are optional. - -=cut - -sub due_events { - my ($record, $payby, $event_time, $extra_sql) = @_; - - #cluck "DEPRECATED: FS::part_bill_event::due_events called on $record"; - confess "DEPRECATED: FS::part_bill_event::due_events called on $record"; - - my $interval = 0; - if ($record->_date){ - $event_time = time unless $event_time; - $interval = $event_time - $record->_date; - } - sort { $a->seconds <=> $b->seconds - || $a->weight <=> $b->weight - || $a->eventpart <=> $b->eventpart } - grep { $_->seconds <= ( $interval ) - && ! qsearch( 'cust_bill_event', { - 'invnum' => $record->get($record->dbdef_table->primary_key), - 'eventpart' => $_->eventpart, - 'status' => 'done', - } ) - } - qsearch( { - 'table' => 'part_bill_event', - 'hashref' => { 'payby' => $payby, - 'disabled' => '', }, - 'extra_sql' => $extra_sql, - } ); - - -} - -=item do_event - -Performs the event and returns any errors that occur. -Requires a record on which to perform the event. -Should only be performed inside a transaction. - -=cut - -sub do_event { - my ($self, $object, %options) = @_; - - #cluck "DEPRECATED: FS::part_bill_event::do_event called on $self"; - confess "DEPRECATED: FS::part_bill_event::do_event called on $self"; - - warn " calling event (". $self->eventcode. ") for " . $object->table . " " , - $object->get($object->dbdef_table->primary_key) . "\n" if $DEBUG > 1; - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - - # for "callback" -- heh - my $cust_main = $object->cust_main; - my $cust_bill; - if ($object->table eq 'cust_bill'){ - $cust_bill = $object; - } - my $cust_pay_batch; - if ($object->table eq 'cust_pay_batch'){ - $cust_pay_batch = $object; - } - - my $error; - { - local $SIG{__DIE__}; # don't want Mason __DIE__ handler active - $error = eval $self->eventcode; - } - - my $status = ''; - my $statustext = ''; - if ( $@ ) { - $status = 'failed'; - $statustext = $@; - } elsif ( $error ) { - $status = 'done'; - $statustext = $error; - } else { - $status = 'done'; - } - - #add cust_bill_event - my $cust_bill_event = new FS::cust_bill_event { -# 'invnum' => $object->get($object->dbdef_table->primary_key), - 'invnum' => $object->invnum, - 'eventpart' => $self->eventpart, - '_date' => time, - 'status' => $status, - 'statustext' => $statustext, - }; - $error = $cust_bill_event->insert; - if ( $error ) { - my $e = 'WARNING: Event run but database not updated - '. - 'error inserting cust_bill_event, invnum #'. $object->invnum . - ', eventpart '. $self->eventpart.": $error"; - warn $e; - return $e; - } - ''; -} - -=item reasontext - -Returns the text of any reason associated with this event. - -=cut - -sub reasontext { - my $self = shift; - my $r = qsearchs('reason', { 'reasonnum' => $self->reason }); - if ($r){ - $r->reason; - }else{ - ''; - } -} - -=back - -=head1 BUGS - -The whole "eventcode" idea is bunk. This should be refactored with subclasses -like part_pkg/ and part_export/ - -=head1 SEE ALSO - -L, L, L, schema.html from the -base documentation. - -=cut - -1; - diff --git a/FS/FS/part_event.pm b/FS/FS/part_event.pm deleted file mode 100644 index d0ab65e3f..000000000 --- a/FS/FS/part_event.pm +++ /dev/null @@ -1,428 +0,0 @@ -package FS::part_event; - -use strict; -use vars qw( @ISA $DEBUG ); -use Carp qw(confess); -use FS::Record qw( dbh qsearch qsearchs ); -use FS::option_Common; -use FS::m2name_Common; -use FS::Conf; -use FS::part_event_option; -use FS::part_event_condition; -use FS::cust_event; -use FS::agent; - -@ISA = qw( FS::m2name_Common FS::option_Common ); # FS::Record ); -$DEBUG = 0; - -=head1 NAME - -FS::part_event - Object methods for part_event records - -=head1 SYNOPSIS - - use FS::part_event; - - $record = new FS::part_event \%hash; - $record = new FS::part_event { 'column' => 'value' }; - - $error = $record->insert( { 'option' => 'value' } ); - $error = $record->insert( \%options ); - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->do_event( $direct_object ); - -=head1 DESCRIPTION - -An FS::part_event object represents an event definition - a billing, collection -or other callback which is triggered when certain customer, invoice, package or -other conditions are met. FS::part_event inherits from FS::Record. The -following fields are currently supported: - -=over 4 - -=item eventpart - primary key - -=item agentnum - Optional agentnum (see L) - -=item event - event name - -=item eventtable - table name against which this event is triggered; currently "cust_bill" (the traditional invoice events), "cust_main" (customer events) or "cust_pkg (package events) - -=item check_freq - how often events of this type are checked; currently "1d" (daily) and "1m" (monthly) are recognized. Note that the apprioriate freeside-daily and/or freeside-monthly cron job needs to be in place. - -=item weight - ordering for events - -=item action - event action (like part_bill_event.plan - eventcode plan) - -=item disabled - Disabled flag, empty or `Y' - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new invoice event definition. To add the invoice event definition to -the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'part_event'; } - -=item insert [ HASHREF ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -If a list or hash reference of options is supplied, part_export_option records -are created (see L). - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD [ HASHREF | OPTION => VALUE ... ] - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -If a list or hash reference of options is supplied, part_event_option -records are created or modified (see L). - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid invoice event definition. If -there is an error, returns the error, otherwise returns false. Called by the -insert and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - $self->weight(0) unless $self->weight; - - my $error = - $self->ut_numbern('eventpart') - || $self->ut_text('event') - || $self->ut_enum('eventtable', [ 'cust_bill', 'cust_main', 'cust_pkg' ] ) - || $self->ut_enum('check_freq', [ '1d', '1m' ]) - || $self->ut_number('weight') - || $self->ut_alpha('action') - || $self->ut_enum('disabled', [ '', 'Y' ] ) - || $self->ut_agentnum_acl('agentnum', 'Edit global billing events') - ; - return $error if $error; - - #XXX check action to make sure a module exists? - # well it'll die in _rebless... - - $self->SUPER::check; -} - -=item _rebless - -Reblesses the object into the FS::part_event::Action::ACTION class, where -ACTION is the object's I field. - -=cut - -sub _rebless { - my $self = shift; - my $action = $self->action or return $self; - #my $class = ref($self). "::$action"; - my $class = "FS::part_event::Action::$action"; - eval "use $class"; - die $@ if $@; - bless($self, $class); # unless $@; - $self; -} - -=item part_event_condition - -Returns the conditions associated with this event, as FS::part_event_condition -objects (see L) - -=cut - -sub part_event_condition { - my $self = shift; - qsearch( 'part_event_condition', { 'eventpart' => $self->eventpart } ); -} - -=item new_cust_event OBJECT - -Creates a new customer event (see L) for the provided object. - -=cut - -sub new_cust_event { - my( $self, $object ) = @_; - - confess "**** $object is not a ". $self->eventtable - if ref($object) ne "FS::". $self->eventtable; - - my $pkey = $object->primary_key; - - new FS::cust_event { - 'eventpart' => $self->eventpart, - 'tablenum' => $object->$pkey(), - '_date' => time, #i think we always want the real "now" here. - 'status' => 'new', - }; -} - -#surely this doesn't work -sub reasontext { confess "part_event->reasontext deprecated"; } -#=item reasontext -# -#Returns the text of any reason associated with this event. -# -#=cut -# -#sub reasontext { -# my $self = shift; -# my $r = qsearchs('reason', { 'reasonnum' => $self->reason }); -# if ($r){ -# $r->reason; -# }else{ -# ''; -# } -#} - -=item agent - -Returns the associated agent for this event, if any, as an FS::agent object. - -=cut - -sub agent { - my $self = shift; - qsearchs('agent', { 'agentnum' => $self->agentnum } ); -} - -=item templatename - -Returns the alternate invoice template name, if any, or false if there is -no alternate template for this event. - -=cut - -sub templatename { - - my $self = shift; - if ( $self->action =~ /^cust_bill_send_(alternate|agent)$/ - && ( $self->option('agent_templatename') - || $self->option('templatename') ) - ) - { - $self->option('agent_templatename') - || $self->option('templatename'); - - } else { - ''; - } -} - -=back - -=head1 CLASS METHODS - -=over 4 - -=item eventtable_labels - -Returns a hash reference of labels for eventtable values, -i.e. 'cust_main'=>'Customer' - -=cut - -sub eventtable_labels { - #my $class = shift; - - tie my %hash, 'Tie::IxHash', - 'cust_pkg' => 'Package', - 'cust_bill' => 'Invoice', - 'cust_main' => 'Customer', - 'cust_pay_batch' => 'Batch payment', - ; - - \%hash -} - -=item eventtable_pkey_sql - -Returns a hash reference of full SQL primary key names for eventtable values, -i.e. 'cust_main'=>'cust_main.custnum' - -=cut - -sub eventtable_pkey_sql { - #my $class = shift; - - my %hash = ( - 'cust_main' => 'cust_main.custnum', - 'cust_bill' => 'cust_bill.invnum', - 'cust_pkg' => 'cust_pkg.pkgnum', - 'cust_pay_batch' => 'cust_pay_batch.paybatchnum', - ); - - \%hash; -} - - -=item eventtables - -Returns a list of eventtable values (default ordering; suited for display). - -=cut - -sub eventtables { - my $class = shift; - my $eventtables = $class->eventtable_labels; - keys %$eventtables; -} - -=item eventtables_runorder - -Returns a list of eventtable values (run order). - -=cut - -sub eventtables_runorder { - shift->eventtables; #same for now -} - -=item check_freq_labels - -Returns a hash reference of labels for check_freq values, -i.e. '1d'=>'daily' - -=cut - -sub check_freq_labels { - #my $class = shift; - - #Tie::IxHash?? - { - '1d' => 'daily', - '1m' => 'monthly', - }; -} - -=item actions [ EVENTTABLE ] - -Return information about the available actions. If an eventtable is specified, -only return information about actions available for that eventtable. - -Information is returned as key-value pairs. Keys are event names. Values are -hashrefs with the following keys: - -=over 4 - -=item description - -=item eventtable_hashref - -=item option_fields - -=item default_weight - -=item deprecated - -=back - -See L for more information. - -=cut - -#false laziness w/part_event_condition.pm -#some false laziness w/part_export & part_pkg -my %actions; -foreach my $INC ( @INC ) { - foreach my $file ( glob("$INC/FS/part_event/Action/*.pm") ) { - warn "attempting to load Action from $file\n" if $DEBUG; - $file =~ /\/(\w+)\.pm$/ or do { - warn "unrecognized file in $INC/FS/part_event/Action/: $file\n"; - next; - }; - my $mod = $1; - eval "use FS::part_event::Action::$mod;"; - if ( $@ ) { - die "error using FS::part_event::Action::$mod (skipping): $@\n" if $@; - #warn "error using FS::part_event::Action::$mod (skipping): $@\n" if $@; - #next; - } - $actions{$mod} = { - ( map { $_ => "FS::part_event::Action::$mod"->$_() } - qw( description eventtable_hashref default_weight deprecated ) - #option_fields_hashref - ), - 'option_fields' => [ "FS::part_event::Action::$mod"->option_fields() ], - }; - } -} - -sub actions { - my( $class, $eventtable ) = @_; - ( - map { $_ => $actions{$_} } - sort { $actions{$a}->{'default_weight'}<=>$actions{$b}->{'default_weight'} } - $class->all_actions( $eventtable ) - ); - -} - -=item all_actions [ EVENTTABLE ] - -Returns a list of just the action names - -=cut - -sub all_actions { - my ( $class, $eventtable ) = @_; - - grep { !$eventtable || $actions{$_}->{'eventtable_hashref'}{$eventtable} } - keys %actions -} - -=back - -=head1 SEE ALSO - -L, L, L, -L, L, L, L, -schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_event/Action.pm b/FS/FS/part_event/Action.pm deleted file mode 100644 index bdb9df603..000000000 --- a/FS/FS/part_event/Action.pm +++ /dev/null @@ -1,224 +0,0 @@ -package FS::part_event::Action; - -use strict; -use base qw( FS::part_event ); -use Tie::IxHash; - -=head1 NAME - -FS::part_event::Action - Base class for event actions - -=head1 SYNOPSIS - -package FS::part_event::Action::myaction; - -use base FS::part_event::Action; - -=head1 DESCRIPTION - -FS::part_event::Action is a base class for event action classes. - -=head1 METHODS - -These methods are implemented in each action class. - -=over 4 - -=item description - -Action classes must define a description method. This method should return a -scalar description of the action. - -=item eventtable_hashref - -Action classes must define a eventtable_hashref method if they can only be -triggered against some kinds of tables. This method should return a hash -reference of eventtables (values set true indicate the action can be performed): - - sub eventtable_hashref { - { 'cust_main' => 1, - 'cust_bill' => 1, - 'cust_pkg' => 0, - 'cust_pay_batch' => 0, - }; - } - -=cut - -#fallback -sub eventtable_hashref { - { 'cust_main' => 1, - 'cust_bill' => 1, - 'cust_pkg' => 1, - 'cust_pay_batch' => 1, - }; -} - -=item option_fields - -Action classes may define an option_fields method to indicate that they -accept one or more options. - -This method should return a list of option names and option descriptions. -Each option description can be a scalar description, for simple options, or a -hashref with the following values: - -=item label - Description - -=item type - Currently text, money, checkbox, checkbox-multiple, select, select-agent, select-pkg_class, select-part_referral, select-table, fixed, hidden, (others can be implemented as httemplate/elements/tr-TYPE.html mason components). Defaults to text. - -=item size - Size for text fields - -=item options - For checkbox-multiple and select, a list reference of available option values. - -=item option_labels - For select, a hash reference of availble option values and labels. - -=item value - for checkbox, fixed, hidden - -=item table - for select-table - -=item name_col - for select-table - -=item NOTE: See httemplate/elements/select-table.html for a full list of the optinal options for the select-table type - -=back - -NOTE: A database connection is B yet available when this subroutine is -executed. - -Example: - - sub option_fields { - ( - 'field' => 'description', - - 'another_field' => { 'label'=>'Amount', 'type'=>'money', }, - - 'third_field' => { 'label' => 'Types', - 'type' => 'select', - 'options' => [ 'h', 's' ], - 'option_labels' => { 'h' => 'Happy', - 's' => 'Sad', - }, - ); - } - -=cut - -#fallback -sub option_fields { - (); -} - -=item default_weight - -Action classes may define a default weighting. Weights control execution order -relative to other actions (that are triggered at the same time). - -=cut - -#fallback -sub default_weight { - 100; -} - -=item deprecated - -Action classes may define a deprecated method that returns true, indicating -that this action is deprecated. - -=cut - -#default -sub deprecated { - 0; -} - -=item do_action CUSTOMER_EVENT_OBJECT - -Action classes must define an action method. This method is triggered if -all conditions have been met. - -The object which triggered the event (an FS::cust_main, FS::cust_bill or -FS::cust_pkg object) is passed as an argument. - -To retreive option values, call the option method on the desired option, i.e.: - - my( $self, $cust_object ) = @_; - $value_of_field = $self->option('field'); - -To indicate sucessful completion, simply return. Optionally, you can return a -string of information status information about the sucessful completion, or -simply return the empty string. - -To indicate a failure and that this event should retry, die with the desired -error message. - -=back - -=head1 BASE METHODS - -These methods are defined in the base class for use in action classes. - -=over 4 - -=item cust_main CUST_OBJECT - -Return the customer object (see L) associated with the provided -object (the object itself if it is already a customer object). - -=cut - -sub cust_main { - my( $self, $cust_object ) = @_; - - $cust_object->isa('FS::cust_main') ? $cust_object : $cust_object->cust_main; - -} - -=item option_label OPTIONNAME - -Returns the label for the specified option name. - -=cut - -sub option_label { - my( $self, $optionname ) = @_; - - my %option_fields = $self->option_fields; - - ref( $option_fields{$optionname} ) - ? $option_fields{$optionname}->{'label'} - : $option_fields{$optionname} - or $optionname; -} - -=item option_fields_hashref - -Returns the option fields as an (ordered) hash reference. - -=cut - -sub option_fields_hashref { - my $self = shift; - tie my %hash, 'Tie::IxHash', $self->option_fields; -} - -=item option_fields_listref - -Returns just the option field names as a list reference. - -=cut - -sub option_fields_listref { - my $self = shift; - my $hashref = $self->option_fields_hashref; - [ keys %$hashref ]; -} - -=back - -=cut - -1; - diff --git a/FS/FS/part_event/Action/addpost.pm b/FS/FS/part_event/Action/addpost.pm deleted file mode 100644 index e0e3fa878..000000000 --- a/FS/FS/part_event/Action/addpost.pm +++ /dev/null @@ -1,24 +0,0 @@ -package FS::part_event::Action::addpost; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Add postal invoicing'; -} - -sub default_weight { - 20; -} - -sub do_action { - my( $self, $cust_object ) = @_; - - my $cust_main = $self->cust_main($cust_object); - - $cust_main->invoicing_list_addpost(); - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/apply.pm b/FS/FS/part_event/Action/apply.pm deleted file mode 100644 index f91c6047e..000000000 --- a/FS/FS/part_event/Action/apply.pm +++ /dev/null @@ -1,28 +0,0 @@ -package FS::part_event::Action::apply; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Apply unapplied payments and credits'; -} - -sub deprecated { - 1; -} - -sub default_weight { - 70; -} - -sub do_action { - my( $self, $cust_object ) = @_; - - my $cust_main = $self->cust_main($cust_object); - - $cust_main->apply_payments_and_credits; - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/bill.pm b/FS/FS/part_event/Action/bill.pm deleted file mode 100644 index fec025f62..000000000 --- a/FS/FS/part_event/Action/bill.pm +++ /dev/null @@ -1,30 +0,0 @@ -package FS::part_event::Action::bill; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - #'Generate invoices (normally only used with a Late Fee event)'; - 'Generate invoices (normally only used with a Late Fee event)'; -} - -sub deprecated { - 1; -} - -sub default_weight { - 60; -} - -sub do_action { - my( $self, $cust_object ) = @_; - - my $cust_main = $self->cust_main($cust_object); - - my $error = $cust_main->bill; - die $error if $error; - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/cancel.pm b/FS/FS/part_event/Action/cancel.pm deleted file mode 100644 index 94f314602..000000000 --- a/FS/FS/part_event/Action/cancel.pm +++ /dev/null @@ -1,35 +0,0 @@ -package FS::part_event::Action::cancel; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Cancel'; -} - -sub option_fields { - ( - 'reasonnum' => { 'label' => 'Reason', - 'type' => 'select-reason', - 'reason_class' => 'C', - }, - ); - -}; - -sub default_weight { - 20; -} - -sub do_action { - my( $self, $cust_object ) = @_; - - my $cust_main = $self->cust_main($cust_object); - - my $error = $cust_main->cancel( 'reason' => $self->option('reasonnum') ); - die $error if $error; - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/collect.pm b/FS/FS/part_event/Action/collect.pm deleted file mode 100644 index fa94b7def..000000000 --- a/FS/FS/part_event/Action/collect.pm +++ /dev/null @@ -1,30 +0,0 @@ -package FS::part_event::Action::collect; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - #'Collect on invoices (normally only used with a Late Fee and Generate Invoice events)'; - 'Collect on invoices (normally only used with a Late Fee and Generate Invoice events)'; -} - -sub deprecated { - 1; -} - -sub default_weight { - 80; -} - -sub do_action { - my( $self, $cust_object ) = @_; - - my $cust_main = $self->cust_main($cust_object); - - my $error = $cust_main->collect; - die $error if $error; - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_batch.pm b/FS/FS/part_event/Action/cust_bill_batch.pm deleted file mode 100644 index aec09250b..000000000 --- a/FS/FS/part_event/Action/cust_bill_batch.pm +++ /dev/null @@ -1,31 +0,0 @@ -package FS::part_event::Action::cust_bill_batch; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Add card or check to a pending batch'; -} - -sub deprecated { - 1; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub default_weight { - 40; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - $cust_bill->batch_card; # ( %options ); #XXX options?? -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_comp.pm b/FS/FS/part_event/Action/cust_bill_comp.pm deleted file mode 100644 index 636a66df5..000000000 --- a/FS/FS/part_event/Action/cust_bill_comp.pm +++ /dev/null @@ -1,34 +0,0 @@ -package FS::part_event::Action::cust_bill_comp; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Pay invoice with a complimentary "payment"'; -} - -sub deprecated { - 1; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub default_weight { - 30; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - my $error = $cust_bill->comp; - die $error if $error; - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_fee_percent.pm b/FS/FS/part_event/Action/cust_bill_fee_percent.pm deleted file mode 100644 index 100fc8bc3..000000000 --- a/FS/FS/part_event/Action/cust_bill_fee_percent.pm +++ /dev/null @@ -1,40 +0,0 @@ -package FS::part_event::Action::cust_bill_fee_percent; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Late fee (percentage of invoice)'; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub option_fields { - ( - 'percent' => { label=>'Percent', size=>2, }, - 'reason' => 'Reason', - ); -} - -sub default_weight { - 10; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - my $error = $cust_main->charge( - sprintf('%.2f', $cust_bill->owed * $self->option('percent') / 100 ), - $self->option('reason') - ); - die $error if $error; - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_realtime_card.pm b/FS/FS/part_event/Action/cust_bill_realtime_card.pm deleted file mode 100644 index 471c946dc..000000000 --- a/FS/FS/part_event/Action/cust_bill_realtime_card.pm +++ /dev/null @@ -1,32 +0,0 @@ -package FS::part_event::Action::cust_bill_realtime_card; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - #'Run card with a Business::OnlinePayment realtime gateway'; - 'Run card with a Business::OnlinePayment realtime gateway'; -} - -sub deprecated { - 1; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub default_weight { - 30; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - $cust_bill->realtime_card; -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_realtime_check.pm b/FS/FS/part_event/Action/cust_bill_realtime_check.pm deleted file mode 100644 index 9a52830ae..000000000 --- a/FS/FS/part_event/Action/cust_bill_realtime_check.pm +++ /dev/null @@ -1,32 +0,0 @@ -package FS::part_event::Action::cust_bill_realtime_check; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - #'Run check with a Business::OnlinePayment realtime gateway'; - 'Run check with a Business::OnlinePayment realtime gateway'; -} - -sub deprecated { - 1; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub default_weight { - 30; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - $cust_bill->realtime_ach; -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_realtime_lec.pm b/FS/FS/part_event/Action/cust_bill_realtime_lec.pm deleted file mode 100644 index db091dadb..000000000 --- a/FS/FS/part_event/Action/cust_bill_realtime_lec.pm +++ /dev/null @@ -1,32 +0,0 @@ -package FS::part_event::Action::cust_bill_realtime_lec; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - #'Run phone bill ("LEC") billing with a Business::OnlinePayment realtime gateway'; - 'Run phone bill ("LEC") billing with a Business::OnlinePayment realtime gateway'; -} - -sub deprecated { - 1; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub default_weight { - 30; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - $cust_bill->realtime_lec; -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_send.pm b/FS/FS/part_event/Action/cust_bill_send.pm deleted file mode 100644 index 9330c6113..000000000 --- a/FS/FS/part_event/Action/cust_bill_send.pm +++ /dev/null @@ -1,27 +0,0 @@ -package FS::part_event::Action::cust_bill_send; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Send invoice (email/print/fax)'; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub default_weight { - 50; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - $cust_bill->send; -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_send_agent.pm b/FS/FS/part_event/Action/cust_bill_send_agent.pm deleted file mode 100644 index fcf000736..000000000 --- a/FS/FS/part_event/Action/cust_bill_send_agent.pm +++ /dev/null @@ -1,44 +0,0 @@ -package FS::part_event::Action::cust_bill_send_agent; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Send invoice (email/print/fax) with alternate template, for specific agents'; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub option_fields { - ( - 'agentnum' => { label => 'Only for agent(s)', - type => 'select-agent', - multiple => 1 - }, - 'agent_templatename' => { label => 'Template', - type => 'select-invoice_template', - }, - 'agent_invoice_from' => 'Invoice email From: address', - ); -} - -sub default_weight { - 50; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - $cust_bill->send( - $self->option('agent_templatename'), - [ split(/\s*,\s*/, $self->option('agentnum') ) ], - $self->option('agent_invoice_from'), - ); -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_send_alternate.pm b/FS/FS/part_event/Action/cust_bill_send_alternate.pm deleted file mode 100644 index 6afb89a99..000000000 --- a/FS/FS/part_event/Action/cust_bill_send_alternate.pm +++ /dev/null @@ -1,35 +0,0 @@ -package FS::part_event::Action::cust_bill_send_alternate; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Send invoice (email/print/fax) with alternate template'; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub option_fields { - ( - 'templatename' => { label => 'Template', - type => 'select-invoice_template', - }, - ); -} - -sub default_weight { - 50; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - $cust_bill->send( $self->option('templatename') ); -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_send_csv_ftp.pm b/FS/FS/part_event/Action/cust_bill_send_csv_ftp.pm deleted file mode 100644 index db3554e01..000000000 --- a/FS/FS/part_event/Action/cust_bill_send_csv_ftp.pm +++ /dev/null @@ -1,56 +0,0 @@ -package FS::part_event::Action::cust_bill_send_csv_ftp; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Upload CSV invoice data to an FTP server'; -} - -sub deprecated { - 1; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub option_fields { - ( - 'ftpformat' => { label => 'Format', - type =>'select', - options => ['default', 'billco'], - option_labels => { 'default' => 'Default', - 'billco' => 'Billco', - }, - }, - 'ftpserver' => 'FTP server', - 'ftpusername' => 'FTP username', - 'ftppassword' => 'FTP password', - 'ftpdir' => 'FTP directory', - ); -} - -sub default_weight { - 50; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - $cust_bill->send_csv( - 'protocol' => 'ftp', - 'server' => $self->option('ftpserver'), - 'username' => $self->option('ftpusername'), - 'password' => $self->option('ftppassword'), - 'dir' => $self->option('ftpdir'), - 'format' => $self->option('ftpformat'), - ); - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_send_if_newest.pm b/FS/FS/part_event/Action/cust_bill_send_if_newest.pm deleted file mode 100644 index 916983ebe..000000000 --- a/FS/FS/part_event/Action/cust_bill_send_if_newest.pm +++ /dev/null @@ -1,40 +0,0 @@ -package FS::part_event::Action::cust_bill_send_if_newest; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Send invoice (email/print/fax) with alternate template, if it is still the newest invoice (useful for late notices - set to 31 days or later)'; -} - -# XXX is this handled better by something against customers?? -#sub deprecated { -# 1; -#} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub option_fields { - ( - 'if_newest_templatename' => { label => 'Template', - type => 'select-invoice_template', - }, - ); -} - -sub default_weight { - 50; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - $cust_bill->send( $self->option('templatename') ); -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_spool_csv.pm b/FS/FS/part_event/Action/cust_bill_spool_csv.pm deleted file mode 100644 index 4300b6120..000000000 --- a/FS/FS/part_event/Action/cust_bill_spool_csv.pm +++ /dev/null @@ -1,64 +0,0 @@ -package FS::part_event::Action::cust_bill_spool_csv; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Spool CSV invoice data'; -} - -sub deprecated { - 1; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub option_fields { - ( - 'spoolformat' => { label => 'Format', - type => 'select', - options => ['default', 'billco'], - option_labels => { 'default' => 'Default', - 'billco' => 'Billco', - }, - }, - 'spooldest' => { label => 'For destination', - type => 'select', - options => [ '', qw( POST EMAIL FAX ) ], - option_labels => { '' => '(all)', - 'POST' => 'Postal Mail', - 'EMAIL' => 'Email', - 'FAX' => 'Fax', - }, - }, - 'spoolbalanceover' => { label => - 'If balance (this invoice and previous) over', - type => 'money', - }, - 'spoolagent_spools' => { label => 'Individual per-agent spools', - type => 'checkbox', - }, - ); -} - -sub default_weight { - 50; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - $cust_bill->spool_csv( - 'format' => $self->option('spoolformat'), - 'dest' => $self->option('spooldest'), - 'balanceover' => $self->option('spoolbalanceover'), - 'agent_spools' => $self->option('spoolagent_spools'), - ); -} - -1; diff --git a/FS/FS/part_event/Action/cust_bill_suspend_if_balance.pm b/FS/FS/part_event/Action/cust_bill_suspend_if_balance.pm deleted file mode 100644 index 655994963..000000000 --- a/FS/FS/part_event/Action/cust_bill_suspend_if_balance.pm +++ /dev/null @@ -1,48 +0,0 @@ -package FS::part_event::Action::cust_bill_suspend_if_balance; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Suspend if balance (this invoice and previous) over'; -} - -sub deprecated { - 1; -} - -sub eventtable_hashref { - { 'cust_bill' => 1 }; -} - -sub option_fields { - ( - 'balanceover' => { label=>'Balance over', type=>'money', }, # size=>7 }, - 'reasonnum' => { 'label' => 'Reason', - 'type' => 'select-reason', - 'reason_class' => 'S', - }, - ); -}; - -sub default_weight { - 10; -} - -sub do_action { - my( $self, $cust_bill ) = @_; - - #my $cust_main = $self->cust_main($cust_bill); - my $cust_main = $cust_bill->cust_main; - - my @err = $cust_bill->cust_suspend_if_balance_over( - $self->option('balanceover'), - 'reason' => $self->option('reasonnum'), - ); - - die join(' / ', @err) if scalar(@err); - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/fee.pm b/FS/FS/part_event/Action/fee.pm deleted file mode 100644 index 81a84498a..000000000 --- a/FS/FS/part_event/Action/fee.pm +++ /dev/null @@ -1,33 +0,0 @@ -package FS::part_event::Action::fee; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Late fee (flat)'; -} - -sub option_fields { - ( - 'charge' => { label=>'Amount', type=>'money', }, # size=>7, }, - 'reason' => 'Reason', - ); -}; - -sub default_weight { - 10; -} - -sub do_action { - my( $self, $cust_object ) = @_; - - my $cust_main = $self->cust_main($cust_object); - - my $error = $cust_main->charge( $self->option('charge'), $self->option('reason') ); - - die $error if $error; - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/suspend.pm b/FS/FS/part_event/Action/suspend.pm deleted file mode 100644 index ec440ffd2..000000000 --- a/FS/FS/part_event/Action/suspend.pm +++ /dev/null @@ -1,36 +0,0 @@ -package FS::part_event::Action::suspend; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Suspend'; -} - -sub option_fields { - ( - 'reasonnum' => { 'label' => 'Reason', - 'type' => 'select-reason', - 'reason_class' => 'S', - }, - ); -}; - -sub default_weight { - 10; -} - -sub do_action { - my( $self, $cust_object ) = @_; - - my $cust_main = $self->cust_main($cust_object); - - my @err = $cust_main->suspend( 'reason' => $self->option('reasonnum') ); - - die join(' / ', @err) if scalar(@err); - - ''; - -} - -1; diff --git a/FS/FS/part_event/Action/suspend_if_pkgpart.pm b/FS/FS/part_event/Action/suspend_if_pkgpart.pm deleted file mode 100644 index 9bdc9be53..000000000 --- a/FS/FS/part_event/Action/suspend_if_pkgpart.pm +++ /dev/null @@ -1,42 +0,0 @@ -package FS::part_event::Action::suspend_if_pkgpart; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Suspend packages'; -} - -sub option_fields { - ( - 'if_pkgpart' => { 'label' => 'Suspend packages:', - 'type' => 'select-part_pkg', - 'multiple' => 1, - }, - 'reasonnum' => { 'label' => 'Reason', - 'type' => 'select-reason', - 'reason_class' => 'S', - }, - ); -}; - -sub default_weight { - 10; -} - -sub do_action { - my( $self, $cust_object ) = @_; - - my $cust_main = $self->cust_main($cust_object); - - my @err = $cust_main->suspend_if_pkgpart( { - 'pkgparts' => [ split(/\s*,\s*/, $self->option('if_pkgpart') ) ], - 'reason' => $self->option('reasonnum'), - } ); - - die join(' / ', @err) if scalar(@err); - - ''; -} - -1; diff --git a/FS/FS/part_event/Action/suspend_unless_pkgpart.pm b/FS/FS/part_event/Action/suspend_unless_pkgpart.pm deleted file mode 100644 index f9bf1e860..000000000 --- a/FS/FS/part_event/Action/suspend_unless_pkgpart.pm +++ /dev/null @@ -1,42 +0,0 @@ -package FS::part_event::Action::suspend_unless_pkgpart; - -use strict; -use base qw( FS::part_event::Action ); - -sub description { - 'Suspend packages except'; -} - -sub option_fields { - ( - 'unless_pkgpart' => { 'label' => 'Suspend packages except:', - 'type' => 'select-part_pkg', - 'multiple' => 1, - }, - 'reasonnum' => { 'label' => 'Reason', - 'type' => 'select-reason', - 'reason_class' => 'S', - }, - ); -}; - -sub default_weight { - 10; -} - -sub do_action { - my( $self, $cust_object ) = @_; - - my $cust_main = $self->cust_main($cust_object); - - my @err = $cust_main->suspend_unless_pkgpart( { - 'pkgparts' => [ split(/\s*,\s*/, $self->option('unless_pkgpart') ) ], - 'reason' => $self->option('reasonnum'), - } ); - - die join(' / ', @err) if scalar(@err); - - ''; -} - -1; diff --git a/FS/FS/part_event/Condition.pm b/FS/FS/part_event/Condition.pm deleted file mode 100644 index 2b71fbb77..000000000 --- a/FS/FS/part_event/Condition.pm +++ /dev/null @@ -1,412 +0,0 @@ -package FS::part_event::Condition; - -use strict; -use base qw( FS::part_event_condition ); - -use FS::UID qw( driver_name ); - -=head1 NAME - -FS::part_event::Condition - Base class for event conditions - -=head1 SYNOPSIS - -package FS::part_event::Condition::mycondition; - -use base FS::part_event::Condition; - -=head1 DESCRIPTION - -FS::part_event::Condition is a base class for event conditions classes. - -=head1 METHODS - -These methods are implemented in each condition class. - -=over 4 - -=item description - -Condition classes must define a description method. This method should return -a scalar description of the condition. - -=item eventtable_hashref - -Condition classes must define an eventtable_hashref method if they can only be -tested against some kinds of tables. This method should return a hash reference -of eventtables (values set true indicate the condition can be tested): - - sub eventtable_hashref { - { 'cust_main' => 1, - 'cust_bill' => 1, - 'cust_pkg' => 0, - 'cust_pay_batch' => 0, - }; - } - -=cut - -#fallback -sub eventtable_hashref { - { 'cust_main' => 1, - 'cust_bill' => 1, - 'cust_pkg' => 1, - 'cust_pay_batch' => 1, - }; -} - -=item option_fields - -Condition classes may define an option_fields method to indicate that they -accept one or more options. - -This method should return a list of option names and option descriptions. -Each option description can be a scalar description, for simple options, or a -hashref with the following values: - -=over 4 - -=item label - Description - -=item type - Currently text, money, checkbox, checkbox-multiple, select, select-agent, select-pkg_class, select-part_referral, select-table, fixed, hidden, (others can be implemented as httemplate/elements/tr-TYPE.html mason components). Defaults to text. - -=item options - For checkbox-multiple and select, a list reference of available option values. - -=item option_labels - For checkbox-multiple (and select?), a hash reference of availble option values and labels. - -=item value - for checkbox, fixed, hidden (also a default for text, money, more?) - -=item table - for select-table - -=item name_col - for select-table - -=item NOTE: See httemplate/elements/select-table.html for a full list of the optinal options for the select-table type - -=back - -NOTE: A database connection is B yet available when this subroutine is -executed. - -Example: - - sub option_fields { - ( - 'field' => 'description', - - 'another_field' => { 'label'=>'Amount', 'type'=>'money', }, - - 'third_field' => { 'label' => 'Types', - 'type' => 'checkbox-multiple', - 'options' => [ 'h', 's' ], - 'option_labels' => { 'h' => 'Happy', - 's' => 'Sad', - }, - ); - } - -=cut - -#fallback -sub option_fields { - (); -} - -=item condition CUSTOMER_EVENT_OBJECT - -Condition classes must define a condition method. This method is evaluated -to determine if the condition has been met. The object which triggered the -event (an FS::cust_main, FS::cust_bill or FS::cust_pkg object) is passed as -the first argument. Additional arguments are list of key-value pairs. - -To retreive option values, call the option method on the desired option, i.e.: - - my( $self, $cust_object, %opts ) = @_; - $value_of_field = $self->option('field'); - -Available additional arguments: - - $time = $opt{'time'}; #use this instead of time or $^T - - $cust_event = $opt{'cust_event'}; #to retreive the cust_event object being tested - -Return a true value if the condition has been met, and a false value if it has -not. - -=item condition_sql EVENTTABLE - -Condition classes may optionally define a condition_sql method. This B -method should return an SQL fragment that tests for this condition. The -fragment is evaluated and a true value of this expression indicates that the -condition has been met. The event table (cust_main, cust_bill or cust_pkg) is -passed as an argument. - -This method is used for optimizing event queries. You may want to add indices -for any columns referenced. It is acceptable to return an SQL fragment which -partially tests the condition; doing so will still reduce the number of -records which much be returned and tested with the B method. - -=cut - -# fallback. -sub condition_sql { - my( $class, $eventtable ) = @_; - #... - 'true'; -} - -=item disabled - -Condition classes may optionally define a disabled method. Returning a true -value disbles the condition entirely. - -=cut - -sub disabled { - 0; -} - -=item implicit_flag - -This is used internally by the I and I conditions. You probably -do B want to define this method for new custom conditions, unless you're -sure you want B new action to start with your condition. - -Condition classes may define an implicit_flag method that returns true to -indicate that all new events should start with this condition. (Currently, -condition classes which do so should be applicable to all kinds of -Is.) The numeric value of the flag also defines the ordering of -implicit conditions. - -=cut - -#fallback -sub implicit_flag { 0; } - -=item remove_warning - -Again, used internally by the I and I conditions; probably not -a good idea for new custom conditions. - -Condition classes may define a remove_warning method containing a string -warning message to enable a confirmation dialog triggered when the condition -is removed from an event. - -=cut - -#fallback -sub remove_warning { ''; } - -=item order_sql - -This is used internally by the I and I conditions -to declare ordering; probably not of general use for new custom conditions. - -=item order_sql_weight - -In conjunction with order_sql, this defines which order the ordering fragments -supplied by different B should be used. - -=cut - -sub order_sql_weight { ''; } - -=back - -=head1 BASE METHODS - -These methods are defined in the base class for use in condition classes. - -=over 4 - -=item cust_main CUST_OBJECT - -Return the customer object (see L) associated with the provided -object (the object itself if it is already a customer object). - -=cut - -sub cust_main { - my( $self, $cust_object ) = @_; - - $cust_object->isa('FS::cust_main') ? $cust_object : $cust_object->cust_main; - -} - -=item option_label OPTIONNAME - -Returns the label for the specified option name. - -=cut - -sub option_label { - my( $self, $optionname ) = @_; - - my %option_fields = $self->option_fields; - - ref( $option_fields{$optionname} ) - ? $option_fields{$optionname}->{'label'} - : $option_fields{$optionname} - or $optionname; -} - -=back - -=item condition_sql_option OPTION - -This is a class method that returns an SQL fragment for retreiving a condition -option. It is primarily intended for use in B. - -=cut - -sub condition_sql_option { - my( $class, $option ) = @_; - - ( my $condname = $class ) =~ s/^.*:://; - - "( SELECT optionvalue FROM part_event_condition_option - WHERE part_event_condition_option.eventconditionnum = - cond_$condname.eventconditionnum - AND part_event_condition_option.optionname = '$option' - )"; -} - -=item condition_sql_option_age_from OPTION FROM_TIMESTAMP - -This is a class method that returns an SQL fragment that will retreive a -condition option, parse it from a frequency (such as "1d", "1w" or "12m"), -and subtract that interval from the supplied timestamp. It is primarily -intended for use in B. - -=cut - -sub condition_sql_option_age_from { - my( $class, $option, $from ) = @_; - - my $value = $class->condition_sql_option($option); - -# my $str2time = str2time_sql; - - if ( driver_name =~ /^Pg/i ) { - - #can we do better with Pg now that we have $from? yes we can, bob - "( $from - EXTRACT( EPOCH FROM REPLACE( $value, 'm', 'mon')::interval ) )"; - - } elsif ( driver_name =~ /^mysql/i ) { - - #hmm... is there a way we can save $value? we're just an expression, hmm - #we might be able to do something like "AS ${option}_value" except we get - #used in more complicated expressions and we need some sort of unique - #identifer passed down too... yow - - "CASE WHEN $value IS NULL OR $value = '' - THEN $from - WHEN $value LIKE '%m' - THEN UNIX_TIMESTAMP( - FROM_UNIXTIME($from) - INTERVAL REPLACE( $value, 'm', '' ) MONTH - ) - WHEN $value LIKE '%y' - THEN UNIX_TIMESTAMP( - FROM_UNIXTIME($from) - INTERVAL REPLACE( $value, 'y', '' ) YEAR - ) - WHEN $value LIKE '%w' - THEN UNIX_TIMESTAMP( - FROM_UNIXTIME($from) - INTERVAL REPLACE( $value, 'w', '' ) WEEK - ) - WHEN $value LIKE '%d' - THEN UNIX_TIMESTAMP( - FROM_UNIXTIME($from) - INTERVAL REPLACE( $value, 'd', '' ) DAY - ) - WHEN $value LIKE '%h' - THEN UNIX_TIMESTAMP( - FROM_UNIXTIME($from) - INTERVAL REPLACE( $value, 'h', '' ) HOUR - ) - END - " - } else { - - die "FATAL: don't know how to subtract frequencies from dates for ". - driver_name. " databases"; - - } - -} - -=item condition_sql_option_age OPTION - -This is a class method that returns an SQL fragment for retreiving a condition -option, and additionaly parsing it from a frequency (such as "1d", "1w" or -"12m") into an approximate number of seconds. - -Note that since months vary in length, the results of this method should B -be used in computations (use condition_sql_option_age_from for that). They are -useful for for ordering and comparison to other ages. - -This method is primarily intended for use in B. - -=cut - -sub condition_sql_option_age { - my( $class, $option ) = @_; - $class->age2seconds_sql( $class->condition_sql_option($option) ); -} - -=item age2seconds_sql - -Class method returns an SQL fragment for parsing an arbitrary frequeny (such -as "1d", "1w", "12m", "2y" or "12h") into an approximate number of seconds. - -Approximate meaning: months are considered to be 30 days, years to be -365.25 days. Otherwise the numbers of seconds returned is exact. - -=cut - -sub age2seconds_sql { - my( $class, $value ) = @_; - - if ( driver_name =~ /^Pg/i ) { - - "EXTRACT( EPOCH FROM REPLACE( $value, 'm', 'mon')::interval )"; - - } elsif ( driver_name =~ /^mysql/i ) { - - #hmm... is there a way we can save $value? we're just an expression, hmm - #we might be able to do something like "AS ${option}_age" except we get - #used in more complicated expressions and we need some sort of unique - #identifer passed down too... yow - # 2592000 = 30d "1 month" - # 31557600 = 365.25d "1 year" - - "CASE WHEN $value IS NULL OR $value = '' - THEN 0 - WHEN $value LIKE '%m' - THEN REPLACE( $value, 'm', '' ) * 2592000 - WHEN $value LIKE '%y' - THEN REPLACE( $value, 'y', '' ) * 31557600 - WHEN $value LIKE '%w' - THEN REPLACE( $value, 'w', '' ) * 604800 - WHEN $value LIKE '%d' - THEN REPLACE( $value, 'd', '' ) * 86400 - WHEN $value LIKE '%h' - THEN REPLACE( $value, 'h', '' ) * 3600 - END - " - } else { - - die "FATAL: don't know how to approximate frequencies for ". driver_name. - " databases"; - - } - -} - -=head1 NEW CONDITION CLASSES - -A module should be added in FS/FS/part_event/Condition/ which implements the -methods desribed above in L. An example may be found in the -eg/part_event-Condition-template.pm file. - -=cut - -1; - - diff --git a/FS/FS/part_event/Condition/agent.pm b/FS/FS/part_event/Condition/agent.pm deleted file mode 100644 index da428c15f..000000000 --- a/FS/FS/part_event/Condition/agent.pm +++ /dev/null @@ -1,37 +0,0 @@ -package FS::part_event::Condition::agent; - -use strict; - -use base qw( FS::part_event::Condition ); - -# see the FS::part_event::Condition manpage for full documentation on each -# of the required and optional methods. - -sub description { - 'Agent'; -} - -sub option_fields { - ( - 'agentnum' => { label=>'Agent', type=>'select-agent', }, - ); -} - -sub condition { - my($self, $object, %opt) = @_; - - my $cust_main = $self->cust_main($object); - - my $agentnum = $self->option('agentnum'); - - $cust_main->agentnum == $agentnum; - -} - -#sub condition_sql { -# my( $self, $table ) = @_; -# -# 'true'; -#} - -1; diff --git a/FS/FS/part_event/Condition/agent_type.pm b/FS/FS/part_event/Condition/agent_type.pm deleted file mode 100644 index 54c893260..000000000 --- a/FS/FS/part_event/Condition/agent_type.pm +++ /dev/null @@ -1,40 +0,0 @@ -package FS::part_event::Condition::agent_type; - -use strict; - -use base qw( FS::part_event::Condition ); - -# see the FS::part_event::Condition manpage for full documentation on each -# of the required and optional methods. - -sub description { - 'Agent Type'; -} - -sub option_fields { - ( - 'typenum' => { label => 'Agent Type', - type => 'select-agent_type', - disable_empty => 1, - }, - ); -} - -sub condition { - my($self, $object, %opt) = @_; - - my $cust_main = $self->cust_main($object); - - my $typenum = $self->option('typenum'); - - $cust_main->agent->typenum == $typenum; - -} - -#sub condition_sql { -# my( $self, $table ) = @_; -# -# 'true'; -#} - -1; diff --git a/FS/FS/part_event/Condition/balance.pm b/FS/FS/part_event/Condition/balance.pm deleted file mode 100644 index 263941351..000000000 --- a/FS/FS/part_event/Condition/balance.pm +++ /dev/null @@ -1,48 +0,0 @@ -package FS::part_event::Condition::balance; - -use strict; -use FS::cust_main; - -use base qw( FS::part_event::Condition ); - -sub description { 'Customer balance'; } - -sub implicit_flag { 20; } - -sub remove_warning { - 'Are you sure you want to remove this condition? Doing so will allow this event to run even if the customer has no outstanding balance. Perhaps you want to reset "Balance over" to 0 instead of removing the condition entirely?'; #better error msg? -} - -sub option_fields { - ( - 'balance' => { 'label' => 'Balance over', - 'type' => 'money', - 'value' => '0.00', #default - }, - ); -} - -sub condition { - my($self, $object) = @_; - - my $cust_main = $self->cust_main($object); - - my $over = $self->option('balance'); - $over = 0 unless length($over); - - $cust_main->balance > $over; -} - -sub condition_sql { - my( $class, $table ) = @_; - - my $over = $class->condition_sql_option('balance'); - - my $balance_sql = FS::cust_main->balance_sql; - - "$balance_sql > $over"; - -} - -1; - diff --git a/FS/FS/part_event/Condition/balance_age.pm b/FS/FS/part_event/Condition/balance_age.pm deleted file mode 100644 index ec3624a6d..000000000 --- a/FS/FS/part_event/Condition/balance_age.pm +++ /dev/null @@ -1,77 +0,0 @@ -package FS::part_event::Condition::balance_age; - -require 5.006; -use strict; -use Time::Local qw(timelocal_nocheck); - -use base qw( FS::part_event::Condition ); - -sub description { 'Customer balance age'; } - -sub option_fields { - ( - 'balance' => { 'label' => 'Balance over', - 'type' => 'money', - 'value' => '0.00', #default - }, - 'age' => { 'label' => 'Age', - 'type' => 'freq', - }, - ); -} - -sub condition { - my($self, $object, %opt) = @_; - - my $cust_main = $self->cust_main($object); - - my $over = $self->option('balance'); - $over = 0 unless length($over); - - #false laziness w/cust_bill_age - my $time = $opt{'time'}; - my $age = $self->option('age'); - $age = '0m' unless length($age); - - my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($time) )[0,1,2,3,4,5]; - if ( $age =~ /^(\d+)m$/i ) { - $mon -= $1; - until ( $mon >= 0 ) { $mon += 12; $year--; } - } elsif ( $age =~ /^(\d+)y$/i ) { - $year -= $1; - } elsif ( $age =~ /^(\d+)w$/i ) { - $mday -= $1 * 7; - } elsif ( $age =~ /^(\d+)d$/i ) { - $mday -= $1; - } elsif ( $age =~ /^(\d+)h$/i ) { - $hour -= $hour; - } else { - die "unparsable age: $age"; - } - my $age_date = timelocal_nocheck($sec,$min,$hour,$mday,$mon,$year); - - $cust_main->balance_date($age_date) > $over; -} - -sub condition_sql { - my( $class, $table, %opt ) = @_; - - my $over = $class->condition_sql_option('balance'); - my $age = $class->condition_sql_option_age_from('age', $opt{'time'}); - - my $balance_sql = FS::cust_main->balance_date_sql( $age ); - - "$balance_sql > $over"; -} - -sub order_sql { - shift->condition_sql_option_age('age'); -} - -use FS::UID qw( driver_name ); - -sub order_sql_weight { - 10; -} - -1; diff --git a/FS/FS/part_event/Condition/balance_under.pm b/FS/FS/part_event/Condition/balance_under.pm deleted file mode 100644 index 5e1903468..000000000 --- a/FS/FS/part_event/Condition/balance_under.pm +++ /dev/null @@ -1,42 +0,0 @@ -package FS::part_event::Condition::balance_under; - -use strict; -use FS::cust_main; - -use base qw( FS::part_event::Condition ); - -sub description { 'Customer balance (under)'; } - -sub option_fields { - ( - 'balance' => { 'label' => 'Balance under (or equal to)', - 'type' => 'money', - 'value' => '0.00', #default - }, - ); -} - -sub condition { - my($self, $object) = @_; - - my $cust_main = $self->cust_main($object); - - my $under = $self->option('balance'); - $under = 0 unless length($under); - - $cust_main->balance <= $under; -} - -sub condition_sql { - my( $class, $table ) = @_; - - my $under = $class->condition_sql_option('balance'); - - my $balance_sql = FS::cust_main->balance_sql; - - "$balance_sql <= $under"; - -} - -1; - diff --git a/FS/FS/part_event/Condition/cust_bill_age.pm b/FS/FS/part_event/Condition/cust_bill_age.pm deleted file mode 100644 index 5c1e46869..000000000 --- a/FS/FS/part_event/Condition/cust_bill_age.pm +++ /dev/null @@ -1,75 +0,0 @@ -package FS::part_event::Condition::cust_bill_age; - -require 5.006; -use strict; -use Time::Local qw(timelocal_nocheck); - -use base qw( FS::part_event::Condition ); - -sub description { - 'Invoice age'; -} - -sub eventtable_hashref { - { 'cust_main' => 0, - 'cust_bill' => 1, - 'cust_pkg' => 0, - }; -} - -#something like this -sub option_fields { - ( - #'days' => { label=>'Days', size=>3, }, - 'age' => { label=>'Age', type=>'freq', }, - ); -} - -sub condition { - my( $self, $cust_bill, %opt ) = @_; - - #false laziness w/balance_age - my $time = $opt{'time'}; - my $age = $self->option('age'); - $age = '0m' unless length($age); - - my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($time) )[0,1,2,3,4,5]; - if ( $age =~ /^(\d+)m$/i ) { - $mon -= $1; - until ( $mon >= 0 ) { $mon += 12; $year--; } - } elsif ( $age =~ /^(\d+)y$/i ) { - $year -= $1; - } elsif ( $age =~ /^(\d+)w$/i ) { - $mday -= $1 * 7; - } elsif ( $age =~ /^(\d+)d$/i ) { - $mday -= $1; - } elsif ( $age =~ /^(\d+)h$/i ) { - $hour -= $hour; - } else { - die "unparsable age: $age"; - } - my $age_date = timelocal_nocheck($sec,$min,$hour,$mday,$mon,$year); - - $cust_bill->_date <= $age_date; - -} - -# and seconds <= $time - cust_bill._date - -sub condition_sql { - my( $class, $table, %opt ) = @_; - - my $age = $class->condition_sql_option_age_from('age', $opt{'time'} ); - - "cust_bill._date <= $age"; -} - -sub order_sql { - shift->condition_sql_option_age('age'); -} - -sub order_sql_weight { - 0; -} - -1; diff --git a/FS/FS/part_event/Condition/cust_bill_has_service.pm b/FS/FS/part_event/Condition/cust_bill_has_service.pm deleted file mode 100644 index be7ea2b02..000000000 --- a/FS/FS/part_event/Condition/cust_bill_has_service.pm +++ /dev/null @@ -1,54 +0,0 @@ -package FS::part_event::Condition::cust_bill_has_service; - -use strict; -use FS::cust_bill; - -use base qw( FS::part_event::Condition ); - -sub description { - 'Invoice is billing for a certain service type'; -} - -sub eventtable_hashref { - { 'cust_main' => 0, - 'cust_bill' => 1, - 'cust_pkg' => 0, - }; -} - -# could not find component for path '/elements/tr-select-part_svc.html' -# sub disabled { 1; } - -sub option_fields { - ( - 'has_service' => { 'label' => 'Has service', - 'type' => 'select-part_svc', - }, - ); -} - -sub condition { - #my($self, $cust_bill, %opt) = @_; - my($self, $cust_bill) = @_; - - my $servicenum = $self->option('has_service'); - grep { $servicenum == $_->svcnum } - map { $_->cust_pkg->cust_svc } - $cust_bill->cust_bill_pkg ; -} - -sub condition_sql { - my( $class, $table ) = @_; - - my $servicenum = $class->condition_sql_option('has_service'); - my $sql = qq| 0 < ( SELECT COUNT(cs.svcpart) - FROM cust_bill_pkg cbp, cust_svc cs - WHERE cbp.invnum = cust_bill.invnum - AND cs.pkgnum = cbp.pkgnum - AND cs.svcpart = $servicenum - ) - |; - return $sql; -} - -1; diff --git a/FS/FS/part_event/Condition/cust_bill_owed.pm b/FS/FS/part_event/Condition/cust_bill_owed.pm deleted file mode 100644 index 5e582ef69..000000000 --- a/FS/FS/part_event/Condition/cust_bill_owed.pm +++ /dev/null @@ -1,54 +0,0 @@ -package FS::part_event::Condition::cust_bill_owed; - -use strict; -use FS::cust_bill; - -use base qw( FS::part_event::Condition ); - -sub description { - 'Amount owed on specific invoice'; -} - -sub eventtable_hashref { - { 'cust_main' => 0, - 'cust_bill' => 1, - 'cust_pkg' => 0, - }; -} - -sub implicit_flag { 30; } - -sub remove_warning { - 'Are you sure you want to remove this condition? Doing so will allow this event to run even for invoices which have no outstanding balance. Perhaps you want to reset "Amount owed over" to 0 instead of removing the condition entirely?'; #better error msg? -} - -sub option_fields { - ( - 'owed' => { 'label' => 'Amount owed over', - 'type' => 'money', - 'value' => '0.00', #default - }, - ); -} - -sub condition { - #my($self, $cust_bill, %opt) = @_; - my($self, $cust_bill) = @_; - - my $over = $self->option('owed'); - $over = 0 unless length($over); - - $cust_bill->owed > $over; -} - -sub condition_sql { - my( $class, $table ) = @_; - - my $over = $class->condition_sql_option('owed'); - - my $owed_sql = FS::cust_bill->owed_sql; - - "$owed_sql > $over"; -} - -1; diff --git a/FS/FS/part_event/Condition/cust_bill_owed_under.pm b/FS/FS/part_event/Condition/cust_bill_owed_under.pm deleted file mode 100644 index 460e6a4be..000000000 --- a/FS/FS/part_event/Condition/cust_bill_owed_under.pm +++ /dev/null @@ -1,49 +0,0 @@ -package FS::part_event::Condition::cust_bill_owed_under; - -use strict; -use FS::cust_bill; - -use base qw( FS::part_event::Condition ); - -sub description { - 'Amount owed on specific invoice (under)'; -} - -sub eventtable_hashref { - { 'cust_main' => 0, - 'cust_bill' => 1, - 'cust_pkg' => 0, - }; -} - -sub option_fields { - ( - 'owed' => { 'label' => 'Amount owed under (or equal to)', - 'type' => 'money', - 'value' => '0.00', #default - }, - ); -} - -sub condition { - #my($self, $cust_bill, %opt) = @_; - my($self, $cust_bill) = @_; - - my $under = $self->option('owed'); - $under = 0 unless length($under); - - $cust_bill->owed <= $under; - -} - -sub condition_sql { - my( $class, $table ) = @_; - - my $under = $class->condition_sql_option('owed'); - - my $owed_sql = FS::cust_bill->owed_sql; - - "$owed_sql <= $under"; -} - -1; diff --git a/FS/FS/part_event/Condition/cust_pay_batch_declined.pm b/FS/FS/part_event/Condition/cust_pay_batch_declined.pm deleted file mode 100644 index b3a8d705f..000000000 --- a/FS/FS/part_event/Condition/cust_pay_batch_declined.pm +++ /dev/null @@ -1,51 +0,0 @@ -package FS::part_event::Condition::cust_pay_batch_declined; - -use strict; - -use base qw( FS::part_event::Condition ); - -sub description { - 'Batch payment declined'; -} - -sub eventtable_hashref { - { 'cust_main' => 0, - 'cust_bill' => 0, - 'cust_pkg' => 0, - 'cust_pay_batch' => 1, - }; -} - -#sub option_fields { -# ( -# 'field' => 'description', -# -# 'another_field' => { 'label'=>'Amount', 'type'=>'money', }, -# -# 'third_field' => { 'label' => 'Types', -# 'type' => 'checkbox-multiple', -# 'options' => [ 'h', 's' ], -# 'option_labels' => { 'h' => 'Happy', -# 's' => 'Sad', -# }, -# ); -#} - -sub condition { - my($self, $cust_pay_batch, %opt) = @_; - - #my $cust_main = $self->cust_main($object); - #my $value_of_field = $self->option('field'); - #my $time = $opt{'time'}; #use this instead of time or $^T - - $cust_pay_batch->status =~ /Declined/i; - -} - -#sub condition_sql { -# my( $class, $table ) = @_; -# #... -# 'true'; -#} - -1; diff --git a/FS/FS/part_event/Condition/cust_status.pm b/FS/FS/part_event/Condition/cust_status.pm deleted file mode 100644 index fbdff25a5..000000000 --- a/FS/FS/part_event/Condition/cust_status.pm +++ /dev/null @@ -1,32 +0,0 @@ -package FS::part_event::Condition::cust_status; - -use strict; - -use base qw( FS::part_event::Condition ); -use FS::Record qw( qsearch ); - -sub description { - 'Customer Status'; -} - -#something like this -sub option_fields { - ( - 'status' => { 'label' => 'Customer Status', - 'type' => 'select-cust_main-status', - 'multiple' => 1, - }, - ); -} - -sub condition { - my( $self, $object) = @_; - - my $cust_main = $self->cust_main($object); - - #XXX test - my $hashref = $self->option('status') || {}; - $hashref->{ $cust_main->status }; -} - -1; diff --git a/FS/FS/part_event/Condition/every.pm b/FS/FS/part_event/Condition/every.pm deleted file mode 100644 index 3408b0aa9..000000000 --- a/FS/FS/part_event/Condition/every.pm +++ /dev/null @@ -1,67 +0,0 @@ -package FS::part_event::Condition::every; - -use strict; -use FS::UID qw( dbh ); -use FS::Record qw( qsearch ); -use FS::cust_event; - -use base qw( FS::part_event::Condition ); - -sub description { "Don't retry failures more often than specified interval"; } - -sub option_fields { - ( - 'retry_delay' => { label=>'Retry after', type=>'freq', value=>'1d', }, - 'max_tries' => { label=>'Maximum # of attempts', type=>'text', size=>3, }, - ); -} - -my %after = ( - 'h' => 3600, - 'd' => 86400, - 'w' => 604800, - 'm' => 2592000, #well, 30 days... presumably people would mostly use d or w - '' => 2592000, - 'y' => 31536000, #well, 365 days... -); - -my $sql = - "SELECT COUNT(*) FROM cust_event WHERE eventpart = ? AND tablenum = ?"; - -sub condition { - my($self, $object, %opt) = @_; - - my $obj_pkey = $object->primary_key; - my $tablenum = $object->$obj_pkey(); - - if ( $self->option('max_tries') =~ /^\s*(\d+)\s*$/ ) { - my $max_tries = $1; - my $sth = dbh->prepare($sql) - or die dbh->errstr. " preparing: $sql"; - $sth->execute($self->eventpart, $tablenum) - or die $sth->errstr. " executing: $sql"; - my $tries = $sth->fetchrow_arrayref->[0]; - return 0 if $tries >= $max_tries; - } - - my $time = $opt{'time'}; - my $retry_delay = $self->option('retry_delay'); - $retry_delay =~ /^(\d+)([hdwmy]?)$/ - or die "unparsable retry_delay: $retry_delay"; - my $date_after = $time - $1 * $after{$2}; - - my $sth = dbh->prepare("$sql AND date > ?") # AND status = 'failed' " - or die dbh->errstr. " preparing: $sql"; - $sth->execute($self->eventpart, $tablenum, $date_after) - or die $sth->errstr. " executing: $sql"; - ! $sth->fetchrow_arrayref->[0]; - -} - -#sub condition_sql { -# my( $self, $table ) = @_; -# -# 'true'; -#} - -1; diff --git a/FS/FS/part_event/Condition/once.pm b/FS/FS/part_event/Condition/once.pm deleted file mode 100644 index 5a9161f06..000000000 --- a/FS/FS/part_event/Condition/once.pm +++ /dev/null @@ -1,55 +0,0 @@ -package FS::part_event::Condition::once; - -use strict; -use FS::Record qw( qsearch ); -use FS::part_event; -use FS::cust_event; - -use base qw( FS::part_event::Condition ); - -sub description { "Don't run this event again after it has completed sucessfully"; } - -sub implicit_flag { 10; } - -sub remove_warning { - 'Are you sure you want to remove this condition? Doing so will allow this event to run every time the other conditions are satisfied, even if it has already run sucessfully.'; #better error msg? -} - -sub condition { - my($self, $object, %opt) = @_; - - my $obj_pkey = $object->primary_key; - my $tablenum = $object->$obj_pkey(); - - my @existing = qsearch( { - 'table' => 'cust_event', - 'hashref' => { - 'eventpart' => $self->eventpart, - 'tablenum' => $tablenum, - 'status' => { op=>'!=', value=>'failed' }, - }, - 'extra_sql' => ( $opt{'cust_event'}->eventnum =~ /^(\d+)$/ - ? " AND eventnum != $1 " - : '' - ), - } ); - - ! scalar(@existing); - -} - -sub condition_sql { - my( $self, $table ) = @_; - - my %tablenum = %{ FS::part_event->eventtable_pkey_sql }; - - "0 = ( SELECT COUNT(*) FROM cust_event - WHERE cust_event.eventpart = part_event.eventpart - AND cust_event.tablenum = $tablenum{$table} - AND status != 'failed' - ) - "; - -} - -1; diff --git a/FS/FS/part_event/Condition/payby.pm b/FS/FS/part_event/Condition/payby.pm deleted file mode 100644 index d93156828..000000000 --- a/FS/FS/part_event/Condition/payby.pm +++ /dev/null @@ -1,50 +0,0 @@ -package FS::part_event::Condition::payby; - -use strict; -use Tie::IxHash; -use FS::payby; - -use base qw( FS::part_event::Condition ); - -sub description { - #'customer payment types: '; - 'Customer payment type'; -} - -#something like this -tie my %payby, 'Tie::IxHash', FS::payby->cust_payby2longname; -sub option_fields { - ( - 'payby' => { - label => 'Customer payment type', - #type => 'select-multiple', - type => 'checkbox-multiple', - options => [ keys %payby ], - option_labels => \%payby, - }, - ); -} - -sub condition { - my( $self, $object ) = @_; - - my $cust_main = $self->cust_main($object); - - #uuh.. all right? test this. - my $hashref = $self->option('payby') || {}; - $hashref->{ $cust_main->payby }; - -} - -#sub condition_sql { -# my( $self, $table ) = @_; -# -# #uuh... yeah... something like this. test it for sure. -# -# my @payby = keys %{ $self->option('payby') }; -# -# ' ( '. join(' OR ', map { "cust_main.payby = '$_'" } @payby ). ' ) '; -# -#} - -1; diff --git a/FS/FS/part_event/Condition/pkg_class.pm b/FS/FS/part_event/Condition/pkg_class.pm deleted file mode 100644 index 8c9031c6b..000000000 --- a/FS/FS/part_event/Condition/pkg_class.pm +++ /dev/null @@ -1,38 +0,0 @@ -package FS::part_event::Condition::pkg_class; - -use strict; - -use base qw( FS::part_event::Condition ); -use FS::Record qw( qsearch ); -use FS::pkg_class; - -sub description { - 'Package Class'; -} - -sub eventtable_hashref { - { 'cust_main' => 0, - 'cust_bill' => 0, - 'cust_pkg' => 1, - }; -} - -#something like this -sub option_fields { - ( - 'pkgclass' => { 'label' => 'Package Class', - 'type' => 'select-pkg_class', - 'multiple' => 1, - }, - ); -} - -sub condition { - my( $self, $cust_pkg ) = @_; - - #XXX test - my $hashref = $self->option('pkgclass') || {}; - $hashref->{ $cust_pkg->part_pkg->classnum }; -} - -1; diff --git a/FS/FS/part_event/Condition/pkg_status.pm b/FS/FS/part_event/Condition/pkg_status.pm deleted file mode 100644 index 6c1c9cca5..000000000 --- a/FS/FS/part_event/Condition/pkg_status.pm +++ /dev/null @@ -1,37 +0,0 @@ -package FS::part_event::Condition::pkg_status; - -use strict; - -use base qw( FS::part_event::Condition ); -use FS::Record qw( qsearch ); - -sub description { - 'Package Status'; -} - -sub eventtable_hashref { - { 'cust_main' => 0, - 'cust_bill' => 0, - 'cust_pkg' => 1, - }; -} - -#something like this -sub option_fields { - ( - 'status' => { 'label' => 'Package Status', - 'type' => 'select-cust_pkg-status', - 'multiple' => 1, - }, - ); -} - -sub condition { - my( $self, $cust_pkg ) = @_; - - #XXX test - my $hashref = $self->option('status') || {}; - $hashref->{ $cust_pkg->status }; -} - -1; diff --git a/FS/FS/part_event_condition.pm b/FS/FS/part_event_condition.pm deleted file mode 100644 index d13e84927..000000000 --- a/FS/FS/part_event_condition.pm +++ /dev/null @@ -1,352 +0,0 @@ -package FS::part_event_condition; - -use strict; -use vars qw( @ISA $DEBUG @SKIP_CONDITION_SQL ); -use FS::UID qw(dbh); -use FS::Record qw( qsearch qsearchs ); -use FS::option_Common; -use FS::part_event; #for order_conditions_sql... - -@ISA = qw( FS::option_Common ); # FS::Record ); -$DEBUG = 0; - -@SKIP_CONDITION_SQL = (); - -=head1 NAME - -FS::part_event_condition - Object methods for part_event_condition records - -=head1 SYNOPSIS - - use FS::part_event_condition; - - $record = new FS::part_event_condition \%hash; - $record = new FS::part_event_condition { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_event_condition object represents an event condition. -FS::part_event_condition inherits from FS::Record. The following fields are -currently supported: - -=over 4 - -=item eventconditionnum - primary key - -=item eventpart - Event definition (see L) - -=item conditionname - Condition name - defines which FS::part_event::Condition::I evaluates this condition - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new event. To add the example to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'part_event_condition'; } - -=item insert [ HASHREF | OPTION => VALUE ... ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -If a list or hash reference of options is supplied, part_event_condition_option -records are created (see L). - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD [ HASHREF | OPTION => VALUE ... ] - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -If a list or hash reference of options is supplied, part_event_condition_option -records are created or modified (see L). - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid example. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('eventconditionnum') - || $self->ut_foreign_key('eventpart', 'part_event', 'eventpart') - || $self->ut_alpha('conditionname') - ; - return $error if $error; - - #XXX check conditionname to make sure a module exists? - # well it'll die in _rebless... - - $self->SUPER::check; -} - - -=item _rebless - -Reblesses the object into the FS::part_event::Condition::CONDITIONNAME class, -where CONDITIONNAME is the object's I field. - -=cut - -sub _rebless { - my $self = shift; - my $conditionname = $self->conditionname; - #my $class = ref($self). "::$conditionname"; - my $class = "FS::part_event::Condition::$conditionname"; - eval "use $class"; - die $@ if $@; - bless($self, $class); #unless $@; - $self; -} - -=back - -=head1 CLASS METHODS - -=over 4 - -=item conditions [ EVENTTABLE ] - -Return information about the available conditions. If an eventtable is -specified, only return information about conditions available for that -eventtable. - -Information is returned as key-value pairs. Keys are condition names. Values -are hashrefs with the following keys: - -=over 4 - -=item description - -=item option_fields - -# =item default_weight - -# =item deprecated - -=back - -See L for more information. - -=cut - -#false laziness w/part_event.pm -#some false laziness w/part_export & part_pkg -my %conditions; -foreach my $INC ( @INC ) { - foreach my $file ( glob("$INC/FS/part_event/Condition/*.pm") ) { - warn "attempting to load Condition from $file\n" if $DEBUG; - $file =~ /\/(\w+)\.pm$/ or do { - warn "unrecognized file in $INC/FS/part_event/Condition/: $file\n"; - next; - }; - my $mod = $1; - my $fullmod = "FS::part_event::Condition::$mod"; - eval "use $fullmod;"; - if ( $@ ) { - die "error using $fullmod (skipping): $@\n" if $@; - #warn "error using $fullmod (skipping): $@\n" if $@; - #next; - } - if ( $fullmod->disabled ) { - warn "$fullmod is disabled; skipping\n"; - next; - } - #my $full_condition_sql = $fullmod. '::condition_sql'; - my $condition_sql_coderef = sub { $fullmod->condition_sql(@_) }; - my $order_sql_coderef = $fullmod->can('order_sql') - ? sub { $fullmod->order_sql(@_) } - : ''; - $conditions{$mod} = { - ( map { $_ => $fullmod->$_() } - qw( description eventtable_hashref - implicit_flag remove_warning - order_sql_weight - ) - # deprecated - #option_fields_hashref - ), - 'option_fields' => [ $fullmod->option_fields() ], - 'condition_sql' => $condition_sql_coderef, - 'order_sql' => $order_sql_coderef, - }; - } -} - -sub conditions { - my( $class, $eventtable ) = @_; - ( - map { $_ => $conditions{$_} } -# sort { $conditions{$a}->{'default_weight'}<=>$conditions{$b}->{'default_weight'} } -# sort by ? - $class->all_conditionnames( $eventtable ) - ); - -} - -=item all_conditionnames [ EVENTTABLE ] - -Returns a list of just the condition names - -=cut - -sub all_conditionnames { - my ( $class, $eventtable ) = @_; - - grep { !$eventtable || $conditions{$_}->{'eventtable_hashref'}{$eventtable} } - keys %conditions -} - -=item join_conditions_sql [ EVENTTABLE ] - -Returns an SQL fragment selecting joining all condition options for an event as -tables titled "cond_I". Typically used in conjunction with -B. - -=cut - -sub join_conditions_sql { - my ( $class, $eventtable ) = @_; - my %conditions = $class->conditions( $eventtable ); - - join(' ', - map { - "LEFT JOIN part_event_condition AS cond_$_". - " ON ( part_event.eventpart = cond_$_.eventpart". - " AND cond_$_.conditionname = ". dbh->quote($_). - " )"; - } - keys %conditions - ); - -} - -=item where_conditions_sql [ EVENTTABLE [ , OPTION => VALUE, ... ] ] - -Returns an SQL fragment to select events which have unsatisfied conditions. -Must be used in conjunction with B. - -The only current option is "time", the current time (or "pretend" current time -as passed to freeside-daily), as a UNIX timestamp. - -=cut - -sub where_conditions_sql { - my ( $class, $eventtable, %options ) = @_; - - my $time = $options{'time'}; - - my %conditions = $class->conditions( $eventtable ); - - my $where = join(' AND ', - map { - my $conditionname = $_; - my $coderef = $conditions{$conditionname}->{condition_sql}; - my $sql = &$coderef( $eventtable, 'time'=>$time ); - die "$coderef is not a CODEREF" unless ref($coderef) eq 'CODE'; - "( cond_$conditionname.conditionname IS NULL OR $sql )"; - } - grep { my $cond = $_; - ! grep { $_ eq $cond } @SKIP_CONDITION_SQL - } - keys %conditions - ); - - $where; -} - -=item order_conditions_sql [ EVENTTABLE ] - -Returns an SQL fragment to order selected events. Must be used in conjunction -with B. - -=cut - -sub order_conditions_sql { - my( $class, $eventtable ) = @_; - - my %conditions = $class->conditions( $eventtable ); - - my $eventtables = join(' ', FS::part_event->eventtables_runorder); - - my $order_by = join(', ', - "position( part_event.eventtable in ' $eventtables ')", - ( map { - my $conditionname = $_; - my $coderef = $conditions{$conditionname}->{order_sql}; - my $sql = &$coderef( $eventtable ); - "CASE WHEN cond_$conditionname.conditionname IS NULL - THEN -1 - ELSE $sql - END - "; - } - sort { $conditions{$a}->{order_sql_weight} - <=> $conditions{$b}->{order_sql_weight} - } - grep { $conditions{$_}->{order_sql} } - keys %conditions - ), - 'part_event.weight' - ); - - "ORDER BY $order_by"; - -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from -the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_event_condition_option.pm b/FS/FS/part_event_condition_option.pm deleted file mode 100644 index 3256dc0bd..000000000 --- a/FS/FS/part_event_condition_option.pm +++ /dev/null @@ -1,151 +0,0 @@ -package FS::part_event_condition_option; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); -use FS::option_Common; -use FS::part_event_condition; - -@ISA = qw( FS::option_Common ); # FS::Record); - -=head1 NAME - -FS::part_event_condition_option - Object methods for part_event_condition_option records - -=head1 SYNOPSIS - - use FS::part_event_condition_option; - - $record = new FS::part_event_condition_option \%hash; - $record = new FS::part_event_condition_option { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_event_condition_option object represents an event condition option. -FS::part_event_condition_option inherits from FS::Record. The following fields -are currently supported: - -=over 4 - -=item optionnum - primary key - -=item eventconditionnum - Event condition (see L) - -=item optionname - Option name - -=item optionvalue - Option value - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new record. To add the record to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'part_event_condition_option'; } - -=item insert [ HASHREF | OPTION => VALUE ... ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -If a list or hash reference of options is supplied, -part_event_condition_option_option records are created (see -L). - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD [ HASHREF | OPTION => VALUE ... ] - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -If a list or hash reference of options is supplied, -part_event_condition_option_option records are created or modified (see -L). - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid record. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('optionnum') - || $self->ut_foreign_key('eventconditionnum', - 'part_event_condition', 'eventconditionnum') - || $self->ut_text('optionname') - || $self->ut_textn('optionvalue') - ; - return $error if $error; - - $self->SUPER::check; -} - -#this makes the nested options magically show up as perl refs -#move it to a mixin class if we need nested options again -sub optionvalue { - my $self = shift; - if ( scalar(@_) ) { #setting, no magic (here, insert takes care of it) - $self->set('optionvalue', @_); - } else { #getting, magic - my $optionvalue = $self->get('optionvalue'); - if ( $optionvalue eq 'HASH' ) { - return { $self->options }; - } else { - $optionvalue; - } - } -} - -=back - -=head1 SEE ALSO - -L, L, -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_event_condition_option_option.pm b/FS/FS/part_event_condition_option_option.pm deleted file mode 100644 index 7396c2229..000000000 --- a/FS/FS/part_event_condition_option_option.pm +++ /dev/null @@ -1,129 +0,0 @@ -package FS::part_event_condition_option_option; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); -use FS::part_event_condition_option; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::part_event_condition_option_option - Object methods for part_event_condition_option_option records - -=head1 SYNOPSIS - - use FS::part_event_condition_option_option; - - $record = new FS::part_event_condition_option_option \%hash; - $record = new FS::part_event_condition_option_option { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_event_condition_option_option object represents a nested event -condition option. FS::part_event_condition_option_option inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item optionoptionnum - primary key - -=item optionnum - Parent option (see L) - -=item optionname - Option name - -=item optionvalue - Option value - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new record. To add the record to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'part_event_condition_option_option'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid record. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('optionoptionnum') - || $self->ut_foreign_key('optionnum', - 'part_event_condition_option', 'optionnum' ) - || $self->ut_text('optionname') - || $self->ut_textn('optionvalue') - ; - return $error if $error; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/part_event_option.pm b/FS/FS/part_event_option.pm deleted file mode 100644 index 43e1da933..000000000 --- a/FS/FS/part_event_option.pm +++ /dev/null @@ -1,213 +0,0 @@ -package FS::part_event_option; - -use strict; -use vars qw( @ISA ); -use FS::UID qw( dbh ); -use FS::Record qw( qsearch qsearchs ); -use FS::part_event; -use FS::reason; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::part_event_option - Object methods for part_event_option records - -=head1 SYNOPSIS - - use FS::part_event_option; - - $record = new FS::part_event_option \%hash; - $record = new FS::part_event_option { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_event_option object represents an event definition option (action -option). FS::part_event_option inherits from FS::Record. The following fields -are currently supported: - -=over 4 - -=item optionnum - primary key - -=item eventpart - Event definition (see L) - -=item optionname - Option name - -=item optionvalue - Option value - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new record. To add the record to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'part_event_option'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -sub insert { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - if ( $self->optionname eq 'reasonnum' && $self->optionvalue eq 'HASH' ) { - - my $error = $self->insert_reason(@_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - } - - my $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace [ OLD_RECORD ] - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -sub replace { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $old = ( blessed($_[0]) && $_[0]->isa('FS::Record') ) - ? shift - : $self->replace_old; - - if ( $self->optionname eq 'reasonnum' ) { - warn "reasonnum: ". $self->optionvalue; - } - if ( $self->optionname eq 'reasonnum' && $self->optionvalue eq 'HASH' ) { - - my $error = $self->insert_reason(@_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - } - - my $error = $self->SUPER::replace($old); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item check - -Checks all fields to make sure this is a valid record. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('optionnum') - || $self->ut_foreign_key('eventpart', 'part_event', 'eventpart' ) - || $self->ut_text('optionname') - || $self->ut_textn('optionvalue') - ; - return $error if $error; - - $self->SUPER::check; -} - -sub insert_reason { - my( $self, $reason ) = @_; - - my $reason_obj = new FS::reason({ - 'reason_type' => $reason->{'typenum'}, - 'reason' => $reason->{'reason'}, - }); - - $reason_obj->insert or $self->optionvalue( $reason_obj->reasonnum ) and ''; - -} - -=back - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_export.pm b/FS/FS/part_export.pm deleted file mode 100644 index 983e0b012..000000000 --- a/FS/FS/part_export.pm +++ /dev/null @@ -1,469 +0,0 @@ -package FS::part_export; - -use strict; -use vars qw( @ISA @EXPORT_OK $DEBUG %exports ); -use Exporter; -use Tie::IxHash; -use FS::Record qw( qsearch qsearchs dbh ); -use FS::option_Common; -use FS::part_svc; -use FS::part_export_option; -use FS::export_svc; - -#for export modules, though they should probably just use it themselves -use FS::queue; - -@ISA = qw( FS::option_Common ); -@EXPORT_OK = qw(export_info); - -$DEBUG = 0; - -=head1 NAME - -FS::part_export - Object methods for part_export records - -=head1 SYNOPSIS - - use FS::part_export; - - $record = new FS::part_export \%hash; - $record = new FS::part_export { 'column' => 'value' }; - - #($new_record, $options) = $template_recored->clone( $svcpart ); - - $error = $record->insert( { 'option' => 'value' } ); - $error = $record->insert( \%options ); - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_export object represents an export of Freeside data to an external -provisioning system. FS::part_export inherits from FS::Record. The following -fields are currently supported: - -=over 4 - -=item exportnum - primary key - -=item machine - Machine name - -=item exporttype - Export type - -=item nodomain - blank or "Y" : usernames are exported to this service with no domain - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new export. To add the export to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'part_export'; } - -=cut - -#=item clone SVCPART -# -#An alternate constructor. Creates a new export by duplicating an existing -#export. The given svcpart is assigned to the new export. -# -#Returns a list consisting of the new export object and a hashref of options. -# -#=cut -# -#sub clone { -# my $self = shift; -# my $class = ref($self); -# my %hash = $self->hash; -# $hash{'exportnum'} = ''; -# $hash{'svcpart'} = shift; -# ( $class->new( \%hash ), -# { map { $_->optionname => $_->optionvalue } -# qsearch('part_export_option', { 'exportnum' => $self->exportnum } ) -# } -# ); -#} - -=item insert HASHREF - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -If a hash reference of options is supplied, part_export_option records are -created (see L). - -=item delete - -Delete this record from the database. - -=cut - -#foreign keys would make this much less tedious... grr dumb mysql -sub delete { - my $self = shift; - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - foreach my $export_svc ( $self->export_svc ) { - my $error = $export_svc->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item check - -Checks all fields to make sure this is a valid export. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - my $error = - $self->ut_numbern('exportnum') - || $self->ut_domain('machine') - || $self->ut_alpha('exporttype') - ; - return $error if $error; - - $self->nodomain =~ /^(Y?)$/ or return "Illegal nodomain: ". $self->nodomain; - $self->nodomain($1); - - $self->deprecated(1); #BLAH - - #check exporttype? - - $self->SUPER::check; -} - -#=item part_svc -# -#Returns the service definition (see L) for this export. -# -#=cut -# -#sub part_svc { -# my $self = shift; -# qsearchs('part_svc', { svcpart => $self->svcpart } ); -#} - -sub part_svc { - use Carp; - croak "FS::part_export::part_svc deprecated"; - #confess "FS::part_export::part_svc deprecated"; -} - -=item svc_x - -Returns a list of associated FS::svc_* records. - -=cut - -sub svc_x { - my $self = shift; - map { $_->svc_x } $self->cust_svc; -} - -=item cust_svc - -Returns a list of associated FS::cust_svc records. - -=cut - -sub cust_svc { - my $self = shift; - map { qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) } - grep { qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) } - $self->export_svc; -} - -=item export_svc - -Returns a list of associated FS::export_svc records. - -=cut - -sub export_svc { - my $self = shift; - qsearch('export_svc', { 'exportnum' => $self->exportnum } ); -} - -=item part_export_option - -Returns all options as FS::part_export_option objects (see -L). - -=cut - -sub part_export_option { - my $self = shift; - $self->option_objects; -} - -=item options - -Returns a list of option names and values suitable for assigning to a hash. - -=item option OPTIONNAME - -Returns the option value for the given name, or the empty string. - -=item _rebless - -Reblesses the object into the FS::part_export::EXPORTTYPE class, where -EXPORTTYPE is the object's I field. There should be better docs -on how to create new exports, but until then, see L. - -=cut - -sub _rebless { - my $self = shift; - my $exporttype = $self->exporttype; - my $class = ref($self). "::$exporttype"; - eval "use $class;"; - #die $@ if $@; - bless($self, $class) unless $@; - $self; -} - -#these should probably all go away, just let the subclasses define em - -=item export_insert SVC_OBJECT - -=cut - -sub export_insert { - my $self = shift; - #$self->rebless; - $self->_export_insert(@_); -} - -#sub AUTOLOAD { -# my $self = shift; -# $self->rebless; -# my $method = $AUTOLOAD; -# #$method =~ s/::(\w+)$/::_$1/; #infinite loop prevention -# $method =~ s/::(\w+)$/_$1/; #infinite loop prevention -# $self->$method(@_); -#} - -=item export_replace NEW OLD - -=cut - -sub export_replace { - my $self = shift; - #$self->rebless; - $self->_export_replace(@_); -} - -=item export_delete - -=cut - -sub export_delete { - my $self = shift; - #$self->rebless; - $self->_export_delete(@_); -} - -=item export_suspend - -=cut - -sub export_suspend { - my $self = shift; - #$self->rebless; - $self->_export_suspend(@_); -} - -=item export_unsuspend - -=cut - -sub export_unsuspend { - my $self = shift; - #$self->rebless; - $self->_export_unsuspend(@_); -} - -#fallbacks providing useful error messages intead of infinite loops -sub _export_insert { - my $self = shift; - return "_export_insert: unknown export type ". $self->exporttype; -} - -sub _export_replace { - my $self = shift; - return "_export_replace: unknown export type ". $self->exporttype; -} - -sub _export_delete { - my $self = shift; - return "_export_delete: unknown export type ". $self->exporttype; -} - -#call svcdb-specific fallbacks - -sub _export_suspend { - my $self = shift; - #warn "warning: _export_suspened unimplemented for". ref($self); - my $svc_x = shift; - my $new = $svc_x->clone_suspended; - $self->_export_replace( $new, $svc_x ); -} - -sub _export_unsuspend { - my $self = shift; - #warn "warning: _export_unsuspend unimplemented for ". ref($self); - my $svc_x = shift; - my $old = $svc_x->clone_kludge_unsuspend; - $self->_export_replace( $svc_x, $old ); -} - -=item export_links SVC_OBJECT ARRAYREF - -Adds a list of web elements to ARRAYREF specific to this export and SVC_OBJECT. -The elements are displayed in the UI to lead the the operator to external -configuration, monitoring, and similar tools. - -=cut - -=back - -=head1 SUBROUTINES - -=over 4 - -=item export_info [ SVCDB ] - -Returns a hash reference of the exports for the given I, or if no -I is specified, for all exports. The keys of the hash are -Is and the values are again hash references containing information -on the export: - - 'desc' => 'Description', - 'options' => { - 'option' => { label=>'Option Label' }, - 'option2' => { label=>'Another label' }, - }, - 'nodomain' => 'Y', #or '' - 'notes' => 'Additional notes', - -=cut - -sub export_info { - #warn $_[0]; - return $exports{$_[0]} || {} if @_; - #{ map { %{$exports{$_}} } keys %exports }; - my $r = { map { %{$exports{$_}} } keys %exports }; -} - -#=item exporttype2svcdb EXPORTTYPE -# -#Returns the applicable I for an I. -# -#=cut -# -#sub exporttype2svcdb { -# my $exporttype = $_[0]; -# foreach my $svcdb ( keys %exports ) { -# return $svcdb if grep { $exporttype eq $_ } keys %{$exports{$svcdb}}; -# } -# ''; -#} - -foreach my $INC ( @INC ) { - foreach my $file ( glob("$INC/FS/part_export/*.pm") ) { - warn "attempting to load export info from $file\n" if $DEBUG; - $file =~ /\/(\w+)\.pm$/ or do { - warn "unrecognized file in $INC/FS/part_export/: $file\n"; - next; - }; - my $mod = $1; - my $info = eval "use FS::part_export::$mod; ". - "\\%FS::part_export::$mod\::info;"; - if ( $@ ) { - die "error using FS::part_export::$mod (skipping): $@\n" if $@; - next; - } - unless ( keys %$info ) { - warn "no %info hash found in FS::part_export::$mod, skipping\n" - unless $mod =~ /^(passwdfile|null)$/; #hack but what the heck - next; - } - warn "got export info from FS::part_export::$mod: $info\n" if $DEBUG; - no strict 'refs'; - foreach my $svc ( - ref($info->{'svc'}) ? @{$info->{'svc'}} : $info->{'svc'} - ) { - unless ( $svc ) { - warn "blank svc for FS::part_export::$mod (skipping)\n"; - next; - } - $exports{$svc}->{$mod} = $info; - } - } -} - -=back - -=head1 NEW EXPORT CLASSES - -A module should be added in FS/FS/part_export/ (an example may be found in -eg/export_template.pm) - -=head1 BUGS - -Hmm... cust_export class (not necessarily a database table...) ... ? - -deprecated column... - -=head1 SEE ALSO - -L, L, L, -L, -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_export/acct_plesk.pm b/FS/FS/part_export/acct_plesk.pm deleted file mode 100644 index 1be820a75..000000000 --- a/FS/FS/part_export/acct_plesk.pm +++ /dev/null @@ -1,121 +0,0 @@ -package FS::part_export::acct_plesk; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'URL' => { label=>'URL' }, - 'login' => { label=>'Login' }, - 'password' => { label=>'Password' }, - 'debug' => { label=>'Enable debugging', - type=>'checkbox' }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to Plesk managed mail service', - 'options'=> \%options, - 'notes' => <<'END' -Real-time export to -Plesk managed server. -Requires installation of -Net::Plesk -from CPAN. -END -); - -sub rebless { shift; } - -# experiment: want the status of these right away (don't want account to -# create or whatever and then get error in the queue from dup username or -# something), so no queueing - -sub _export_insert { - my( $self, $svc_acct ) = (shift, shift); - - $self->_plesk_command( 'mail_add', - $svc_acct->domain, - $svc_acct->username, - $svc_acct->_password, - ) || - $self->_export_unsuspend($svc_acct); -} - -sub _plesk_command { - my( $self, $method, $domain, @args ) = @_; - - eval "use Net::Plesk;"; - return $@ if $@; - - local($Net::Plesk::DEBUG) = 1 - if $self->option('debug'); - - my $plesk = new Net::Plesk ( - 'POST' => $self->option('URL'), - ':HTTP_AUTH_LOGIN' => $self->option('login'), - ':HTTP_AUTH_PASSWD' => $self->option('password'), - ); - - my $dresponse = $plesk->domain_get( $domain ); - return $dresponse->errortext unless $dresponse->is_success; - my $domainID = $dresponse->id; - - my $response = $plesk->$method($dresponse->id, @args); - return $response->errortext unless $response->is_success; - ''; - -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - - return "can't change domain with Plesk" - if $old->domain ne $new->domain; - return "can't change username with Plesk" - if $old->username ne $new->username; - return '' unless $old->_password ne $new->_password; - - $self->_plesk_command( 'mail_set', - $new->domain, - $new->username, - $new->_password, - $old->cust_svc->cust_pkg->susp ? 0 : 1, - ); -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - - $self->_plesk_command( 'mail_remove', - $svc_acct->domain, - $svc_acct->username, - ); -} - -sub _export_suspend { - my( $self, $svc_acct ) = (shift, shift); - - $self->_plesk_command( 'mail_set', - $svc_acct->domain, - $svc_acct->username, - $svc_acct->_password, - 0, - ); -} - -sub _export_unsuspend { - my( $self, $svc_acct ) = (shift, shift); - - $self->_plesk_command( 'mail_set', - $svc_acct->domain, - $svc_acct->username, - $svc_acct->_password, - 1, - ); -} - -1; - diff --git a/FS/FS/part_export/acct_sql.pm b/FS/FS/part_export/acct_sql.pm deleted file mode 100644 index 9f1ae7b5c..000000000 --- a/FS/FS/part_export/acct_sql.pm +++ /dev/null @@ -1,310 +0,0 @@ -package FS::part_export::acct_sql; - -use vars qw(@ISA %info); -use Tie::IxHash; -#use Digest::MD5 qw(md5_hex); -use FS::Record; #qw(qsearchs); -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'datasrc' => { label => 'DBI data source' }, - 'username' => { label => 'Database username' }, - 'password' => { label => 'Database password' }, - 'table' => { label => 'Database table' }, - 'schema' => { label => - 'Database schema mapping to Freeside methods.', - type => 'textarea', - }, - 'static' => { label => - 'Database schema mapping to static values.', - type => 'textarea', - }, - 'primary_key' => { label => 'Database primary key' }, - 'crypt' => { label => 'Password encryption', - type=>'select', options=>[qw(crypt md5)], - default=>'crypt', - }, -; - -tie my %vpopmail_map, 'Tie::IxHash', - 'pw_name' => 'username', - 'pw_domain' => 'domain', - 'pw_passwd' => 'crypt_password', - 'pw_uid' => 'uid', - 'pw_gid' => 'gid', - 'pw_gecos' => 'finger', - 'pw_dir' => 'dir', - #'pw_shell' => 'shell', - 'pw_shell' => 'quota', -; -my $vpopmail_map = join('\n', map "$_ $vpopmail_map{$_}", keys %vpopmail_map ); - -tie my %postfix_courierimap_mailbox_map, 'Tie::IxHash', - 'username' => 'email', - 'password' => '_password', - 'crypt' => 'crypt_password', - 'name' => 'finger', - 'maildir' => 'virtual_maildir', - 'domain' => 'domain', - 'svcnum' => 'svcnum', -; -my $postfix_courierimap_mailbox_map = - join('\n', map "$_ $postfix_courierimap_mailbox_map{$_}", - keys %postfix_courierimap_mailbox_map ); - -tie my %postfix_courierimap_alias_map, 'Tie::IxHash', - 'address' => 'email', - 'goto' => 'email', - 'domain' => 'domain', - 'svcnum' => 'svcnum', -; -my $postfix_courierimap_alias_map = - join('\n', map "$_ $postfix_courierimap_alias_map{$_}", - keys %postfix_courierimap_alias_map ); - -tie my %postfix_native_mailbox_map, 'Tie::IxHash', - 'userid' => 'email', - 'uid' => 'uid', - 'gid' => 'gid', - 'password' => 'ldap_password', - 'mail' => 'domain_slash_username', -; -my $postfix_native_mailbox_map = - join('\n', map "$_ $postfix_native_mailbox_map{$_}", - keys %postfix_native_mailbox_map ); - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export of accounts to SQL databases '. - '(vpopmail, Postfix+Courier IMAP, others?)', - 'options' => \%options, - 'nodomain' => '', - 'notes' => <
    In contrast to sqlmail, this is intended to export just svc_acct -records only, rather than a single export for svc_acct, svc_forward and -svc_domain records, to export in "default" database schemas rather than -configure the MTA or POP/IMAP server for a Freeside-specific schema, and -to be configured for different mail server setups. - -

    Use these buttons for some useful presets: -
      -
    • -
    • -
    • -
    • -
    -END -); - -sub _schema_map { shift->_map('schema'); } -sub _static_map { shift->_map('static'); } - -sub _map { - my $self = shift; - map { /^\s*(\S+)\s*(\S+)\s*$/ } split("\n", $self->option(shift) ); -} - -sub rebless { shift; } - -sub _export_insert { - my($self, $svc_acct) = (shift, shift); - - my %schema = $self->_schema_map; - my %static = $self->_static_map; - - my %record = ( - - ( map { $_ => $static{$_} } keys %static ), - - ( map { my $value = $schema{$_}; - my @arg = (); - push @arg, $self->option('crypt') - if $value eq 'crypt_password' && $self->option('crypt'); - $_ => $svc_acct->$value(@arg); - } keys %schema - ), - - ); - - my $err_or_queue = - $self->acct_sql_queue( - $svc_acct->svcnum, - 'insert', - $self->option('table'), - %record - ); - return $err_or_queue unless ref($err_or_queue); - - ''; - -} - -sub _export_replace { - my($self, $new, $old) = (shift, shift, shift); - - my %schema = $self->_schema_map; - my %static = $self->_static_map; - - my @primary_key = (); - if ( $self->option('primary_key') =~ /,/ ) { - foreach my $key ( split(/\s*,\s*/, $self->option('primary_key') ) ) { - my $keymap = $schema{$key}; - push @primary_key, $old->$keymap(); - } - } else { - my $keymap = $schema{$self->option('primary_key')}; - push @primary_key, $old->$keymap(); - } - - my %record = ( - - ( map { $_ => $static{$_} } keys %static ), - - ( map { my $value = $schema{$_}; - my @arg = (); - push @arg, $self->option('crypt') - if $value eq 'crypt_password' && $self->option('crypt'); - $_ => $new->$value(@arg); - } keys %schema - ), - - ); - - my $err_or_queue = $self->acct_sql_queue( - $new->svcnum, - 'replace', - $self->option('table'), - $self->option('primary_key'), @primary_key, - %record, - ); - return $err_or_queue unless ref($err_or_queue); - ''; -} - -sub _export_delete { - my ( $self, $svc_acct ) = (shift, shift); - - my %schema = $self->_schema_map; - - my %primary_key = (); - if ( $self->option('primary_key') =~ /,/ ) { - foreach my $key ( split(/\s*,\s*/, $self->option('primary_key') ) ) { - my $keymap = $schema{$key}; - $primary_key{ $key } = $svc_acct->$keymap(); - } - } else { - my $keymap = $schema{$self->option('primary_key')}; - $primary_key{ $self->option('primary_key') } = $svc_acct->$keymap(), - } - - my $err_or_queue = $self->acct_sql_queue( - $svc_acct->svcnum, - 'delete', - $self->option('table'), - %primary_key, - #$self->option('primary_key') => $svc_acct->$keymap(), - ); - return $err_or_queue unless ref($err_or_queue); - ''; -} - -sub acct_sql_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::acct_sql::acct_sql_$method", - }; - $queue->insert( - $self->option('datasrc'), - $self->option('username'), - $self->option('password'), - @_, - ) or $queue; -} - -sub acct_sql_insert { #subroutine, not method - my $dbh = acct_sql_connect(shift, shift, shift); - my( $table, %record ) = @_; - - my $sth = $dbh->prepare( - "INSERT INTO $table ( ". join(", ", keys %record). - " ) VALUES ( ". join(", ", map '?', keys %record ). " )" - ) or die $dbh->errstr; - - $sth->execute( values(%record) ) - or die "can't insert into $table table: ". $sth->errstr; - - $dbh->disconnect; -} - -sub acct_sql_delete { #subroutine, not method - my $dbh = acct_sql_connect(shift, shift, shift); - my( $table, %record ) = @_; - - my $sth = $dbh->prepare( - "DELETE FROM $table WHERE ". join(' AND ', map "$_ = ? ", keys %record ) - ) or die $dbh->errstr; - - $sth->execute( map $record{$_}, keys %record ) - or die "can't delete from $table table: ". $sth->errstr; - - $dbh->disconnect; -} - -sub acct_sql_replace { #subroutine, not method - my $dbh = acct_sql_connect(shift, shift, shift); - - my( $table, $pkey ) = ( shift, shift ); - - my %primary_key = (); - if ( $pkey =~ /,/ ) { - foreach my $key ( split(/\s*,\s*/, $pkey ) ) { - $primary_key{$key} = shift; - } - } else { - $primary_key{$pkey} = shift; - } - - my %record = @_; - - my $sth = $dbh->prepare( - "UPDATE $table". - ' SET '. join(', ', map "$_ = ?", keys %record ). - ' WHERE '. join(' AND ', map "$_ = ?", keys %primary_key ) - ) or die $dbh->errstr; - - $sth->execute( values(%record), values(%primary_key) ); - - $dbh->disconnect; -} - -sub acct_sql_connect { - #my($datasrc, $username, $password) = @_; - #DBI->connect($datasrc, $username, $password) or die $DBI::errstr; - DBI->connect(@_) or die $DBI::errstr; -} - -1; - diff --git a/FS/FS/part_export/apache.pm b/FS/FS/part_export/apache.pm deleted file mode 100644 index 35b00cc96..000000000 --- a/FS/FS/part_export/apache.pm +++ /dev/null @@ -1,47 +0,0 @@ -package FS::part_export::apache; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export::null; - -@ISA = qw(FS::part_export::null); - -tie my %options, 'Tie::IxHash', - 'user' => { label=>'Remote username', default=>'root' }, - 'httpd_conf' => { label=>'httpd.conf snippet location', - default=>'/etc/apache/httpd-freeside.conf', }, - 'restart' => { label=>'Apache restart command', - default=>'apachectl graceful', - }, - 'template' => { - label => 'Template', - type => 'textarea', - default => <<'END', - #generic -# #preferred, http://httpd.apache.org/docs/dns-caveats.html -DocumentRoot /var/www/$zone -ServerName $zone -ServerAlias *.$zone -#BandWidthModule On -#LargeFileLimit 4096 12288 -#FrontpageEnable on - - -END - }, -; - -%info = ( - 'svc' => 'svc_www', - 'desc' => 'Export an Apache httpd.conf file snippet.', - 'options' => \%options, - 'notes' => <<'END' -Batch export of an httpd.conf snippet from a template. Typically used with -something like Include /etc/apache/httpd-freeside.conf in -httpd.conf. File::Rsync -must be installed. Run bin/apache.export to export the files. -END -); - -1; - diff --git a/FS/FS/part_export/artera_turbo.pm b/FS/FS/part_export/artera_turbo.pm deleted file mode 100644 index c006db9cd..000000000 --- a/FS/FS/part_export/artera_turbo.pm +++ /dev/null @@ -1,181 +0,0 @@ -package FS::part_export::artera_turbo; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::Record qw(qsearch); -use FS::part_export; -use FS::cust_svc; -use FS::svc_external; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'rid' => { 'label' => 'Reseller ID (RID)' }, - 'username' => { 'label' => 'Reseller username', }, - 'password' => { 'label' => 'Reseller password', }, - 'pid' => { 'label' => 'Artera Product ID', }, - 'priceid' => { 'label' => 'Artera Price ID', }, - 'agent_aid' => { 'label' => 'Export agentnum values to Artera AID', - 'type' => 'checkbox', - }, - 'aid' => { 'label' => 'Artera Agent ID to use if not using agentnum values', }, - 'production' => { 'label' => 'Production mode (leave unchecked for staging)', - 'type' => 'checkbox', - }, - 'debug' => { 'label' => 'Enable debug logging', - 'type' => 'checkbox', - }, - 'enable_edit' => { 'label' => 'Enable local editing of Artera serial numbers and key codes (note that the changes will NOT be exported to Artera)', - 'type' => 'checkbox', - }, -; - -%info = ( - 'svc' => 'svc_external', - #'svc' => [qw( svc_acct svc_forward )], - 'desc' => - 'Real-time export to Artera Turbo Reseller API', - 'options' => \%options, - #'nodomain' => 'Y', - 'notes' => <<'END' -Real-time export to Artera Turbo -Reseller API. Requires installation of -Net::Artera -from CPAN. You probably also want to: -
      -
    • In the configuration UI section: set the svc_external-skip_manual and svc_external-display_type configuration values. -
    • In the message catalog: set svc_external-id to Artera Serial Number and set svc_external-title to Artera Key Code. -
    -END -); - -sub rebless { shift; } - -sub _new_Artera { - my $self = shift; - - my $artera = new Net::Artera ( - map { $_ => $self->option($_) } - qw( rid username password production ) - ); -} - - -sub _export_insert { - my($self, $svc_external) = (shift, shift); - - # want the ASN (serial) and AKC (key code) right away - - eval "use Net::Artera;"; - return $@ if $@; - $Net::Artera::DEBUG = 1 if $self->option('debug'); - my $artera = $self->_new_Artera; - - my $cust_pkg = $svc_external->cust_svc->cust_pkg; - my $part_pkg = $cust_pkg->part_pkg; - my @svc_acct = grep { $_->table eq 'svc_acct' } - map { $_->svc_x } - sort { my $svcpart = $part_pkg->svcpart('svc_acct'); - ($b->svcpart==$svcpart) cmp ($a->svcpart==$svcpart); } - qsearch('cust_svc', { 'pkgnum' => $cust_pkg->pkgnum } ); - my $email = scalar(@svc_acct) ? $svc_acct[0]->email : ''; - - my $cust_main = $cust_pkg->cust_main; - - my $result = $artera->newOrder( - 'pid' => $self->option('pid'), - 'priceid' => $self->option('priceid'), - 'email' => $email, - 'cname' => $cust_main->name, - 'ref' => $svc_external->svcnum, - 'aid' => ( $self->option('agent_aid') - ? $cust_main->agentnum - : $self->option('aid') ), - 'add1' => $cust_main->address1, - 'add2' => $cust_main->address2, - 'add3' => $cust_main->city, - 'add4' => $cust_main->state, - 'zip' => $cust_main->zip, - 'cid' => $cust_main->country, - 'phone' => $cust_main->daytime || $cust_main->night, - 'fax' => $cust_main->fax, - ); - - if ( $result->{'id'} == 1 ) { - my $new = new FS::svc_external { $svc_external->hash }; - $new->id(sprintf('%010d', $result->{'ASN'})); - $new->title( substr('0000000000'.uc($result->{'AKC'}), -10) ); - $new->replace($svc_external); - } else { - $result->{'message'} || 'No response from Artera'; - } -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - return '' if $self->option('enable_edit'); - return "can't change serial number with Artera" - if $old->id != $new->id && $old->id; - return "can't change key code with Artera" - if $old->title ne $new->title && $old->title; - ''; -} - -sub _export_delete { - my( $self, $svc_external ) = (shift, shift); - $self->queue_statusChange(17, $svc_external); -} - -sub _export_suspend { - my( $self, $svc_external ) = (shift, shift); - $self->queue_statusChange(16, $svc_external); -} - -sub _export_unsuspend { - my( $self, $svc_external ) = (shift, shift); - $self->queue_statusChange(15, $svc_external); -} - -sub queue_statusChange { - my( $self, $status, $svc_external ) = @_; - - my $queue = new FS::queue { - 'svcnum' => $svc_external->svcnum, - 'job' => 'FS::part_export::artera_turbo::statusChange', - }; - $queue->insert( - ( map { $self->option($_) } - qw( rid username password production ) ), - $status, - $svc_external->id, - $svc_external->title, - $self->option('debug'), - ); -} - -sub statusChange { - my( $rid, $username, $password, $prod, $status, $id, $title, $debug ) = @_; - - eval "use Net::Artera;"; - return $@ if $@; - $Net::Artera::DEBUG = 1 if $debug; - - my $artera = new Net::Artera ( - 'rid' => $rid, - 'username' => $username, - 'password' => $password, - 'production' => $prod, - ); - - my $result = $artera->statusChange( - 'asn' => sprintf('%010d', $id), - 'akc' => substr("0000000000$title", -10), - 'statusid' => $status, - ); - - die $result->{'message'} unless $result->{'id'} == 1; - -} - -1; - diff --git a/FS/FS/part_export/bind.pm b/FS/FS/part_export/bind.pm deleted file mode 100644 index 1ef7b6598..000000000 --- a/FS/FS/part_export/bind.pm +++ /dev/null @@ -1,35 +0,0 @@ -package FS::part_export::bind; - -use vars qw(@ISA %info %options); -use Tie::IxHash; -use FS::part_export::null; - -@ISA = qw(FS::part_export::null); - -tie %options, 'Tie::IxHash', - 'named_conf' => { label => 'named.conf location', - default=> '/etc/bind/named.conf' }, - 'zonepath' => { label => 'path to zone files', - default=> '/etc/bind/', }, - 'bind_release' => { label => 'ISC BIND Release', - type => 'select', - options => [qw(BIND8 BIND9)], - default => 'BIND8' }, - 'bind9_minttl' => { label => 'The minttl required by bind9 and RFC1035.', - default => '1D' }, - 'reload' => { label => 'Optional reload command. If not specified, defaults to "ndc" under BIND8 and "rndc" under BIND9.', }, -; - -%info = ( - 'svc' => 'svc_domain', - 'desc' => 'Batch export to BIND named', - 'options' => \%options, - 'notes' => <<'END' -Batch export of BIND zone and configuration files to a primary nameserver. -File::Rsync -must be installed. Run bin/bind.export to export the files. -END -); - -1; - diff --git a/FS/FS/part_export/bind_slave.pm b/FS/FS/part_export/bind_slave.pm deleted file mode 100644 index c89325f8d..000000000 --- a/FS/FS/part_export/bind_slave.pm +++ /dev/null @@ -1,28 +0,0 @@ -package FS::part_export::bind_slave; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export::null; - -@ISA = qw(FS::part_export::null); - -tie my %options, 'Tie::IxHash', - 'master' => { label=> 'Master IP address(s) (semicolon-separated)' }, - %FS::part_export::bind::options, -; -delete $options{'zonepath'}; - -%info = ( - 'svc' => 'svc_domain', - 'desc' =>'Batch export to slave BIND named', - 'options' => \%options, - 'notes' => <<'END' -Batch export of BIND configuration file to a secondary nameserver. Zones are -slaved from the listed masters. -File::Rsync -must be installed. Run bin/bind.export to export the files. -END -); - -1; - diff --git a/FS/FS/part_export/bsdshell.pm b/FS/FS/part_export/bsdshell.pm deleted file mode 100644 index 7b5feb252..000000000 --- a/FS/FS/part_export/bsdshell.pm +++ /dev/null @@ -1,25 +0,0 @@ -package FS::part_export::bsdshell; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export::passwdfile; - -@ISA = qw(FS::part_export::passwdfile); - -tie my %options, 'Tie::IxHash', %FS::part_export::passwdfile::options; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => - 'Batch export of /etc/passwd and /etc/master.passwd files (BSD)', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => <<'END' -MD5 crypt requires installation of -Crypt::PasswdMD5 -from CPAN. Run bin/bsdshell.export to export the files. -END -); - -1; - diff --git a/FS/FS/part_export/communigate_pro.pm b/FS/FS/part_export/communigate_pro.pm deleted file mode 100644 index ecb378090..000000000 --- a/FS/FS/part_export/communigate_pro.pm +++ /dev/null @@ -1,178 +0,0 @@ -package FS::part_export::communigate_pro; - -use vars qw(@ISA %info %options); -use Tie::IxHash; -use FS::part_export; -use FS::queue; - -@ISA = qw(FS::part_export); - -tie %options, 'Tie::IxHash', - 'port' => { label=>'Port number', default=>'106', }, - 'login' => { label=>'The administrator account name. The name can contain a domain part.', }, - 'password' => { label=>'The administrator account password.', }, - 'accountType' => { label=>'Type for newly-created accounts', - type=>'select', - options=>[qw( MultiMailbox TextMailbox MailDirMailbox )], - default=>'MultiMailbox', - }, - 'externalFlag' => { label=> 'Create accounts with an external (visible for legacy mailers) INBOX.', - type=>'checkbox', - }, - 'AccessModes' => { label=>'Access modes', - default=>'Mail POP IMAP PWD WebMail WebSite', - }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to a CommuniGate Pro mail server', - 'options' => \%options, - 'notes' => <<'END' -Real time export to a -CommuniGate Pro -mail server. The -CommuniGate Pro Perl Interface -must be installed as CGP::CLI. -END -); - -sub rebless { shift; } - -sub export_username { - my($self, $svc_acct) = (shift, shift); - $svc_acct->email; -} - -sub _export_insert { - my( $self, $svc_acct ) = (shift, shift); - my @options = ( $svc_acct->svcnum, 'CreateAccount', - 'accountName' => $self->export_username($svc_acct), - 'accountType' => $self->option('accountType'), - 'AccessModes' => $self->option('AccessModes'), - 'RealName' => $svc_acct->finger, - 'Password' => $svc_acct->_password, - ); - push @options, 'MaxAccountSize' => $svc_acct->quota if $svc_acct->quota; - push @options, 'externalFlag' => $self->option('externalFlag') - if $self->option('externalFlag'); - - $self->communigate_pro_queue( @options ); -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - return "can't (yet) change username with CommuniGate Pro" - if $old->username ne $new->username; - return "can't (yet) change domain with CommuniGate Pro" - if $self->export_username($old) ne $self->export_username($new); - return "can't (yet) change GECOS with CommuniGate Pro" - if $old->finger ne $new->finger; - return "can't (yet) change quota with CommuniGate Pro" - if $old->quota ne $new->quota; - return '' unless $old->username ne $new->username - || $old->_password ne $new->_password - || $old->finger ne $new->finger - || $old->quota ne $new->quota; - - return '' if '*SUSPENDED* '. $old->_password eq $new->_password; - - #my $err_or_queue = $self->communigate_pro_queue( $new->svcnum,'RenameAccount', - # $old->email, $new->email ); - #return $err_or_queue unless ref($err_or_queue); - #my $jobnum = $err_or_queue->jobnum; - - $self->communigate_pro_queue( $new->svcnum, 'SetAccountPassword', - $self->export_username($new), $new->_password ) - if $new->_password ne $old->_password; - -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - $self->communigate_pro_queue( $svc_acct->svcnum, 'DeleteAccount', - $self->export_username($svc_acct), - ); -} - -sub _export_suspend { - my( $self, $svc_acct ) = (shift, shift); - $self->communigate_pro_queue( $svc_acct->svcnum, 'UpdateAccountSettings', - 'accountName' => $self->export_username($svc_acct), - 'AccessModes' => 'Mail', - ); -} - -sub _export_unsuspend { - my( $self, $svc_acct ) = (shift, shift); - $self->communigate_pro_queue( $svc_acct->svcnum, 'UpdateAccountSettings', - 'accountName' => $self->export_username($svc_acct), - 'AccessModes' => $self->option('AccessModes'), - ); -} - -sub communigate_pro_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my @kludge_methods = qw(CreateAccount UpdateAccountSettings); - my $sub = 'communigate_pro_command'; - $sub = $method if grep { $method eq $_ } @kludge_methods; - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::communigate_pro::$sub", - }; - $queue->insert( - $self->machine, - $self->option('port'), - $self->option('login'), - $self->option('password'), - $method, - @_, - ); - -} - -sub CreateAccount { - my( $machine, $port, $login, $password, $method, %args ) = @_; - my $accountName = delete $args{'accountName'}; - my $accountType = delete $args{'accountType'}; - my $externalFlag = delete $args{'externalFlag'}; - $args{'AccessModes'} = [ split(' ', $args{'AccessModes'}) ]; - my @args = ( accountName => $accountName, - accountType => $accountType, - settings => \%args, - ); - #externalFlag => $externalFlag, - push @args, externalFlag => $externalFlag if $externalFlag; - - communigate_pro_command( $machine, $port, $login, $password, $method, @args ); - -} - -sub UpdateAccountSettings { - my( $machine, $port, $login, $password, $method, %args ) = @_; - my $accountName = delete $args{'accountName'}; - $args{'AccessModes'} = [ split(' ', $args{'AccessModes'}) ]; - @args = ( $accountName, \%args ); - communigate_pro_command( $machine, $port, $login, $password, $method, @args ); -} - -sub communigate_pro_command { #subroutine, not method - my( $machine, $port, $login, $password, $method, @args ) = @_; - - eval "use CGP::CLI"; - - my $cli = new CGP::CLI( { - 'PeerAddr' => $machine, - 'PeerPort' => $port, - 'login' => $login, - 'password' => $password, - } ) or die "Can't login to CGPro: $CGP::ERR_STRING\n"; - - $cli->$method(@args) or die "CGPro error: ". $cli->getErrMessage; - - $cli->Logout; # or die "Can't logout of CGPro: $CGP::ERR_STRING\n"; - -} - -1; - diff --git a/FS/FS/part_export/communigate_pro_singledomain.pm b/FS/FS/part_export/communigate_pro_singledomain.pm deleted file mode 100644 index e25043fbb..000000000 --- a/FS/FS/part_export/communigate_pro_singledomain.pm +++ /dev/null @@ -1,37 +0,0 @@ -package FS::part_export::communigate_pro_singledomain; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export::communigate_pro; - -@ISA = qw(FS::part_export::communigate_pro); - -tie my %options, 'Tie::IxHash', %FS::part_export::communigate_pro::options, - 'domain' => { label=>'Domain', }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => - 'Real-time export to a CommuniGate Pro mail server, one domain only', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => <<'END' -Real time export to a -CommuniGate Pro -mail server. This is an unusual export to CommuniGate Pro that forces all -accounts into a single domain. As CommuniGate Pro supports multiple domains, -unless you have a specific reason for using this export, you probably want to -use the communigate_pro export instead. The -CommuniGate Pro Perl Interface -must be installed as CGP::CLI. -END -); - -sub export_username { - my($self, $svc_acct) = (shift, shift); - $svc_acct->username. '@'. $self->option('domain'); -} - -1; - diff --git a/FS/FS/part_export/cp.pm b/FS/FS/part_export/cp.pm deleted file mode 100644 index 96fa43710..000000000 --- a/FS/FS/part_export/cp.pm +++ /dev/null @@ -1,161 +0,0 @@ -package FS::part_export::cp; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'port' => { label=>'Port number' }, - 'username' => { label=>'Username' }, - 'password' => { label=>'Password' }, - 'domain' => { label=>'Domain' }, - 'workgroup' => { label=>'Default Workgroup' }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to Critical Path Account Provisioning Protocol', - 'options'=> \%options, - 'notes' => <<'END' -Real-time export to -Critial Path Account Provisioning Protocol. -Requires installation of -Net::APP -from CPAN. -END -); - -sub rebless { shift; } - -sub _export_insert { - my( $self, $svc_acct ) = (shift, shift); - $self->cp_queue( $svc_acct->svcnum, 'create_mailbox', - 'Mailbox' => $svc_acct->username, - 'Password' => $svc_acct->_password, - 'Workgroup' => $self->option('workgroup'), - 'Domain' => $svc_acct->domain, - ); -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - return "can't change domain with Critical Path" - if $old->domain ne $new->domain; - return "can't change username with Critical Path" #CP no longer supports this - if $old->username ne $new->username; - return '' unless $old->_password ne $new->_password; - $self->cp_queue( $new->svcnum, 'replace', $new->domain, - $old->username, $new->username, $old->_password, $new->_password ); -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - $self->cp_queue( $svc_acct->svcnum, 'delete_mailbox', - 'Mailbox' => $svc_acct->username, - 'Domain' => $svc_acct->domain, - ); -} - -sub _export_suspend { - my( $self, $svc_acct ) = (shift, shift); - $self->cp_queue( $svc_acct->svcnum, 'set_mailbox_status', - 'Mailbox' => $svc_acct->username, - 'Domain' => $svc_acct->domain, - 'OTHER' => 'T', - 'OTHER_SUSPEND' => 'T', - ); -} - -sub _export_unsuspend { - my( $self, $svc_acct ) = (shift, shift); - $self->cp_queue( $svc_acct->svcnum, 'set_mailbox_status', - 'Mailbox' => $svc_acct->username, - 'Domain' => $svc_acct->domain, - 'PAYMENT' => 'F', - 'OTHER' => 'F', - 'OTHER_SUSPEND' => 'F', - 'OTHER_BOUNCE' => 'F', - ); -} - -sub cp_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => 'FS::part_export::cp::cp_command', - }; - $queue->insert( - $self->machine, - $self->option('port'), - $self->option('username'), - $self->option('password'), - $self->option('domain'), - $method, - @_, - ); -} - -sub cp_command { #subroutine, not method - my($host, $port, $username, $password, $login_domain, $method, @args) = @_; - - #quelle hack - if ( $method eq 'replace' ) { - - my( $domain, $old_username, $new_username, $old_password, $new_password) - = @args; - - if ( $old_username ne $new_username ) { - cp_command($host, $port, $username, $password, 'rename_mailbox', - Domain => $domain, - Old_Mailbox => $old_username, - New_Mailbox => $new_username, - ); - } - - #my $other = 'F'; - if ( $new_password =~ /^\*SUSPENDED\* (.*)$/ ) { - $new_password = $1; - # $other = 'T'; - } - #cp_command($host, $port, $username, $password, $login_domain, - # 'set_mailbox_status', - # Domain => $domain, - # Mailbox => $new_username, - # Other => $other, - # Other_Bounce => $other, - #); - - if ( $old_password ne $new_password ) { - cp_command($host, $port, $username, $password, $login_domain, - 'change_mailbox', - Domain => $domain, - Mailbox => $new_username, - Password => $new_password, - ); - } - - return; - } - #eof quelle hack - - eval "use Net::APP;"; - - my $app = new Net::APP ( - "$host:$port", - User => $username, - Password => $password, - Domain => $login_domain, - Timeout => 60, - #Debug => 1, - ) or die "$@\n"; - - $app->$method( @args ); - - die $app->message."\n" unless $app->ok; - -} - -1; - diff --git a/FS/FS/part_export/cpanel.pm b/FS/FS/part_export/cpanel.pm deleted file mode 100644 index 0ad00df01..000000000 --- a/FS/FS/part_export/cpanel.pm +++ /dev/null @@ -1,192 +0,0 @@ -package FS::part_export::cpanel; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'user' => { label=>'Remote access username' }, - 'accesshash' => { label=>'Remote access key', type=>'textarea' }, - 'debug' => { label=>'Enable debugging', type=>'checkbox' }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to Cpanel control panel.', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => 'Real time export to a the Cpanel control panel software. Service definition names are exported as Cpanel packages. Requires installation of the Cpanel::Accounting perl module distributed with Cpanel.', -); - -sub rebless { shift; } - -sub _export_insert { - my($self, $svc_acct) = (shift, shift); - $err_or_queue = $self->cpanel_queue( $svc_acct->svcnum, 'insert', - $svc_acct->domain, - $svc_acct->username, - $svc_acct->_password, - $svc_acct->cust_svc->part_svc->svc, - ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - return "can't change username with cpanel" - if $old->username ne $new->username; - return "can't change password with cpanel" - if $old->_passsword ne $new->_password; - return "can't change domain with cpanel" - if $old->domain ne $new->domain; - - ''; - - ##return '' unless $old->_password ne $new->_password; - #$err_or_queue = $self->cpanel_queue( $new->svcnum, - # 'replace', $new->username, $new->_password ); - #ref($err_or_queue) ? '' : $err_or_queue; -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - $err_or_queue = $self->cpanel_queue( $svc_acct->svcnum, - 'delete', $svc_acct->username - ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub _export_suspend { - my( $self, $svc_acct ) = (shift, shift); - $err_or_queue = $self->cpanel_queue( $svc_acct->svcnum, - 'suspend', $svc_acct->username ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub _export_unsuspend { - my( $self, $svc_acct ) = (shift, shift); - $err_or_queue = $self->cpanel_queue( $svc_acct->svcnum, - 'unsuspend', $svc_acct->username ); - ref($err_or_queue) ? '' : $err_or_queue; -} - - -sub cpanel_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::cpanel::cpanel_$method", - }; - $queue->insert( - $self->machine, - $self->option('user'), - $self->option('accesshash'), - $self->option('debug'), - @_ - ) or $queue; -} - - -sub cpanel_insert { #subroutine, not method - my( $machine, $user, $accesshash, $debug ) = splice(@_,0,4); - -# my $whm = cpanel_connect($machine, $user, $accesshash, $debug); -# warn " cpanel->createacct ". join(', ', @_). "\n" -# if $debug; -# my $response = $whm->createacct(@_); -# die $whm->{'error'} if $whm->{'error'}; -# warn " cpanel response: $response\n" -# if $debug; - - warn "cpanel_insert: attempting web interface to add POP" - if $debug; - - my($domain, $username, $password, $svc) = @_; - - use LWP::UserAgent; - use HTTP::Request::Common qw(POST); - - my $url = - "http://$user:$accesshash\@$domain:2082/frontend/x/mail/addpop2.html"; - - my $ua = LWP::UserAgent->new(); - - #$req->authorization_basic($user, $accesshash); - - my $res = $ua->request( - POST( $url, - [ - 'email' => $username, - 'domain' => $domain, - 'password' => $password, - 'quota' => 10, #? - ] - ) - ); - - die "Error submitting data to $url: ". $res->status_line - unless $res->is_success; - - die "Username in use" - if $res->content =~ /exists/; - - die "Account not created: ". $res->content - if $res->content =~ /failure/; - -} - -#sub cpanel_replace { #subroutine, not method -#} - -sub cpanel_delete { #subroutine, not method - my( $machine, $user, $accesshash, $debug ) = splice(@_,0,4); - my $whm = cpanel_connect($machine, $user, $accesshash, $debug); - warn " cpanel->killacct ". join(', ', @_). "\n" - if $debug; - my $response = $whm->killacct(shift); - die $whm->{'error'} if $whm->{'error'}; - warn " cpanel response: $response\n" - if $debug; -} - -sub cpanel_suspend { #subroutine, not method - my( $machine, $user, $accesshash, $debug ) = splice(@_,0,4); - my $whm = cpanel_connect($machine, $user, $accesshash, $debug); - warn " cpanel->suspend ". join(', ', @_). "\n" - if $debug; - my $response = $whm->suspend(shift); - die $whm->{'error'} if $whm->{'error'}; - warn " cpanel response: $response\n" - if $debug; -} - -sub cpanel_unsuspend { #subroutine, not method - my( $machine, $user, $accesshash, $debug ) = splice(@_,0,4); - my $whm = cpanel_connect($machine, $user, $accesshash, $debug); - warn " cpanel->unsuspend ". join(', ', @_). "\n" - if $debug; - my $response = $whm->unsuspend(shift); - die $whm->{'error'} if $whm->{'error'}; - warn " cpanel response: $response\n" - if $debug; -} - -sub cpanel_connect { - my( $host, $user, $accesshash, $debug ) = @_; - - eval "use Cpanel::Accounting;"; - die $@ if $@; - - warn "creating new Cpanel::Accounting connection to $user@$host\n" - if $debug; - - my $whm = new Cpanel::Accounting; - $whm->{'host'} = $host; - $whm->{'user'} = $user; - $whm->{'accesshash'} = $accesshash; - $whm->{'usessl'} = 1; - - $whm; -} diff --git a/FS/FS/part_export/cyrus.pm b/FS/FS/part_export/cyrus.pm deleted file mode 100644 index 84c9e5a30..000000000 --- a/FS/FS/part_export/cyrus.pm +++ /dev/null @@ -1,120 +0,0 @@ -package FS::part_export::cyrus; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'server' => { label=>'IMAP server' }, - 'username' => { label=>'Admin username' }, - 'password' => { label=>'Admin password' }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to Cyrus IMAP server', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => <<'END' -Integration with -Cyrus IMAP Server. -Cyrus::IMAP::Admin should be installed locally and the connection to the -server secured. svc_acct.quota, if available, is used to set the -Cyrus quota. -END -); - -sub rebless { shift; } - -sub _export_insert { - my($self, $svc_acct) = (shift, shift); - $self->cyrus_queue( $svc_acct->svcnum, 'insert', - $svc_acct->username, $svc_acct->quota ); -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - return "can't change username using Cyrus" - if $old->username ne $new->username; - return ''; -# #return '' unless $old->_password ne $new->_password; -# $self->cyrus_queue( $new->svcnum, -# 'replace', $new->username, $new->_password ); -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - $self->cyrus_queue( $svc_acct->svcnum, 'delete', - $svc_acct->username ); -} - -#a good idea to queue anything that could fail or take any time -sub cyrus_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::cyrus::cyrus_$method", - }; - $queue->insert( - $self->option('server'), - $self->option('username'), - $self->option('password'), - @_ - ); -} - -sub cyrus_insert { #subroutine, not method - my $client = cyrus_connect(shift, shift, shift); - my( $username, $quota ) = @_; - my $rc = $client->create("user.$username"); - my $error = $client->error; - die "creating user.$username: $error" if $error; - - $rc = $client->setacl("user.$username", $username => 'all' ); - $error = $client->error; - die "setacl user.$username: $error" if $error; - - if ( $quota ) { - $rc = $client->setquota("user.$username", 'STORAGE' => $quota ); - $error = $client->error; - die "setquota user.$username: $error" if $error; - } - -} - -sub cyrus_delete { #subroutine, not method - my ( $server, $admin_username, $password_username, $username ) = @_; - my $client = cyrus_connect($server, $admin_username, $password_username); - - my $rc = $client->setacl("user.$username", $admin_username => 'all' ); - my $error = $client->error; - die $error if $error; - - $rc = $client->delete("user.$username"); - $error = $client->error; - die $error if $error; -} - -sub cyrus_connect { - - my( $server, $admin_username, $admin_password ) = @_; - - eval "use Cyrus::IMAP::Admin;"; - - my $client = Cyrus::IMAP::Admin->new($server); - $client->authenticate( - -user => $admin_username, - -mechanism => "login", - -password => $admin_password, - ); - $client; - -} - -#sub cyrus_replace { #subroutine, not method -#} - -1; - diff --git a/FS/FS/part_export/domain_shellcommands.pm b/FS/FS/part_export/domain_shellcommands.pm deleted file mode 100644 index 994c113bf..000000000 --- a/FS/FS/part_export/domain_shellcommands.pm +++ /dev/null @@ -1,165 +0,0 @@ -package FS::part_export::domain_shellcommands; - -use strict; -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'user' => { label=>'Remote username', default=>'root' }, - 'useradd' => { label=>'Insert command', - default=>'', - }, - 'userdel' => { label=>'Delete command', - default=>'', - }, - 'usermod' => { label=>'Modify command', - default=>'', - }, -; - -%info = ( - 'svc' => 'svc_domain', - 'desc' => 'Run remote commands via SSH, for domains (qmail, ISPMan).', - 'options' => \%options, - 'notes' => <<'END' -Run remote commands via SSH, for domains. You will need to -setup SSH for unattended operation. -

    Use these buttons for some useful presets: -
      -
    • - -
    • - -
    -The following variables are available for interpolation (prefixed with new_ or old_ for replace operations): -
      -
    • $domain -
    • $qdomain - domain with periods replaced by colons -
    • $uid - of catchall account -
    • $gid - of catchall account -
    • $dir - home directory of catchall account -
    • All other fields in - svc_domain are also available. -
    -END -); - -sub rebless { shift; } - -sub _export_insert { - my($self) = shift; - $self->_export_command('useradd', @_); -} - -sub _export_delete { - my($self) = shift; - $self->_export_command('userdel', @_); -} - -sub _export_command { - my ( $self, $action, $svc_domain) = (shift, shift, shift); - my $command = $self->option($action); - return '' if $command =~ /^\s*$/; - - #set variable for the command - no strict 'vars'; - { - no strict 'refs'; - ${$_} = $svc_domain->getfield($_) foreach $svc_domain->fields; - } - ( $qdomain = $domain ) =~ s/\./:/g; #see dot-qmail(5): EXTENSION ADDRESSES - - if ( $svc_domain->catchall ) { - no strict 'refs'; - my $svc_acct = $svc_domain->catchall_svc_acct; - ${$_} = $svc_acct->getfield($_) foreach qw(uid gid dir); - } else { - no strict 'refs'; - ${$_} = '' foreach qw(uid gid dir); - } - - #done setting variables for the command - - $self->shellcommands_queue( $svc_domain->svcnum, - user => $self->option('user')||'root', - host => $self->machine, - command => eval(qq("$command")), - ); -} - -sub _export_replace { - my($self, $new, $old ) = (shift, shift, shift); - my $command = $self->option('usermod'); - - #set variable for the command - no strict 'vars'; - { - no strict 'refs'; - ${"old_$_"} = $old->getfield($_) foreach $old->fields; - ${"new_$_"} = $new->getfield($_) foreach $new->fields; - } - ( $old_qdomain = $old_domain ) =~ s/\./:/g; #see dot-qmail(5): EXTENSION ADDRESSES - ( $new_qdomain = $new_domain ) =~ s/\./:/g; #see dot-qmail(5): EXTENSION ADDRESSES - - { - no strict 'refs'; - - if ( $old->catchall ) { - my $svc_acct = $old->catchall_svc_acct; - ${"old_$_"} = $svc_acct->getfield($_) foreach qw(uid gid dir); - } else { - ${"old_$_"} = '' foreach qw(uid gid dir); - } - if ( $new->catchall ) { - my $svc_acct = $new->catchall_svc_acct; - ${"new_$_"} = $svc_acct->getfield($_) foreach qw(uid gid dir); - } else { - ${"new_$_"} = '' foreach qw(uid gid dir); - } - - } - - #done setting variables for the command - - $self->shellcommands_queue( $new->svcnum, - user => $self->option('user')||'root', - host => $self->machine, - command => eval(qq("$command")), - ); -} - -#a good idea to queue anything that could fail or take any time -sub shellcommands_queue { - my( $self, $svcnum ) = (shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::domain_shellcommands::ssh_cmd", - }; - $queue->insert( @_ ); -} - -sub ssh_cmd { #subroutine, not method - use Net::SSH '0.08'; - &Net::SSH::ssh_cmd( { @_ } ); -} - -#sub shellcommands_insert { #subroutine, not method -#} -#sub shellcommands_replace { #subroutine, not method -#} -#sub shellcommands_delete { #subroutine, not method -#} - -1; - diff --git a/FS/FS/part_export/domain_sql.pm b/FS/FS/part_export/domain_sql.pm deleted file mode 100644 index 0ce1b16e3..000000000 --- a/FS/FS/part_export/domain_sql.pm +++ /dev/null @@ -1,238 +0,0 @@ -package FS::part_export::domain_sql; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -#quite a bit of false laziness w/acct_sql - some stuff should be generalized -#out to a "dababase base class" - -tie my %options, 'Tie::IxHash', - 'datasrc' => { label => 'DBI data source' }, - 'username' => { label => 'Database username' }, - 'password' => { label => 'Database password' }, - 'table' => { label => 'Database table' }, - 'schema' => { label => - 'Database schema mapping to Freeside methods.', - type => 'textarea', - }, - 'static' => { label => - 'Database schema mapping to static values.', - type => 'textarea', - }, - 'primary_key' => { label => 'Database primary key' }, -; - -tie my %postfix_transport_map, 'Tie::IxHash', - 'domain' => 'domain' -; -my $postfix_transport_map = - join('\n', map "$_ $postfix_transport_map{$_}", - keys %postfix_transport_map ); -tie my %postfix_transport_static, 'Tie::IxHash', - 'transport' => 'virtual:', -; -my $postfix_transport_static = - join('\n', map "$_ $postfix_transport_static{$_}", - keys %postfix_transport_static ); - -%info = ( - 'svc' => 'svc_domain', - 'desc' => 'Real time export of domains to SQL databases '. - '(postfix, others?)', - 'options' => \%options, - 'notes' => <
    Use these buttons for useful presets: -
      -
    • -
    -END -); - -sub _schema_map { shift->_map('schema'); } -sub _static_map { shift->_map('static'); } - -sub _map { - my $self = shift; - map { /^\s*(\S+)\s*(\S+)\s*$/ } split("\n", $self->option(shift) ); -} - -sub _export_insert { - my($self, $svc_domain) = (shift, shift); - - my %schema = $self->_schema_map; - my %static = $self->_static_map; - - my %record = ( ( map { $_ => $static{$_} } keys %static ), - ( map { my $method = $schema{$_}; - $_ => $svc_domain->$method(); - } - keys %schema - ) - ); - - my $err_or_queue = - $self->domain_sql_queue( - $svc_domain->svcnum, - 'insert', - $self->option('table'), - %record - ); - return $err_or_queue unless ref($err_or_queue); - - ''; -} - -sub _export_replace { - my($self, $new, $old) = (shift, shift, shift); - - my %schema = $self->_schema_map; - my %static = $self->_static_map; - - my @primary_key = (); - if ( $self->option('primary_key') =~ /,/ ) { - foreach my $key ( split(/\s*,\s*/, $self->option('primary_key') ) ) { - my $keymap = $schema{$key}; - push @primary_key, $old->$keymap(); - } - } else { - my $keymap = $map{$self->option('primary_key')}; - push @primary_key, $old->$keymap(); - } - - my %record = ( ( map { $_ => $static{$_} } keys %static ), - ( map { my $method = $schema{$_}; - $_ => $new->$method(); - } - keys %schema - ) - ); - - my $err_or_queue = $self->domain_sql_queue( - $new->svcnum, - 'replace', - $self->option('table'), - $self->option('primary_key'), @primary_key, - %record, - ); - return $err_or_queue unless ref($err_or_queue); - ''; -} - -sub _export_delete { - my ( $self, $svc_domain ) = (shift, shift); - - my %schema = $self->_schema_map; - my %static = $self->_static_map; - - my %primary_key = (); - if ( $self->option('primary_key') =~ /,/ ) { - foreach my $key ( split(/\s*,\s*/, $self->option('primary_key') ) ) { - my $keymap = $map{$key}; - $primary_key{ $key } = $svc_domain->$keymap(); - } - } else { - my $keymap = $map{$self->option('primary_key')}; - $primary_key{ $self->option('primary_key') } = $svc_domain->$keymap(), - } - - my $err_or_queue = $self->domain_sql_queue( - $svc_domain->svcnum, - 'delete', - $self->option('table'), - %primary_key, - #$self->option('primary_key') => $svc_domain->$keymap(), - ); - return $err_or_queue unless ref($err_or_queue); - ''; -} - -sub domain_sql_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::domain_sql::domain_sql_$method", - }; - $queue->insert( - $self->option('datasrc'), - $self->option('username'), - $self->option('password'), - @_, - ) or $queue; -} - -sub domain_sql_insert { #subroutine, not method - my $dbh = domain_sql_connect(shift, shift, shift); - my( $table, %record ) = @_; - - my $sth = $dbh->prepare( - "INSERT INTO $table ( ". join(", ", keys %record). - " ) VALUES ( ". join(", ", map '?', keys %record ). " )" - ) or die $dbh->errstr; - - $sth->execute( values(%record) ) - or die "can't insert into $table table: ". $sth->errstr; - - $dbh->disconnect; -} - -sub domain_sql_delete { #subroutine, not method - my $dbh = domain_sql_connect(shift, shift, shift); - my( $table, %record ) = @_; - - my $sth = $dbh->prepare( - "DELETE FROM $table WHERE ". join(' AND ', map "$_ = ? ", keys %record ) - ) or die $dbh->errstr; - - $sth->execute( map $record{$_}, keys %record ) - or die "can't delete from $table table: ". $sth->errstr; - - $dbh->disconnect; -} - -sub domain_sql_replace { #subroutine, not method - my $dbh = domain_sql_connect(shift, shift, shift); - - my( $table, $pkey ) = ( shift, shift ); - - my %primary_key = (); - if ( $pkey =~ /,/ ) { - foreach my $key ( split(/\s*,\s*/, $pkey ) ) { - $primary_key{$key} = shift; - } - } else { - $primary_key{$pkey} = shift; - } - - my %record = @_; - - my $sth = $dbh->prepare( - "UPDATE $table". - ' SET '. join(', ', map "$_ = ?", keys %record ). - ' WHERE '. join(' AND ', map "$_ = ?", keys %primary_key ) - ) or die $dbh->errstr; - - $sth->execute( values(%record), values(%primary_key) ); - - $dbh->disconnect; -} - -sub domain_sql_connect { - #my($datasrc, $username, $password) = @_; - #DBI->connect($datasrc, $username, $password) or die $DBI::errstr; - DBI->connect(@_) or die $DBI::errstr; -} - -1; - diff --git a/FS/FS/part_export/everyone_net.pm b/FS/FS/part_export/everyone_net.pm deleted file mode 100644 index e04318e10..000000000 --- a/FS/FS/part_export/everyone_net.pm +++ /dev/null @@ -1,132 +0,0 @@ -package FS::part_export::everyone_net; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'clientID' => { label=>'clientID' }, - 'password' => { label=>'Password' }, - #'workgroup' => { label=>'Default Workgroup' }, - 'debug' => { label=>'Enable debugging', - type=>'checkbox' }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to Everyone.net outsourced mail service', - 'options'=> \%options, - 'notes' => <<'END' -Real-time export to -Everyone.net via the XRC Remote API. -Requires installation of -Net::XRC -from CPAN. -END -); - -sub rebless { shift; } - -# experiement: want the status of these right away (don't want account to -# create or whatever and then get error in the queue from dup username or -# something), so no queueing - -sub _export_insert { - my( $self, $svc_acct ) = (shift, shift); - - eval "use Net::XRC qw(:types);"; - return $@ if $@; - - $self->_xrc_command( 'createUser', - $svc_acct->domain, - [], - string($svc_acct->username), - string($svc_acct->_password), - ); -} - -sub _xrc_command { - my( $self, $method, $domain, @args ) = @_; - - eval "use Net::XRC qw(:types);"; - return $@ if $@; - - local($Net::XRC::DEBUG) = 1 - if $self->option('debug'); - - my $xrc = new Net::XRC ( - 'clientID' => $self->option('clientID'), - 'password' => $self->option('password'), - ); - - my $dresponse = $xrc->lookupMXReadyClientIDByEmailDomain( string($domain) ); - return $dresponse->error unless $dresponse->is_success; - my $clientID = $dresponse->content; - return "clientID for domain $domain not found" - if $clientID == -1; - - my $response = $xrc->$method($clientID, @args); - return $response->error unless $response->is_success; - ''; - -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - - eval "use Net::XRC qw(:types);"; - return $@ if $@; - - return "can't change domain with Everyone.net" - if $old->domain ne $new->domain; - return "can't change username with Everyone.net" - if $old->username ne $new->username; - return '' unless $old->_password ne $new->_password; - - $self->_xrc_command( 'setUserPassword', - $new->domain, - string($new->username), - string($new->_password), - ); -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - - eval "use Net::XRC qw(:types);"; - return $@ if $@; - - $self->_xrc_command( 'deleteUser', - $svc_acct->domain, - string($svc_acct->username), - ); -} - -sub _export_suspend { - my( $self, $svc_acct ) = (shift, shift); - - eval "use Net::XRC qw(:types);"; - return $@ if $@; - - $self->_xrc_command( 'suspendUser', - $svc_acct->domain, - string($svc_acct->username), - ); -} - -sub _export_unsuspend { - my( $self, $svc_acct ) = (shift, shift); - - eval "use Net::XRC qw(:types);"; - return $@ if $@; - - $self->_xrc_command( 'unsuspendUser', - $svc_acct->domain, - string($svc_acct->username), - ); -} - -1; - diff --git a/FS/FS/part_export/forward_shellcommands.pm b/FS/FS/part_export/forward_shellcommands.pm deleted file mode 100644 index cee24e452..000000000 --- a/FS/FS/part_export/forward_shellcommands.pm +++ /dev/null @@ -1,182 +0,0 @@ -package FS::part_export::forward_shellcommands; - -use strict; -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'user' => { label=>'Remote username', default=>'root' }, - 'useradd' => { label=>'Insert command', - default=>'', - }, - 'userdel' => { label=>'Delete command', - default=>'', - }, - 'usermod' => { label=>'Modify command', - default=>'', - }, -; - -%info = ( - 'svc' => 'svc_forward', - 'desc' => 'Run remote commands via SSH, for forwards', - 'options' => \%options, - 'notes' => <<'END' -Run remote commands via SSH, for forwards. You will need to -setup SSH for unattended operation. -

    Use these buttons for some useful presets: -
      -
    • - -
    • - -
    -The following variables are available for interpolation (prefixed with -new_ or old_ for replace operations): -
      -
    • $username - username of forward source -
    • $domain - domain of forward source -
    • $source - forward source ($username@$domain) -
    • $destination - forward destination -
    • All other fields in svc_forward are also available. -
    -END -); - -sub rebless { shift; } - -sub _export_insert { - my($self) = shift; - $self->_export_command('useradd', @_); -} - -sub _export_delete { - my($self) = shift; - $self->_export_command('userdel', @_); -} - -sub _export_command { - my ( $self, $action, $svc_forward ) = (shift, shift, shift); - my $command = $self->option($action); - return '' if $command =~ /^\s*$/; - - #set variable for the command - no strict 'vars'; - { - no strict 'refs'; - ${$_} = $svc_forward->getfield($_) foreach $svc_forward->fields; - } - - if ( $svc_forward->srcsvc ) { - my $srcsvc_acct = $svc_forward->srcsvc_acct; - $username = $srcsvc_acct->username; - $domain = $srcsvc_acct->domain; - $source = $srcsvc_acct->email; - } else { - $source = $svc_forward->src; - ( $username, $domain ) = split(/\@/, $source); - } - - if ($svc_forward->dstsvc) { - $destination = $svc_forward->dstsvc_acct->email; - } else { - $destination = $svc_forward->dst; - } - - #done setting variables for the command - - $self->shellcommands_queue( $svc_forward->svcnum, - user => $self->option('user')||'root', - host => $self->machine, - command => eval(qq("$command")), - ); -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - my $command = $self->option('usermod'); - - #set variable for the command - no strict 'vars'; - { - no strict 'refs'; - ${"old_$_"} = $old->getfield($_) foreach $old->fields; - ${"new_$_"} = $new->getfield($_) foreach $new->fields; - } - - if ( $old->srcsvc ) { - my $srcsvc_acct = $old->srcsvc_acct; - $old_username = $srcsvc_acct->username; - $old_domain = $srcsvc_acct->domain; - $old_source = $srcsvc_acct->email; - } else { - $old_source = $old->src; - ( $old_username, $old_domain ) = split(/\@/, $old_source); - } - - if ( $old->dstsvc ) { - $old_destination = $old->dstsvc_acct->email; - } else { - $old_destination = $old->dst; - } - - if ( $new->srcsvc ) { - my $srcsvc_acct = $new->srcsvc_acct; - $new_username = $srcsvc_acct->username; - $new_domain = $srcsvc_acct->domain; - $new_source = $srcsvc_acct->email; - } else { - $new_source = $new->src; - ( $new_username, $new_domain ) = split(/\@/, $new_source); - } - - if ( $new->dstsvc ) { - $new_destination = $new->dstsvc_acct->email; - } else { - $new_destination = $new->dst; - } - - #done setting variables for the command - - $self->shellcommands_queue( $new->svcnum, - user => $self->option('user')||'root', - host => $self->machine, - command => eval(qq("$command")), - ); -} - -#a good idea to queue anything that could fail or take any time -sub shellcommands_queue { - my( $self, $svcnum ) = (shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::forward_shellcommands::ssh_cmd", - }; - $queue->insert( @_ ); -} - -sub ssh_cmd { #subroutine, not method - use Net::SSH '0.08'; - &Net::SSH::ssh_cmd( { @_ } ); -} - -#sub shellcommands_insert { #subroutine, not method -#} -#sub shellcommands_replace { #subroutine, not method -#} -#sub shellcommands_delete { #subroutine, not method -#} - -1; - diff --git a/FS/FS/part_export/http.pm b/FS/FS/part_export/http.pm deleted file mode 100644 index 55d832966..000000000 --- a/FS/FS/part_export/http.pm +++ /dev/null @@ -1,134 +0,0 @@ -package FS::part_export::http; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'method' => { label =>'Method', - type =>'select', - #options =>[qw(POST GET)], - options =>[qw(POST)], - default =>'POST' }, - 'url' => { label => 'URL', default => 'http://', }, - 'insert_data' => { - label => 'Insert data', - type => 'textarea', - default => join("\n", - 'DomainName $svc_x->domain', - 'Email ( grep { $_ !~ /^(POST|FAX)$/ } $svc_x->cust_svc->cust_pkg->cust_main->invoicing_list)[0]', - 'test 1', - 'reseller $svc_x->cust_svc->cust_pkg->part_pkg->pkg =~ /reseller/i', - ), - }, - 'delete_data' => { - label => 'Delete data', - type => 'textarea', - default => join("\n", - ), - }, - 'replace_data' => { - label => 'Replace data', - type => 'textarea', - default => join("\n", - ), - }, -; - -%info = ( - 'svc' => 'svc_domain', - 'desc' => 'Send an HTTP or HTTPS GET or POST request', - 'options' => \%options, - 'notes' => <<'END' -Send an HTTP or HTTPS GET or POST to the specified URL. For HTTPS support, -Crypt::SSLeay -or IO::Socket::SSL -is required. -END -); - -sub rebless { shift; } - -sub _export_insert { - my $self = shift; - $self->_export_command('insert', @_); -} - -sub _export_delete { - my $self = shift; - $self->_export_command('delete', @_); -} - -sub _export_command { - my( $self, $action, $svc_x ) = ( shift, shift, shift ); - - return unless $self->option("${action}_data"); - - $self->http_queue( $svc_x->svcnum, - $self->option('method'), - $self->option('url'), - map { - /^\s*(\S+)\s+(.*)$/ or /()()/; - my( $field, $value_expression ) = ( $1, $2 ); - my $value = eval $value_expression; - die $@ if $@; - ( $field, $value ); - } split(/\n/, $self->option("${action}_data") ) - ); - -} - -sub _export_replace { - my( $self, $new, $old ) = ( shift, shift, shift ); - - return unless $self->option('replace_data'); - - $self->http_queue( $svc_x->svcnum, - $self->option('method'), - $self->option('url'), - map { - /^\s*(\S+)\s+(.*)$/ or /()()/; - my( $field, $value_expression ) = ( $1, $2 ); - die $@ if $@; - ( $field, $value ); - } split(/\n/, $self->option('replace_data') ) - ); - -} - -sub http_queue { - my($self, $svcnum) = (shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::http::http", - }; - $queue->insert( @_ ); -} - -sub http { - my($method, $url, @data) = @_; - - $method = lc($method); - - eval "use LWP::UserAgent;"; - die "using LWP::UserAgent: $@" if $@; - eval "use HTTP::Request::Common;"; - die "using HTTP::Request::Common: $@" if $@; - - my $ua = LWP::UserAgent->new; - - #my $response = $ua->$method( - # $url, \%data, - # 'Content-Type'=>'application/x-www-form-urlencoded' - #); - my $req = HTTP::Request::Common::POST( $url, \@data ); - my $response = $ua->request($req); - - die $response->error_as_HTML if $response->is_error; - -} - -1; - diff --git a/FS/FS/part_export/infostreet.pm b/FS/FS/part_export/infostreet.pm deleted file mode 100644 index ef16c7c54..000000000 --- a/FS/FS/part_export/infostreet.pm +++ /dev/null @@ -1,277 +0,0 @@ -package FS::part_export::infostreet; - -use vars qw(@ISA %info %infostreet2cust_main $DEBUG); -use Tie::IxHash; -use FS::UID qw(dbh); -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'url' => { label=>'XML-RPC Access URL', }, - 'login' => { label=>'InfoStreet login', }, - 'password' => { label=>'InfoStreet password', }, - 'groupID' => { label=>'InfoStreet groupID', }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to InfoStreet streetSmartAPI', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => <<'END' -Real-time export to -InfoStreet streetSmartAPI. -Requires installation of -Frontier::Client from CPAN. -END -); - -$DEBUG = 0; - -%infostreet2cust_main = ( - 'firstName' => 'first', - 'lastName' => 'last', - 'address1' => 'address1', - 'address2' => 'address2', - 'city' => 'city', - 'state' => 'state', - 'zipCode' => 'zip', - 'country' => 'country', - 'phoneNumber' => 'daytime', - 'faxNumber' => 'night', #noment-request... -); - -sub rebless { shift; } - -sub _export_insert { - my( $self, $svc_acct ) = (shift, shift); - my $cust_main = $svc_acct->cust_svc->cust_pkg->cust_main; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $err_or_queue = $self->infostreet_err_or_queue( $svc_acct->svcnum, - 'createUser', $svc_acct->username, $svc_acct->_password ); - return $err_or_queue unless ref($err_or_queue); - my $jobnum = $err_or_queue->jobnum; - - my %contact_info = ( map { - $_ => $cust_main->getfield( $infostreet2cust_main{$_} ); - } keys %infostreet2cust_main ); - - my @emails = grep { $_ !~ /^(POST|FAX)$/ } $cust_main->invoicing_list; - $contact_info{'email'} = $emails[0] if @emails; - - #this one is kinda noment-specific - $contact_info{'organization'} = $cust_main->agent->agent; - - $err_or_queue = $self->infostreet_queueContact( $svc_acct->svcnum, - $svc_acct->username, %contact_info ); - return $err_or_queue unless ref($err_or_queue); - - # If a quota has been specified set the quota because it is not the default - $err_or_queue = $self->infostreet_queueSetQuota( $svc_acct->svcnum, - $svc_acct->username, $svc_acct->quota ) if $svc_acct->quota; - return $err_or_queue unless ref($err_or_queue); - - my $error = $err_or_queue->depend_insert( $jobnum ); - return $error if $error; - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - return "can't change username with InfoStreet" - if $old->username ne $new->username; - - # If the quota has changed then do the export to setQuota - my $err_or_queue = $self->infostreet_queueSetQuota( $new->svcnum, $new->username, $new->quota ) - if ( $old->quota != $new->quota ); - return $err_or_queue unless ref($err_or_queue); - - - return '' unless $old->_password ne $new->_password; - $self->infostreet_queue( $new->svcnum, - 'passwd', $new->username, $new->_password ); -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - $self->infostreet_queue( $svc_acct->svcnum, - 'purgeAccount,releaseUsername', $svc_acct->username ); -} - -sub _export_suspend { - my( $self, $svc_acct ) = (shift, shift); - $self->infostreet_queue( $svc_acct->svcnum, - 'setStatus', $svc_acct->username, 'DISABLED' ); -} - -sub _export_unsuspend { - my( $self, $svc_acct ) = (shift, shift); - $self->infostreet_queue( $svc_acct->svcnum, - 'setStatus', $svc_acct->username, 'ACTIVE' ); -} - -sub infostreet_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => 'FS::part_export::infostreet::infostreet_command', - }; - $queue->insert( - $self->option('url'), - $self->option('login'), - $self->option('password'), - $self->option('groupID'), - $method, - @_, - ); -} - -#ick false laziness -sub infostreet_err_or_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => 'FS::part_export::infostreet::infostreet_command', - }; - $queue->insert( - $self->option('url'), - $self->option('login'), - $self->option('password'), - $self->option('groupID'), - $method, - @_, - ) or $queue; -} - -sub infostreet_queueContact { - my( $self, $svcnum ) = (shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => 'FS::part_export::infostreet::infostreet_setContact', - }; - $queue->insert( - $self->option('url'), - $self->option('login'), - $self->option('password'), - $self->option('groupID'), - @_, - ) or $queue; -} - -sub infostreet_setContact { - my($url, $is_username, $is_password, $groupID, $username, %contact_info) = @_; - my $accountID = infostreet_command($url, $is_username, $is_password, $groupID, - 'getAccountID', $username); - foreach my $field ( keys %contact_info ) { - infostreet_command($url, $is_username, $is_password, $groupID, - 'setContactField', [ 'int'=>$accountID ], $field, $contact_info{$field} ); - } - -} - -sub infostreet_queueSetQuota { - - my( $self, $svcnum) = (shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => 'FS::part_export::infostreet::infostreet_setQuota', - }; - - $queue->insert( - $self->option('url'), - $self->option('login'), - $self->option('password'), - $self->option('groupID'), - @_, - ) or $queue; - -} - -sub infostreet_setQuota { - my($url, $is_username, $is_password, $groupID, $username, $quota) = @_; - infostreet_command($url, $is_username, $is_password, $groupID, 'setQuota', $username, [ 'int'=> $quota ] ); -} - - -sub infostreet_command { #subroutine, not method - my($url, $username, $password, $groupID, $method, @args) = @_; - - warn "[FS::part_export::infostreet] $method ".join(' ', @args)."\n" if $DEBUG; - - #quelle hack - if ( $method =~ /,/ ) { - foreach my $part ( split(/,\s*/, $method) ) { - infostreet_command($url, $username, $password, $groupID, $part, @args); - } - return; - } - - eval "use Frontier::Client;"; - die $@ if $@; - - eval 'sub Frontier::RPC2::String::repr { - my $self = shift; - my $value = $$self; - $value =~ s/([&<>\"])/$Frontier::RPC2::char_entities{$1}/ge; - $value; - }'; - die $@ if $@; - - my $conn = Frontier::Client->new( url => $url ); - my $key_result = $conn->call( 'authenticate', $username, $password, $groupID); - my %key_result = _infostreet_parse($key_result); - die $key_result{error} unless $key_result{success}; - my $key = $key_result{data}; - - #my $result = $conn->call($method, $key, @args); - my $result = $conn->call( $method, $key, - map { - if ( ref($_) ) { - my( $type, $value) = @{$_}; - $conn->$type($value); - } else { - $conn->string($_); - } - } @args ); - my %result = _infostreet_parse($result); - die $result{error} unless $result{success}; - - $result->{data}; - -} - -#sub infostreet_command_byid { #subroutine, not method; -# my($url, $username, $password, $groupID, $method, @args ) = @_; -# -# infostreet_command -# -#} - -sub _infostreet_parse { #subroutine, not method - my $arg = shift; - map { - my $value = $arg->{$_}; - #warn ref($value); - $value = $value->value() - if ref($value) && $value->isa('Frontier::RPC2::DataType'); - $_=>$value; - } keys %$arg; -} - -1; - diff --git a/FS/FS/part_export/ldap.pm b/FS/FS/part_export/ldap.pm deleted file mode 100644 index 823d99dbf..000000000 --- a/FS/FS/part_export/ldap.pm +++ /dev/null @@ -1,294 +0,0 @@ -package FS::part_export::ldap; - -use vars qw(@ISA %info @saltset); -use Tie::IxHash; -use FS::Record qw( dbh ); -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'dn' => { label=>'Root DN' }, - 'password' => { label=>'Root DN password' }, - 'userdn' => { label=>'User DN' }, - 'attributes' => { label=>'Attributes', - type=>'textarea', - default=>join("\n", - 'uid $username', - 'mail $username\@$domain', - 'uidno $uid', - 'gidno $gid', - 'cn $first', - 'sn $last', - 'mailquota $quota', - 'vmail', - 'location', - 'mailtag', - 'mailhost', - 'mailmessagestore $dir', - 'userpassword $crypt_password', - 'hint', - 'answer $sec_phrase', - 'objectclass top,person,inetOrgPerson', - ), - }, - 'radius' => { label=>'Export RADIUS attributes', type=>'checkbox', }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to LDAP', - 'options' => \%options, - 'notes' => <<'END' -Real-time export to arbitrary LDAP attributes. Requires installation of -Net::LDAP from CPAN. -END -); - -@saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' ); - -sub rebless { shift; } - -sub _export_insert { - my($self, $svc_acct) = (shift, shift); - - #false laziness w/shellcommands.pm - { - no strict 'refs'; - ${$_} = $svc_acct->getfield($_) foreach $svc_acct->fields; - ${$_} = $svc_acct->$_() foreach qw( domain ); - my $cust_pkg = $svc_acct->cust_svc->cust_pkg; - if ( $cust_pkg ) { - my $cust_main = $cust_pkg->cust_main; - ${$_} = $cust_main->getfield($_) foreach qw(first last); - } - } - $crypt_password = ''; #surpress "used only once" warnings - $crypt_password = '{crypt}'. crypt( $svc_acct->_password, - $saltset[int(rand(64))].$saltset[int(rand(64))] ); - - my $username_attrib; - my %attrib = map { /^\s*(\w+)\s+(.*\S)\s*$/; - $username_attrib = $1 if $2 eq '$username'; - ( $1 => eval(qq("$2")) ); } - grep { /^\s*(\w+)\s+(.*\S)\s*$/ } - split("\n", $self->option('attributes')); - - if ( $self->option('radius') ) { - foreach my $table (qw(reply check)) { - my $method = "radius_$table"; - my %radius = $svc_acct->$method(); - foreach my $radius ( keys %radius ) { - ( my $ldap = $radius ) =~ s/\-//g; - $attrib{$ldap} = $radius{$radius}; - } - } - } - - my $err_or_queue = $self->ldap_queue( $svc_acct->svcnum, 'insert', - #$svc_acct->username, - $username_attrib, - %attrib ); - return $err_or_queue unless ref($err_or_queue); - - #groups with LDAP? - #my @groups = $svc_acct->radius_groups; - #if ( @groups ) { - # my $err_or_queue = $self->ldap_queue( - # $svc_acct->svcnum, 'usergroup_insert', - # $svc_acct->username, @groups ); - # return $err_or_queue unless ref($err_or_queue); - #} - - ''; -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - return "can't (yet?) change username with ldap" - if $old->username ne $new->username; - - return "ldap replace unimplemented"; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $jobnum = ''; - #if ( $old->username ne $new->username ) { - # my $err_or_queue = $self->ldap_queue( $new->svcnum, 'rename', - # $new->username, $old->username ); - # unless ( ref($err_or_queue) ) { - # $dbh->rollback if $oldAutoCommit; - # return $err_or_queue; - # } - # $jobnum = $err_or_queue->jobnum; - #} - - foreach my $table (qw(reply check)) { - my $method = "radius_$table"; - my %new = $new->$method(); - my %old = $old->$method(); - if ( grep { !exists $old{$_} #new attributes - || $new{$_} ne $old{$_} #changed - } keys %new - ) { - my $err_or_queue = $self->ldap_queue( $new->svcnum, 'insert', - $table, $new->username, %new ); - unless ( ref($err_or_queue) ) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - if ( $jobnum ) { - my $error = $err_or_queue->depend_insert( $jobnum ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - my @del = grep { !exists $new{$_} } keys %old; - if ( @del ) { - my $err_or_queue = $self->ldap_queue( $new->svcnum, 'attrib_delete', - $table, $new->username, @del ); - unless ( ref($err_or_queue) ) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - if ( $jobnum ) { - my $error = $err_or_queue->depend_insert( $jobnum ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - } - - # (sorta) false laziness with FS::svc_acct::replace - my @oldgroups = @{$old->usergroup}; #uuuh - my @newgroups = $new->radius_groups; - my @delgroups = (); - foreach my $oldgroup ( @oldgroups ) { - if ( grep { $oldgroup eq $_ } @newgroups ) { - @newgroups = grep { $oldgroup ne $_ } @newgroups; - next; - } - push @delgroups, $oldgroup; - } - - if ( @delgroups ) { - my $err_or_queue = $self->ldap_queue( $new->svcnum, 'usergroup_delete', - $new->username, @delgroups ); - unless ( ref($err_or_queue) ) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - if ( $jobnum ) { - my $error = $err_or_queue->depend_insert( $jobnum ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - if ( @newgroups ) { - my $err_or_queue = $self->ldap_queue( $new->svcnum, 'usergroup_insert', - $new->username, @newgroups ); - unless ( ref($err_or_queue) ) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - if ( $jobnum ) { - my $error = $err_or_queue->depend_insert( $jobnum ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - return "ldap delete unimplemented"; - my $err_or_queue = $self->ldap_queue( $svc_acct->svcnum, 'delete', - $svc_acct->username ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub ldap_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::ldap::ldap_$method", - }; - $queue->insert( - $self->machine, - $self->option('dn'), - $self->option('password'), - $self->option('userdn'), - @_, - ) or $queue; -} - -sub ldap_insert { #subroutine, not method - my $ldap = ldap_connect(shift, shift, shift); - my( $userdn, $username_attrib, %attrib ) = @_; - - $userdn = "$username_attrib=$attrib{$username_attrib}, $userdn" - if $username_attrib; - #icky hack, but should be unsurprising to the LDAPers - foreach my $key ( grep { $attrib{$_} =~ /,/ } keys %attrib ) { - $attrib{$key} = [ split(/,/, $attrib{$key}) ]; - } - - my $status = $ldap->add( $userdn, attrs => [ %attrib ] ); - die 'LDAP error: '. $status->error. "\n" if $status->is_error; - - $ldap->unbind; -} - -#sub ldap_delete { #subroutine, not method -# my $dbh = ldap_connect(shift, shift, shift); -# my $username = shift; -# -# foreach my $table (qw( radcheck radreply usergroup )) { -# my $sth = $dbh->prepare( "DELETE FROM $table WHERE UserName = ?" ); -# $sth->execute($username) -# or die "can't delete from $table table: ". $sth->errstr; -# } -# $dbh->disconnect; -#} - -sub ldap_connect { - my( $machine, $dn, $password ) = @_; - my %bind_options; - $bind_options{password} = $password if length($password); - - eval "use Net::LDAP"; - die $@ if $@; - - my $ldap = Net::LDAP->new($machine) or die $@; - my $status = $ldap->bind( $dn, %bind_options ); - die 'LDAP error: '. $status->error. "\n" if $status->is_error; - - $ldap; -} - -1; - diff --git a/FS/FS/part_export/nas_wrapper.pm b/FS/FS/part_export/nas_wrapper.pm deleted file mode 100644 index 2499ba3ee..000000000 --- a/FS/FS/part_export/nas_wrapper.pm +++ /dev/null @@ -1,311 +0,0 @@ -package FS::part_export::nas_wrapper; - -=head1 FS::part_export::nas_wrapper - -This is a meta-export that triggers other exports for FS::svc_broadband objects -based on a set of configurable conditions. These conditions are defined by the -following FS::router virtual fields: - -=over 4 - -=item nas_conf - Per-router meta-export configuration. See L. - -=back - -=head2 nas_conf Syntax - -export_name|routernum[,routernum]|[field,condition[,field,condition]][||...] - -=over 4 - -=item export_name - Name or exportnum of the export to be executed. In order to specify export options you must use the exportnum form. (ex. 'router' for FS::part_export::router). - -=item routernum - FS::router routernum corresponding to the desired FS::router for which this export will be run. - -=item field - FS::svc_broadband field (real or virtual). The following condition (regex) will be matched against the value of this field. - -=item condition - A regular expression to be match against the value of the previously listed FS::svc_broadband field. - -=back - -If multiple routernum's are specified, then the export will be triggered for each router listed. If multiple field/condition pairs are present, then the results of the matches will be and'd. Note that if a false match is found, the rest of the matches may not be checked. - -You can specify multiple export/router/condition sets by concatenating them with '||'. - -=cut - -use strict; -use vars qw(@ISA %info $me $DEBUG); - -use FS::Record qw(qsearchs); -use FS::part_export; - -use Tie::IxHash; -use Data::Dumper qw(Dumper); - -@ISA = qw(FS::part_export); -$me = '[' . __PACKAGE__ . ']'; -$DEBUG = 0; - -%info = ( - 'svc' => 'svc_broadband', - 'desc' => 'A meta-export that triggers other svc_broadband exports.', - 'options' => {}, - 'notes' => '', -); - - -sub rebless { shift; } - -sub _export_insert { - my($self) = shift; - $self->_export_command('insert', @_); -} - -sub _export_delete { - my($self) = shift; - $self->_export_command('delete', @_); -} - -sub _export_suspend { - my($self) = shift; - $self->_export_command('suspend', @_); -} - -sub _export_unsuspend { - my($self) = shift; - $self->_export_command('unsuspend', @_); -} - -sub _export_replace { - my($self) = shift; - $self->_export_command('replace', @_); -} - -sub _export_command { - my ( $self, $action, $svc_broadband) = (shift, shift, shift); - - my ($new, $old); - if ($action eq 'replace') { - $new = $svc_broadband; - $old = shift; - } - - my $router = $svc_broadband->addr_block->router; - - return '' unless grep(/^nas_conf$/, $router->fields); - my $nas_conf = $router->nas_conf; - - my $child_exports = &_parse_nas_conf($nas_conf); - - my $error = ''; - - my $queue_child_exports = {}; - - # Similar to FS::svc_Common::replace, calling insert, delete, and replace - # exports where necessary depending on which conditions match. - if ($action eq 'replace') { - - my @new_child_exports = (); - my @old_child_exports = (); - - # Find all the matching "new" child exports. - foreach my $child_export (@$child_exports) { - my $match = &_test_child_export_conditions( - $child_export->{'conditions'}, - $new, - ); - - if ($match) { - push @new_child_exports, $child_export; - } - } - - # Find all the matching "old" child exports. - foreach my $child_export (@$child_exports) { - my $match = &_test_child_export_conditions( - $child_export->{'conditions'}, - $old, - ); - - if ($match) { - push @old_child_exports, $child_export; - } - } - - # Insert exports for new. - push @{$queue_child_exports->{'insert'}}, ( - map { - my $new_child_export = $_; - if (! grep { $new_child_export eq $_ } @old_child_exports) { - $new_child_export->{'args'} = [ $new ]; - $new_child_export; - } else { - (); - } - } @new_child_exports - ); - - # Replace exports for new and old. - push @{$queue_child_exports->{'replace'}}, ( - map { - my $new_child_export = $_; - if (grep { $new_child_export eq $_ } @old_child_exports) { - $new_child_export->{'args'} = [ $new, $old ]; - $new_child_export; - } else { - (); - } - } @new_child_exports - ); - - # Delete exports for old. - push @{$queue_child_exports->{'delete'}}, ( - grep { - my $old_child_export = $_; - if (! grep { $old_child_export eq $_ } @new_child_exports) { - $old_child_export->{'args'} = [ $old ]; - $old_child_export; - } else { - (); - } - } @old_child_exports - ); - - } else { - - foreach my $child_export (@$child_exports) { - my $match = &_test_child_export_conditions( - $child_export->{'conditions'}, - $svc_broadband, - ); - - if ($match) { - $child_export->{'args'} = [ $svc_broadband ]; - push @{$queue_child_exports->{$action}}, $child_export; - } - } - - } - - warn "[debug]$me Dispatching child exports... " - . &Dumper($queue_child_exports) if $DEBUG; - - # Actually call the child exports now, with their preset action and arguments. - foreach my $_action (keys(%$queue_child_exports)) { - - foreach my $_child_export (@{$queue_child_exports->{$_action}}) { - $error = &_dispatch_child_export( - $_child_export, - $_action, - @{$_child_export->{'args'}}, - @_, - ); - - # Bail if there's an error queueing one of the exports. - # This will all get rolled-back. - return $error if $error; - } - - } - - return ''; - -} - - -sub _parse_nas_conf { - - my $nas_conf = shift; - my @child_exports = (); - - foreach my $cond_set ($nas_conf =~ m/(.*?[^\\])(?:\|\||$)/g) { - - warn "[debug]$me cond_set is '$cond_set'" if $DEBUG; - - my @args = $cond_set =~ m/(.*?[^\\])(?:\||$)/g; - - my %child_export = ( - 'export' => $args[0], - 'routernum' => [ split(/,\s*/, $args[1]) ], - 'conditions' => { @args[2..$#args] }, - ); - - warn "[debug]$me " . Dumper(\%child_export) if $DEBUG; - - push @child_exports, { %child_export }; - - } - - return \@child_exports; - -} - -sub _dispatch_child_export { - - my ($child_export, $action, @args) = (shift, shift, @_); - - my $child_export_name = $child_export->{'export'}; - my @routernums = @{$child_export->{'routernum'}}; - - my $error = ''; - - # And the real hack begins... - - my $child_part_export; - if ($child_export_name =~ /^(\d+)$/) { - my $exportnum = $1; - $child_part_export = qsearchs('part_export', { exportnum => $exportnum }); - unless ($child_part_export) { - return "No such FS::part_export with exportnum '$exportnum'"; - } - - $child_export_name = $child_part_export->exporttype; - } else { - $child_part_export = new FS::part_export { - 'exporttype' => $child_export_name, - 'machine' => 'bogus', - }; - } - - warn "[debug]$me running export '$child_export_name' for routernum(s) '" - . join(',', @routernums) . "'" if $DEBUG; - - my $cmd_method = "_export_$action"; - - foreach my $routernum (@routernums) { - $error ||= $child_part_export->$cmd_method( - @args, - 'routernum' => $routernum, - ); - last if $error; - } - - warn "[debug]$me export '$child_export_name' returned '$error'" - if $DEBUG; - - return $error; - -} - -sub _test_child_export_conditions { - - my ($conditions, $svc_broadband) = (shift, shift); - - my $match = 1; - foreach my $cond_field (keys %$conditions) { - my $cond_regex = $conditions->{$cond_field}; - warn "[debug]$me Condition: $cond_field =~ /$cond_regex/" if $DEBUG; - unless ($svc_broadband->get($cond_field) =~ /$cond_regex/) { - $match = 0; - last; - } - } - - return $match; - -} - - -1; - diff --git a/FS/FS/part_export/null.pm b/FS/FS/part_export/null.pm deleted file mode 100644 index 0145af3a4..000000000 --- a/FS/FS/part_export/null.pm +++ /dev/null @@ -1,13 +0,0 @@ -package FS::part_export::null; - -use vars qw(@ISA); -use FS::part_export; - -@ISA = qw(FS::part_export); - -sub rebless { shift; } - -sub _export_insert {} -sub _export_replace {} -sub _export_delete {} - diff --git a/FS/FS/part_export/passwdfile.pm b/FS/FS/part_export/passwdfile.pm deleted file mode 100644 index 2978d2503..000000000 --- a/FS/FS/part_export/passwdfile.pm +++ /dev/null @@ -1,18 +0,0 @@ -package FS::part_export::passwdfile; - -use strict; -use vars qw(@ISA %options); -use Tie::IxHash; -use FS::part_export::null; - -@ISA = qw(FS::part_export::null); - -tie %options, 'Tie::IxHash', - 'crypt' => { label=>'Password encryption', - type=>'select', options=>[qw(crypt md5)], - default=>'crypt', - }, -; - -1; - diff --git a/FS/FS/part_export/postfix.pm b/FS/FS/part_export/postfix.pm deleted file mode 100644 index 4fd19ee61..000000000 --- a/FS/FS/part_export/postfix.pm +++ /dev/null @@ -1,32 +0,0 @@ -package FS::part_export::postfix; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export::null; - -@ISA = qw(FS::part_export::null); - -tie my %options, 'Tie::IxHash', - 'user' => { label=>'Remote username', default=>'root' }, - 'aliases' => { label=>'aliases file location', default=>'/etc/aliases' }, - 'virtual' => { label=>'virtual file location', default=>'/etc/postfix/virtual' }, - 'mydomain' => { label=>'local domain', default=>'' }, - 'newaliases' => { label=>'newaliases command', default=>'newaliases' }, - 'postmap' => { label=>'postmap command', - default=>'postmap hash:/etc/postfix/virtual', }, - 'reload' => { label=>'reload command', - default=>'postfix reload' }, -; - -%info = ( - 'svc' => 'svc_forward', - 'desc' => 'Postfix text files', - 'options' => \%options, - 'notes' => <<'END' -Batch export of Postfix aliases and virtual files. -File::Rsync -must be installed. Run bin/postfix.export to export the files. -END -); - -1; diff --git a/FS/FS/part_export/prizm.pm b/FS/FS/part_export/prizm.pm deleted file mode 100644 index 75b10a763..000000000 --- a/FS/FS/part_export/prizm.pm +++ /dev/null @@ -1,540 +0,0 @@ -package FS::part_export::prizm; - -use vars qw(@ISA %info %options $DEBUG); -use Tie::IxHash; -use FS::Record qw(fields dbh); -use FS::part_export; - -@ISA = qw(FS::part_export); -$DEBUG = 1; - -tie %options, 'Tie::IxHash', - 'url' => { label => 'Northbound url', default=>'https://localhost:8443/prizm/nbi' }, - 'user' => { label => 'Northbound username', default=>'nbi' }, - 'password' => { label => 'Password', default => '' }, - 'ems' => { label => 'Full EMS', type => 'checkbox' }, - 'always_bam' => { label => 'Always activate/suspend authentication', type => 'checkbox' }, - 'element_name_length' => { label => 'Size of siteName (best left blank)' }, -; - -my $notes = <<'EOT'; -Real-time export of svc_broadband, cust_pkg, and cust_main -record data to Motorola -Canopy Prizm -software via the Northbound interface.

    - -Freeside will attempt to create an element in an existing network with the -values provided in svc_broadband. Of particular interest are -
      -
    • mac address - used to identify the element -
    • vlan profile - an exact match for a vlan profiles defined in prizm -
    • ip address - defines the management ip address of the prizm element -
    • latitude - GPS latitude -
    • longitude - GPS longitude -
    • altitude - GPS altitude -
    - -In addition freeside attempts to set the service plan name in prizm to the -name of the package in which the service resides. - -The service is associated with a customer in prizm as well, and freeside -will create the customer should none already exist with import id matching -the freeside customer number. The following fields are set. - -
      -
    • importId - the freeside customer number -
    • customerType - freeside -
    • customerName - the name associated with the freeside shipping address -
    • address1 - the shipping address -
    • address2 -
    • city -
    • state -
    • zipCode -
    • country -
    • workPhone - the daytime phone number -
    • homePhone - the night phone number -
    • freesideId - the freeside customer number -
    - - Additionally set on the element are -
      -
    • Site Name - The shipping name followed by the service broadband description field -
    • Site Location - the shipping address -
    • Site Contact - the daytime and night phone numbers -
    - -Freeside provisions, suspends, and unsuspends elements BAM only unless the -'Full EMS' checkbox is checked.

    - -When freeside provisions an element the siteName is copied internally by -prizm in such a manner that it is possible for the value to exceed the size -of the column used in the prizm database. Therefore freeside truncates -by default this value to 50 characters. It is thought that this -column is the account_name column of the element_user_account table. It -may be possible to lift this limit by modifying the prizm database and -setting a new appropriate value on this export. This is untested and -possibly harmful. - -EOT - -%info = ( - 'svc' => 'svc_broadband', - 'desc' => 'Real-time export to Northbound Interface', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => $notes, -); - -sub prizm_command { - my ($self,$namespace,$method) = (shift,shift,shift); - - eval "use Net::Prizm 0.04 qw(CustomerInfo PrizmElement);"; - die $@ if $@; - - my $prizm = new Net::Prizm ( - namespace => $namespace, - url => $self->option('url'), - user => $self->option('user'), - password => $self->option('password'), - ); - - $prizm->$method(@_); -} - -sub queued_prizm_command { # subroutine - my( $url, $user, $password, $namespace, $method, @args ) = @_; - - eval "use Net::Prizm 0.04 qw(CustomerInfo PrizmElement);"; - die $@ if $@; - - my $prizm = new Net::Prizm ( - namespace => $namespace, - url => $url, - user => $user, - password => $password, - ); - - $err_or_som = $prizm->$method( @args); - - die $err_or_som - unless ref($err_or_som); - - ''; - -} - -sub _export_insert { - my( $self, $svc ) = ( shift, shift ); - - my $cust_main = $svc->cust_svc->cust_pkg->cust_main; - - my $err_or_som = $self->prizm_command('CustomerIfService', 'getCustomers', - ['import_id'], - [$cust_main->custnum], - ['='], - ); - return $err_or_som - unless ref($err_or_som); - - my $pre = ''; - if ( defined $cust_main->dbdef_table->column('ship_last') ) { - $pre = $cust_main->ship_last ? 'ship_' : ''; - } - my $name = $pre ? $cust_main->ship_name : $cust_main->name; - my $location = join(" ", map { my $method = "$pre$_"; $cust_main->$method } - qw (address1 address2 city state zip) - ); - my $contact = join(" ", map { my $method = "$pre$_"; $cust_main->$method } - qw (daytime night) - ); - - my $pcustomer; - if ($err_or_som->result->[0]) { - $pcustomer = $err_or_som->result->[0]->customerId; - }else{ - my $chashref = $cust_main->hashref; - my $customerinfo = { - importId => $cust_main->custnum, - customerName => $name, - customerType => 'freeside', - address1 => $chashref->{"${pre}address1"}, - address2 => $chashref->{"${pre}address2"}, - city => $chashref->{"${pre}city"}, - state => $chashref->{"${pre}state"}, - zipCode => $chashref->{"${pre}zip"}, - workPhone => $chashref->{"${pre}daytime"}, - homePhone => $chashref->{"${pre}night"}, - email => @{[$cust_main->invoicing_list_emailonly]}[0], - extraFieldNames => [ 'country', 'freesideId', - ], - extraFieldValues => [ $chashref->{"${pre}country"}, $cust_main->custnum, - ], - }; - - $err_or_som = $self->prizm_command('CustomerIfService', 'addCustomer', - $customerinfo); - return $err_or_som - unless ref($err_or_som); - - $pcustomer = $err_or_som->result; - } - warn "multiple prizm customers found for $cust_main->custnum" - if scalar(@$pcustomer) > 1; - -# #kinda big question/expensive -# $err_or_som = $self->prizm_command('NetworkIfService', 'getPrizmElements', -# ['Network Default Gateway Address'], -# [$svc->addr_block->ip_gateway], -# ['='], -# ); -# return $err_or_som -# unless ref($err_or_som); -# -# return "No elements in network" unless exists $err_or_som->result->[0]; - - my $networkid = 0; -# for (my $i = 0; $i < $err_or_som->result->[0]->attributeNames; $i++) { -# if ($err_or_som->result->[0]->attributeNames->[$i] eq "Network.ID"){ -# $networkid = $err_or_som->result->[0]->attributeValues->[$i]; -# last; -# } -# } - - my $element_name_length = 50; - $element_name_length = $1 - if $self->option('element_name_length') =~ /^\s*(\d+)\s*$/; - $err_or_som = $self->prizm_command('NetworkIfService', 'addProvisionedElement', - $networkid, - $svc->mac_addr, - substr($name . " " . $svc->description, - 0, $element_name_length), - $location, - $contact, - sprintf("%032X", $svc->authkey), - $svc->cust_svc->cust_pkg->part_pkg->pkg, - $svc->vlan_profile, - ($self->option('ems') ? 1 : 0 ), - ); - return $err_or_som - unless ref($err_or_som); - - my (@names) = ('Management IP', - 'GPS Latitude', - 'GPS Longitude', - 'GPS Altitude', - 'Site Name', - 'Site Location', - 'Site Contact', - ); - my (@values) = ($svc->ip_addr, - $svc->latitude, - $svc->longitude, - $svc->altitude, - $name . " " . $svc->description, - $location, - $contact, - ); - $element = $err_or_som->result->elementId; - $err_or_som = $self->prizm_command('NetworkIfService', 'setElementConfig', - [ $element ], - \@names, - \@values, - 0, - 1, - ); - return $err_or_som - unless ref($err_or_som); - - $err_or_som = $self->prizm_command('NetworkIfService', 'setElementConfigSet', - [ $element ], - $svc->vlan_profile, - 0, - 1, - ); - return $err_or_som - unless ref($err_or_som); - - $err_or_som = $self->prizm_command('NetworkIfService', 'setElementConfigSet', - [ $element ], - $svc->cust_svc->cust_pkg->part_pkg->pkg, - 0, - 1, - ); - return $err_or_som - unless ref($err_or_som); - - $err_or_som = $self->prizm_command('NetworkIfService', - 'activateNetworkElements', - [ $element ], - 1, - ( $self->option('ems') ? 1 : 0 ), - ); - - return $err_or_som - unless ref($err_or_som); - - $err_or_som = $self->prizm_command('CustomerIfService', - 'addElementToCustomer', - 0, - $cust_main->custnum, - 0, - $svc->mac_addr, - ); - - return $err_or_som - unless ref($err_or_som); - - ''; -} - -sub _export_delete { - my( $self, $svc ) = ( shift, shift ); - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $cust_pkg = $svc->cust_svc->cust_pkg; - - my $depend = []; - - if ($cust_pkg) { - my $queue = new FS::queue { - 'svcnum' => $svc->svcnum, - 'job' => 'FS::part_export::prizm::queued_prizm_command', - }; - my $error = $queue->insert( - ( map { $self->option($_) } - qw( url user password ) ), - 'CustomerIfService', - 'removeElementFromCustomer', - 0, - $cust_pkg->custnum, - 0, - $svc->mac_addr, - ); - - if ($error) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - push @$depend, $queue->jobnum; - } - - my $err_or_queue = - $self->queue_statuschange('deleteElement', $depend, $svc, 1); - - unless (ref($err_or_queue)) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -sub _export_replace { - my( $self, $new, $old ) = ( shift, shift, shift ); - - my $err_or_som = $self->prizm_command('NetworkIfService', 'getPrizmElements', - [ 'MAC Address' ], - [ $old->mac_addr ], - [ '=' ], - ); - return $err_or_som - unless ref($err_or_som); - - return "Can't find prizm element for " . $old->mac_addr - unless $err_or_som->result->[0]; - - my %freeside2prizm = ( mac_addr => 'MAC Address', - ip_addr => 'Management IP', - latitude => 'GPS Latitude', - longitude => 'GPS Longitude', - altitude => 'GPS Altitude', - authkey => 'Authentication Key', - ); - - my (@values); - my (@names) = map { push @values, $new->$_; $freeside2prizm{$_} } - grep { $old->$_ ne $new->$_ } - grep { exists($freeside2prizm{$_}) } - fields( 'svc_broadband' ); - - if ($old->description ne $new->description) { - my $cust_main = $old->cust_svc->cust_pkg->cust_main; - my $name = defined($cust_main->dbdef_table->column('ship_last')) - ? $cust_main->ship_name - : $cust_main->name; - push @values, $name . " " . $new->description; - push @names, "Site Name"; - } - - my $element = $err_or_som->result->[0]->elementId; - - $err_or_som = $self->prizm_command('NetworkIfService', 'setElementConfig', - [ $element ], - \@names, - \@values, - 0, - 1, - ); - return $err_or_som - unless ref($err_or_som); - - $err_or_som = $self->prizm_command('NetworkIfService', 'setElementConfigSet', - [ $element ], - $new->vlan_profile, - 0, - 1, - ) - if $old->vlan_profile ne $new->vlan_profile; - - return $err_or_som - unless ref($err_or_som); - - ''; - -} - -sub _export_suspend { - my( $self, $svc ) = ( shift, shift ); - my $depend = []; - my $ems = $self->option('ems') ? 1 : 0; - my $err_or_queue = ''; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - $err_or_queue = - $self->queue_statuschange('suspendNetworkElements', [], $svc, 1, $ems); - unless (ref($err_or_queue)) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - push @$depend, $err_or_queue->jobnum; - - if ($ems && $self->option('always_bam')) { - $err_or_queue = - $self->queue_statuschange('suspendNetworkElements', $depend, $svc, 1, 0); - unless (ref($err_or_queue)) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -sub _export_unsuspend { - my( $self, $svc ) = ( shift, shift ); - my $depend = []; - my $ems = $self->option('ems') ? 1 : 0; - my $err_or_queue = ''; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - if ($ems && $self->option('always_bam')) { - $err_or_queue = - $self->queue_statuschange('activateNetworkElements', [], $svc, 1, 0); - unless (ref($err_or_queue)) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - push @$depend, $err_or_queue->jobnum; - } - - $err_or_queue = - $self->queue_statuschange('activateNetworkElements', $depend, $svc, 1, $ems); - unless (ref($err_or_queue)) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -sub export_links { - my( $self, $svc, $arrayref ) = ( shift, shift, shift ); - - push @$arrayref, 'SM'; - - ''; -} - -sub queue_statuschange { - my( $self, $method, $jobs, $svc, @args ) = @_; - - # already in a transaction and can't die here - - my $queue = new FS::queue { - 'svcnum' => $svc->svcnum, - 'job' => 'FS::part_export::prizm::statuschange', - }; - my $error = $queue->insert( - ( map { $self->option($_) } - qw( url user password ) ), - $method, - $svc->mac_addr, - @args, - ); - - unless ($error) { # successful insertion - foreach my $job ( @$jobs ) { - $error ||= $queue->depend_insert($job); - } - } - - $error or $queue; -} - -sub statuschange { # subroutine - my( $url, $user, $password, $method, $mac_addr, @args) = @_; - - eval "use Net::Prizm 0.04 qw(CustomerInfo PrizmElement);"; - die $@ if $@; - - my $prizm = new Net::Prizm ( - namespace => 'NetworkIfService', - url => $url, - user => $user, - password => $password, - ); - - my $err_or_som = $prizm->getPrizmElements( [ 'MAC Address' ], - [ $mac_addr ], - [ '=' ], - ); - die $err_or_som - unless ref($err_or_som); - - die "Can't find prizm element for " . $mac_addr - unless $err_or_som->result->[0]; - - my $arg1; - # yuck! - if ($method =~ /suspendNetworkElements/ || $method =~ /activateNetworkElements/) { - $arg1 = [ $err_or_som->result->[0]->elementId ]; - }else{ - $arg1 = $err_or_som->result->[0]->elementId; - } - $err_or_som = $prizm->$method( $arg1, @args ); - - die $err_or_som - unless ref($err_or_som); - - ''; - -} - - -1; diff --git a/FS/FS/part_export/radiator.pm b/FS/FS/part_export/radiator.pm deleted file mode 100644 index 2ac3edb22..000000000 --- a/FS/FS/part_export/radiator.pm +++ /dev/null @@ -1,167 +0,0 @@ -package FS::part_export::radiator; - -use vars qw(@ISA %info $radusers); -use Tie::IxHash; -use FS::part_export::sqlradius; - -tie my %options, 'Tie::IxHash', %FS::part_export::sqlradius::options; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to RADIATOR', - 'options' => \%options, - 'nodomain' => '', - 'notes' => <<'END', -Real-time export of the radusers table to any SQL database in -Radiator-native format. -To setup accounting, see the RADIATOR documentation for hooks to update -a standard radacct table. -END -); - -@ISA = qw(FS::part_export::sqlradius); #for regular sqlradius accounting - -$radusers = 'RADUSERS'; #MySQL is case sensitive about table names! huh - -#sub export_username { -# my($self, $svc_acct) = (shift, shift); -# $svc_acct->email; -#} - -sub _export_insert { - my( $self, $svc_acct ) = (shift, shift); - - $self->radiator_queue( - $svc_acct->svcnum, - 'insert', - $self->_radiator_hash($svc_acct), - ); -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - -# return "can't (yet) change domain with radiator export" -# if $old->domain ne $new->domain; -# return "can't (yet) change username with radiator export" -# if $old->username ne $new->username; - - $self->radiator_queue( - $new->svcnum, - 'replace', - $self->export_username($old), - $self->_radiator_hash($new), - ); -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - - $self->radiator_queue( - $svc_acct->svcnum, - 'delete', - $self->export_username($svc_acct), - ); -} - -sub _radiator_hash { - my( $self, $svc_acct ) = @_; - my %hash = ( - 'username' => $self->export_username($svc_acct), - 'pass_word' => $svc_acct->crypt_password, - 'fullname' => $svc_acct->finger, - map { my $method = "radius_$_"; $_ => $svc_acct->$method(); } - qw( framed_filter_id framed_mtu framed_netmask framed_protocol - framed_routing login_host login_service login_tcp_port ) - ); - $hash{'timeleft'} = $svc_acct->seconds - if $svc_acct->seconds =~ /^\d+$/; - $hash{'staticaddress'} = $svc_acct->slipip - if $svc_acct->slipip =~ /^[\d\.]+$/; # and $self->slipip ne '0.0.0.0'; - - $hash{'servicename'} = ( $svc_acct->radius_groups )[0]; - - my $cust_pkg = $svc_acct->cust_svc->cust_pkg; - $hash{'validto'} = $cust_pkg->bill - if $cust_pkg && $cust_pkg->part_pkg->is_prepaid && $cust_pkg->bill; - - #some other random stuff, should probably be attributes or virtual fields - #$hash{'state'} = 0; #only inserts - #$hash{'badlogins'} = 0; #only inserts - $hash{'maxlogins'} = 1; - $hash{'addeddate'} = $cust_pkg->setup - if $cust_pkg && $cust_pkg->setup; - $hash{'validfrom'} = $cust_pkg->last_bill || $cust_pkg->setup - if $cust_pkg && ( $cust_pkg->last_bill || $cust_pkg->setup ); - $hash{'state'} = $cust_pkg->susp ? 1 : 0 - if $cust_pkg; - - %hash; -} - -sub radiator_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::radiator::radiator_$method", - }; - $queue->insert( - $self->option('datasrc'), - $self->option('username'), - $self->option('password'), - @_, - ); # or $queue; -} - -sub radiator_insert { #subroutine, not method - my $dbh = radiator_connect(shift, shift, shift); - my %hash = @_; - $hash{'state'} = 0; #see "random stuff" above - $hash{'badlogins'} = 0; #see "random stuff" above - - my $sth = $dbh->prepare( - "INSERT INTO $radusers ( ". join(', ', keys %hash ). ' ) '. - 'VALUES ( '. join(', ', map '?', keys %hash ). ' ) ' - ) or die $dbh->errstr; - $sth->execute( values %hash ) - or die $sth->errstr; - - $dbh->disconnect; - -} - -sub radiator_replace { #subroutine, not method - my $dbh = radiator_connect(shift, shift, shift); - my ( $old_username, %hash ) = @_; - - my $sth = $dbh->prepare( - "UPDATE $radusers SET ". join(', ', map " $_ = ?", keys %hash ). - ' WHERE username = ?' - ) or die $dbh->errstr; - $sth->execute( values(%hash), $old_username ) - or die $sth->errstr; - - $dbh->disconnect; -} - -sub radiator_delete { #subroutine, not method - my $dbh = radiator_connect(shift, shift, shift); - my ( $username ) = @_; - - my $sth = $dbh->prepare( - "DELETE FROM $radusers WHERE username = ?" - ) or die $dbh->errstr; - $sth->execute( $username ) - or die $sth->errstr; - - $dbh->disconnect; -} - - -sub radiator_connect { - #my($datasrc, $username, $password) = @_; - #DBI->connect($datasrc, $username, $password) or die $DBI::errstr; - DBI->connect(@_) or die $DBI::errstr; -} - -1; diff --git a/FS/FS/part_export/router.pm b/FS/FS/part_export/router.pm deleted file mode 100644 index 42aa51cf6..000000000 --- a/FS/FS/part_export/router.pm +++ /dev/null @@ -1,375 +0,0 @@ -package FS::part_export::router; - -=head1 FS::part_export::router - -This export connects to a router and transmits commands via telnet or SSH. -It requires the following custom router fields: - -=head1 Required custom fields - -=over 4 - -=item admin_address - IP address (or hostname) to connect. - -=item admin_user - Username for the router. - -=item admin_password - Password for the router. - -=item admin_protocol - Protocol to use for the router. 'telnet' or 'ssh'. The ssh protocol only support password-less (ie. RSA key) authentication. As such, the admin_password field isn't used if ssh is specified. - -=item admin_timeout - Time in seconds to wait for a connection. - -=item admin_prompt - A regular expression matching the router's prompt. See Net::Telnet for details. Only applies to the 'telnet' protocol. - -=item admin_cmd_insert - Insert export command. - -=item admin_cmd_insert_error - Insert export command error pattern. - -=item admin_cmd_delete - Delete export command. - -=item admin_cmd_delete_error - Delete export command error pattern. - -=item admin_cmd_replace - Replace export command. - -=item admin_cmd_replace_error - Replace export command error pattern. - -=item admin_cmd_suspend - Suspend export command. - -=item admin_cmd_suspend_error - Support export command error pattern. - -=item admin_cmd_unsuspend - Unsuspend export command. - -=item admin_cmd_unsuspend_error - Unsuspend export command error pattern. - -The admin_cmd_* virtual fields, if set, will be processed in one of two ways. After being expanded, they will be run on the router specified by admin_address using the protocol specified by admin_protocol. - -=over 4 - -=item Text::Template - -If the export command contains the string [@--, then it will be processed with Text::Template using [@-- and --@] as delimeters. - -=item eval - -If the export command does not contain [@--, it will be double quoted and eval'd. - -=back - -The admin_cmd_*_error virtual fields, if set, define a regular expression that will be matched against the output of the command being run. If the pattern matches, an error will be raised using the output as the error. - -If any of the required router virtual fields are not defined, then the export silently declines. - -=back - -The export itself takes no options. - -=cut - -use strict; -use vars qw(@ISA %info $me $DEBUG); -use Tie::IxHash; -use Text::Template; - -use FS::Record qw(qsearchs); -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'protocol' => { - label=>'Protocol', - type =>'select', - options => [qw(telnet ssh)], - default => 'telnet'}, -; - -%info = ( - 'svc' => 'svc_broadband', - 'desc' => 'Send a command to a router.', - 'options' => \%options, - 'notes' => 'Installation of Net::Telnet from CPAN is required for telnet connections. This export will execute if the following virtual fields are set on the router: admin_user, admin_password, admin_address, admin_timeout, admin_prompt. Option virtual fields are: admin_cmd_insert, admin_cmd_replace, admin_cmd_delete, admin_cmd_suspend, admin_cmd_unsuspend. See the module documentation for a full list of required/supported router virtual fields.', -); - -$me = '[' . __PACKAGE__ . ']'; -$DEBUG = 1; - - -sub rebless { shift; } - -sub _field_prefix { 'admin'; } - -sub _req_router_fields { - map { - $_[0]->_field_prefix . '_' . $_ - } (qw(address prompt user)); -} - -sub _export_insert { - my($self) = shift; - warn "Running insert for " . ref($self); - $self->_export_command('insert', @_); -} - -sub _export_delete { - my($self) = shift; - $self->_export_command('delete', @_); -} - -sub _export_suspend { - my($self) = shift; - $self->_export_command('suspend', @_); -} - -sub _export_unsuspend { - my($self) = shift; - $self->_export_command('unsuspend', @_); -} - -sub _export_replace { - my($self) = shift; - $self->_export_command('replace', @_); -} - -sub _export_command { - my ($self, $action, $svc_broadband) = (shift, shift, shift); - my ($error, $old); - - if ($action eq 'replace') { - $old = shift; - } - - warn "[debug]$me Processing action '$action'" if $DEBUG; - - # fetch router info - my $router = $self->_get_router($svc_broadband, @_); - unless ($router) { - return "Unable to lookup router for $action export"; - } - - unless ($self->_check_router_fields($router)) { - # Virtual fields aren't defined. Exit silently. - warn "[debug]$me Required router virtual fields not defined. Returning..." - if $DEBUG; - return ''; - } - - my $args; - ($error, $args) = $self->_prepare_args( - $action, - $router, - $svc_broadband, - ($old ? $old : ()), - @_ - ); - - if ($error) { - # Error occured while preparing args. - return $error; - } elsif (not defined $args) { - # Silently decline. - warn "[debug]$me Declining '$action' export" if $DEBUG; - return ''; - } # else ... queue the export. - - warn "[debug]$me Queueing with args: " . join(', ', @$args) if $DEBUG; - - return( - $self->_queue( - $svc_broadband->svcnum, - $self->_get_cmd_sub($svc_broadband, $router), - @$args - ) - ); - -} - -sub _prepare_args { - - my ($self, $action, $router, $svc_broadband) = (shift, shift, shift, shift); - my $old = shift if ($action eq 'replace'); - my $error = ''; - - my $field_prefix = $self->_field_prefix; - my $command = $router->getfield("${field_prefix}_cmd_${action}"); - unless ($command) { - warn "[debug]$me router custom field '${field_prefix}_cmd_$action' " - . "is not defined." if $DEBUG; - return ''; - } - - if ($command =~ /\[\@--/) { # Use Text::Template - - my $template_data = {}; - - if ($action eq 'replace') { - $template_data->{"old_$_"} = $old->getfield($_) foreach $old->fields; - $template_data->{"new_$_"} = $svc_broadband->getfield($_) - foreach $svc_broadband->fields; - } else { - $template_data->{$_} = $svc_broadband->getfield($_) - foreach $svc_broadband->fields; - } - - my $template = new Text::Template ( - TYPE => 'STRING', - SOURCE => $command, - DELIMITERS => [ '[@--', '--@]' ], - ) or return "Unable to construct template for router command: " - . $Text::Template::ERROR; - - $command = $template->fill_in( - HASH => $template_data, - BROKEN_ARG => \$error, - BROKEN => sub { - my %bargs = @_; - my $err = $bargs{'arg'}; - $$err = $bargs{'error'}; - return undef; - }, - ); - - if (not defined $command or $error) { - $error ||= $Text::Template::ERROR; - return "Unable to fill-in template for router command: $error"; - } - - } else { # Use eval - no strict 'vars'; - no strict 'refs'; - - if ($action eq 'replace') { - ${"old_$_"} = $old->getfield($_) foreach $old->fields; - ${"new_$_"} = $svc_broadband->getfield($_) foreach $svc_broadband->fields; - $command = eval(qq("$command")); - } else { - ${$_} = $svc_broadband->getfield($_) foreach $svc_broadband->fields; - $command = eval(qq("$command")); - } - return $@ if $@; - } - - my $args = [ - 'user' => $router->getfield($field_prefix . '_user'), - 'password' => $router->getfield($field_prefix . '_password'), - 'host' => $router->getfield($field_prefix . '_address'), - 'Timeout' => $router->getfield($field_prefix . '_timeout'), - 'Prompt' => $router->getfield($field_prefix . '_prompt'), - 'command' => $command, - ]; - - my $error_check = $router->getfield("${field_prefix}_cmd_${action}_error"); - push(@$args, ('error_check' => $error_check)) if ($error_check); - - return('', $args); - -} - -sub _get_cmd_sub { - - my ($self, $svc_broadband, $router) = (shift, shift, shift); - - my $protocol = ( - $router->getfield($self->_field_prefix . '_protocol') =~ /^(telnet|ssh)$/ - ) ? $1 : 'telnet'; - - return(ref($self)."::".$protocol."_cmd"); - -} - -sub _check_router_fields { - - my ($self, $router, $action) = (shift, shift, shift); - my @check_fields = $self->_req_router_fields; - - foreach (@check_fields) { - if ($router->getfield($_) eq '') { - warn "[debug]$me Required field '$_' is unset" if $DEBUG; - return 0; - } else { - return 1; - } - } - -} - -sub _queue { - my( $self, $svcnum, $cmd_sub ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - }; - $queue->job($cmd_sub); - $queue->insert(@_); -} - -sub _get_router { - my ($self, $svc_broadband, %args) = (shift, shift, shift, @_); - - my $router; - if ($args{'routernum'}) { - $router = qsearchs('router', { routernum => $args{'routernum'}}); - } else { - $router = $svc_broadband->addr_block->router; - } - - return($router); - -} - - -# Subroutines -sub ssh_cmd { - my %arg = @_; - - eval 'use Net::SSH \'0.08\''; - die $@ if $@; - - my @out = &Net::SSH::ssh_cmd( { @_ } ); - my $error = &_cmd_error_check(\%arg, \@out); - - die ("Error while processing ssh command: $error") if $error; - - return ''; - -} - -sub telnet_cmd { - my %arg = @_; - - eval 'use Net::Telnet'; - die $@ if $@; - - my $t = new Net::Telnet (Timeout => $arg{'Timeout'}, - Prompt => $arg{'Prompt'}); - $t->open($arg{'host'}); - $t->login($arg{'user'}, $arg{'password'}); - my @out = $t->cmd($arg{'command'}); - my $error = &_cmd_error_check(\%arg, \@out); - - die ("Error while processing telnet command: $error") if $error; - - return ''; - -} - -sub _cmd_error_check { - my ($arg, $out) = (shift, shift); - - die "_cmd_error_check called without proper arguments" - unless (ref($arg) eq 'HASH' and ref($out) eq 'ARRAY'); - - unless (exists($arg->{'error_check'}) and $arg->{'error_check'} ne '') { - #Preserve default behaviour and return output if a check isn't defined. - warn "Output from router command: " . join('', @$out) if $DEBUG; - return ''; - } - - my $error_check = $arg->{'error_check'}; - foreach (@$out) { - return $_ if /$error_check/; - } - - return ''; - -} - -1; diff --git a/FS/FS/part_export/shellcommands.pm b/FS/FS/part_export/shellcommands.pm deleted file mode 100644 index 29e0a5799..000000000 --- a/FS/FS/part_export/shellcommands.pm +++ /dev/null @@ -1,399 +0,0 @@ -package FS::part_export::shellcommands; - -use vars qw(@ISA %info); -use Tie::IxHash; -use String::ShellQuote; -use FS::part_export; -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'user' => { label=>'Remote username', default=>'root' }, - 'useradd' => { label=>'Insert command', - default=>'useradd -c $finger -d $dir -m -s $shell -u $uid -p $crypt_password $username' - #default=>'cp -pr /etc/skel $dir; chown -R $uid.$gid $dir' - }, - 'useradd_stdin' => { label=>'Insert command STDIN', - type =>'textarea', - default=>'', - }, - 'userdel' => { label=>'Delete command', - default=>'userdel -r $username', - #default=>'rm -rf $dir', - }, - 'userdel_stdin' => { label=>'Delete command STDIN', - type =>'textarea', - default=>'', - }, - 'usermod' => { label=>'Modify command', - default=>'usermod -c $new_finger -d $new_dir -m -l $new_username -s $new_shell -u $new_uid -g $new_gid -p $new_crypt_password $old_username', - #default=>'[ -d $old_dir ] && mv $old_dir $new_dir || ( '. - # 'chmod u+t $old_dir; mkdir $new_dir; cd $old_dir; '. - # 'find . -depth -print | cpio -pdm $new_dir; '. - # 'chmod u-t $new_dir; chown -R $uid.$gid $new_dir; '. - # 'rm -rf $old_dir'. - #')' - }, - 'usermod_stdin' => { label=>'Modify command STDIN', - type =>'textarea', - default=>'', - }, - 'usermod_pwonly' => { label=>'Disallow username, domain, uid, gid, and dir changes', #and RADIUS group changes', - type =>'checkbox', - }, - 'usermod_nousername' => { label=>'Disallow just username changes', - type =>'checkbox', - }, - 'suspend' => { label=>'Suspension command', - default=>'usermod -L $username', - }, - 'suspend_stdin' => { label=>'Suspension command STDIN', - default=>'', - }, - 'unsuspend' => { label=>'Unsuspension command', - default=>'usermod -U $username', - }, - 'unsuspend_stdin' => { label=>'Unsuspension command STDIN', - default=>'', - }, - 'crypt' => { label => 'Default password encryption', - type=>'select', options=>[qw(crypt md5)], - default => 'crypt', - }, - 'groups_susp_reason' => { label => - 'Radius group mapping to reason (via template user)', - type => 'textarea', - }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => - 'Real-time export via remote SSH (i.e. useradd, userdel, etc.)', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => <<'END' -Run remote commands via SSH. Usernames are considered unique (also see -shellcommands_withdomain). You probably want this if the commands you are -running will not accept a domain as a parameter. You will need to -setup SSH for unattended operation. - -

    Use these buttons for some useful presets: -
      -
    • - -
    • - - Note: On FreeBSD versions before 5.3 and 4.10 (4.10 is after 4.9, not - 4.1!), due to deficient locking in pw(1), you must disable the chpass(1), - chsh(1), chfn(1), passwd(1), and vipw(1) commands, or replace them with - wrappers that prepend "lockf /etc/passwd.lock". Alternatively, apply the - patch in - FreeBSD PR#23501 - and use the "FreeBSD 4.10 / 5.3 or later" button below. -
    • - -
    • - -
    • - -
    - -The following variables are available for interpolation (prefixed with new_ or -old_ for replace operations): -
      -
    • $username -
    • $_password -
    • $quoted_password - unencrypted password, already quoted for the shell (do not add additional quotes). -
    • $crypt_password - encrypted password. When used on the command line (rather than STDIN), it will be quoted for the shell already (do not add additional quotes). -
    • $ldap_password - Password in LDAP/RFC2307 format (for example, "{PLAIN}himom", "{CRYPT}94pAVyK/4oIBk" or "{MD5}5426824942db4253f87a1009fd5d2d4"). When used on the command line (rather than STDIN), it will be quoted for the shell already (do not add additional quotes). -
    • $uid -
    • $gid -
    • $finger - GECOS. When used on the command line (rather than STDIN), it will be quoted for the shell already (do not add additional quotes). -
    • $first - First name of GECOS. When used on the command line (rather than STDIN), it will be quoted for the shell already (do not add additional quotes). -
    • $last - Last name of GECOS. When used on the command line (rather than STDIN), it will be quoted for the shell already (do not add additional quotes). -
    • $dir - home directory -
    • $shell -
    • $quota -
    • @radius_groups -
    • $reasonnum (when suspending) -
    • $reasontext (when suspending) -
    • $reasontypenum (when suspending) -
    • $reasontypetext (when suspending) -
    • All other fields in svc_acct are also available. -
    -END -); - -sub _groups_susp_reason_map { shift->_map('groups_susp_reason'); } - -sub _map { - my $self = shift; - map { reverse(/^\s*(\S+)\s*(.*)\s*$/) } split("\n", $self->option(shift) ); -} - -sub rebless { shift; } - -sub _export_insert { - my($self) = shift; - $self->_export_command('useradd', @_); -} - -sub _export_delete { - my($self) = shift; - $self->_export_command('userdel', @_); -} - -sub _export_suspend { - my($self) = shift; - $self->_export_command_or_super('suspend', @_); -} - -sub _export_unsuspend { - my($self) = shift; - $self->_export_command_or_super('unsuspend', @_); -} - -sub _export_command_or_super { - my($self, $action) = (shift, shift); - if ( $self->option($action) =~ /^\s*$/ ) { - my $method = "SUPER::_export_$action"; - $self->$method(@_); - } else { - $self->_export_command($action, @_); - } -}; - -sub _export_command { - my ( $self, $action, $svc_acct) = (shift, shift, shift); - my $command = $self->option($action); - return '' if $command =~ /^\s*$/; - my $stdin = $self->option($action."_stdin"); - - no strict 'vars'; - { - no strict 'refs'; - ${$_} = $svc_acct->getfield($_) foreach $svc_acct->fields; - - # snarfs are unused at this point? - my $count = 1; - foreach my $acct_snarf ( $svc_acct->acct_snarf ) { - ${"snarf_$_$count"} = shell_quote( $acct_snarf->get($_) ) - foreach qw( machine username _password ); - $count++; - } - } - - my $cust_pkg = $svc_acct->cust_svc->cust_pkg; - if ( $cust_pkg ) { - $email = ( grep { $_ !~ /^(POST|FAX)$/ } $cust_pkg->cust_main->invoicing_list )[0]; - } else { - $email = ''; - } - - $finger =~ /^(.*)\s+(\S+)$/ or $finger =~ /^((.*))$/; - ($first, $last ) = ( $1, $2 ); - $domain = $svc_acct->domain; - - $quoted_password = shell_quote $_password; - - $crypt_password = $svc_acct->crypt_password( $self->option('crypt') ); - $ldap_password = $svc_acct->ldap_password( $self->option('crypt') ); - - @radius_groups = $svc_acct->radius_groups; - - my ($reasonnum, $reasontext, $reasontypenum, $reasontypetext); - if ( $cust_pkg && $action eq 'suspend' && (my $r = $cust_pkg->last_reason) ) { - $reasonnum = $r->reasonnum; - $reasontext = $r->reason; - $reasontypenum = $r->reason_type; - $reasontypetext = $r->reasontype->type; - - my %reasonmap = $self->_groups_susp_reason_map; - my $userspec = ''; - $userspec = $reasonmap{$reasonnum} - if exists($reasonmap{$reasonnum}); - $userspec = $reasonmap{$reasontext} - if (!$userspec && exists($reasonmap{$reasontext})); - - my $suspend_user; - if ( $userspec =~ /^\d+$/ ) { - $suspend_user = qsearchs( 'svc_acct', { 'svcnum' => $userspec } ); - } elsif ( $userspec =~ /^\S+\@\S+$/ ) { - my ($username,$domain) = split(/\@/, $userspec); - for my $user (qsearch( 'svc_acct', { 'username' => $username } )){ - $suspend_user = $user if $userspec eq $user->email; - } - } elsif ($userspec) { - $suspend_user = qsearchs( 'svc_acct', { 'username' => $userspec } ); - } - - @radius_groups = $suspend_user->radius_groups - if $suspend_user; - - } else { - $reasonnum = $reasontext = $reasontypenum = $reasontypetext = ''; - } - - my $stdin_string = eval(qq("$stdin")); - - $first = shell_quote $first; - $last = shell_quote $last; - $finger = shell_quote $finger; - $crypt_password = shell_quote $crypt_password; - $ldap_password = shell_quote $ldap_password; - - my $command_string = eval(qq("$command")); - - $self->shellcommands_queue( $svc_acct->svcnum, - user => $self->option('user')||'root', - host => $self->machine, - command => $command_string, - stdin_string => $stdin_string, - ); -} - -sub _export_replace { - my($self, $new, $old ) = (shift, shift, shift); - my $command = $self->option('usermod'); - my $stdin = $self->option('usermod_stdin'); - no strict 'vars'; - { - no strict 'refs'; - ${"old_$_"} = $old->getfield($_) foreach $old->fields; - ${"new_$_"} = $new->getfield($_) foreach $new->fields; - } - $new_finger =~ /^(.*)\s+(\S+)$/ or $new_finger =~ /^((.*))$/; - ($new_first, $new_last ) = ( $1, $2 ); - $quoted_new__password = shell_quote $new__password; #old, wrong? - $new_quoted_password = shell_quote $new__password; #new, better? - $old_domain = $old->domain; - $new_domain = $new->domain; - - $new_crypt_password = $new->crypt_password( $self->option('crypt') ); - $new_ldap_password = $new->ldap_password( $self->option('crypt') ); - - @old_radius_groups = $old->radius_groups; - @new_radius_groups = $new->radius_groups; - - my $error = ''; - if ( $self->option('usermod_pwonly') || $self->option('usermod_nousername') ){ - if ( $old_username ne $new_username ) { - $error ||= "can't change username"; - } - } - if ( $self->option('usermod_pwonly') ) { - if ( $old_domain ne $new_domain ) { - $error ||= "can't change domain"; - } - if ( $old_uid != $new_uid ) { - $error ||= "can't change uid"; - } - if ( $old_gid != $new_gid ) { - $error ||= "can't change gid"; - } - if ( $old_dir ne $new_dir ) { - $error ||= "can't change dir"; - } - #if ( join("\n", sort @old_radius_groups) ne - # join("\n", sort @new_radius_groups) ) { - # $error ||= "can't change RADIUS groups"; - #} - } - return $error. ' ('. $self->exporttype. ' to '. $self->machine. ')' - if $error; - - my $stdin_string = eval(qq("$stdin")); - - $new_first = shell_quote $new_first; - $new_last = shell_quote $new_last; - $new_finger = shell_quote $new_finger; - $new_crypt_password = shell_quote $new_crypt_password; - $new_ldap_password = shell_quote $new_ldap_password; - - my $command_string = eval(qq("$command")); - - $self->shellcommands_queue( $new->svcnum, - user => $self->option('user')||'root', - host => $self->machine, - command => $command_string, - stdin_string => $stdin_string, - ); -} - -#a good idea to queue anything that could fail or take any time -sub shellcommands_queue { - my( $self, $svcnum ) = (shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::shellcommands::ssh_cmd", - }; - $queue->insert( @_ ); -} - -sub ssh_cmd { #subroutine, not method - use Net::SSH '0.08'; - &Net::SSH::ssh_cmd( { @_ } ); -} - -#sub shellcommands_insert { #subroutine, not method -#} -#sub shellcommands_replace { #subroutine, not method -#} -#sub shellcommands_delete { #subroutine, not method -#} - -1; - diff --git a/FS/FS/part_export/shellcommands_withdomain.pm b/FS/FS/part_export/shellcommands_withdomain.pm deleted file mode 100644 index 7c5d9045f..000000000 --- a/FS/FS/part_export/shellcommands_withdomain.pm +++ /dev/null @@ -1,112 +0,0 @@ -package FS::part_export::shellcommands_withdomain; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export::shellcommands; - -@ISA = qw(FS::part_export::shellcommands); - -tie my %options, 'Tie::IxHash', - 'user' => { label=>'Remote username', default=>'root' }, - 'useradd' => { label=>'Insert command', - #default=>'' - }, - 'useradd_stdin' => { label=>'Insert command STDIN', - type =>'textarea', - #default=>"$_password\n$_password\n", - }, - 'userdel' => { label=>'Delete command', - #default=>'', - }, - 'userdel_stdin' => { label=>'Delete command STDIN', - type =>'textarea', - #default=>'', - }, - 'usermod' => { label=>'Modify command', - default=>'', - }, - 'usermod_stdin' => { label=>'Modify command STDIN', - type =>'textarea', - #default=>"$_password\n$_password\n", - }, - 'usermod_pwonly' => { label=>'Disallow username, domain, uid, dir and RADIUS group changes', - type =>'checkbox', - }, - 'usermod_nousername' => { label=>'Disallow just username changes', - type =>'checkbox', - }, - 'suspend' => { label=>'Suspension command', - default=>'', - }, - 'suspend_stdin' => { label=>'Suspension command STDIN', - default=>'', - }, - 'unsuspend' => { label=>'Unsuspension command', - default=>'', - }, - 'unsuspend_stdin' => { label=>'Unsuspension command STDIN', - default=>'', - }, - 'crypt' => { label => 'Default password encryption', - type=>'select', options=>[qw(crypt md5)], - default => 'crypt', - }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export via remote SSH (vpopmail, ISPMan)', - 'options' => \%options, - 'notes' => <<'END' -Run remote commands via SSH. username@domain (rather than just usernames) are -considered unique (also see shellcommands). You probably want this if the -commands you are running will accept a domain as a parameter, and will allow -the same username with different domains. You will need to -setup SSH for unattended operation. - -

    Use these buttons for some useful presets: -
      -
    • -
    • -
    - -The following variables are available for interpolation (prefixed with -new_ or old_ for replace operations): -
      -
    • $username -
    • $domain -
    • $_password -
    • $quoted_password - unencrypted password, already quoted for the shell (do not add additional quotes) -
    • $crypt_password - encrypted password, already quoted for the shell (do not add additional quotes) -
    • $uid -
    • $gid -
    • $finger - GECOS, already quoted for the shell (do not add additional quotes) -
    • $first - First name of GECOS, already quoted for the shell (do not add additional quotes) -
    • $last - Last name of GECOS, already quoted for the shell (do not add additional quotes) -
    • $dir - home directory -
    • $shell -
    • $quota -
    • @radius_groups -
    • All other fields in svc_acct are also available. -
    -END -); - -1; - diff --git a/FS/FS/part_export/snmp.pm b/FS/FS/part_export/snmp.pm deleted file mode 100644 index 81b3c7eb2..000000000 --- a/FS/FS/part_export/snmp.pm +++ /dev/null @@ -1,256 +0,0 @@ -package FS::part_export::snmp; - -=head1 FS::part_export::snmp - -This export sends SNMP SETs to a router using the Net::SNMP package. It requires the following custom fields to be defined on a router. If any of the required custom fields are not present, then the export will exit quietly. - -=head1 Required custom fields - -=over 4 - -=item snmp_address - IP address (or hostname) of the router/agent - -=item snmp_comm - R/W SNMP community of the router/agent - -=item snmp_version - SNMP version of the router/agent - -=back - -=head1 Optional custom fields - -=over 4 - -=item snmp_cmd_insert - SNMP SETs to perform on insert. See L - -=item snmp_cmd_replace - SNMP SETs to perform on replace. See L - -=item snmp_cmd_delete - SNMP SETs to perform on delete. See L - -=item snmp_cmd_suspend - SNMP SETs to perform on suspend. See L - -=item snmp_cmd_unsuspend - SNMP SETs to perform on unsuspend. See L - -=back - -=head1 Formatting - -The values for the snmp_cmd_* fields should be formatted as follows: - -||[||||[...]] - -=over 4 - -=item OID - SNMP object ID (ex. 1.3.6.1.4.1.1.20). If the OID string starts with a '.', then the Private Enterprise OID (1.3.6.1.4.1) is prepended. - -=item Data Type - SNMP data types understood by L, as well as HEX_STRING for convenience. ex. INTEGER, OCTET_STRING, IPADDRESS, ... - -=item expr - Expression to be eval'd by freeside. By default, the expression is double quoted and eval'd with all FS::svc_broadband fields available as scalars (ex. $svcnum, $ip_addr, $speed_up). However, if the expression contains a non-escaped double quote, the expression is eval'd without being double quoted. In this case, the expression must be a block of valid perl code that returns the desired value. - -You must escape non-delimiter pipes ("|") with a backslash. - -=back - -=head1 Examples - -This is an example for exporting to a Trango Access5830 AP. Newlines inserted for clarity. - -=over 4 - -=item snmp_cmd_delete - - -1.3.6.1.4.1.5454.1.20.3.5.1|INTEGER|50|| -1.3.6.1.4.1.5454.1.20.3.5.8|INTEGER|1| - -=item snmp_cmd_insert - - -1.3.6.1.4.1.5454.1.20.3.5.1|INTEGER|50|| -1.3.6.1.4.1.5454.1.20.3.5.2|HEX_STRING|join("",$radio_addr =~ /[0-9a-fA-F]{2}/g)|| -1.3.6.1.4.1.5454.1.20.3.5.7|INTEGER|1| - -=item snmp_cmd_replace - - -1.3.6.1.4.1.5454.1.20.3.5.1|INTEGER|50|| -1.3.6.1.4.1.5454.1.20.3.5.8|INTEGER|1||1.3.6.1.4.1.5454.1.20.3.5.1|INTEGER|50|| -1.3.6.1.4.1.5454.1.20.3.5.2|HEX_STRING|join("",$new_radio_addr =~ /[0-9a-fA-F]{2}/g)|| -1.3.6.1.4.1.5454.1.20.3.5.7|INTEGER|1| - -=back - -=cut - - -use strict; -use vars qw(@ISA %info $me $DEBUG); -use Tie::IxHash; -use FS::Record qw(qsearch qsearchs); -use FS::part_export; -use FS::part_export::router; - -@ISA = qw(FS::part_export::router); - -tie my %options, 'Tie::IxHash', (); - -%info = ( - 'svc' => 'svc_broadband', - 'desc' => 'Sends SNMP SETs to an SNMP agent.', - 'options' => \%options, - 'notes' => 'Requires Net::SNMP. See the documentation for FS::part_export::snmp for required virtual fields and usage information.', -); - -$me= '[' . __PACKAGE__ . ']'; -$DEBUG = 1; - - -sub _field_prefix { 'snmp'; } - -sub _req_router_fields { - map { - $_[0]->_field_prefix . '_' . $_ - } (qw(address comm version)); -} - -sub _get_cmd_sub { - - my ($self, $svc_broadband, $router) = (shift, shift, shift); - - return(ref($self) . '::snmp_cmd'); - -} - -sub _prepare_args { - - my ($self, $action, $router) = (shift, shift, shift); - my ($svc_broadband) = shift; - my $old; - my $field_prefix = $self->_field_prefix; - - if ($action eq 'replace') { $old = shift; } - - my $raw_cmd = $router->getfield("${field_prefix}_cmd_${action}"); - unless ($raw_cmd) { - warn "[debug]$me router custom field '${field_prefix}_cmd_$action' " - . "is not defined." if $DEBUG; - return ''; - } - - my $args = [ - '-hostname' => $router->getfield($field_prefix.'_address'), - '-version' => $router->getfield($field_prefix.'_version'), - '-community' => $router->getfield($field_prefix.'_comm'), - ]; - - my @varbindlist = (); - - foreach my $snmp_cmd ($raw_cmd =~ m/(.*?[^\\])(?:\|\||$)/g) { - - warn "[debug]$me snmp_cmd is '$snmp_cmd'" if $DEBUG; - - my ($oid, $type, $expr) = $snmp_cmd =~ m/(.*?[^\\])(?:\||$)/g; - - if ($oid =~ /^([\d\.]+)$/) { - $oid = $1; - $oid = ($oid =~ /^\./) ? '1.3.6.1.4.1' . $oid : $oid; - } else { - return "Invalid SNMP OID '$oid'"; - } - - if ($type =~ /^([A-Z_\d]+)$/) { - $type = $1; - } else { - return "Invalid SNMP ASN.1 type '$type'"; - } - - if ($expr =~ /^(.*)$/) { - $expr = $1; - } else { - return "Invalid expression '$expr'"; - } - - { - no strict 'vars'; - no strict 'refs'; - - if ($action eq 'replace') { - ${"old_$_"} = $old->getfield($_) foreach $old->fields; - ${"new_$_"} = $svc_broadband->getfield($_) foreach $svc_broadband->fields; - $expr = ($expr =~/[^\\]"/) ? eval($expr) : eval(qq("$expr")); - } else { - ${$_} = $svc_broadband->getfield($_) foreach $svc_broadband->fields; - $expr = ($expr =~/[^\\]"/) ? eval($expr) : eval(qq("$expr")); - } - return $@ if $@; - } - - push @varbindlist, ($oid, $type, $expr); - - } - - push @$args, ('-varbindlist', @varbindlist); - - return('', $args); - -} - -sub snmp_cmd { - eval "use Net::SNMP;"; - die $@ if $@; - - my %args = (); - my @varbindlist = (); - while (scalar(@_)) { - my $key = shift; - if ($key eq '-varbindlist') { - push @varbindlist, @_; - last; - } else { - $args{$key} = shift; - } - } - - my $i = 0; - while ($i*3 < scalar(@varbindlist)) { - my $type_index = ($i*3)+1; - my $type_name = $varbindlist[$type_index]; - - # Implementing HEX_STRING outselves since Net::SNMP doesn't. Ewwww! - if ($type_name eq 'HEX_STRING') { - my $value_index = $type_index + 1; - $type_name = 'OCTET_STRING'; - $varbindlist[$value_index] = pack('H*', $varbindlist[$value_index]); - } - - my $type = eval "Net::SNMP::$type_name"; - if ($@ or not defined $type) { - warn $@ if $DEBUG; - die "snmp_cmd error: Unable to lookup type '$type_name'"; - } - - $varbindlist[$type_index] = $type; - } continue { - $i++; - } - - my ($snmp, $error) = Net::SNMP->session(%args); - die "snmp_cmd error: $error" unless($snmp); - - my $res = $snmp->set_request('-varbindlist' => \@varbindlist); - unless($res) { - $error = $snmp->error; - $snmp->close; - die "snmp_cmd error: " . $error; - } - - $snmp->close; - - return ''; - -} - - -=head1 BUGS - -Plenty, I'm sure. - -=cut - -1; diff --git a/FS/FS/part_export/sqlmail.pm b/FS/FS/part_export/sqlmail.pm deleted file mode 100644 index cbdaf7f52..000000000 --- a/FS/FS/part_export/sqlmail.pm +++ /dev/null @@ -1,220 +0,0 @@ -package FS::part_export::sqlmail; - -use vars qw(@ISA %info); -use Tie::IxHash; -use Digest::MD5 qw(md5_hex); -use FS::Record qw(qsearchs); -use FS::part_export; -use FS::svc_domain; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'datasrc' => { label => 'DBI data source' }, - 'username' => { label => 'Database username' }, - 'password' => { label => 'Database password' }, - 'server_type' => { - label => 'Server type', - type => 'select', - options => [qw(dovecot_plain dovecot_crypt dovecot_digest_md5 courier_plain - courier_crypt)], - default => ['dovecot_plain'], }, - 'svc_acct_table' => { label => 'User Table', default => 'user_acct' }, - 'svc_forward_table' => { label => 'Forward Table', default => 'forward' }, - 'svc_domain_table' => { label => 'Domain Table', default => 'domain' }, - 'svc_acct_fields' => { label => 'svc_acct Export Fields', - default => 'username _password domsvc svcnum' }, - 'svc_forward_fields' => { label => 'svc_forward Export Fields', - default => 'srcsvc dstsvc dst' }, - 'svc_domain_fields' => { label => 'svc_domain Export Fields', - default => 'domain svcnum catchall' }, - 'resolve_dstsvc' => { label => q{Resolve svc_forward.dstsvc to an email address and store it in dst. (Doesn't require that you also export dstsvc.)}, - type => 'checkbox' }, -; - -%info = ( - 'svc' => [qw( svc_acct svc_domain svc_forward )], - 'desc' => 'Real-time export to SQL-backed mail server', - 'options' => \%options, - 'nodomain' => '', - 'notes' => <<'END' -Database schema can be made to work with Courier IMAP, Exim and Dovecot. -Others could work but are untested. (more detailed description from -Kristian / fire2wire? ) -END -); - -sub rebless { shift; } - -sub _export_insert { - my($self, $svc) = (shift, shift); - # this is a svc_something. - - my $svcdb = $svc->cust_svc->part_svc->svcdb; - my $export_table = $self->option($svcdb . '_table') - or die('Export table not defined for svcdb: ' . $svcdb); - my @export_fields = split(/\s+/, $self->option($svcdb . '_fields')); - my $svchash = update_values($self, $svc, $svcdb); - - foreach my $key (keys(%$svchash)) { - unless (grep { $key eq $_ } @export_fields) { - delete $svchash->{$key}; - } - } - - my $error = $self->sqlmail_queue( $svc->svcnum, 'insert', - $self->option('server_type'), $export_table, - (map { ($_, $svchash->{$_}); } keys(%$svchash))); - return $error if $error; - ''; - -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - - my $svcdb = $new->cust_svc->part_svc->svcdb; - my $export_table = $self->option($svcdb . '_table') - or die('Export table not defined for svcdb: ' . $svcdb); - my @export_fields = split(/\s+/, $self->option($svcdb . '_fields')); - my $svchash = update_values($self, $new, $svcdb); - - foreach my $key (keys(%$svchash)) { - unless (grep { $key eq $_ } @export_fields) { - delete $svchash->{$key}; - } - } - - my $error = $self->sqlmail_queue( $new->svcnum, 'replace', - $old->svcnum, $self->option('server_type'), $export_table, - (map { ($_, $svchash->{$_}); } keys(%$svchash))); - return $error if $error; - ''; - -} - -sub _export_delete { - my( $self, $svc ) = (shift, shift); - - my $svcdb = $svc->cust_svc->part_svc->svcdb; - my $table = $self->option($svcdb . '_table') - or die('Export table not defined for svcdb: ' . $svcdb); - - $self->sqlmail_queue( $svc->svcnum, 'delete', $table, - $svc->svcnum ); -} - -sub sqlmail_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::sqlmail::sqlmail_$method", - }; - $queue->insert( - $self->option('datasrc'), - $self->option('username'), - $self->option('password'), - @_, - ); -} - -sub sqlmail_insert { #subroutine, not method - my $dbh = sqlmail_connect(shift, shift, shift); - my( $server_type, $table ) = (shift, shift); - - my %attrs = @_; - - map { $attrs{$_} = $attrs{$_} ? qq!'$attrs{$_}'! : 'NULL'; } keys(%attrs); - my $query = sprintf("INSERT INTO %s (%s) values (%s)", - $table, join(",", keys(%attrs)), - join(',', values(%attrs))); - - $dbh->do($query) or die $dbh->errstr; - $dbh->disconnect; - - ''; -} - -sub sqlmail_delete { #subroutine, not method - my $dbh = sqlmail_connect(shift, shift, shift); - my( $table, $svcnum ) = @_; - - $dbh->do("DELETE FROM $table WHERE svcnum = $svcnum") or die $dbh->errstr; - $dbh->disconnect; - - ''; -} - -sub sqlmail_replace { - my $dbh = sqlmail_connect(shift, shift, shift); - my($oldsvcnum, $server_type, $table) = (shift, shift, shift); - - my %attrs = @_; - map { $attrs{$_} = $attrs{$_} ? qq!'$attrs{$_}'! : 'NULL'; } keys(%attrs); - - my $query = "SELECT COUNT(*) FROM $table WHERE svcnum = $oldsvcnum"; - my $result = $dbh->selectrow_arrayref($query) or die $dbh->errstr; - - if (@$result[0] == 0) { - $query = sprintf("INSERT INTO %s (%s) values (%s)", - $table, join(",", keys(%attrs)), - join(',', values(%attrs))); - $dbh->do($query) or die $dbh->errstr; - } else { - $query = sprintf('UPDATE %s SET %s WHERE svcnum = %s', - $table, join(', ', map {"$_ = $attrs{$_}"} keys(%attrs)), - $oldsvcnum); - $dbh->do($query) or die $dbh->errstr; - } - - $dbh->disconnect; - - ''; -} - -sub sqlmail_connect { - DBI->connect(@_) or die $DBI::errstr; -} - -sub update_values { - - # Update records to conform to a particular server_type. - - my ($self, $svc, $svcdb) = (shift,shift,shift); - my $svchash = { %{$svc->hashref} } or return ''; # We need a copy. - - if ($svcdb eq 'svc_acct') { - if ($self->option('server_type') eq 'courier_crypt') { - my $salt = join '', ('.', '/', 0..9,'A'..'Z', 'a'..'z')[rand 64, rand 64]; - $svchash->{_password} = crypt($svchash->{_password}, $salt); - - } elsif ($self->option('server_type') eq 'dovecot_plain') { - $svchash->{_password} = '{PLAIN}' . $svchash->{_password}; - - } elsif ($self->option('server_type') eq 'dovecot_crypt') { - my $salt = join '', ('.', '/', 0..9,'A'..'Z', 'a'..'z')[rand 64, rand 64]; - $svchash->{_password} = '{CRYPT}' . crypt($svchash->{_password}, $salt); - - } elsif ($self->option('server_type') eq 'dovecot_digest_md5') { - my $svc_domain = qsearchs('svc_domain', { svcnum => $svc->domsvc }); - die('Unable to lookup svc_domain with domsvc: ' . $svc->domsvc) - unless ($svc_domain); - - my $domain = $svc_domain->domain; - my $md5hash = '{DIGEST-MD5}' . md5_hex(join(':', $svchash->{username}, - $domain, $svchash->{_password})); - $svchash->{_password} = $md5hash; - } - } elsif ($svcdb eq 'svc_forward') { - if ($self->option('resolve_dstsvc') && $svc->dstsvc_acct) { - $svchash->{dst} = $svc->dstsvc_acct->username . '@' . - $svc->dstsvc_acct->svc_domain->domain; - } - } - - return($svchash); - -} - -1; - diff --git a/FS/FS/part_export/sqlradius.pm b/FS/FS/part_export/sqlradius.pm deleted file mode 100644 index 5e63e1004..000000000 --- a/FS/FS/part_export/sqlradius.pm +++ /dev/null @@ -1,722 +0,0 @@ -package FS::part_export::sqlradius; - -use vars qw(@ISA $DEBUG %info %options $notes1 $notes2); -use Tie::IxHash; -use FS::Record qw( dbh qsearch qsearchs str2time_sql ); -use FS::part_export; -use FS::svc_acct; -use FS::export_svc; -use Carp qw( cluck ); - -@ISA = qw(FS::part_export); - -$DEBUG = 0; - -tie %options, 'Tie::IxHash', - 'datasrc' => { label=>'DBI data source ' }, - 'username' => { label=>'Database username' }, - 'password' => { label=>'Database password' }, - 'ignore_accounting' => { - type => 'checkbox', - label => 'Ignore accounting records from this database' - }, - 'hide_ip' => { - type => 'checkbox', - label => 'Hide IP address information on session reports', - }, - 'hide_data' => { - type => 'checkbox', - label => 'Hide download/upload information on session reports', - }, - 'show_called_station' => { - type => 'checkbox', - label => 'Show the Called-Station-ID on session reports', - }, - 'overlimit_groups' => { label => 'Radius groups to assign to svc_acct which has exceeded its bandwidth or time limit', } , - 'groups_susp_reason' => { label => - 'Radius group mapping to reason (via template user) (svcnum|username|username@domain reasonnum|reason)', - type => 'textarea', - }, - -; - -$notes1 = <<'END'; -Real-time export of radcheck, radreply and usergroup -tables to any SQL database for -FreeRADIUS -or ICRADIUS. -END - -$notes2 = <<'END'; -An existing RADIUS database will be updated in realtime, but you can use -freeside-sqlradius-reset -to delete the entire RADIUS database and repopulate the tables from the -Freeside database. See the -DBI documentation -and the -documentation for your DBD -for the exact syntax of a DBI data source. -
      -
    • Using FreeRADIUS 0.9.0 with the PostgreSQL backend, the db_postgresql.sql schema and postgresql.conf queries contain incompatible changes. This is fixed in 0.9.1. Only new installs with 0.9.0 and PostgreSQL are affected - upgrades and other database backends and versions are unaffected. -
    • Using ICRADIUS, add a dummy "op" column to your database: -
      - ALTER TABLE radcheck ADD COLUMN op VARCHAR(2) NOT NULL DEFAULT '=='
      - ALTER TABLE radreply ADD COLUMN op VARCHAR(2) NOT NULL DEFAULT '=='
      - ALTER TABLE radgroupcheck ADD COLUMN op VARCHAR(2) NOT NULL DEFAULT '=='
      - ALTER TABLE radgroupreply ADD COLUMN op VARCHAR(2) NOT NULL DEFAULT '==' -
      -
    • Using Radiator, see the - Radiator FAQ - for configuration information. -
    -END - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to SQL-backed RADIUS (FreeRADIUS, ICRADIUS)', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => $notes1. - 'This export does not export RADIUS realms (see also '. - 'sqlradius_withdomain). '. - $notes2 -); - -sub _groups_susp_reason_map { map { reverse( /^\s*(\S+)\s*(.*)$/ ) } - split( "\n", shift->option('groups_susp_reason')); -} - -sub rebless { shift; } - -sub export_username { - my($self, $svc_acct) = (shift, shift); - warn "export_username called on $self with arg $svc_acct" if $DEBUG > 1; - $svc_acct->username; -} - -sub _export_insert { - my($self, $svc_acct) = (shift, shift); - - foreach my $table (qw(reply check)) { - my $method = "radius_$table"; - my %attrib = $svc_acct->$method(); - next unless keys %attrib; - my $err_or_queue = $self->sqlradius_queue( $svc_acct->svcnum, 'insert', - $table, $self->export_username($svc_acct), %attrib ); - return $err_or_queue unless ref($err_or_queue); - } - my @groups = $svc_acct->radius_groups; - if ( @groups ) { - cluck localtime(). ": queuing usergroup_insert for ". $svc_acct->svcnum. - " (". $self->export_username($svc_acct). " with ". join(", ", @groups) - if $DEBUG; - my $err_or_queue = $self->sqlradius_queue( - $svc_acct->svcnum, 'usergroup_insert', - $self->export_username($svc_acct), @groups ); - return $err_or_queue unless ref($err_or_queue); - } - ''; -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $jobnum = ''; - if ( $self->export_username($old) ne $self->export_username($new) ) { - my $err_or_queue = $self->sqlradius_queue( $new->svcnum, 'rename', - $self->export_username($new), $self->export_username($old) ); - unless ( ref($err_or_queue) ) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - $jobnum = $err_or_queue->jobnum; - } - - foreach my $table (qw(reply check)) { - my $method = "radius_$table"; - my %new = $new->$method(); - my %old = $old->$method(); - if ( grep { !exists $old{$_} #new attributes - || $new{$_} ne $old{$_} #changed - } keys %new - ) { - my $err_or_queue = $self->sqlradius_queue( $new->svcnum, 'insert', - $table, $self->export_username($new), %new ); - unless ( ref($err_or_queue) ) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - if ( $jobnum ) { - my $error = $err_or_queue->depend_insert( $jobnum ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - my @del = grep { !exists $new{$_} } keys %old; - if ( @del ) { - my $err_or_queue = $self->sqlradius_queue( $new->svcnum, 'attrib_delete', - $table, $self->export_username($new), @del ); - unless ( ref($err_or_queue) ) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - if ( $jobnum ) { - my $error = $err_or_queue->depend_insert( $jobnum ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - } - - my $error; - my (@oldgroups) = $old->radius_groups; - my (@newgroups) = $new->radius_groups; - $error = $self->sqlreplace_usergroups( $new->svcnum, - $self->export_username($new), - $jobnum ? $jobnum : '', - \@oldgroups, - \@newgroups, - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -sub _export_suspend { - my( $self, $svc_acct ) = (shift, shift); - - my $new = $svc_acct->clone_suspended; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $err_or_queue = $self->sqlradius_queue( $new->svcnum, 'insert', - 'check', $self->export_username($new), $new->radius_check ); - unless ( ref($err_or_queue) ) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - - my $error; - my (@newgroups) = $self->suspended_usergroups($svc_acct); - $error = - $self->sqlreplace_usergroups( $new->svcnum, - $self->export_username($new), - '', - $svc_acct->usergroup, - \@newgroups, - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -sub _export_unsuspend { - my( $self, $svc_acct ) = (shift, shift); - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $err_or_queue = $self->sqlradius_queue( $svc_acct->svcnum, 'insert', - 'check', $self->export_username($svc_acct), $svc_acct->radius_check ); - unless ( ref($err_or_queue) ) { - $dbh->rollback if $oldAutoCommit; - return $err_or_queue; - } - - my $error; - my (@oldgroups) = $self->suspended_usergroups($svc_acct); - $error = $self->sqlreplace_usergroups( $svc_acct->svcnum, - $self->export_username($svc_acct), - '', - \@oldgroups, - $svc_acct->usergroup, - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - my $err_or_queue = $self->sqlradius_queue( $svc_acct->svcnum, 'delete', - $self->export_username($svc_acct) ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub sqlradius_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::sqlradius::sqlradius_$method", - }; - $queue->insert( - $self->option('datasrc'), - $self->option('username'), - $self->option('password'), - @_, - ) or $queue; -} - -sub suspended_usergroups { - my ($self, $svc_acct) = (shift, shift); - - return () unless $svc_acct; - - #false laziness with FS::part_export::shellcommands - #subclass part_export? - - my $r = $svc_acct->cust_svc->cust_pkg->last_reason; - my %reasonmap = $self->_groups_susp_reason_map; - my $userspec = ''; - if ($r) { - $userspec = $reasonmap{$r->reasonnum} - if exists($reasonmap{$r->reasonnum}); - $userspec = $reasonmap{$r->reason} - if (!$userspec && exists($reasonmap{$r->reason})); - } - my $suspend_user; - if ($userspec =~ /^d+$/ ){ - $suspend_user = qsearchs( 'svc_acct', { 'svcnum' => $userspec } ); - }elsif ($userspec =~ /^\S+\@\S+$/){ - my ($username,$domain) = split(/\@/, $userspec); - for my $user (qsearch( 'svc_acct', { 'username' => $username } )){ - $suspend_user = $user if $userspec eq $user->email; - } - }elsif ($userspec){ - $suspend_user = qsearchs( 'svc_acct', { 'username' => $userspec } ); - } - #esalf - return $suspend_user->radius_groups if $suspend_user; - (); -} - -sub sqlradius_insert { #subroutine, not method - my $dbh = sqlradius_connect(shift, shift, shift); - my( $table, $username, %attributes ) = @_; - - foreach my $attribute ( keys %attributes ) { - - my $s_sth = $dbh->prepare( - "SELECT COUNT(*) FROM rad$table WHERE UserName = ? AND Attribute = ?" - ) or die $dbh->errstr; - $s_sth->execute( $username, $attribute ) or die $s_sth->errstr; - - if ( $s_sth->fetchrow_arrayref->[0] ) { - - my $u_sth = $dbh->prepare( - "UPDATE rad$table SET Value = ? WHERE UserName = ? AND Attribute = ?" - ) or die $dbh->errstr; - $u_sth->execute($attributes{$attribute}, $username, $attribute) - or die $u_sth->errstr; - - } else { - - my $i_sth = $dbh->prepare( - "INSERT INTO rad$table ( UserName, Attribute, op, Value ) ". - "VALUES ( ?, ?, ?, ? )" - ) or die $dbh->errstr; - $i_sth->execute( - $username, - $attribute, - ( $attribute =~ /Password/i ? '==' : ':=' ), - $attributes{$attribute}, - ) or die $i_sth->errstr; - - } - - } - $dbh->disconnect; -} - -sub sqlradius_usergroup_insert { #subroutine, not method - my $dbh = sqlradius_connect(shift, shift, shift); - my( $username, @groups ) = @_; - - my $s_sth = $dbh->prepare( - "SELECT COUNT(*) FROM usergroup WHERE UserName = ? AND GroupName = ?" - ) or die $dbh->errstr; - - my $sth = $dbh->prepare( - "INSERT INTO usergroup ( UserName, GroupName ) VALUES ( ?, ? )" - ) or die $dbh->errstr; - - foreach my $group ( @groups ) { - $s_sth->execute( $username, $group ) or die $s_sth->errstr; - if ($s_sth->fetchrow_arrayref->[0]) { - warn localtime() . ": sqlradius_usergroup_insert attempted to reinsert " . - "$group for $username\n" - if $DEBUG; - next; - } - $sth->execute( $username, $group ) - or die "can't insert into groupname table: ". $sth->errstr; - } - $dbh->disconnect; -} - -sub sqlradius_usergroup_delete { #subroutine, not method - my $dbh = sqlradius_connect(shift, shift, shift); - my( $username, @groups ) = @_; - - my $sth = $dbh->prepare( - "DELETE FROM usergroup WHERE UserName = ? AND GroupName = ?" - ) or die $dbh->errstr; - foreach my $group ( @groups ) { - $sth->execute( $username, $group ) - or die "can't delete from groupname table: ". $sth->errstr; - } - $dbh->disconnect; -} - -sub sqlradius_rename { #subroutine, not method - my $dbh = sqlradius_connect(shift, shift, shift); - my($new_username, $old_username) = @_; - foreach my $table (qw(radreply radcheck usergroup )) { - my $sth = $dbh->prepare("UPDATE $table SET Username = ? WHERE UserName = ?") - or die $dbh->errstr; - $sth->execute($new_username, $old_username) - or die "can't update $table: ". $sth->errstr; - } - $dbh->disconnect; -} - -sub sqlradius_attrib_delete { #subroutine, not method - my $dbh = sqlradius_connect(shift, shift, shift); - my( $table, $username, @attrib ) = @_; - - foreach my $attribute ( @attrib ) { - my $sth = $dbh->prepare( - "DELETE FROM rad$table WHERE UserName = ? AND Attribute = ?" ) - or die $dbh->errstr; - $sth->execute($username,$attribute) - or die "can't delete from rad$table table: ". $sth->errstr; - } - $dbh->disconnect; -} - -sub sqlradius_delete { #subroutine, not method - my $dbh = sqlradius_connect(shift, shift, shift); - my $username = shift; - - foreach my $table (qw( radcheck radreply usergroup )) { - my $sth = $dbh->prepare( "DELETE FROM $table WHERE UserName = ?" ); - $sth->execute($username) - or die "can't delete from $table table: ". $sth->errstr; - } - $dbh->disconnect; -} - -sub sqlradius_connect { - #my($datasrc, $username, $password) = @_; - #DBI->connect($datasrc, $username, $password) or die $DBI::errstr; - DBI->connect(@_) or die $DBI::errstr; -} - -sub sqlreplace_usergroups { - my ($self, $svcnum, $username, $jobnum, $old, $new) = @_; - - # (sorta) false laziness with FS::svc_acct::replace - my @oldgroups = @$old; - my @newgroups = @$new; - my @delgroups = (); - foreach my $oldgroup ( @oldgroups ) { - if ( grep { $oldgroup eq $_ } @newgroups ) { - @newgroups = grep { $oldgroup ne $_ } @newgroups; - next; - } - push @delgroups, $oldgroup; - } - - if ( @delgroups ) { - my $err_or_queue = $self->sqlradius_queue( $svcnum, 'usergroup_delete', - $username, @delgroups ); - return $err_or_queue - unless ref($err_or_queue); - if ( $jobnum ) { - my $error = $err_or_queue->depend_insert( $jobnum ); - return $error if $error; - } - } - - if ( @newgroups ) { - cluck localtime(). ": queuing usergroup_insert for $svcnum ($username) ". - "with ". join(", ", @newgroups) - if $DEBUG; - my $err_or_queue = $self->sqlradius_queue( $svcnum, 'usergroup_insert', - $username, @newgroups ); - return $err_or_queue - unless ref($err_or_queue); - if ( $jobnum ) { - my $error = $err_or_queue->depend_insert( $jobnum ); - return $error if $error; - } - } - ''; -} - - -#-- - -=item usage_sessions TIMESTAMP_START TIMESTAMP_END [ SVC_ACCT [ IP [ PREFIX [ SQL_SELECT ] ] ] ] - -TIMESTAMP_START and TIMESTAMP_END are specified as UNIX timestamps; see -L. Also see L and L for conversion -functions. - -SVC_ACCT, if specified, limits the results to the specified account. - -IP, if specified, limits the results to the specified IP address. - -PREFIX, if specified, limits the results to records with a matching -Called-Station-ID. - -#SQL_SELECT defaults to * if unspecified. It can be useful to set it to -#SUM(acctsessiontime) or SUM(AcctInputOctets), etc. - -Returns an arrayref of hashrefs with the following fields: - -=over 4 - -=item username - -=item framedipaddress - -=item acctstarttime - -=item acctstoptime - -=item acctsessiontime - -=item acctinputoctets - -=item acctoutputoctets - -=item calledstationid - -=back - -=cut - -#some false laziness w/cust_svc::seconds_since_sqlradacct - -sub usage_sessions { - my( $self, $start, $end ) = splice(@_, 0, 3); - my $svc_acct = @_ ? shift : ''; - my $ip = @_ ? shift : ''; - my $prefix = @_ ? shift : ''; - #my $select = @_ ? shift : '*'; - - $end ||= 2147483647; - - return [] if $self->option('ignore_accounting'); - - my $dbh = sqlradius_connect( map $self->option($_), - qw( datasrc username password ) ); - - #select a unix time conversion function based on database type - my $str2time = str2time_sql( $dbh->{Driver}->{Name} ); - - my @fields = ( - qw( username realm framedipaddress - acctsessiontime acctinputoctets acctoutputoctets - calledstationid - ), - "$str2time acctstarttime ) as acctstarttime", - "$str2time acctstoptime ) as acctstoptime", - ); - - my @param = (); - my $where = ''; - - if ( $svc_acct ) { - my $username = $self->export_username($svc_acct); - if ( $svc_acct =~ /^([^@]+)\@([^@]+)$/ ) { - $where = '( UserName = ? OR ( UserName = ? AND Realm = ? ) ) AND'; - push @param, $username, $1, $2; - } else { - $where = 'UserName = ? AND'; - push @param, $username; - } - } - - if ( length($ip) ) { - $where .= ' FramedIPAddress = ? AND'; - push @param, $ip; - } - - if ( length($prefix) ) { - #assume sip: for now, else things get ugly trying to match /^\w+:$prefix/ - $where .= " CalledStationID LIKE 'sip:$prefix\%' AND"; - } - - push @param, $start, $end; - - my $sth = $dbh->prepare('SELECT '. join(', ', @fields). - " FROM radacct - WHERE $where - $str2time AcctStopTime ) >= ? - AND $str2time AcctStopTime ) <= ? - ORDER BY AcctStartTime DESC - ") or die $dbh->errstr; - $sth->execute(@param) or die $sth->errstr; - - [ map { { %$_ } } @{ $sth->fetchall_arrayref({}) } ]; - -} - -=item update_svc_acct - -=cut - -sub update_svc_acct { - my $self = shift; - - my $conf = new FS::Conf; - - my $fdbh = dbh; - my $dbh = sqlradius_connect( map $self->option($_), - qw( datasrc username password ) ); - - my $str2time = str2time_sql( $dbh->{Driver}->{Name} ); - my @fields = qw( radacctid username realm acctsessiontime ); - - my @param = (); - my $where = ''; - - my $sth = $dbh->prepare(" - SELECT RadAcctId, UserName, Realm, AcctSessionTime, - $str2time AcctStartTime), $str2time AcctStopTime), - AcctInputOctets, AcctOutputOctets - FROM radacct - WHERE FreesideStatus IS NULL - AND AcctStopTime != 0 - ") or die $dbh->errstr; - $sth->execute() or die $sth->errstr; - - while ( my $row = $sth->fetchrow_arrayref ) { - my($RadAcctId, $UserName, $Realm, $AcctSessionTime, $AcctStartTime, - $AcctStopTime, $AcctInputOctets, $AcctOutputOctets) = @$row; - warn "processing record: ". - "$RadAcctId ($UserName\@$Realm for ${AcctSessionTime}s" - if $DEBUG; - - $UserName = lc($UserName) unless $conf->exists('username-uppercase'); - - my %search = ( 'username' => $UserName ); - - my $extra_sql = ''; - if ( ref($self) =~ /withdomain/ ) { #well... - $extra_sql = " AND '$Realm' = ( SELECT domain FROM svc_domain - WHERE svc_domain.svcnum = svc_acct.domsvc ) "; - } - - my $oldAutoCommit = $FS::UID::AutoCommit; # can't undo side effects, but at - local $FS::UID::AutoCommit = 0; # least we can avoid over counting - - my @svc_acct = - grep { qsearch( 'export_svc', { 'exportnum' => $self->exportnum, - 'svcpart' => $_->cust_svc->svcpart, } ) - } - qsearch( 'svc_acct', - { 'username' => $UserName }, - '', - $extra_sql - ); - - my $errinfo = "for RADIUS detail RadAcctID $RadAcctId ". - "(UserName $UserName, Realm $Realm)"; - my $status = 'skipped'; - if ( !@svc_acct ) { - warn "WARNING: no svc_acct record found $errinfo - skipping\n"; - } elsif ( scalar(@svc_acct) > 1 ) { - warn "WARNING: multiple svc_acct records found $errinfo - skipping\n"; - } else { - warn "found svc_acct ". $svc_acct[0]->svcnum. " $errinfo\n" if $DEBUG; - $svc_acct[0]->last_login($AcctStartTime); - $svc_acct[0]->last_logout($AcctStopTime); - my @stati; - push @stati, _try_decrement($svc_acct[0], 'seconds', $AcctSessionTime); - push @stati, _try_decrement($svc_acct[0], 'upbytes', $AcctInputOctets); - push @stati, _try_decrement($svc_acct[0], 'downbytes', $AcctOutputOctets); - push @stati, _try_decrement($svc_acct[0], 'totalbytes', $AcctInputOctets + - $AcctOutputOctets); - $status=join(' ', @stati); - } - - warn "setting FreesideStatus to $status $errinfo\n" if $DEBUG; - my $psth = $dbh->prepare("UPDATE radacct - SET FreesideStatus = ? - WHERE RadAcctId = ?" - ) or die $dbh->errstr; - $psth->execute($status, $RadAcctId) or die $psth->errstr; - - $fdbh->commit or die $fdbh->errstr if $oldAutoCommit; - - } - -} - -sub _try_decrement { - my ($svc_acct, $column, $amount) = @_; - if ( $svc_acct->$column !~ /^$/ ) { - warn " svc_acct.$column found (". $svc_acct->$column. - ") - decrementing\n" - if $DEBUG; - my $method = 'decrement_' . $column; - my $error = $svc_acct->$method($amount); - die $error if $error; - return 'done'; - } else { - warn " no existing $column value for svc_acct - skipping\n" if $DEBUG; - } - return 'skipped'; -} - -1; - diff --git a/FS/FS/part_export/sqlradius_withdomain.pm b/FS/FS/part_export/sqlradius_withdomain.pm deleted file mode 100644 index e5a7151a2..000000000 --- a/FS/FS/part_export/sqlradius_withdomain.pm +++ /dev/null @@ -1,28 +0,0 @@ -package FS::part_export::sqlradius_withdomain; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export::sqlradius; - -tie my %options, 'Tie::IxHash', %FS::part_export::sqlradius::options; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to SQL-backed RADIUS (FreeRADIUS, ICRADIUS) with realms', - 'options' => \%options, - 'nodomain' => '', - 'notes' => $FS::part_export::sqlradius::notes1. - 'This export exports domains to RADIUS realms (see also '. - 'sqlradius). '. - $FS::part_export::sqlradius::notes2 -); - -@ISA = qw(FS::part_export::sqlradius); - -sub export_username { - my($self, $svc_acct) = (shift, shift); - $svc_acct->email; -} - -1; - diff --git a/FS/FS/part_export/sysvshell.pm b/FS/FS/part_export/sysvshell.pm deleted file mode 100644 index 244c3bf82..000000000 --- a/FS/FS/part_export/sysvshell.pm +++ /dev/null @@ -1,25 +0,0 @@ -package FS::part_export::sysvshell; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export::passwdfile; - -@ISA = qw(FS::part_export::passwdfile); - -tie my %options, 'Tie::IxHash', %FS::part_export::passwdfile::options; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => - 'Batch export of /etc/passwd and /etc/shadow files (Linux, Solaris)', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => <<'END' -MD5 crypt requires installation of -Crypt::PasswdMD5 -from CPAN. Run bin/sysvshell.export to export the files. -END -); - -1; - diff --git a/FS/FS/part_export/textradius.pm b/FS/FS/part_export/textradius.pm deleted file mode 100644 index 3cd7039f8..000000000 --- a/FS/FS/part_export/textradius.pm +++ /dev/null @@ -1,191 +0,0 @@ -package FS::part_export::textradius; - -use vars qw(@ISA %info $prefix); -use Fcntl qw(:flock); -use Tie::IxHash; -use FS::UID qw(datasrc); -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'user' => { label=>'Remote username', default=>'root' }, - 'users' => { label=>'users file location', default=>'/etc/raddb/users' }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => - 'Real-time export to a text /etc/raddb/users file (Livingston, Cistron)', - 'options' => \%options, - 'notes' => <<'END' -This will edit a text RADIUS users file in place on a remote server. -Requires installation of -RADIUS::UserFile -from CPAN. If using RADIUS::UserFile 1.01, make sure to apply -this patch. Also -make sure rsync is installed on the -remote machine, and SSH is setup for unattended -operation. -END -); - -$prefix = "%%%FREESIDE_CONF%%%/export."; - -sub rebless { shift; } - -sub _export_insert { - my($self, $svc_acct) = (shift, shift); - $err_or_queue = $self->textradius_queue( $svc_acct->svcnum, 'insert', - $svc_acct->username, $svc_acct->radius_check, '-', $svc_acct->radius_reply); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - return "can't (yet?) change username with textradius" - if $old->username ne $new->username; - #return '' unless $old->_password ne $new->_password; - $err_or_queue = $self->textradius_queue( $new->svcnum, 'insert', - $new->username, $new->radius_check, '-', $new->radius_reply); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - $err_or_queue = $self->textradius_queue( $svc_acct->svcnum, 'delete', - $svc_acct->username ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -#a good idea to queue anything that could fail or take any time -sub textradius_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::textradius::textradius_$method", - }; - $queue->insert( - $self->option('user')||'root', - $self->machine, - $self->option('users'), - @_, - ) or $queue; -} - -sub textradius_insert { #subroutine, not method - my( $user, $host, $users, $username, @attributes ) = @_; - - #silly arg processing - my($att, @check); - push @check, $att while @attributes && ($att=shift @attributes) ne '-'; - my %check = @check; - my %reply = @attributes; - - my $file = textradius_download($user, $host, $users); - - eval "use RADIUS::UserFile;"; - die $@ if $@; - - my $userfile = new RADIUS::UserFile( - File => $file, - Who => [ $username ], - Check_Items => [ keys %check ], - ) or die "error parsing $file"; - - $userfile->remove($username); - $userfile->add( - Who => $username, - Attributes => { %check, %reply }, - Comment => 'user added by Freeside', - ) or die "error adding to $file"; - - $userfile->update( Who => [ $username ] ) - or die "error updating $file"; - - textradius_upload($user, $host, $users); - -} - -sub textradius_delete { #subroutine, not method - my( $user, $host, $users, $username ) = @_; - - my $file = textradius_download($user, $host, $users); - - eval "use RADIUS::UserFile;"; - die $@ if $@; - - my $userfile = new RADIUS::UserFile( - File => $file, - Who => [ $username ], - ) or die "error parsing $file"; - - $userfile->remove($username); - - $userfile->update( Who => [ $username ] ) - or die "error updating $file"; - - textradius_upload($user, $host, $users); -} - -sub textradius_download { - my( $user, $host, $users ) = @_; - - my $dir = $prefix. datasrc; - mkdir $dir, 0700 or die $! unless -d $dir; - $dir .= "/$host"; - mkdir $dir, 0700 or die $! unless -d $dir; - - my $dest = "$dir/users"; - - eval "use File::Rsync;"; - die $@ if $@; - my $rsync = File::Rsync->new({ rsh => 'ssh' }); - - open(LOCK, "+>>$dest.lock") - and flock(LOCK,LOCK_EX) - or die "can't open $dest.lock: $!"; - - $rsync->exec( { - src => "$user\@$host:$users", - dest => $dest, - } ); # true/false return value from exec is not working, alas - if ( $rsync->err ) { - die "error downloading $user\@$host:$users : ". - 'exit status: '. $rsync->status. ', '. - 'STDERR: '. join(" / ", $rsync->err). ', '. - 'STDOUT: '. join(" / ", $rsync->out); - } - - $dest; -} - -sub textradius_upload { - my( $user, $host, $users ) = @_; - - my $dir = $prefix. datasrc. "/$host"; - - eval "use File::Rsync;"; - die $@ if $@; - my $rsync = File::Rsync->new({ - rsh => 'ssh', - #dry_run => 1, - }); - $rsync->exec( { - src => "$dir/users", - dest => "$user\@$host:$users", - } ); # true/false return value from exec is not working, alas - if ( $rsync->err ) { - die "error uploading to $user\@$host:$users : ". - 'exit status: '. $rsync->status. ', '. - 'STDERR: '. join(" / ", $rsync->err). ', '. - 'STDOUT: '. join(" / ", $rsync->out); - } - - flock(LOCK,LOCK_UN); - close LOCK; - -} - -1; - diff --git a/FS/FS/part_export/trango.pm b/FS/FS/part_export/trango.pm deleted file mode 100644 index e7f1126dd..000000000 --- a/FS/FS/part_export/trango.pm +++ /dev/null @@ -1,434 +0,0 @@ -package FS::part_export::trango; - -=head1 FS::part_export::trango - -This export sends SNMP SETs to a router using the Net::SNMP package. It requires the following custom fields to be defined on a router. If any of the required custom fields are not present, then the export will exit quietly. - -=head1 Required custom fields - -=over 4 - -=item trango_address - IP address (or hostname) of the Trango AP. - -=item trango_comm - R/W SNMP community of the Trango AP. - -=item trango_ap_type - Trango AP Model. Currently 'access5830' is the only supported option. - -=back - -=head1 Optional custom fields - -=over 4 - -=item trango_baseid - Base ID of the Trango AP. See L. - -=item trango_apid - AP ID of the Trango AP. See L. - -=back - -=head1 Generating SU IDs - -This export will/must generate a unique SU ID for each service exported to a Trango AP. It can be done such that SU IDs are globally unique, unique per Base ID, or unique per Base ID/AP ID pair. This is accomplished by setting neither trango_baseid and trango_apid, only trango_baseid, or both trango_baseid and trango_apid, respectively. An SU ID will be generated if the FS::svc_broadband virtual field specified by suid_field export option is unset, otherwise the existing value will be used. - -=head1 Device Support - -This export has been tested with the Trango Access5830 AP. - - -=cut - - -use strict; -use vars qw(@ISA %info $me $DEBUG $trango_mib $counter_dir); - -use FS::UID qw(dbh datasrc); -use FS::Record qw(qsearch qsearchs); -use FS::part_export::snmp; - -use Tie::IxHash; -use File::CounterFile; -use Data::Dumper qw(Dumper); - -@ISA = qw(FS::part_export::snmp); - -tie my %options, 'Tie::IxHash', ( - 'suid_field' => { - 'label' => 'Trango SU ID field', - 'default' => 'trango_suid', - 'notes' => 'Name of the FS::svc_broadband virtual field that will contain the SU ID.', - }, - 'mac_field' => { - 'label' => 'Trango MAC address field', - 'default' => '', - 'notes' => 'Name of the FS::svc_broadband virtual field that will contain the SU\'s MAC address.', - }, -); - -%info = ( - 'svc' => 'svc_broadband', - 'desc' => 'Sends SNMP SETs to a Trango AP.', - 'options' => \%options, - 'notes' => 'Requires Net::SNMP. See the documentation for FS::part_export::trango for required virtual fields and usage information.', -); - -$me= '[' . __PACKAGE__ . ']'; -$DEBUG = 1; - -$trango_mib = { - 'access5830' => { - 'snmpversion' => 'snmpv1', - 'varbinds' => { - 'insert' => [ - { # sudbDeleteOrAddID - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.1', - 'type' => 'INTEGER', - 'value' => \&_trango_access5830_sudbDeleteOrAddId, - }, - { # sudbAddMac - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.2', - 'type' => 'HEX_STRING', - 'value' => \&_trango_access5830_sudbAddMac, - }, - { # sudbAddSU - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.7', - 'type' => 'INTEGER', - 'value' => 1, - }, - ], - 'delete' => [ - { # sudbDeleteOrAddID - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.1', - 'type' => 'INTEGER', - 'value' => \&_trango_access5830_sudbDeleteOrAddId, - }, - { # sudbDeleteSU - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.8', - 'type' => 'INTEGER', - 'value' => 1, - }, - ], - 'replace' => [ - { # sudbDeleteOrAddID - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.1', - 'type' => 'INTEGER', - 'value' => \&_trango_access5830_sudbDeleteOrAddId, - }, - { # sudbDeleteSU - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.8', - 'type' => 'INTEGER', - 'value' => 1, - }, - { # sudbDeleteOrAddID - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.1', - 'type' => 'INTEGER', - 'value' => \&_trango_access5830_sudbDeleteOrAddId, - }, - { # sudbAddMac - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.2', - 'type' => 'HEX_STRING', - 'value' => \&_trango_access5830_sudbAddMac, - }, - { # sudbAddSU - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.7', - 'type' => 'INTEGER', - 'value' => 1, - }, - ], - 'suspend' => [ - { # sudbDeleteOrAddID - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.1', - 'type' => 'INTEGER', - 'value' => \&_trango_access5830_sudbDeleteOrAddId, - }, - { # sudbDeleteSU - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.8', - 'type' => 'INTEGER', - 'value' => 1, - }, - ], - 'unsuspend' => [ - { # sudbDeleteOrAddID - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.1', - 'type' => 'INTEGER', - 'value' => \&_trango_access5830_sudbDeleteOrAddId, - }, - { # sudbAddMac - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.2', - 'type' => 'HEX_STRING', - 'value' => \&_trango_access5830_sudbAddMac, - }, - { # sudbAddSU - 'oid' => '1.3.6.1.4.1.5454.1.20.3.5.7', - 'type' => 'INTEGER', - 'value' => 1, - }, - ], - }, - }, -}; - - -sub _field_prefix { 'trango'; } - -sub _req_router_fields { - map { - $_[0]->_field_prefix . '_' . $_ - } (qw(address comm ap_type suid_field)); -} - -sub _get_cmd_sub { - - return('FS::part_export::snmp::snmp_cmd'); - -} - -sub _prepare_args { - - my ($self, $action, $router) = (shift, shift, shift); - my ($svc_broadband) = shift; - my $old = shift if $action eq 'replace'; - my $field_prefix = $self->_field_prefix; - my $error; - - my $ap_type = $router->getfield($field_prefix . '_ap_type'); - - unless (exists $trango_mib->{$ap_type}) { - return "Unsupported Trango AP type '$ap_type'"; - } - - $error = $self->_check_suid( - $action, $router, $svc_broadband, ($old) ? $old : () - ); - return $error if $error; - - $error = $self->_check_mac( - $action, $router, $svc_broadband, ($old) ? $old : () - ); - return $error if $error; - - my $ap_mib = $trango_mib->{$ap_type}; - - my $args = [ - '-hostname' => $router->getfield($field_prefix.'_address'), - '-version' => $ap_mib->{'snmpversion'}, - '-community' => $router->getfield($field_prefix.'_comm'), - ]; - - my @varbindlist = (); - - foreach my $oid (@{$ap_mib->{'varbinds'}->{$action}}) { - warn "[debug]$me Processing OID '" . $oid->{'oid'} . "'" if $DEBUG; - my $value; - if (ref($oid->{'value'}) eq 'CODE') { - eval { - $value = &{$oid->{'value'}}( - $self, $action, $router, $svc_broadband, - (($old) ? $old : ()), - ); - }; - return "While processing OID '" . $oid->{'oid'} . "':" . $@ - if $@; - } else { - $value = $oid->{'value'}; - } - - warn "[debug]$me Value for OID '" . $oid->{'oid'} . "': " if $DEBUG; - - if (defined $value) { # Skip OIDs with undefined values. - push @varbindlist, ($oid->{'oid'}, $oid->{'type'}, $value); - } - } - - - push @$args, ('-varbindlist', @varbindlist); - - return('', $args); - -} - -sub _check_suid { - - my ($self, $action, $router, $svc_broadband) = (shift, shift, shift, shift); - my $old = shift if $action eq 'replace'; - my $error; - - my $suid_field = $self->option('suid_field'); - unless (grep {$_ eq $suid_field} $svc_broadband->fields) { - return "Missing Trango SU ID field. " - . "See the trango export options for more info."; - } - - my $suid = $svc_broadband->getfield($suid_field); - if ($action eq 'replace') { - my $old_suid = $old->getfield($suid_field); - - if ($old_suid ne '' and $old_suid ne $suid) { - return 'Cannot change Trango SU ID'; - } - } - - if (not $suid =~ /^\d+$/ and $action ne 'delete') { - my $new_suid = eval { $self->_get_next_suid($router); }; - return "Error while getting next Trango SU ID: $@" if ($@); - - warn "[debug]$me Got new SU ID: $new_suid" if $DEBUG; - $svc_broadband->set($suid_field, $new_suid); - - #FIXME: Probably a bad hack. - # We need to update the SU ID field in the database. - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::svc_Common::noexport_hack = 1; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $svcnum = $svc_broadband->svcnum; - - my $old_svc = qsearchs('svc_broadband', { svcnum => $svcnum }); - unless ($old_svc) { - return "Unable to retrieve svc_broadband with svcnum '$svcnum"; - } - - my $svcpart = $svc_broadband->svcpart - ? $svc_broadband->svcpart - : $svc_broadband->cust_svc->svcpart; - - my $new_svc = new FS::svc_broadband { - $old_svc->hash, - $suid_field => $new_suid, - svcpart => $svcpart, - }; - - $error = $new_svc->check; - if ($error) { - $dbh->rollback if $oldAutoCommit; - return "Error while updating the Trango SU ID: $error" if $error; - } - - warn "[debug]$me Updating svc_broadband with SU ID '$new_suid'...\n" . - &Dumper($new_svc) if $DEBUG; - - $error = eval { $new_svc->replace($old_svc); }; - - if ($@ or $error) { - $error ||= $@; - $dbh->rollback if $oldAutoCommit; - return "Error while updating the Trango SU ID: $error" if $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - } - - return ''; - -} - -sub _check_mac { - - my ($self, $action, $router, $svc_broadband) = (shift, shift, shift, shift); - my $old = shift if $action eq 'replace'; - - my $mac_field = $self->option('mac_field'); - unless (grep {$_ eq $mac_field} $svc_broadband->fields) { - return "Missing Trango MAC address field. " - . "See the trango export options for more info."; - } - - my $mac_addr = $svc_broadband->getfield($mac_field); - unless (length(join('', $mac_addr =~ /[0-9a-fA-F]/g)) == 12) { - return "Invalid Trango MAC address: $mac_addr"; - } - - return(''); - -} - -sub _get_next_suid { - - my ($self, $router) = (shift, shift); - - my $counter_dir = '/usr/local/etc/freeside/export.'. datasrc . '/trango'; - my $baseid = $router->getfield('trango_baseid'); - my $apid = $router->getfield('trango_apid'); - - my $counter_file_suffix = ''; - if ($baseid ne '') { - $counter_file_suffix .= "_B$baseid"; - if ($apid ne '') { - $counter_file_suffix .= "_A$apid"; - } - } - - my $counter_file = $counter_dir . '/SUID' . $counter_file_suffix; - - warn "[debug]$me Using SUID counter file '$counter_file'"; - - my $suid = eval { - mkdir $counter_dir, 0700 unless -d $counter_dir; - - my $cf = new File::CounterFile($counter_file, 0); - $cf->inc; - }; - - die "Error generating next Trango SU ID: $@" if (not $suid or $@); - - return($suid); - -} - - - -# Trango-specific subroutines for generating varbind values. -# -# All subs should die on error, and return undef to decline. OIDs that -# decline will not be added to varbinds. - -sub _trango_access5830_sudbDeleteOrAddId { - - my ($self, $action, $router) = (shift, shift, shift); - my ($svc_broadband) = shift; - my $old = shift if $action eq 'replace'; - - my $suid = $svc_broadband->getfield($self->option('suid_field')); - - # Sanity check. - unless ($suid =~ /^\d+$/) { - if ($action eq 'delete') { - # Silently ignore. If we don't have a valid SU ID now, we probably - # never did. - return undef; - } else { - die "Invalid Trango SU ID '$suid'"; - } - } - - return ($suid); - -} - -sub _trango_access5830_sudbAddMac { - - my ($self, $action, $router) = (shift, shift, shift); - my ($svc_broadband) = shift; - my $old = shift if $action eq 'replace'; - - my $mac_addr = $svc_broadband->getfield($self->option('mac_field')); - $mac_addr = join('', $mac_addr =~ /[0-9a-fA-F]/g); - - # Sanity check. - die "Invalid Trango MAC address '$mac_addr'" unless (length($mac_addr)==12); - - return($mac_addr); - -} - - -=head1 BUGS - -Plenty, I'm sure. - -=cut - - -1; diff --git a/FS/FS/part_export/vpopmail.pm b/FS/FS/part_export/vpopmail.pm deleted file mode 100644 index 4cda65755..000000000 --- a/FS/FS/part_export/vpopmail.pm +++ /dev/null @@ -1,254 +0,0 @@ -package FS::part_export::vpopmail; - -use vars qw(@ISA %info @saltset $exportdir); -use Fcntl qw(:flock); -use Tie::IxHash; -use File::Path; -use FS::UID qw( datasrc ); -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - #'machine' => { label=>'vpopmail machine', }, - 'dir' => { label=>'directory', }, # ?more info? default? - 'uid' => { label=>'vpopmail uid' }, - 'gid' => { label=>'vpopmail gid' }, - 'restart' => { label=> 'vpopmail restart command', - default=> 'cd /home/vpopmail/domains; for domain in *; do /home/vpopmail/bin/vmkpasswd $domain; done; /var/qmail/bin/qmail-newu; killall -HUP qmail-send', - }, -; - -%info = ( - 'svc' => 'svc_acct', - 'desc' => 'Real-time export to vpopmail text files', - 'options' => \%options, - 'notes' => <<'END' -This export is currently unmaintained. See shellcommands_withdomain for an -export that uses vpopmail CLI commands instead.
    -
    -Real time export to vpopmail text -files. File::Rsync -must be installed, and you will need to -setup SSH for unattended operation -to vpopmail@export.host. -END -); - -@saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' ); - -sub rebless { shift; } - -sub _export_insert { - my($self, $svc_acct) = (shift, shift); - $self->vpopmail_queue( $svc_acct->svcnum, 'insert', - $svc_acct->username, - crypt($svc_acct->_password,$saltset[int(rand(64))].$saltset[int(rand(64))]), - $svc_acct->domain, - $svc_acct->quota, - $svc_acct->finger, - ); -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - - my $cpassword = crypt( - $new->_password, $saltset[int(rand(64))].$saltset[int(rand(64))] - ); - - return "can't change username with vpopmail" - if $old->username ne $new->username; - - #no.... if mail can't be preserved, better to disallow username changes - #if ($old->username ne $new->username || $old->domain ne $new->domain ) { - # vpopmail_queue( $svc_acct->svcnum, 'delete', - # $old->username, $old->domain - # ); - # vpopmail_queue( $svc_acct->svcnum, 'insert', - # $new->username, - # $cpassword, - # $new->domain, - # ); - - return '' unless $old->_password ne $new->_password; - - $self->vpopmail_queue( $new->svcnum, 'replace', - $new->username, $cpassword, $new->domain, $new->quota, $new->finger ); -} - -sub _export_delete { - my( $self, $svc_acct ) = (shift, shift); - $self->vpopmail_queue( $svc_acct->svcnum, 'delete', - $svc_acct->username, $svc_acct->domain ); -} - -#a good idea to queue anything that could fail or take any time -sub vpopmail_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - - my $exportdir = "%%%FREESIDE_EXPORT%%%/export." . datasrc; - mkdir $exportdir, 0700 or die $! unless -d $exportdir; - $exportdir .= "/vpopmail"; - mkdir $exportdir, 0700 or die $! unless -d $exportdir; - $exportdir .= '/'. $self->machine; - mkdir $exportdir, 0700 or die $! unless -d $exportdir; - mkdir "$exportdir/domains", 0700 or die $! unless -d "$exportdir/domains"; - - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::vpopmail::vpopmail_$method", - }; - $queue->insert( - $exportdir, - $self->machine, - $self->option('dir'), - $self->option('uid'), - $self->option('gid'), - $self->option('restart'), - @_ - ); -} - -sub vpopmail_insert { #subroutine, not method - my( $exportdir, $machine, $dir, $uid, $gid, $restart ) = splice @_,0,6; - my( $username, $password, $domain, $quota, $finger ) = @_; - - mkdir "$exportdir/domains/$domain", 0700 or die $! - unless -d "$exportdir/domains/$domain"; - - (open(VPASSWD, ">>$exportdir/domains/$domain/vpasswd") - and flock(VPASSWD,LOCK_EX) - ) or die "can't open vpasswd file for $username\@$domain: ". - "$exportdir/domains/$domain/vpasswd: $!"; - print VPASSWD join(":", - $username, - $password, - '1', - '0', - $finger, - "$dir/domains/$domain/$username", - $quota ? $quota.'S' : 'NOQUOTA', - ), "\n"; - - flock(VPASSWD,LOCK_UN); - close(VPASSWD); - - for my $mkdir ( - grep { ! -d $_ } map { "$exportdir/domains/$domain/$username$_" } - ( '', qw( /Maildir /Maildir/cur /Maildir/new /Maildir/tmp ) ) - ) { - mkdir $mkdir, 0700 or die "can't mkdir $mkdir: $!"; - } - - vpopmail_sync( $exportdir, $machine, $dir, $uid, $gid, $restart ); - -} - -sub vpopmail_replace { #subroutine, not method - my( $exportdir, $machine, $dir, $uid, $gid, $restart ) = splice @_,0,6; - my( $username, $password, $domain, $quota, $finger ) = @_; - - (open(VPASSWD, "$exportdir/domains/$domain/vpasswd") - and flock(VPASSWD,LOCK_EX) - ) or die "can't open $exportdir/domains/$domain/vpasswd: $!"; - - open(VPASSWDTMP, ">$exportdir/domains/$domain/vpasswd.tmp") - or die "Can't open $exportdir/domains/$domain/vpasswd.tmp: $!"; - - while () { - my ($mailbox, $pw, $vuid, $vgid, $vfinger, $vdir, $vquota, @rest) = - split(':', $_); - if ( $username ne $mailbox ) { - print VPASSWDTMP $_; - next - } - print VPASSWDTMP join (':', - $mailbox, - $password, - '1', - '0', - $finger, - "$dir/domains/$domain/$username", #$vdir - $quota ? $quota.'S' : 'NOQUOTA', - ), "\n"; - } - - close(VPASSWDTMP); - - rename "$exportdir/domains/$domain/vpasswd.tmp", "$exportdir/domains/$domain/vpasswd" - or die "Can't rename $exportdir/domains/$domain/vpasswd.tmp: $!"; - - flock(VPASSWD,LOCK_UN); - close(VPASSWD); - - vpopmail_sync( $exportdir, $machine, $dir, $uid, $gid, $restart ); - -} - -sub vpopmail_delete { #subroutine, not method - my( $exportdir, $machine, $dir, $uid, $gid, $restart ) = splice @_,0,6; - my( $username, $domain ) = @_; - - (open(VPASSWD, "$exportdir/domains/$domain/vpasswd") - and flock(VPASSWD,LOCK_EX) - ) or die "can't open $exportdir/domains/$domain/vpasswd: $!"; - - open(VPASSWDTMP, ">$exportdir/domains/$domain/vpasswd.tmp") - or die "Can't open $exportdir/domains/$domain/vpasswd.tmp: $!"; - - while () { - my ($mailbox, $rest) = split(':', $_); - print VPASSWDTMP $_ unless $username eq $mailbox; - } - - close(VPASSWDTMP); - - rename "$exportdir/domains/$domain/vpasswd.tmp", - "$exportdir/domains/$domain/vpasswd" - or die "Can't rename $exportdir/domains/$domain/vpasswd.tmp: $!"; - - flock(VPASSWD,LOCK_UN); - close(VPASSWD); - - rmtree "$exportdir/domains/$domain/$username" - or die "can't rmtree $exportdir/domains/$domain/$username: $!"; - - vpopmail_sync( $exportdir, $machine, $dir, $uid, $gid, $restart ); -} - -sub vpopmail_sync { - my( $exportdir, $machine, $dir, $uid, $gid, $restart ) = splice @_,0,6; - - chdir $exportdir; -# my @args = ( $rsync, "-rlpt", "-e", $ssh, "domains/", -# "vpopmail\@$machine:$dir/domains/" ); -# system {$args[0]} @args; - - eval "use File::Rsync;"; - die $@ if $@; - - my $rsync = File::Rsync->new({ rsh => 'ssh' }); - - $rsync->exec( { - recursive => 1, - perms => 1, - times => 1, - src => "$exportdir/domains/", - dest => "vpopmail\@$machine:$dir/domains/", - } ); # true/false return value from exec is not working, alas - if ( $rsync->err ) { - die "error uploading to vpopmail\@$machine:$dir/domains/ : ". - 'exit status: '. $rsync->status. ', '. - 'STDERR: '. join(" / ", $rsync->err). ', '. - 'STDOUT: '. join(" / ", $rsync->out); - } - - eval "use Net::SSH qw(ssh);"; - die $@ if $@; - - ssh("vpopmail\@$machine", $restart) if $restart; -} - -1; - diff --git a/FS/FS/part_export/www_plesk.pm b/FS/FS/part_export/www_plesk.pm deleted file mode 100644 index 82d555761..000000000 --- a/FS/FS/part_export/www_plesk.pm +++ /dev/null @@ -1,138 +0,0 @@ -package FS::part_export::www_plesk; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'URL' => { label=>'URL' }, - 'login' => { label=>'Login' }, - 'password' => { label=>'Password' }, - 'template' => { label=>'Domain Template' }, - 'web' => { label=>'Host Website', - type=>'checkbox' }, - 'debug' => { label=>'Enable debugging', - type=>'checkbox' }, -; - -%info = ( - 'svc' => 'svc_www', - 'desc' => 'Real-time export to Plesk managed hosting service', - 'options'=> \%options, - 'notes' => <<'END' -Real-time export to -Plesk managed server. -Requires installation of -Net::Plesk -from CPAN. -END -); - -sub rebless { shift; } - -# experiment: want the status of these right away (don't want account to -# create or whatever and then get error in the queue from dup username or -# something), so no queueing - -sub _export_insert { - my( $self, $www ) = ( shift, shift ); - - eval "use Net::Plesk;"; - return $@ if $@; - - my $plesk = new Net::Plesk ( - 'POST' => $self->option('URL'), - ':HTTP_AUTH_LOGIN' => $self->option('login'), - ':HTTP_AUTH_PASSWD' => $self->option('password'), - ); - - my $gcresp = $plesk->client_get( $www->svc_acct->username ); - return $gcresp->errortext - unless $gcresp->is_success; - - unless ($gcresp->id) { - my $cust_main = $www->cust_svc->cust_pkg->cust_main; - $gcresp = $plesk->client_add( $cust_main->name, - $www->svc_acct->username, - $www->svc_acct->_password, - $cust_main->daytime, - $cust_main->fax, - $cust_main->invoicing_list->[0], - $cust_main->address1 . $cust_main->address2, - $cust_main->city, - $cust_main->state, - $cust_main->zip, - $cust_main->country, - ); - return $gcresp->errortext - unless $gcresp->is_success; - } - - $plesk->client_ippool_add_ip ( $gcresp->id, - $www->domain_record->recdata, - ); - - if ($self->option('web')) { - $self->_plesk_command( 'domain_add', - $www->domain_record->svc_domain->domain, - $gcresp->id, - $www->domain_record->recdata, - $self->option('template')?$self->option('template'):'', - $www->svc_acct->username, - $www->svc_acct->_password, - ); - }else{ - $self->_plesk_command( 'domain_add', - $www->domain_record->svc_domain->domain, - $gcresp->id, - $www->domain_record->recdata, - $self->option('template')?$self->option('template'):'', - ); - } -} - -sub _plesk_command { - my( $self, $method, @args ) = @_; - - eval "use Net::Plesk;"; - return $@ if $@; - - local($Net::Plesk::DEBUG) = 1 - if $self->option('debug'); - - my $plesk = new Net::Plesk ( - 'POST' => $self->option('URL'), - ':HTTP_AUTH_LOGIN' => $self->option('login'), - ':HTTP_AUTH_PASSWD' => $self->option('password'), - ); - - my $response = $plesk->$method(@args); - return $response->errortext unless $response->is_success; - ''; - -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - - return "can't change domain with Plesk" - if $old->domain_record->svc_domain->domain ne - $new->domain_record->svc_domain->domain; - - return "can't change client with Plesk" - if $old->svc_acct->username ne - $new->svc_acct->username; - - return ''; - -} - -sub _export_delete { - my( $self, $www ) = ( shift, shift ); - $self->_plesk_command( 'domain_del', $www->domain_record->svc_domain->domain); -} - -1; - diff --git a/FS/FS/part_export/www_shellcommands.pm b/FS/FS/part_export/www_shellcommands.pm deleted file mode 100644 index 7e4be9ce4..000000000 --- a/FS/FS/part_export/www_shellcommands.pm +++ /dev/null @@ -1,190 +0,0 @@ -package FS::part_export::www_shellcommands; - -use strict; -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'user' => { label=>'Remote username', default=>'root' }, - 'useradd' => { label=>'Insert command', - default=>'mkdir $homedir/$zone; chown $username $homedir/$zone; ln -s $homedir/$zone /var/www/$zone', - }, - 'userdel' => { label=>'Delete command', - default=>'[ -n "$zone" ] && rm -rf /var/www/$zone; rm -rf $homedir/$zone', - }, - 'usermod' => { label=>'Modify command', - default=>'[ -n "$old_zone" ] && rm /var/www/$old_zone; [ "$old_zone" != "$new_zone" -a -n "$new_zone" ] && ( mv $old_homedir/$old_zone $new_homedir/$new_zone; ln -sf $new_homedir/$new_zone /var/www/$new_zone ); [ "$old_username" != "$new_username" ] && chown -R $new_username $new_homedir/$new_zone; ln -sf $new_homedir/$new_zone /var/www/$new_zone', - }, - 'suspend' => { label=>'Suspension command', - default=>'[ -n "$zone" ] && chmod 0 /var/www/$zone', - }, - 'unsuspend'=> { label=>'Unsuspension command', - default=>'[ -n "$zone" ] && chmod 755 /var/www/$zone', - }, -; - -%info = ( - 'svc' => 'svc_www', - 'desc' => 'Run remote commands via SSH, for virtual web sites (directory maintenance, FrontPage, ISPMan)', - 'options' => \%options, - 'notes' => <<'END' -Run remote commands via SSH, for virtual web sites. You will need to -setup SSH for unattended operation. -

    Use these buttons for some useful presets: -
      -
    • - -
    • - -
    • -
    -The following variables are available for interpolation (prefixed with -new_ or old_ for replace operations): -
      -
    • $zone - fully-qualified zone of this virtual host -
    • $bare_zone - just the zone of this virtual host, without the domain portion -
    • $domain - base domain -
    • $username -
    • $_password -
    • $homedir -
    • All other fields in svc_www - are also available. -
    -END -); - - -sub rebless { shift; } - -sub _export_insert { - my($self) = shift; - $self->_export_command('useradd', @_); -} - -sub _export_delete { - my($self) = shift; - $self->_export_command('userdel', @_); -} - -sub _export_suspend { - my($self) = shift; - $self->_export_command('suspend', @_); -} - -sub _export_unsuspend { - my($self) = shift; - $self->_export_command('unsuspend', @_); -} - -sub _export_command { - my ( $self, $action, $svc_www) = (shift, shift, shift); - my $command = $self->option($action); - return '' if $command =~ /^\s*$/; - - #set variable for the command - no strict 'vars'; - { - no strict 'refs'; - ${$_} = $svc_www->getfield($_) foreach $svc_www->fields; - } - my $domain_record = $svc_www->domain_record; # or die ? - my $zone = $domain_record->zone; # or die ? - my $domain = $domain_record->svc_domain->domain; - ( my $bare_zone = $zone ) =~ s/\.$domain$//; - my $svc_acct = $svc_www->svc_acct; # or die ? - my $username = $svc_acct->username; - my $_password = $svc_acct->_password; - my $homedir = $svc_acct->dir; # or die ? - - #done setting variables for the command - - $self->shellcommands_queue( $svc_www->svcnum, - user => $self->option('user')||'root', - host => $self->machine, - command => eval(qq("$command")), - ); -} - -sub _export_replace { - my($self, $new, $old ) = (shift, shift, shift); - my $command = $self->option('usermod'); - - #set variable for the command - no strict 'vars'; - { - no strict 'refs'; - ${"old_$_"} = $old->getfield($_) foreach $old->fields; - ${"new_$_"} = $new->getfield($_) foreach $new->fields; - } - my $old_domain_record = $old->domain_record; # or die ? - my $old_zone = $old_domain_record->zone; # or die ? - my $old_domain = $old_domain_record->svc_domain->domain; - ( my $old_bare_zone = $old_zone ) =~ s/\.$old_domain$//; - my $old_svc_acct = $old->svc_acct; # or die ? - my $old_username = $old_svc_acct->username; - my $old_homedir = $old_svc_acct->dir; # or die ? - - my $new_domain_record = $new->domain_record; # or die ? - my $new_zone = $new_domain_record->zone; # or die ? - my $new_domain = $new_domain_record->svc_domain->domain; - ( my $new_bare_zone = $new_zone ) =~ s/\.$new_domain$//; - my $new_svc_acct = $new->svc_acct; # or die ? - my $new_username = $new_svc_acct->username; - #my $new__password = $new_svc_acct->_password; - my $new_homedir = $new_svc_acct->dir; # or die ? - - #done setting variables for the command - - $self->shellcommands_queue( $new->svcnum, - user => $self->option('user')||'root', - host => $self->machine, - command => eval(qq("$command")), - ); -} - -#a good idea to queue anything that could fail or take any time -sub shellcommands_queue { - my( $self, $svcnum ) = (shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::www_shellcommands::ssh_cmd", - }; - $queue->insert( @_ ); -} - -sub ssh_cmd { #subroutine, not method - use Net::SSH '0.08'; - &Net::SSH::ssh_cmd( { @_ } ); -} - -#sub shellcommands_insert { #subroutine, not method -#} -#sub shellcommands_replace { #subroutine, not method -#} -#sub shellcommands_delete { #subroutine, not method -#} - diff --git a/FS/FS/part_export_option.pm b/FS/FS/part_export_option.pm deleted file mode 100644 index e75940429..000000000 --- a/FS/FS/part_export_option.pm +++ /dev/null @@ -1,134 +0,0 @@ -package FS::part_export_option; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); -use FS::part_export; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::part_export_option - Object methods for part_export_option records - -=head1 SYNOPSIS - - use FS::part_export_option; - - $record = new FS::part_export_option \%hash; - $record = new FS::part_export_option { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_export_option object represents an export option. -FS::part_export_option inherits from FS::Record. The following fields are -currently supported: - -=over 4 - -=item optionnum - primary key - -=item exportnum - export (see L) - -=item optionname - option name - -=item optionvalue - option value - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new export option. To add the export option to the database, see -L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'part_export_option'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid export option. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('optionnum') - || $self->ut_foreign_key('exportnum', 'part_export', 'exportnum') - || $self->ut_alpha('optionname') - || $self->ut_anything('optionvalue') - ; - return $error if $error; - - return "Unknown exportnum: ". $self->exportnum - unless qsearchs('part_export', { 'exportnum' => $self->exportnum } ); - - #check options & values? - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -Possibly. - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm deleted file mode 100644 index 84502b745..000000000 --- a/FS/FS/part_pkg.pm +++ /dev/null @@ -1,896 +0,0 @@ -package FS::part_pkg; - -use strict; -use vars qw( @ISA %plans $DEBUG ); -use Carp qw(carp cluck confess); -use Tie::IxHash; -use FS::Conf; -use FS::Record qw( qsearch qsearchs dbh dbdef ); -use FS::pkg_svc; -use FS::part_svc; -use FS::cust_pkg; -use FS::agent_type; -use FS::type_pkgs; -use FS::part_pkg_option; -use FS::pkg_class; -use FS::agent; - -@ISA = qw( FS::m2m_Common FS::Record ); # FS::option_Common ); # this can use option_Common - # when all the plandata bs is - # gone - -$DEBUG = 0; - -=head1 NAME - -FS::part_pkg - Object methods for part_pkg objects - -=head1 SYNOPSIS - - use FS::part_pkg; - - $record = new FS::part_pkg \%hash - $record = new FS::part_pkg { 'column' => 'value' }; - - $custom_record = $template_record->clone; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - @pkg_svc = $record->pkg_svc; - - $svcnum = $record->svcpart; - $svcnum = $record->svcpart( 'svc_acct' ); - -=head1 DESCRIPTION - -An FS::part_pkg object represents a package definition. FS::part_pkg -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item pkgpart - primary key (assigned automatically for new package definitions) - -=item pkg - Text name of this package definition (customer-viewable) - -=item comment - Text name of this package definition (non-customer-viewable) - -=item classnum - Optional package class (see L) - -=item promo_code - Promotional code - -=item setup - Setup fee expression (deprecated) - -=item freq - Frequency of recurring fee - -=item recur - Recurring fee expression (deprecated) - -=item setuptax - Setup fee tax exempt flag, empty or `Y' - -=item recurtax - Recurring fee tax exempt flag, empty or `Y' - -=item taxclass - Tax class - -=item plan - Price plan - -=item plandata - Price plan data (deprecated - see L instead) - -=item disabled - Disabled flag, empty or `Y' - -=item pay_weight - Weight (relative to credit_weight and other package definitions) that controls payment application to specific line items. - -=item credit_weight - Weight (relative to other package definitions) that controls credit application to specific line items. - -=item agentnum - Optional agentnum (see L) - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new package definition. To add the package definition to -the database, see L<"insert">. - -=cut - -sub table { 'part_pkg'; } - -=item clone - -An alternate constructor. Creates a new package definition by duplicating -an existing definition. A new pkgpart is assigned and `(CUSTOM) ' is prepended -to the comment field. To add the package definition to the database, see -L<"insert">. - -=cut - -sub clone { - my $self = shift; - my $class = ref($self); - my %hash = $self->hash; - $hash{'pkgpart'} = ''; - $hash{'comment'} = "(CUSTOM) ". $hash{'comment'} - unless $hash{'comment'} =~ /^\(CUSTOM\) /; - #new FS::part_pkg ( \%hash ); # ? - new $class ( \%hash ); # ? -} - -=item insert [ , OPTION => VALUE ... ] - -Adds this package definition to the database. If there is an error, -returns the error, otherwise returns false. - -Currently available options are: I, I, I, -I and I. - -If I is set to a hashref with svcparts as keys and quantities as -values, appropriate FS::pkg_svc records will be inserted. - -If I is set to the svcpart of the primary service, the appropriate -FS::pkg_svc record will be updated. - -If I is set to a pkgnum of a FS::cust_pkg record (or the FS::cust_pkg -record itself), the object will be updated to point to this package definition. - -In conjunction with I, if I is set to a scalar reference, -the scalar will be updated with the custnum value from the cust_pkg record. - -If I is set to a hashref of options, appropriate FS::part_pkg_option -records will be inserted. - -=cut - -sub insert { - my $self = shift; - my %options = @_; - warn "FS::part_pkg::insert called on $self with options ". - join(', ', map "$_=>$options{$_}", keys %options) - if $DEBUG; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - warn " saving legacy plandata" if $DEBUG; - my $plandata = $self->get('plandata'); - $self->set('plandata', ''); - - warn " inserting part_pkg record" if $DEBUG; - my $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( $plandata ) { - - warn " inserting part_pkg_option records for plandata" if $DEBUG; - foreach my $part_pkg_option ( - map { /^(\w+)=(.*)$/ or do { $dbh->rollback if $oldAutoCommit; - return "illegal plandata: $plandata"; - }; - new FS::part_pkg_option { - 'pkgpart' => $self->pkgpart, - 'optionname' => $1, - 'optionvalue' => $2, - }; - } - split("\n", $plandata) - ) { - my $error = $part_pkg_option->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - } elsif ( $options{'options'} ) { - - warn " inserting part_pkg_option records for options hashref" if $DEBUG; - foreach my $optionname ( keys %{$options{'options'}} ) { - - my $part_pkg_option = - new FS::part_pkg_option { - 'pkgpart' => $self->pkgpart, - 'optionname' => $optionname, - 'optionvalue' => $options{'options'}->{$optionname}, - }; - - my $error = $part_pkg_option->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - } - - } - - my $conf = new FS::Conf; - if ( $conf->exists('agent_defaultpkg') ) { - warn " agent_defaultpkg set; allowing all agents to purchase package" - if $DEBUG; - foreach my $agent_type ( qsearch('agent_type', {} ) ) { - my $type_pkgs = new FS::type_pkgs({ - 'typenum' => $agent_type->typenum, - 'pkgpart' => $self->pkgpart, - }); - my $error = $type_pkgs->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - warn " inserting pkg_svc records" if $DEBUG; - my $pkg_svc = $options{'pkg_svc'} || {}; - foreach my $part_svc ( qsearch('part_svc', {} ) ) { - my $quantity = $pkg_svc->{$part_svc->svcpart} || 0; - my $primary_svc = - ( $options{'primary_svc'} && $options{'primary_svc'}==$part_svc->svcpart ) - ? 'Y' - : ''; - - my $pkg_svc = new FS::pkg_svc( { - 'pkgpart' => $self->pkgpart, - 'svcpart' => $part_svc->svcpart, - 'quantity' => $quantity, - 'primary_svc' => $primary_svc, - } ); - my $error = $pkg_svc->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - if ( $options{'cust_pkg'} ) { - warn " updating cust_pkg record " if $DEBUG; - my $old_cust_pkg = - ref($options{'cust_pkg'}) - ? $options{'cust_pkg'} - : qsearchs('cust_pkg', { pkgnum => $options{'cust_pkg'} } ); - ${ $options{'custnum_ref'} } = $old_cust_pkg->custnum - if $options{'custnum_ref'}; - my %hash = $old_cust_pkg->hash; - $hash{'pkgpart'} = $self->pkgpart, - my $new_cust_pkg = new FS::cust_pkg \%hash; - local($FS::cust_pkg::disable_agentcheck) = 1; - my $error = $new_cust_pkg->replace($old_cust_pkg); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error modifying cust_pkg record: $error"; - } - } - - warn " commiting transaction" if $DEBUG; - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -=item delete - -Currently unimplemented. - -=cut - -sub delete { - return "Can't (yet?) delete package definitions."; -# check & make sure the pkgpart isn't in cust_pkg or type_pkgs? -} - -=item replace OLD_RECORD [ , OPTION => VALUE ... ] - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -Currently available options are: I and I - -If I is set to a hashref with svcparts as keys and quantities as -values, the appropriate FS::pkg_svc records will be replace. - -If I is set to the svcpart of the primary service, the appropriate -FS::pkg_svc record will be updated. - -=cut - -sub replace { - my( $new, $old ) = ( shift, shift ); - my %options = @_; - - # We absolutely have to have an old vs. new record to make this work. - if (!defined($old)) { - $old = qsearchs( 'part_pkg', { 'pkgpart' => $new->pkgpart } ); - } - - warn "FS::part_pkg::replace called on $new to replace $old ". - "with options %options" - if $DEBUG; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - warn " saving legacy plandata" if $DEBUG; - my $plandata = $new->get('plandata'); - $new->set('plandata', ''); - - warn " deleting old part_pkg_option records" if $DEBUG; - foreach my $part_pkg_option ( $old->part_pkg_option ) { - my $error = $part_pkg_option->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - warn " replacing part_pkg record" if $DEBUG; - my $error = $new->SUPER::replace($old); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - warn " inserting part_pkg_option records for plandata" if $DEBUG; - foreach my $part_pkg_option ( - map { /^(\w+)=(.*)$/ or do { $dbh->rollback if $oldAutoCommit; - return "illegal plandata: $plandata"; - }; - new FS::part_pkg_option { - 'pkgpart' => $new->pkgpart, - 'optionname' => $1, - 'optionvalue' => $2, - }; - } - split("\n", $plandata) - ) { - my $error = $part_pkg_option->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - warn " replacing pkg_svc records" if $DEBUG; - my $pkg_svc = $options{'pkg_svc'} || {}; - foreach my $part_svc ( qsearch('part_svc', {} ) ) { - my $quantity = $pkg_svc->{$part_svc->svcpart} || 0; - my $primary_svc = $options{'primary_svc'} == $part_svc->svcpart ? 'Y' : ''; - - my $old_pkg_svc = qsearchs('pkg_svc', { - 'pkgpart' => $old->pkgpart, - 'svcpart' => $part_svc->svcpart, - } ); - my $old_quantity = $old_pkg_svc ? $old_pkg_svc->quantity : 0; - my $old_primary_svc = - ( $old_pkg_svc && $old_pkg_svc->dbdef_table->column('primary_svc') ) - ? $old_pkg_svc->primary_svc - : ''; - next unless $old_quantity != $quantity || $old_primary_svc ne $primary_svc; - - my $new_pkg_svc = new FS::pkg_svc( { - 'pkgsvcnum' => ( $old_pkg_svc ? $old_pkg_svc->pkgsvcnum : '' ), - 'pkgpart' => $new->pkgpart, - 'svcpart' => $part_svc->svcpart, - 'quantity' => $quantity, - 'primary_svc' => $primary_svc, - } ); - my $error = $old_pkg_svc - ? $new_pkg_svc->replace($old_pkg_svc) - : $new_pkg_svc->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - warn " commiting transaction" if $DEBUG; - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; -} - -=item check - -Checks all fields to make sure this is a valid package definition. If -there is an error, returns the error, otherwise returns false. Called by the -insert and replace methods. - -=cut - -sub check { - my $self = shift; - warn "FS::part_pkg::check called on $self" if $DEBUG; - - for (qw(setup recur plandata)) { - #$self->set($_=>0) if $self->get($_) =~ /^\s*$/; } - return "Use of $_ field is deprecated; set a plan and options" - if length($self->get($_)); - $self->set($_, ''); - } - - if ( $self->dbdef_table->column('freq')->type =~ /(int)/i ) { - my $error = $self->ut_number('freq'); - return $error if $error; - } else { - $self->freq =~ /^(\d+[hdw]?)$/ - or return "Illegal or empty freq: ". $self->freq; - $self->freq($1); - } - - my $error = $self->ut_numbern('pkgpart') - || $self->ut_text('pkg') - || $self->ut_text('comment') - || $self->ut_textn('promo_code') - || $self->ut_alphan('plan') - || $self->ut_enum('setuptax', [ '', 'Y' ] ) - || $self->ut_enum('recurtax', [ '', 'Y' ] ) - || $self->ut_textn('taxclass') - || $self->ut_enum('disabled', [ '', 'Y' ] ) - || $self->ut_floatn('pay_weight') - || $self->ut_floatn('credit_weight') - || $self->ut_agentnum_acl('agentnum', 'Edit global package definitions') - || $self->SUPER::check - ; - return $error if $error; - - if ( $self->classnum !~ /^$/ ) { - my $error = $self->ut_foreign_key('classnum', 'pkg_class', 'classnum'); - return $error if $error; - } else { - $self->classnum(''); - } - - return 'Unknown plan '. $self->plan - unless exists($plans{$self->plan}); - - my $conf = new FS::Conf; - return 'Taxclass is required' - if ! $self->taxclass && $conf->exists('require_taxclasses'); - - ''; -} - -=item pkg_class - -Returns the package class, as an FS::pkg_class object, or the empty string -if there is no package class. - -=cut - -sub pkg_class { - my $self = shift; - if ( $self->classnum ) { - qsearchs('pkg_class', { 'classnum' => $self->classnum } ); - } else { - return ''; - } -} - -=item classname - -Returns the package class name, or the empty string if there is no package -class. - -=cut - -sub classname { - my $self = shift; - my $pkg_class = $self->pkg_class; - $pkg_class - ? $pkg_class->classname - : ''; -} - -=item agent - -Returns the associated agent for this event, if any, as an FS::agent object. - -=cut - -sub agent { - my $self = shift; - qsearchs('agent', { 'agentnum' => $self->agentnum } ); -} - -=item pkg_svc - -Returns all FS::pkg_svc objects (see L) for this package -definition (with non-zero quantity). - -=cut - -sub pkg_svc { - my $self = shift; - #sort { $b->primary cmp $a->primary } - grep { $_->quantity } - qsearch( 'pkg_svc', { 'pkgpart' => $self->pkgpart } ); -} - -=item svcpart [ SVCDB ] - -Returns the svcpart of the primary service definition (see L) -associated with this package definition (see L). Returns -false if there not a primary service definition or exactly one service -definition with quantity 1, or if SVCDB is specified and does not match the -svcdb of the service definition, - -=cut - -sub svcpart { - my $self = shift; - my $svcdb = scalar(@_) ? shift : ''; - my @svcdb_pkg_svc = - grep { ( $svcdb eq $_->part_svc->svcdb || !$svcdb ) } $self->pkg_svc; - my @pkg_svc = (); - @pkg_svc = grep { $_->primary_svc =~ /^Y/i } @svcdb_pkg_svc - if dbdef->table('pkg_svc')->column('primary_svc'); - @pkg_svc = grep {$_->quantity == 1 } @svcdb_pkg_svc - unless @pkg_svc; - return '' if scalar(@pkg_svc) != 1; - $pkg_svc[0]->svcpart; -} - -=item payby - -Returns a list of the acceptable payment types for this package. Eventually -this should come out of a database table and be editable, but currently has the -following logic instead: - -If the package is free, the single item B is -returned, otherwise, the single item B is returned. - -(CHEK? LEC? Probably shouldn't accept those by default, prone to abuse) - -=cut - -sub payby { - my $self = shift; - if ( $self->is_free ) { - ( 'BILL' ); - } else { - ( 'CARD' ); - } -} - -=item is_free - -Returns true if this package is free. - -=cut - -sub is_free { - my $self = shift; - unless ( $self->plan ) { - $self->setup =~ /^\s*0+(\.0*)?\s*$/ - && $self->recur =~ /^\s*0+(\.0*)?\s*$/; - } elsif ( $self->can('is_free_options') ) { - not grep { $_ !~ /^\s*0*(\.0*)?\s*$/ } - map { $self->option($_) } - $self->is_free_options; - } else { - warn "FS::part_pkg::is_free: FS::part_pkg::". $self->plan. " subclass ". - "provides neither is_free_options nor is_free method; returning false"; - 0; - } -} - - -sub freqs_href { - #method, class method or sub? #my $self = shift; - - tie my %freq, 'Tie::IxHash', - '0' => '(no recurring fee)', - '1h' => 'hourly', - '1d' => 'daily', - '2d' => 'every two days', - '3d' => 'every three days', - '1w' => 'weekly', - '2w' => 'biweekly (every 2 weeks)', - '1' => 'monthly', - '45d' => 'every 45 days', - '2' => 'bimonthly (every 2 months)', - '3' => 'quarterly (every 3 months)', - '4' => 'every 4 months', - '137d' => 'every 4 1/2 months (137 days)', - '6' => 'semiannually (every 6 months)', - '12' => 'annually', - '13' => 'every 13 months (annually +1 month)', - '24' => 'biannually (every 2 years)', - '36' => 'triannually (every 3 years)', - '48' => '(every 4 years)', - '60' => '(every 5 years)', - '120' => '(every 10 years)', - ; - - \%freq; - -} - -=item freq_pretty - -Returns an english representation of the I field, such as "monthly", -"weekly", "semi-annually", etc. - -=cut - -sub freq_pretty { - my $self = shift; - my $freq = $self->freq; - - #my $freqs_href = $self->freqs_href; - my $freqs_href = freqs_href(); - - if ( exists($freqs_href->{$freq}) ) { - $freqs_href->{$freq}; - } else { - my $interval = 'month'; - if ( $freq =~ /^(\d+)([hdw])$/ ) { - my %interval = ( 'h' => 'hour', 'd'=>'day', 'w'=>'week' ); - $interval = $interval{$2}; - } - if ( $1 == 1 ) { - "every $interval"; - } else { - "every $freq ${interval}s"; - } - } -} - -=item plandata - -For backwards compatibility, returns the plandata field as well as all options -from FS::part_pkg_option. - -=cut - -sub plandata { - my $self = shift; - carp "plandata is deprecated"; - if ( @_ ) { - $self->SUPER::plandata(@_); - } else { - my $plandata = $self->get('plandata'); - my %options = $self->options; - $plandata .= join('', map { "$_=$options{$_}\n" } keys %options ); - $plandata; - } -} - -=item part_pkg_option - -Returns all options as FS::part_pkg_option objects (see -L). - -=cut - -sub part_pkg_option { - my $self = shift; - qsearch('part_pkg_option', { 'pkgpart' => $self->pkgpart } ); -} - -=item options - -Returns a list of option names and values suitable for assigning to a hash. - -=cut - -sub options { - my $self = shift; - map { $_->optionname => $_->optionvalue } $self->part_pkg_option; -} - -=item option OPTIONNAME - -Returns the option value for the given name, or the empty string. - -=cut - -sub option { - my( $self, $opt, $ornull ) = @_; - my $part_pkg_option = - qsearchs('part_pkg_option', { - pkgpart => $self->pkgpart, - optionname => $opt, - } ); - return $part_pkg_option->optionvalue if $part_pkg_option; - my %plandata = map { /^(\w+)=(.*)$/; ( $1 => $2 ); } - split("\n", $self->get('plandata') ); - return $plandata{$opt} if exists $plandata{$opt}; - cluck "WARNING: (pkgpart ". $self->pkgpart. ") Package def option $opt ". - "not found in options or plandata!\n" - unless $ornull; - ''; -} - -=item _rebless - -Reblesses the object into the FS::part_pkg::PLAN class (if available), where -PLAN is the object's I field. There should be better docs -on how to create new price plans, but until then, see L. - -=cut - -sub _rebless { - my $self = shift; - my $plan = $self->plan; - unless ( $plan ) { - confess "no price plan found for pkgpart ". $self->pkgpart. "\n" - if $DEBUG; - return $self; - } - return $self if ref($self) =~ /::$plan$/; #already blessed into plan subclass - my $class = ref($self). "::$plan"; - warn "reblessing $self into $class" if $DEBUG; - eval "use $class;"; - die $@ if $@; - bless($self, $class) unless $@; - $self; -} - -#fallbacks that eval the setup and recur fields, for backwards compat - -sub calc_setup { - my $self = shift; - warn 'no price plan class for '. $self->plan. ", eval-ing setup\n"; - $self->_calc_eval('setup', @_); -} - -sub calc_recur { - my $self = shift; - warn 'no price plan class for '. $self->plan. ", eval-ing recur\n"; - $self->_calc_eval('recur', @_); -} - -use vars qw( $sdate @details ); -sub _calc_eval { - #my( $self, $field, $cust_pkg ) = @_; - my( $self, $field, $cust_pkg, $sdateref, $detailsref ) = @_; - *sdate = $sdateref; - *details = $detailsref; - $self->$field() =~ /^(.*)$/ - or die "Illegal $field (pkgpart ". $self->pkgpart. '): '. - $self->$field(). "\n"; - my $prog = $1; - return 0 if $prog =~ /^\s*$/; - my $value = eval $prog; - die $@ if $@; - $value; -} - -#fallback that return 0 for old legacy packages with no plan - -sub calc_remain { 0; } -sub calc_cancel { 0; } - -=back - -=head1 SUBROUTINES - -=over 4 - -=item plan_info - -=cut - -my %info; -foreach my $INC ( @INC ) { - warn "globbing $INC/FS/part_pkg/*.pm\n" if $DEBUG; - foreach my $file ( glob("$INC/FS/part_pkg/*.pm") ) { - warn "attempting to load plan info from $file\n" if $DEBUG; - $file =~ /\/(\w+)\.pm$/ or do { - warn "unrecognized file in $INC/FS/part_pkg/: $file\n"; - next; - }; - my $mod = $1; - my $info = eval "use FS::part_pkg::$mod; ". - "\\%FS::part_pkg::$mod\::info;"; - if ( $@ ) { - die "error using FS::part_pkg::$mod (skipping): $@\n" if $@; - next; - } - unless ( keys %$info ) { - warn "no %info hash found in FS::part_pkg::$mod, skipping\n" - unless $mod =~ /^(passwdfile|null)$/; #hack but what the heck - next; - } - warn "got plan info from FS::part_pkg::$mod: $info\n" if $DEBUG; - if ( exists($info->{'disabled'}) && $info->{'disabled'} ) { - warn "skipping disabled plan FS::part_pkg::$mod" if $DEBUG; - next; - } - $info{$mod} = $info; - } -} - -tie %plans, 'Tie::IxHash', - map { $_ => $info{$_} } - sort { $info{$a}->{'weight'} <=> $info{$b}->{'weight'} } - keys %info; - -sub plan_info { - \%plans; -} - -=item format OPTION DATA - -Returns data formatted according to the function 'format' described -in the plan info. Returns DATA if no such function exists. - -=cut - -sub format { - my ($self, $option, $data) = (shift, shift, shift); - if (exists($plans{$self->plan}->{fields}->{$option}{format})) { - &{$plans{$self->plan}->{fields}->{$option}{format}}($data); - }else{ - $data; - } -} - -=item parse OPTION DATA - -Returns data parsed according to the function 'parse' described -in the plan info. Returns DATA if no such function exists. - -=cut - -sub parse { - my ($self, $option, $data) = (shift, shift, shift); - if (exists($plans{$self->plan}->{fields}->{$option}{parse})) { - &{$plans{$self->plan}->{fields}->{$option}{parse}}($data); - }else{ - $data; - } -} - - -=back - -=head1 NEW PLAN CLASSES - -A module should be added in FS/FS/part_pkg/ Eventually, an example may be -found in eg/plan_template.pm. Until then, it is suggested that you use the -other modules in FS/FS/part_pkg/ as a guide. - -=head1 BUGS - -The delete method is unimplemented. - -setup and recur semantics are not yet defined (and are implemented in -FS::cust_bill. hmm.). now they're deprecated and need to go. - -plandata should go - -=head1 SEE ALSO - -L, L, L, L, L. -schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_pkg/base_delayed.pm b/FS/FS/part_pkg/base_delayed.pm deleted file mode 100644 index ddd4caf73..000000000 --- a/FS/FS/part_pkg/base_delayed.pm +++ /dev/null @@ -1,51 +0,0 @@ -package FS::part_pkg::base_delayed; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::base_rate; - -@ISA = qw(FS::part_pkg::base_rate); - -%info = ( - 'name' => 'Free (or setup fee) for X days, then base rate'. - ' (anniversary billing)', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'free_days' => { 'name' => 'Initial free days', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring base fee for this package', - 'default' => 0, - }, - 'recur_notify' => { 'name' => 'Number of days before recurring billing'. - 'commences to notify customer. (0 means '. - 'no warning)', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - }, - 'fieldorder' => [ 'free_days', 'setup_fee', 'recur_fee', 'recur_notify', - 'unused_credit' - ], - #'setup' => '\'my $d = $cust_pkg->bill || $time; $d += 86400 * \' + what.free_days.value + \'; $cust_pkg->bill($d); $cust_pkg_mod_flag=1; \' + what.setup_fee.value', - #'recur' => 'what.recur_fee.value', - 'weight' => 50, -); - -sub calc_setup { - my($self, $cust_pkg, $time ) = @_; - - my $d = $cust_pkg->bill || $time; - $d += 86400 * $self->option('free_days'); - $cust_pkg->bill($d); - - $self->option('setup_fee'); -} - -1; diff --git a/FS/FS/part_pkg/base_rate.pm b/FS/FS/part_pkg/base_rate.pm deleted file mode 100644 index 04896e0fd..000000000 --- a/FS/FS/part_pkg/base_rate.pm +++ /dev/null @@ -1,93 +0,0 @@ -package FS::part_pkg::base_rate; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch); -use FS::part_pkg; - -@ISA = qw(FS::part_pkg); - -%info = ( - 'name' => 'Base rate (anniversary billing, Times units ordered)', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring Base fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'externalid' => { 'name' => 'Optional External ID', - 'default' => '', - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_fee', 'unused_credit', - 'externalid' ], - 'weight' => 10, -); - -sub calc_setup { - my($self, $cust_pkg, $sdate, $details ) = @_; - - my $i = 0; - my $count = $self->option( 'additional_count', 'quiet' ) || 0; - while ($i < $count) { - push @$details, $self->option( 'additional_info' . $i++ ); - } - - $self->option('setup_fee'); -} - -sub calc_recur { - my($self, $cust_pkg) = @_; - $self->base_recur($cust_pkg); -} - -sub base_recur { - my($self, $cust_pkg) = @_; - my $units = $cust_pkg->option('units') ? $cust_pkg->option('units') : 1 ; - # default to 1 if not found - sprintf("%.2f", - ($self->option('recur_fee') * $units ) - ); -} - -sub calc_remain { - my ($self, $cust_pkg) = @_; - my $time = time; #should be able to pass this in for credit calculation - my $next_bill = $cust_pkg->getfield('bill') || 0; - my $last_bill = $cust_pkg->last_bill || 0; - return 0 if ! $self->base_recur - || ! $self->option('unused_credit', 1) - || ! $last_bill - || ! $next_bill - || $next_bill < $time; - - my %sec = ( - 'h' => 3600, # 60 * 60 - 'd' => 86400, # 60 * 60 * 24 - 'w' => 604800, # 60 * 60 * 24 * 7 - 'm' => 2629744, # 60 * 60 * 24 * 365.2422 / 12 - ); - - $self->freq =~ /^(\d+)([hdwm]?)$/ - or die 'unparsable frequency: '. $self->freq; - my $freq_sec = $1 * $sec{$2||'m'}; - return 0 unless $freq_sec; - - sprintf("%.2f", $self->base_recur * ( $next_bill - $time ) / $freq_sec ); - -} - -sub is_free_options { - qw( setup_fee recur_fee ); -} - -sub is_prepaid { - 0; #no, we're postpaid -} - -1; diff --git a/FS/FS/part_pkg/bulk.pm b/FS/FS/part_pkg/bulk.pm deleted file mode 100644 index 44645b7f9..000000000 --- a/FS/FS/part_pkg/bulk.pm +++ /dev/null @@ -1,96 +0,0 @@ -package FS::part_pkg::bulk; - -use strict; -use vars qw(@ISA $DEBUG $me %info); -use Date::Format; -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -$DEBUG = 0; -$me = '[FS::part_pkg::bulk]'; - -%info = ( - 'name' => 'Bulk billing based on number of active services', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for the entire bulk package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for the entire bulk package', - 'default' => 0, - }, - 'svc_setup_fee' => { 'name' => 'Setup fee for each new service', - 'default' => 0, - }, - 'svc_recur_fee' => { 'name' => 'Recurring fee for each service', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_fee', 'svc_setup_fee', 'svc_recur_fee', - 'unused_credit', ], - 'weight' => 55, -); - -sub calc_recur { - my($self, $cust_pkg, $sdate, $details ) = @_; - - my $conf = new FS::Conf; - my $money_char = $conf->config('money_char') || '$'; - - my $svc_setup_fee = $self->option('svc_setup_fee'); - - my $last_bill = $cust_pkg->last_bill; - - my $total_svc_charge = 0; - - warn "$me billing for bulk services from ". time2str('%x', $last_bill). - " to ". time2str('%x', $$sdate). "\n" - if $DEBUG; - - # END START - foreach my $h_svc ( $cust_pkg->h_cust_svc( $$sdate, $last_bill ) ) { - - my @label = $h_svc->label( $$sdate, $last_bill ); - die "fatal: no historical label found, wtf?" unless scalar(@label); #? - #my $svc_details = $label[0].': '. $label[1]. ': '; - my $svc_details = $label[1]. ': '; - - my $svc_charge = 0; - - my $svc_start = $h_svc->date_inserted; - if ( $svc_start < $last_bill ) { - $svc_start = $last_bill; - } elsif ( $svc_setup_fee ) { - $svc_charge += $svc_setup_fee; - $svc_details .= $money_char. sprintf('%.2f setup, ', $svc_setup_fee); - } - - my $svc_end = $h_svc->date_deleted; - $svc_end = ( !$svc_end || $svc_end > $$sdate ) ? $$sdate : $svc_end; - - $svc_charge = $self->option('svc_recur_fee') * ( $svc_end - $svc_start ) - / ( $$sdate - $last_bill ); - - $svc_details .= $money_char. sprintf('%.2f', $svc_charge ). - ' ('. time2str('%x', $svc_start). - ' - '. time2str('%x', $svc_end ). ')' - if $self->option('svc_recur_fee'); - - push @$details, $svc_details; - $total_svc_charge += $svc_charge; - - } - - sprintf("%.2f", $self->base_recur($cust_pkg) + $total_svc_charge ); -} - -sub is_free_options { - qw( setup_fee recur_fee svc_setup_fee svc_recur_fee ); -} - -1; - diff --git a/FS/FS/part_pkg/flat.pm b/FS/FS/part_pkg/flat.pm deleted file mode 100644 index 92e72cf8a..000000000 --- a/FS/FS/part_pkg/flat.pm +++ /dev/null @@ -1,168 +0,0 @@ -package FS::part_pkg::flat; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch); -use FS::UI::bytecount; -use FS::part_pkg; - -@ISA = qw(FS::part_pkg); - -%info = ( - 'name' => 'Flat rate (anniversary billing)', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'externalid' => { 'name' => 'Optional External ID', - 'default' => '', - }, - 'seconds' => { 'name' => 'Time limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - }, - 'upbytes' => { 'name' => 'Upload limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'downbytes' => { 'name' => 'Download limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'totalbytes' => { 'name' => 'Transfer limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'recharge_amount' => { 'name' => 'Cost of recharge for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*(\.\d{2})?$/ }, - }, - 'recharge_seconds' => { 'name' => 'Recharge time for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - }, - 'recharge_upbytes' => { 'name' => 'Recharge upload for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'recharge_downbytes' => { 'name' => 'Recharge download for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'recharge_totalbytes' => { 'name' => 'Recharge transfer for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'usage_rollover' => { 'name' => 'Allow usage from previous period to roll '. - ' over into current period', - 'type' => 'checkbox', - }, - 'recharge_reset' => { 'name' => 'Reset usage to these values on manual '. - 'package recharge', - 'type' => 'checkbox', - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_fee', 'unused_credit', - 'seconds', 'upbytes', 'downbytes', 'totalbytes', - 'recharge_amount', 'recharge_seconds', 'recharge_upbytes', - 'recharge_downbytes', 'recharge_totalbytes', - 'usage_rollover', 'recharge_reset', 'externalid' ], - 'weight' => 10, -); - -sub calc_setup { - my($self, $cust_pkg, $sdate, $details ) = @_; - - my $i = 0; - my $count = $self->option( 'additional_count', 'quiet' ) || 0; - while ($i < $count) { - push @$details, $self->option( 'additional_info' . $i++ ); - } - - $self->option('setup_fee'); -} - -sub calc_recur { - my($self, $cust_pkg) = @_; - $self->base_recur($cust_pkg); -} - -sub base_recur { - my($self, $cust_pkg) = @_; - $self->option('recur_fee', 1) || 0; -} - -sub calc_remain { - my ($self, $cust_pkg, %options) = @_; - - my $time; - if ($options{'time'}) { - $time = $options{'time'}; - } else { - $time = time; - } - - my $next_bill = $cust_pkg->getfield('bill') || 0; - my $last_bill = $cust_pkg->last_bill || 0; - return 0 if ! $self->base_recur - || ! $self->option('unused_credit', 1) - || ! $last_bill - || ! $next_bill - || $next_bill < $time; - - my %sec = ( - 'h' => 3600, # 60 * 60 - 'd' => 86400, # 60 * 60 * 24 - 'w' => 604800, # 60 * 60 * 24 * 7 - 'm' => 2629744, # 60 * 60 * 24 * 365.2422 / 12 - ); - - $self->freq =~ /^(\d+)([hdwm]?)$/ - or die 'unparsable frequency: '. $self->freq; - my $freq_sec = $1 * $sec{$2||'m'}; - return 0 unless $freq_sec; - - sprintf("%.2f", $self->base_recur * ( $next_bill - $time ) / $freq_sec ); - -} - -sub is_free_options { - qw( setup_fee recur_fee ); -} - -sub is_prepaid { - 0; #no, we're postpaid -} - -sub reset_usage { - my($self, $cust_pkg) = @_; - my %values = map { $_, $self->option($_) } - grep { $self->option($_, 'hush') } - qw(seconds upbytes downbytes totalbytes); - if ($self->option('usage_rollover', 1)) { - $cust_pkg->recharge(\%values); - }else{ - $cust_pkg->set_usage(\%values); - } -} - -1; diff --git a/FS/FS/part_pkg/flat_comission.pm b/FS/FS/part_pkg/flat_comission.pm deleted file mode 100644 index 4592bedef..000000000 --- a/FS/FS/part_pkg/flat_comission.pm +++ /dev/null @@ -1,66 +0,0 @@ -package FS::part_pkg::flat_comission; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'Flat rate with recurring commission per (any) active package', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'comission_amount' => { 'name' => 'Commission amount per month (per active package)', - 'default' => 0, - }, - 'comission_depth' => { 'name' => 'Number of layers', - 'default' => 1, - }, - 'reason_type' => { 'name' => 'Reason type for commission credits', - 'type' => 'select', - 'select_table' => 'reason_type', - 'select_hash' => { 'class' => 'R' }, - 'select_key' => 'typenum', - 'select_label' => 'type', - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_fee', 'unused_credit', 'comission_depth', 'comission_amount', 'reason_type' ], - #'setup' => 'what.setup_fee.value', - #'recur' => '\'my $error = $cust_pkg->cust_main->credit( \' + what.comission_amount.value + \' * scalar($cust_pkg->cust_main->referral_cust_pkg(\' + what.comission_depth.value+ \')), "commission" ); die $error if $error; \' + what.recur_fee.value + \';\'', - 'weight' => 62, -); - -sub calc_recur { - my($self, $cust_pkg ) = @_; - - my $amount = $self->option('comission_amount'); - my $num_active = scalar( - $cust_pkg->cust_main->referral_cust_pkg( $self->option('comission_depth') ) - ); - - my $commission = sprintf('%.2f', $amount*$num_active); - - if ( $commission > 0 ) { - - my $error = - $cust_pkg->cust_main->credit( $commission, "commission", - 'reason_type'=>$self->option('reason_type'), - ); - die $error if $error; - - } - - $self->option('recur_fee'); -} - -1; diff --git a/FS/FS/part_pkg/flat_comission_cust.pm b/FS/FS/part_pkg/flat_comission_cust.pm deleted file mode 100644 index 82e5111e8..000000000 --- a/FS/FS/part_pkg/flat_comission_cust.pm +++ /dev/null @@ -1,64 +0,0 @@ -package FS::part_pkg::flat_comission_cust; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'Flat rate with recurring commission per active customer', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'comission_amount' => { 'name' => 'Commission amount per month (per active customer)', - 'default' => 0, - }, - 'comission_depth' => { 'name' => 'Number of layers', - 'default' => 1, - }, - 'reason_type' => { 'name' => 'Reason type for commission credits', - 'type' => 'select_table', - 'select_table' => 'reason_type', - 'select_hash' => { 'class' => 'R' }, - 'select_key' => 'typenum', - 'select_label' => 'type', - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_fee', 'unused_credit', 'comission_depth', 'comission_amount', 'reason_type' ], - #'setup' => 'what.setup_fee.value', - #'recur' => '\'my $error = $cust_pkg->cust_main->credit( \' + what.comission_amount.value + \' * scalar($cust_pkg->cust_main->referral_cust_main_ncancelled(\' + what.comission_depth.value+ \')), "commission" ); die $error if $error; \' + what.recur_fee.value + \';\'', - 'weight' => '60', -); - -sub calc_recur { - my($self, $cust_pkg ) = @_; - - my $amount = $self->option('comission_amount'); - my $num_active = scalar( - $cust_pkg->cust_main->referral_cust_main_ncancelled( - $self->option('comission_depth') - ) - ); - - if ( $amount && $num_active ) { - my $error = - $cust_pkg->cust_main->credit( $amount*$num_active, "commission", - 'reason_type'=>$self->option('reason_type'), - ); - die $error if $error; - } - - $self->option('recur_fee'); -} - -1; diff --git a/FS/FS/part_pkg/flat_comission_pkg.pm b/FS/FS/part_pkg/flat_comission_pkg.pm deleted file mode 100644 index 07c3d1b9a..000000000 --- a/FS/FS/part_pkg/flat_comission_pkg.pm +++ /dev/null @@ -1,57 +0,0 @@ -package FS::part_pkg::flat_comission_pkg; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'Flat rate with recurring commission per (selected) active package', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'comission_amount' => { 'name' => 'Commission amount per month (per uncancelled package)', - 'default' => 0, - }, - 'comission_depth' => { 'name' => 'Number of layers', - 'default' => 1, - }, - 'comission_pkgpart' => { 'name' => 'Applicable packages
    (hold ctrl to select multiple packages)', - 'type' => 'select_multiple', - 'select_table' => 'part_pkg', - 'select_hash' => { 'disabled' => '' } , - 'select_key' => 'pkgpart', - 'select_label' => 'pkg', - }, - 'reason_type' => { 'name' => 'Reason type for commission credits', - 'type' => 'select', - 'select_table' => 'reason_type', - 'select_hash' => { 'class' => 'R' } , - 'select_key' => 'typenum', - 'select_label' => 'type', - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_fee', 'unused_credit', 'comission_depth', 'comission_amount', 'comission_pkgpart', 'reason_type' ], - #'setup' => 'what.setup_fee.value', - #'recur' => '""; var pkgparts = ""; for ( var c=0; c < document.flat_comission_pkg.comission_pkgpart.options.length; c++ ) { if (document.flat_comission_pkg.comission_pkgpart.options[c].selected) { pkgparts = pkgparts + document.flat_comission_pkg.comission_pkgpart.options[c].value + \', \'; } } what.recur.value = \'my $error = $cust_pkg->cust_main->credit( \' + what.comission_amount.value + \' * scalar( grep { my $pkgpart = $_->pkgpart; grep { $_ == $pkgpart } ( \' + pkgparts + \' ) } $cust_pkg->cust_main->referral_cust_pkg(\' + what.comission_depth.value+ \')), "commission" ); die $error if $error; \' + what.recur_fee.value + \';\'', - #'disabled' => 1, - 'weight' => '64', -); - -# XXX this needs to be fixed!!! -sub calc_recur { - my($self, $cust_pkg ) = @_; - $self->option('recur_fee'); -} - -1; diff --git a/FS/FS/part_pkg/flat_delayed.pm b/FS/FS/part_pkg/flat_delayed.pm deleted file mode 100644 index 8ac168280..000000000 --- a/FS/FS/part_pkg/flat_delayed.pm +++ /dev/null @@ -1,68 +0,0 @@ -package FS::part_pkg::flat_delayed; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'Free (or setup fee) for X days, then flat rate'. - ' (anniversary billing)', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'free_days' => { 'name' => 'Initial free days', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, - 'recur_notify' => { 'name' => 'Number of days before recurring billing'. - 'commences to notify customer. (0 means '. - 'no warning)', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - }, - 'fieldorder' => [ 'free_days', 'setup_fee', 'recur_fee', 'recur_notify', - 'unused_credit' - ], - #'setup' => '\'my $d = $cust_pkg->bill || $time; $d += 86400 * \' + what.free_days.value + \'; $cust_pkg->bill($d); $cust_pkg_mod_flag=1; \' + what.setup_fee.value', - #'recur' => 'what.recur_fee.value', - 'weight' => 50, -); - -sub calc_setup { - my($self, $cust_pkg, $time ) = @_; - - my $d = $cust_pkg->bill || $time; - $d += 86400 * $self->option('free_days'); - $cust_pkg->bill($d); - - $self->option('setup_fee'); -} - -sub calc_remain { - my ($self, $cust_pkg, %options) = @_; - my $next_bill = $cust_pkg->getfield('bill') || 0; - my $last_bill = $cust_pkg->last_bill || 0; - my $free_days = $self->option('free_days'); - - return 0 if $last_bill + (86400 * $free_days) == $next_bill - && $last_bill == $cust_pkg->setup; - - return 0 if ! $self->base_recur - || ! $self->option('unused_credit', 1) - || ! $last_bill - || ! $next_bill; - - return $self->SUPER::calc_remain($cust_pkg, %options); -} - -1; diff --git a/FS/FS/part_pkg/flat_introrate.pm b/FS/FS/part_pkg/flat_introrate.pm deleted file mode 100644 index c92ba978a..000000000 --- a/FS/FS/part_pkg/flat_introrate.pm +++ /dev/null @@ -1,67 +0,0 @@ -package FS::part_pkg::flat_introrate; - -use strict; -use vars qw(@ISA %info $DEBUG $DEBUG_PRE); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -use Date::Manip qw(DateCalc UnixDate ParseDate); - -@ISA = qw(FS::part_pkg::flat); -$DEBUG = 0; -$DEBUG_PRE = '[' . __PACKAGE__ . ']: '; - -%info = ( - 'name' => 'Introductory price for X months, then flat rate,'. - 'relative to setup date (anniversary billing)', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'intro_fee' => { 'name' => 'Introductory recurring free for this package', - 'default' => 0, - }, - 'intro_duration' => { 'name' => 'Duration of the introductory period, ' . - 'in number of months', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - }, - 'fieldorder' => [ 'setup_fee', 'intro_duration', 'intro_fee', 'recur_fee', 'unused_credit' ], - 'weight' => 150, -); - -sub calc_recur { - my($self, $cust_pkg, $time ) = @_; - - my ($duration) = ($self->option('intro_duration') =~ /^(\d+)$/); - unless ($duration) { - die "Invalid intro_duration: " . $self->option('intro_duration'); - } - - my $setup = &ParseDate('epoch ' . $cust_pkg->getfield('setup')); - my $intro_end = &DateCalc($setup, "+${duration} month"); - my $recur; - - warn $DEBUG_PRE . "\$duration = ${duration}" if $DEBUG; - warn $DEBUG_PRE . "\$intro_end = ${intro_end}" if $DEBUG; - warn $DEBUG_PRE . "$$time < " . &UnixDate($intro_end, '%s') if $DEBUG; - - if ($$time < &UnixDate($intro_end, '%s')) { - $recur = $self->option('intro_fee'); - } else { - $recur = $self->option('recur_fee'); - } - - $recur; - -} - - -1; diff --git a/FS/FS/part_pkg/incomplete/billoneday.pm b/FS/FS/part_pkg/incomplete/billoneday.pm deleted file mode 100644 index 8740547a3..000000000 --- a/FS/FS/part_pkg/incomplete/billoneday.pm +++ /dev/null @@ -1,48 +0,0 @@ -package FS::part_pkg::billoneday; - -use strict; -use vars qw(@ISA %info); -use Time::Local qw(timelocal); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'charge a full month every (selectable) billing day', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, - 'cutoff_day' => { 'name' => 'billing day', - 'default' => 1, - }, - - }, - 'fieldorder' => [ 'setup_fee', 'recur_fee','cutoff_day'], - #'setup' => 'what.setup_fee.value', - #'recur' => '\'my $mnow = $sdate; my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($sdate) )[0,1,2,3,4,5]; $sdate = timelocal(0,0,0,$self->option('cutoff_day'),$mon,$year); \' + what.recur_fee.value', - 'freq' => 'm', - 'weight' => 30, -); - -sub calc_recur { - my($self, $cust_pkg, $sdate ) = @_; - - my $mnow = $$sdate; - my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($mnow) )[0,1,2,3,4,5]; - my $mstart = timelocal(0,0,0,$self->option('cutoff_day'),$mon,$year); - my $mend = timelocal(0,0,0,$self->option('cutoff_day'), $mon == 11 ? 0 : $mon+1, $year+($mon==11)); - - if($mday > $self->option('cutoff_date') and $mstart != $mnow ) { - $$sdate = timelocal(0,0,0,$self->option('cutoff_day'), $mon == 11 ? 0 : $mon+1, $year+($mon==11)); - } - else{ - $$sdate = timelocal(0,0,0,$self->option('cutoff_day'), $mon, $year); - } - $self->option('recur_fee'); -} -1; diff --git a/FS/FS/part_pkg/prepaid.pm b/FS/FS/part_pkg/prepaid.pm deleted file mode 100644 index d309d453f..000000000 --- a/FS/FS/part_pkg/prepaid.pm +++ /dev/null @@ -1,38 +0,0 @@ -package FS::part_pkg::prepaid; - -use strict; -use vars qw(@ISA %info %recur_action); -use Tie::IxHash; -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -tie %recur_action, 'Tie::IxHash', - 'suspend' => 'suspend', - 'cancel' => 'cancel', -; - -%info = ( - 'name' => 'Prepaid, flat rate', - 'fields' => { - 'setup_fee' => { 'name' => 'One-time setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Initial and recharge fee for this package', - 'default' => 0, - }, - 'recur_action' => { 'name' => 'Action to take upon reaching end of prepaid preiod', - 'type' => 'select', - 'select_options' => \%recur_action, - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_fee', 'recur_action', ], - 'weight' => 25, -); - -sub is_prepaid { - 1; -} - -1; - diff --git a/FS/FS/part_pkg/prorate.pm b/FS/FS/part_pkg/prorate.pm deleted file mode 100644 index 45bbf0153..000000000 --- a/FS/FS/part_pkg/prorate.pm +++ /dev/null @@ -1,122 +0,0 @@ -package FS::part_pkg::prorate; - -use strict; -use vars qw(@ISA %info); -use Time::Local qw(timelocal); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'First partial month pro-rated, then flat-rate (selectable billing day)', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'cutoff_day' => { 'name' => 'Billing Day (1 - 28)', - 'default' => 1, - }, - 'seconds' => { 'name' => 'Time limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - }, - 'upbytes' => { 'name' => 'Upload limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'downbytes' => { 'name' => 'Download limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'totalbytes' => { 'name' => 'Transfer limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'recharge_amount' => { 'name' => 'Cost of recharge for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*(\.\d{2})?$/ }, - }, - 'recharge_seconds' => { 'name' => 'Recharge time for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - }, - 'recharge_upbytes' => { 'name' => 'Recharge upload for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'recharge_downbytes' => { 'name' => 'Recharge download for this package', 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'recharge_totalbytes' => { 'name' => 'Recharge transfer for this package', 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'usage_rollover' => { 'name' => 'Allow usage from previous period to roll '. - 'over into current period', - 'type' => 'checkbox', - }, - 'recharge_reset' => { 'name' => 'Reset usage to these values on manual '. - 'package recharge', - 'type' => 'checkbox', - }, - - #it would be better if this had to be turned on, its confusing - 'externalid' => { 'name' => 'Optional External ID', - 'default' => '', - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_fee', 'unused_credit', 'cutoff_day', - 'seconds', 'upbyte', 'downbytes', 'totalbytes', - 'recharge_amount', 'recharge_seconds', 'recharge_upbytes', - 'recharge_downbytes', 'recharge_totalbytes', - 'usage_rollover', 'recharge_reset', 'externalid', ], - 'freq' => 'm', - 'weight' => 20, -); - -sub calc_recur { - my($self, $cust_pkg, $sdate ) = @_; - my $cutoff_day = $self->option('cutoff_day', 1) || 1; - my $mnow = $$sdate; - my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($mnow) )[0,1,2,3,4,5]; - my $mend; - my $mstart; - - if ( $mday >= $cutoff_day ) { - $mend = - timelocal(0,0,0,$cutoff_day, $mon == 11 ? 0 : $mon+1, $year+($mon==11)); - $mstart = - timelocal(0,0,0,$cutoff_day,$mon,$year); - - } else { - $mend = timelocal(0,0,0,$cutoff_day, $mon, $year); - if ($mon==0) {$mon=11;$year--;} else {$mon--;} - $mstart= timelocal(0,0,0,$cutoff_day,$mon,$year); - } - - $$sdate = $mstart; - my $permonth = $self->option('recur_fee') / $self->freq; - - $permonth * ( ( $self->freq - 1 ) + ($mend-$mnow) / ($mend-$mstart) ); -} - -1; diff --git a/FS/FS/part_pkg/prorate_delayed.pm b/FS/FS/part_pkg/prorate_delayed.pm deleted file mode 100644 index ee664327e..000000000 --- a/FS/FS/part_pkg/prorate_delayed.pm +++ /dev/null @@ -1,61 +0,0 @@ -package FS::part_pkg::prorate_delayed; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg; - -@ISA = qw(FS::part_pkg::prorate); - -%info = ( - 'name' => 'Free (or setup fee) for X days, then prorate, then flat-rate ' . - '(1st of month billing)', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'free_days' => { 'name' => 'Initial free days', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - }, - 'fieldorder' => [ 'free_days', 'setup_fee', 'recur_fee', 'unused_credit' ], - #'setup' => '\'my $d = $cust_pkg->bill || $time; $d += 86400 * \' + what.free_days.value + \'; $cust_pkg->bill($d); $cust_pkg_mod_flag=1; \' + what.setup_fee.value', - #'recur' => 'what.recur_fee.value', - 'weight' => 50, -); - -sub calc_setup { - my($self, $cust_pkg, $time ) = @_; - - my $d = $cust_pkg->bill || $time; - $d += 86400 * $self->option('free_days'); - $cust_pkg->bill($d); - - $self->option('setup_fee'); -} - -sub calc_remain { - my ($self, $cust_pkg, %options) = @_; - my $next_bill = $cust_pkg->getfield('bill') || 0; - my $last_bill = $cust_pkg->last_bill || 0; - my $free_days = $self->option('free_days'); - - return 0 if $last_bill + (86400 * $free_days) == $next_bill - && $last_bill == $cust_pkg->setup; - - return 0 if ! $self->base_recur - || ! $self->option('unused_credit', 1) - || ! $last_bill - || ! $next_bill; - - return $self->SUPER::calc_remain($cust_pkg, %options); -} - -1; diff --git a/FS/FS/part_pkg/sesmon_hour.pm b/FS/FS/part_pkg/sesmon_hour.pm deleted file mode 100644 index 9843edbec..000000000 --- a/FS/FS/part_pkg/sesmon_hour.pm +++ /dev/null @@ -1,56 +0,0 @@ -package FS::part_pkg::sesmon_hour; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'Base charge plus charge per-hour from the session monitor', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_flat' => { 'name' => 'Base recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'recur_included_hours' => { 'name' => 'Hours included', - 'default' => 0, - }, - 'recur_hourly_charge' => { 'name' => 'Additional charge per hour', - 'default' => 0, - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_flat', 'unused_credit', 'recur_included_hours', 'recur_hourly_charge' ], - #'setup' => 'what.setup_fee.value', - #'recur' => '\'my $hours = $cust_pkg->seconds_since($cust_pkg->bill || 0) / 3600 - \' + what.recur_included_hours.value + \'; $hours = 0 if $hours < 0; \' + what.recur_flat.value + \' + \' + what.recur_hourly_charge.value + \' * $hours;\'', - 'weight' => 80, -); - -sub calc_recur { - my($self, $cust_pkg ) = @_; - - my $hours = $cust_pkg->seconds_since($cust_pkg->bill || 0) / 3600; - $hours -= $self->option('recur_included_hours'); - $hours = 0 if $hours < 0; - - $self->option('recur_flat') + $hours * $self->option('recur_hourly_charge'); - -} - -sub is_free_options { - qw( setup_fee recur_fee recur_hourly_charge ); -} - -sub base_recur { - my($self, $cust_pkg) = @_; - $self->option('recur_flat'); -} - -1; diff --git a/FS/FS/part_pkg/sesmon_minute.pm b/FS/FS/part_pkg/sesmon_minute.pm deleted file mode 100644 index 39516f8b3..000000000 --- a/FS/FS/part_pkg/sesmon_minute.pm +++ /dev/null @@ -1,55 +0,0 @@ -package FS::part_pkg::sesmon_minute; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'Base charge plus charge per-minute from the session monitor', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_flat' => { 'name' => 'Base recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'recur_included_min' => { 'name' => 'Minutes included', - 'default' => 0, - }, - 'recur_minly_charge' => { 'name' => 'Additional charge per minute', - 'default' => 0, - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_flat', 'unused_credit', 'recur_included_min', 'recur_minly_charge' ], - #'setup' => 'what.setup_fee.value', - #'recur' => '\'my $min = $cust_pkg->seconds_since($cust_pkg->bill || 0) / 60 - \' + what.recur_included_min.value + \'; $min = 0 if $min < 0; \' + what.recur_flat.value + \' + \' + what.recur_minly_charge.value + \' * $min;\'', - 'weight' => 80, -); - - -sub calc_recur { - my( $self, $cust_pkg ) = @); - my $min = $cust_pkg->seconds_since($cust_pkg->bill || 0) / 60; - $min -= $self->option('recur_included_min'); - $min = 0 if $min < 0; - - $self->option('recur_flat') + $min * $self->option('recur_minly_charge'); -} - -sub is_free_options { - qw( setup_fee recur_fee recur_minly_charge ); -} - -sub base_recur { - my($self, $cust_pkg) = @_; - $self->option('recur_flat'); -} - -1; diff --git a/FS/FS/part_pkg/sql_external.pm b/FS/FS/part_pkg/sql_external.pm deleted file mode 100644 index ca58c4e66..000000000 --- a/FS/FS/part_pkg/sql_external.pm +++ /dev/null @@ -1,76 +0,0 @@ -package FS::part_pkg::sql_external; - -use strict; -use vars qw(@ISA %info); -use DBI; -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'Base charge plus additional fees for external services from a configurable SQL query', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_flat' => { 'name' => 'Base recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'datasrc' => { 'name' => 'DBI data source', - 'default' => '', - }, - 'db_username' => { 'name' => 'Database username', - 'default' => '', - }, - 'db_password' => { 'name' => 'Database password', - 'default' => '', - }, - 'query' => { 'name' => 'SQL query', - 'default' => '', - }, - }, - 'fieldorder' => [qw( setup_fee recur_flat unused_credit datasrc db_username db_password query )], - #'setup' => 'what.setup_fee.value', - #'recur' => q!'my $dbh = DBI->connect("' + what.datasrc.value + '", "' + what.db_username.value + '", "' + what.db_password.value + '" ) or die $DBI::errstr; my $sth = $dbh->prepare("' + what.query.value + '") or die $dbh->errstr; my $price = ' + what.recur_flat.value + '; foreach my $cust_svc ( grep { $_->part_svc->svcdb eq "svc_external" } $cust_pkg->cust_svc ){ my $id = $cust_svc->svc_x->id; $sth->execute($id) or die $sth->errstr; $price += $sth->fetchrow_arrayref->[0]; } $price;'!, - 'weight' => '72', -); - -sub calc_recur { - my($self, $cust_pkg ) = @_; - - my $dbh = DBI->connect( map { $self->option($_) } - qw( datasrc db_username db_password ) - ) - or die $DBI::errstr; - - my $sth = $dbh->prepare( $self->option('query') ) - or die $dbh->errstr; - - my $price = $self->option('recur_flat'); - - foreach my $cust_svc ( - grep { $_->part_svc->svcdb eq "svc_external" } $cust_pkg->cust_svc - ) { - my $id = $cust_svc->svc_x->id; - $sth->execute($id) or die $sth->errstr; - $price += $sth->fetchrow_arrayref->[0]; - } - - $price; -} - -sub is_free { - 0; -} - -sub base_recur { - my($self, $cust_pkg) = @_; - $self->option('recur_flat'); -} - -1; diff --git a/FS/FS/part_pkg/sql_generic.pm b/FS/FS/part_pkg/sql_generic.pm deleted file mode 100644 index 0e6ab7c0d..000000000 --- a/FS/FS/part_pkg/sql_generic.pm +++ /dev/null @@ -1,87 +0,0 @@ -package FS::part_pkg::sql_generic; - -use strict; -use vars qw(@ISA %info); -use DBI; -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'Base charge plus a per-domain metered rate from a configurable SQL query', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_flat' => { 'name' => 'Base recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'recur_included' => { 'name' => 'Units included', - 'default' => 0, - }, - 'recur_unit_charge' => { 'name' => 'Additional charge per unit', - 'default' => 0, - }, - 'datasrc' => { 'name' => 'DBI data source', - 'default' => '', - }, - 'db_username' => { 'name' => 'Database username', - 'default' => '', - }, - 'db_password' => { 'name' => 'Database username', - 'default' => '', - }, - 'query' => { 'name' => 'SQL query', - 'default' => '', - }, - }, - 'fieldorder' => [qw( setup_fee recur_flat unused_credit recur_included recur_unit_charge datasrc db_username db_password query )], - # 'setup' => 'what.setup_fee.value', - # 'recur' => '\'my $dbh = DBI->connect(\"\' + what.datasrc.value + \'\", \"\' + what.db_username.value + \'\") or die $DBI::errstr; \'', - #'recur' => '\'my $dbh = DBI->connect(\"\' + what.datasrc.value + \'\", \"\' + what.db_username.value + \'\", \"\' + what.db_password.value + \'\" ) or die $DBI::errstr; my $sth = $dbh->prepare(\"\' + what.query.value + \'\") or die $dbh->errstr; my $units = 0; foreach my $cust_svc ( grep { $_->part_svc->svcdb eq \"svc_domain\" } $cust_pkg->cust_svc ) { my $domain = $cust_svc->svc_x->domain; $sth->execute($domain) or die $sth->errstr; $units += $sth->fetchrow_arrayref->[0]; } $units -= \' + what.recur_included.value + \'; $units = 0 if $units < 0; \' + what.recur_flat.value + \' + $units * \' + what.recur_unit_charge.value + \';\'', - #'recur' => '\'my $dbh = DBI->connect("\' + what.datasrc.value + \'", "\' + what.db_username.value + \'", "\' what.db_password.value + \'" ) or die $DBI::errstr; my $sth = $dbh->prepare("\' + what.query.value + \'") or die $dbh->errstr; my $units = 0; foreach my $cust_svc ( grep { $_->part_svc->svcdb eq "svc_domain" } $cust_pkg->cust_svc ) { my $domain = $cust_svc->svc_x->domain; $sth->execute($domain) or die $sth->errstr; $units += $sth->fetchrow_arrayref->[0]; } $units -= \' + what.recur_included.value + \'; $units = 0 if $units < 0; \' + what.recur_flat.value + \' + $units * \' + what.recur_unit_charge + \';\'', - 'weight' => '70', -); - -sub calc_recur { - my($self, $cust_pkg ) = @_; - - my $dbh = DBI->connect( map { $self->option($_) } - qw( datasrc db_username db_password ) - ) - or die $DBI::errstr; - - my $sth = $dbh->prepare( $self->option('query') ) - or die $dbh->errstr; - - my $units = 0; - foreach my $cust_svc ( - grep { $_->part_svc->svcdb eq "svc_domain" } $cust_pkg->cust_svc - ) { - my $domain = $cust_svc->svc_x->domain; - $sth->execute($domain) or die $sth->errstr; - - $units += $sth->fetchrow_arrayref->[0]; - } - - $units -= $self->option('recur_included'); - $units = 0 if $units < 0; - - $self->option('recur_flat') + $units * $self->option('recur_unit_charge'); -} - -sub is_free_options { - qw( setup_fee recur_flat recur_unit_charge ); -} - -sub base_recur { - my($self, $cust_pkg) = @_; - $self->option('recur_flat'); -} - -1; diff --git a/FS/FS/part_pkg/sqlradacct_hour.pm b/FS/FS/part_pkg/sqlradacct_hour.pm deleted file mode 100644 index e54a8a553..000000000 --- a/FS/FS/part_pkg/sqlradacct_hour.pm +++ /dev/null @@ -1,170 +0,0 @@ -package FS::part_pkg::sqlradacct_hour; - -use strict; -use vars qw(@ISA %info); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'Base charge plus per-hour (and for data) from an SQL RADIUS radacct table', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_flat' => { 'name' => 'Base recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - - 'recur_included_hours' => { 'name' => 'Hours included', - 'default' => 0, - }, - 'recur_hourly_charge' => { 'name' => 'Additional charge per hour', - 'default' => 0, - }, - 'recur_hourly_cap' => { 'name' => 'Maximum overage charge for hours'. - ' (0 means no cap)', - - 'default' => 0, - }, - - 'recur_included_input' => { 'name' => 'Upload megabytes included', - 'default' => 0, - }, - 'recur_input_charge' => { 'name' => - 'Additional charge per megabyte upload', - 'default' => 0, - }, - 'recur_input_cap' => { 'name' => 'Maximum overage charge for upload'. - ' (0 means no cap)', - 'default' => 0, - }, - - 'recur_included_output' => { 'name' => 'Download megabytes included', - 'default' => 0, - }, - 'recur_output_charge' => { 'name' => - 'Additional charge per megabyte download', - 'default' => 0, - }, - 'recur_output_cap' => { 'name' => 'Maximum overage charge for download'. - ' (0 means no cap)', - 'default' => 0, - }, - - 'recur_included_total' => { 'name' => - 'Total megabytes included', - 'default' => 0, - }, - 'recur_total_charge' => { 'name' => - 'Additional charge per megabyte total', - 'default' => 0, - }, - 'recur_total_cap' => { 'name' => 'Maximum overage charge for total'. - ' megabytes (0 means no cap)', - 'default' => 0, - }, - - 'global_cap' => { 'name' => 'Global cap on all overage charges'. - ' (0 means no cap)', - 'default' => 0, - }, - - }, - 'fieldorder' => [qw( setup_fee recur_flat unused_credit recur_included_hours recur_hourly_charge recur_hourly_cap recur_included_input recur_input_charge recur_input_cap recur_included_output recur_output_charge recur_output_cap recur_included_total recur_total_charge recur_total_cap global_cap )], - #'setup' => 'what.setup_fee.value', - #'recur' => '\'my $last_bill = $cust_pkg->last_bill; my $hours = $cust_pkg->seconds_since_sqlradacct($last_bill, $sdate ) / 3600 - \' + what.recur_included_hours.value + \'; $hours = 0 if $hours < 0; my $input = $cust_pkg->attribute_since_sqlradacct($last_bill, $sdate, \"AcctInputOctets\" ) / 1048576; my $output = $cust_pkg->attribute_since_sqlradacct($last_bill, $sdate, \"AcctOutputOctets\" ) / 1048576; my $total = $input + $output - \' + what.recur_included_total.value + \'; $total = 0 if $total < 0; my $input = $input - \' + what.recur_included_input.value + \'; $input = 0 if $input < 0; my $output = $output - \' + what.recur_included_output.value + \'; $output = 0 if $output < 0; my $totalcharge = sprintf(\"%.2f\", \' + what.recur_total_charge.value + \' * $total); my $inputcharge = sprintf(\"%.2f\", \' + what.recur_input_charge.value + \' * $input); my $outputcharge = sprintf(\"%.2f\", \' + what.recur_output_charge.value + \' * $output); my $hourscharge = sprintf(\"%.2f\", \' + what.recur_hourly_charge.value + \' * $hours); if ( \' + what.recur_total_charge.value + \' > 0 ) { push @details, \"Last month\\\'s data \". sprintf(\"%.1f\", $total). \" megs: \\\$$totalcharge\" } if ( \' + what.recur_input_charge.value + \' > 0 ) { push @details, \"Last month\\\'s download \". sprintf(\"%.1f\", $input). \" megs: \\\$$inputcharge\" } if ( \' + what.recur_output_charge.value + \' > 0 ) { push @details, \"Last month\\\'s upload \". sprintf(\"%.1f\", $output). \" megs: \\\$$outputcharge\" } if ( \' + what.recur_hourly_charge.value + \' > 0 ) { push @details, \"Last month\\\'s time \". sprintf(\"%.1f\", $hours). \" hours: \\\$$hourscharge\"; } \' + what.recur_flat.value + \' + $hourscharge + $inputcharge + $outputcharge + $totalcharge ;\'', - 'weight' => 40, -); - -sub calc_recur { - my($self, $cust_pkg, $sdate, $details ) = @_; - - my $last_bill = $cust_pkg->last_bill; - my $hours = $cust_pkg->seconds_since_sqlradacct($last_bill, $$sdate ) / 3600; - $hours -= $self->option('recur_included_hours'); - $hours = 0 if $hours < 0; - - my $input = $cust_pkg->attribute_since_sqlradacct( $last_bill, - $$sdate, - 'AcctInputOctets' ) - / 1048576; - - my $output = $cust_pkg->attribute_since_sqlradacct( $last_bill, - $$sdate, - 'AcctOutputOctets' ) - / 1048576; - - my $total = $input + $output - $self->option('recur_included_total'); - $total = 0 if $total < 0; - $input = $input - $self->option('recur_included_input'); - $input = 0 if $input < 0; - $output = $output - $self->option('recur_included_output'); - $output = 0 if $output < 0; - - my $totalcharge = - $total * sprintf('%.2f', $self->option('recur_total_charge')); - $totalcharge = $self->option('recur_total_cap') - if $self->option('recur_total_cap') - && $totalcharge > $self->option('recur_total_cap'); - - my $inputcharge = - $input * sprintf('%.2f', $self->option('recur_input_charge')); - $inputcharge = $self->option('recur_input_cap') - if $self->option('recur_input_cap') - && $inputcharge > $self->option('recur_input_cap'); - - my $outputcharge = - $output * sprintf('%.2f', $self->option('recur_output_charge')); - $outputcharge = $self->option('recur_output_cap') - if $self->option('recur_output_cap') - && $outputcharge > $self->option('recur_output_cap'); - - my $hourscharge = - $hours * sprintf('%.2f', $self->option('recur_hourly_charge')); - $hourscharge = $self->option('recur_hours_cap') - if $self->option('recur_hours_cap') - && $hourscharge > $self->option('recur_hours_cap'); - - if ( $self->option('recur_total_charge') > 0 ) { - push @$details, "Last month's data ". - sprintf('%.1f', $total). " megs: $totalcharge"; - } - if ( $self->option('recur_input_charge') > 0 ) { - push @$details, "Last month's download ". - sprintf('%.1f', $input). " megs: $inputcharge"; - } - if ( $self->option('recur_output_charge') > 0 ) { - push @$details, "Last month's upload ". - sprintf('%.1f', $output). " megs: $outputcharge"; - } - if ( $self->option('recur_hourly_charge') > 0 ) { - push @$details, "Last month\'s time ". - sprintf('%.1f', $hours). " hours: $hourscharge"; - } - - my $charges = $hourscharge + $inputcharge + $outputcharge + $totalcharge; - if ( $self->option('global_cap') && $charges > $self->option('global_cap') ) { - $charges = $self->option('global_cap'); - push @$details, "Usage charges capped at: $charges"; - } - - $self->option('recur_flat') + $charges; -} - -sub is_free_options { - qw( setup_fee recur_flat recur_hourly_charge - recur_input_charge recur_output_charge recur_total_charge ); -} - -sub base_recur { - my($self, $cust_pkg) = @_; - $self->option('recur_flat'); -} - -1; diff --git a/FS/FS/part_pkg/subscription.pm b/FS/FS/part_pkg/subscription.pm deleted file mode 100644 index c9c472c2d..000000000 --- a/FS/FS/part_pkg/subscription.pm +++ /dev/null @@ -1,108 +0,0 @@ -package FS::part_pkg::subscription; - -use strict; -use vars qw(@ISA %info); -use Time::Local qw(timelocal); -#use FS::Record qw(qsearch qsearchs); -use FS::part_pkg::flat; - -@ISA = qw(FS::part_pkg::flat); - -%info = ( - 'name' => 'First partial month full charge, then flat-rate (selectable billing day)', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, - 'cutoff_day' => { 'name' => 'billing day', - 'default' => 1, - }, - 'seconds' => { 'name' => 'Time limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - }, - 'upbytes' => { 'name' => 'Upload limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'downbytes' => { 'name' => 'Download limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'totalbytes' => { 'name' => 'Transfer limit for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'recharge_amount' => { 'name' => 'Cost of recharge for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*(\.\d{2})?$/ }, - }, - 'recharge_seconds' => { 'name' => 'Recharge time for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - }, - 'recharge_upbytes' => { 'name' => 'Recharge upload for this package', - 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'recharge_downbytes' => { 'name' => 'Recharge download for this package', 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'recharge_totalbytes' => { 'name' => 'Recharge transfer for this package', 'default' => '', - 'check' => sub { shift =~ /^\d*$/ }, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'usage_rollover' => { 'name' => 'Allow usage from previous period to roll '. - 'over into current period', - 'type' => 'checkbox', - }, - 'recharge_reset' => { 'name' => 'Reset usage to these values on manual '. - 'package recharge', - 'type' => 'checkbox', - }, - - #it would be better if this had to be turned on, its confusing - 'externalid' => { 'name' => 'Optional External ID', - 'default' => '', - }, - }, - 'fieldorder' => [ 'setup_fee', 'recur_fee', 'cutoff_day', 'seconds', - 'upbytes', 'downbytes', 'totalbytes', - 'recharge_amount', 'recharge_seconds', 'recharge_upbytes', - 'recharge_downbytes', 'recharge_totalbytes', - 'usage_rollover', 'recharge_reset', 'externalid' ], - 'freq' => 'm', - 'weight' => 30, -); - -sub calc_recur { - my($self, $cust_pkg, $sdate ) = @_; - my $cutoff_day = $self->option('cutoff_day', 1) || 1; - my $mnow = $$sdate; - my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($mnow) )[0,1,2,3,4,5]; - - if ( $mday < $cutoff_day ) { - if ($mon==0) {$mon=11;$year--;} - else {$mon--;} - } - - $$sdate = timelocal(0,0,0,$cutoff_day,$mon,$year); - - $self->option('recur_fee'); -} - -1; diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm deleted file mode 100644 index ea160315b..000000000 --- a/FS/FS/part_pkg/voip_cdr.pm +++ /dev/null @@ -1,375 +0,0 @@ -package FS::part_pkg::voip_cdr; - -use strict; -use vars qw(@ISA $DEBUG %info); -use Date::Format; -use Tie::IxHash; -use FS::Conf; -use FS::Record qw(qsearchs qsearch); -use FS::part_pkg::flat; -#use FS::rate; -#use FS::rate_prefix; - -@ISA = qw(FS::part_pkg::flat); - -$DEBUG = 1; - -tie my %rating_method, 'Tie::IxHash', - 'prefix' => 'Rate calls by using destination prefix to look up a region and rate according to the internal prefix and rate tables', - 'upstream' => 'Rate calls based on upstream data: If the call type is "1", map the upstream rate ID directly to an internal rate (rate_detail), otherwise, pass the upstream price through directly.', -; - -#tie my %cdr_location, 'Tie::IxHash', -# 'internal' => 'Internal: CDR records imported into the internal CDR table', -# 'external' => 'External: CDR records queried directly from an external '. -# 'Asterisk (or other?) CDR table', -#; - -%info = ( - 'name' => 'VoIP rating by plan of CDR records in an internal (or external) SQL table', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_flat' => { 'name' => 'Base recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'ratenum' => { 'name' => 'Rate plan', - 'type' => 'select', - 'select_table' => 'rate', - 'select_key' => 'ratenum', - 'select_label' => 'ratename', - }, - 'rating_method' => { 'name' => 'Region rating method', - 'type' => 'radio', - 'options' => \%rating_method, - }, - - 'default_prefix' => { 'name' => 'Default prefix optionally prepended to customer DID numbers when searching for CDR records', - 'default' => '+1', - }, - - 'disable_src' => { 'name' => 'Disable rating of CDR records based on the "src" field in addition to "charged_party"', - 'type' => 'checkbox' - }, - - 'domestic_prefix' => { 'name' => 'Destination prefix for domestic CDR records', - 'default' => '1', - }, - -# 'domestic_prefix_required' => { 'name' => 'Require explicit destination prefix for domestic CDR records', -# 'type' => 'checkbox', -# }, - - 'international_prefix' => { 'name' => 'Destination prefix for international CDR records', - 'default' => '011', - }, - - #XXX also have option for an external db -# 'cdr_location' => { 'name' => 'CDR database location' -# 'type' => 'select', -# 'select_options' => \%cdr_location, -# 'select_callback' => { -# 'external' => { -# 'enable' => [ 'datasrc', 'username', 'password' ], -# }, -# 'internal' => { -# 'disable' => [ 'datasrc', 'username', 'password' ], -# } -# }, -# }, -# 'datasrc' => { 'name' => 'DBI data source for external CDR table', -# 'disabled' => 'Y', -# }, -# 'username' => { 'name' => 'External database username', -# 'disabled' => 'Y', -# }, -# 'password' => { 'name' => 'External database password', -# 'disabled' => 'Y', -# }, - - }, - 'fieldorder' => [qw( setup_fee recur_flat unused_credit ratenum rating_method default_prefix disable_src domestic_prefix international_prefix )], - 'weight' => 40, -); - -sub calc_setup { - my($self, $cust_pkg ) = @_; - $self->option('setup_fee'); -} - -#false laziness w/voip_sqlradacct... resolve it if that one ever gets used again -sub calc_recur { - my($self, $cust_pkg, $sdate, $details, $param ) = @_; - - my $last_bill = $cust_pkg->last_bill; - - my $ratenum = $cust_pkg->part_pkg->option('ratenum'); - - my $spool_cdr = $cust_pkg->cust_main->spool_cdr; - - my %included_min = (); - - my $charges = 0; - - my $downstream_cdr = ''; - - foreach my $cust_svc ( - grep { $_->part_svc->svcdb eq 'svc_phone' } $cust_pkg->cust_svc - ) { - - foreach my $cdr ( - $cust_svc->get_cdrs_for_update() # $last_bill, $$sdate ) - ) { - if ( $DEBUG > 1 ) { - warn "rating CDR $cdr\n". - join('', map { " $_ => ". $cdr->{$_}. "\n" } keys %$cdr ); - } - - my $rate_detail; - my( $rate_region, $regionnum ); - my $pretty_destnum; - my $charge = 0; - my @call_details = (); - if ( $self->option('rating_method') eq 'prefix' - || ! $self->option('rating_method') - ) - { - - ### - # look up rate details based on called station id - # (or calling station id for toll free calls) - ### - - my( $to_or_from, $number ); - if ( $cdr->dst =~ /^(\+?1)?8([02-8])\1/ ) { #tollfree call - $to_or_from = 'from'; - $number = $cdr->src; - } else { #regular call - $to_or_from = 'to'; - $number = $cdr->dst; - } - - #remove non-phone# stuff and whitespace - $number =~ s/\s//g; -# my $proto = ''; -# $dest =~ s/^(\w+):// and $proto = $1; #sip: -# my $siphost = ''; -# $dest =~ s/\@(.*)$// and $siphost = $1; # @10.54.32.1, @sip.example.com - - my $intl = $self->option('international_prefix') || '011'; - - #determine the country code - my $countrycode; - if ( $number =~ /^$intl(((\d)(\d))(\d))(\d+)$/ - || $number =~ /^\+(((\d)(\d))(\d))(\d+)$/ - ) - { - - my( $three, $two, $one, $u1, $u2, $rest ) = ( $1,$2,$3,$4,$5,$6 ); - #first look for 1 digit country code - if ( qsearch('rate_prefix', { 'countrycode' => $one } ) ) { - $countrycode = $one; - $number = $u1.$u2.$rest; - } elsif ( qsearch('rate_prefix', { 'countrycode' => $two } ) ) { #or 2 - $countrycode = $two; - $number = $u2.$rest; - } else { #3 digit country code - $countrycode = $three; - $number = $rest; - } - - } else { - $countrycode = $self->option('domestic_prefix') || '1'; - $number =~ s/^$countrycode//;# if length($number) > 10; - } - - warn "rating call $to_or_from +$countrycode $number\n" if $DEBUG; - $pretty_destnum = "+$countrycode $number"; - - #find a rate prefix, first look at most specific (4 digits) then 3, etc., - # finally trying the country code only - my $rate_prefix = ''; - for my $len ( reverse(1..6) ) { - $rate_prefix = qsearchs('rate_prefix', { - 'countrycode' => $countrycode, - #'npa' => { op=> 'LIKE', value=> substr($number, 0, $len) } - 'npa' => substr($number, 0, $len), - } ) and last; - } - $rate_prefix ||= qsearchs('rate_prefix', { - 'countrycode' => $countrycode, - 'npa' => '', - }); - - # - die "Can't find rate for call $to_or_from +$countrycode $\numbern" - unless $rate_prefix; - - $regionnum = $rate_prefix->regionnum; - $rate_detail = qsearchs('rate_detail', { - 'ratenum' => $ratenum, - 'dest_regionnum' => $regionnum, - } ); - - $rate_region = $rate_prefix->rate_region; - - warn " found rate for regionnum $regionnum ". - "and rate detail $rate_detail\n" - if $DEBUG; - - } elsif ( $self->option('rating_method') eq 'upstream' ) { - - if ( $cdr->cdrtypenum == 1 ) { #rate based on upstream rateid - - $rate_detail = $cdr->cdr_upstream_rate->rate_detail; - - $regionnum = $rate_detail->dest_regionnum; - $rate_region = $rate_detail->dest_region; - - $pretty_destnum = $cdr->dst; - - warn " found rate for regionnum $regionnum and ". - "rate detail $rate_detail\n" - if $DEBUG; - - } else { #pass upstream price through - - $charge = sprintf('%.2f', $cdr->upstream_price); - - @call_details = ( - #time2str("%Y %b %d - %r", $cdr->calldate_unix ), - time2str("%c", $cdr->calldate_unix), #XXX this should probably be a config option dropdown so they can select US vs- rest of world dates or whatnot - 'N/A', #minutes... - '$'.$charge, - #$pretty_destnum, - $cdr->description, #$rate_region->regionname, - ); - - } - - } else { - die "don't know how to rate CDRs using method: ". - $self->option('rating_method'). "\n"; - } - - ### - # find the price and add detail to the invoice - ### - - # if $rate_detail is not found, skip this CDR... i.e. - # don't add it to invoice, don't set its status to NULL, - # don't call downstream_csv or something on it... - # but DO emit a warning... - if ( ! $rate_detail && ! scalar(@call_details) ) { - - warn "no rate_detail found for CDR.acctid: ". $cdr->acctid. - "; skipping\n" - - } else { # there *is* a rate_detail (or call_details), proceed... - - unless ( @call_details ) { - - $included_min{$regionnum} = $rate_detail->min_included - unless exists $included_min{$regionnum}; - - my $granularity = $rate_detail->sec_granularity; - my $seconds = $cdr->billsec; # |ength($cdr->billsec) ? $cdr->billsec : $cdr->duration; - $seconds += $granularity - ( $seconds % $granularity ) - if $granularity; # 0 is per call - my $minutes = sprintf("%.1f", $seconds / 60); - $minutes =~ s/\.0$// if $granularity == 60; - - # per call rather than per minute - $minutes = 1 unless $granularity; - - $included_min{$regionnum} -= $minutes; - - if ( $included_min{$regionnum} < 0 ) { - my $charge_min = 0 - $included_min{$regionnum}; - $included_min{$regionnum} = 0; - $charge = sprintf('%.2f', $rate_detail->min_charge * $charge_min ); - $charges += $charge; - } - - # this is why we need regionnum/rate_region.... - warn " (rate region $rate_region)\n" if $DEBUG; - - @call_details = ( - #time2str("%Y %b %d - %r", $cdr->calldate_unix ), - time2str("%c", $cdr->calldate_unix), #XXX this should probably be a config option dropdown so they can select US vs- rest of world dates or whatnot - $granularity ? $minutes.'m' : $minutes.' call', - '$'.$charge, - $pretty_destnum, - $rate_region->regionname, - ); - - } - - warn " adding details on charge to invoice: ". - join(' - ', @call_details ) - if $DEBUG; - - push @$details, join(' - ', @call_details); #\@call_details, - - # if the customer flag is on, call "downstream_csv" or something - # like it to export the call downstream! - # XXX price plan option to pick format, or something... - $downstream_cdr .= $cdr->downstream_csv( 'format' => 'convergent' ) - if $spool_cdr; - - my $error = $cdr->set_status_and_rated_price('done', $charge); - die $error if $error; - - } - - } # $cdr - - } # $cust_svc - - if ( $spool_cdr && length($downstream_cdr) ) { - - use FS::UID qw(datasrc); - my $dir = '/usr/local/etc/freeside/export.'. datasrc. '/cdr'; - mkdir $dir, 0700 unless -d $dir; - $dir .= '/'. $cust_pkg->custnum. - mkdir $dir, 0700 unless -d $dir; - my $filename = time2str("$dir/CDR%Y%m%d-spool.CSV", time); #XXX invoice date instead? would require changing the order things are generated in cust_main::bill insert cust_bill first - with transactions it could be done though - - push @{ $param->{'precommit_hooks'} }, - sub { - #lock the downstream spool file and append the records - use Fcntl qw(:flock); - use IO::File; - my $spool = new IO::File ">>$filename" - or die "can't open $filename: $!\n"; - flock( $spool, LOCK_EX) - or die "can't lock $filename: $!\n"; - seek($spool, 0, 2) - or die "can't seek to end of $filename: $!\n"; - print $spool $downstream_cdr; - flock( $spool, LOCK_UN ); - close $spool; - }; - - } #if ( $spool_cdr && length($downstream_cdr) ) - - $self->option('recur_flat') + $charges; - -} - -sub is_free { - 0; -} - -sub base_recur { - my($self, $cust_pkg) = @_; - $self->option('recur_flat'); -} - -1; - diff --git a/FS/FS/part_pkg/voip_sqlradacct.pm b/FS/FS/part_pkg/voip_sqlradacct.pm deleted file mode 100644 index bf18003ab..000000000 --- a/FS/FS/part_pkg/voip_sqlradacct.pm +++ /dev/null @@ -1,192 +0,0 @@ -package FS::part_pkg::voip_sqlradacct; - -use strict; -use vars qw(@ISA $DEBUG %info); -use Date::Format; -use FS::Record qw(qsearchs qsearch); -use FS::part_pkg::flat; -#use FS::rate; -use FS::rate_prefix; - -@ISA = qw(FS::part_pkg::flat); - -$DEBUG = 1; - -%info = ( - 'name' => 'VoIP rating by plan of CDR records in an SQL RADIUS radacct table', - 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_flat' => { 'name' => 'Base recurring fee for this package', - 'default' => 0, - }, - 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. - ' of service at cancellation', - 'type' => 'checkbox', - }, - 'ratenum' => { 'name' => 'Rate plan', - 'type' => 'select', - 'select_table' => 'rate', - 'select_key' => 'ratenum', - 'select_label' => 'ratename', - }, - }, - 'fieldorder' => [qw( setup_fee recur_flat unused_credit ratenum ignore_unrateable )], - 'weight' => 40, -); - -sub calc_setup { - my($self, $cust_pkg ) = @_; - $self->option('setup_fee'); -} - -#false laziness w/voip_cdr... resolve it if this one ever gets used again -sub calc_recur { - my($self, $cust_pkg, $sdate, $details ) = @_; - - my $last_bill = $cust_pkg->last_bill; - - my $ratenum = $cust_pkg->part_pkg->option('ratenum'); - - my %included_min = (); - - my $charges = 0; - - foreach my $cust_svc ( - grep { $_->part_svc->svcdb eq 'svc_acct' } $cust_pkg->cust_svc - ) { - - foreach my $session ( - $cust_svc->get_session_history( $last_bill, $$sdate ) - ) { - if ( $DEBUG > 1 ) { - warn "rating session $session\n". - join('', map { " $_ => ". $session->{$_}. "\n" } keys %$session ); - } - - ### - # look up rate details based on called station id - ### - - my $dest = $session->{'calledstationid'}; - - #remove non-phone# stuff and whitespace - $dest =~ s/\s//g; - my $proto = ''; - $dest =~ s/^(\w+):// and $proto = $1; #sip: - my $siphost = ''; - $dest =~ s/\@(.*)$// and $siphost = $1; # @10.54.32.1, @sip.example.com - - #determine the country code - my $countrycode; - if ( $dest =~ /^011(((\d)(\d))(\d))(\d+)$/ ) { - - my( $three, $two, $one, $u1, $u2, $rest ) = ( $1, $2, $3, $4, $5, $6 ); - #first look for 1 digit country code - if ( qsearch('rate_prefix', { 'countrycode' => $one } ) ) { - $countrycode = $one; - $dest = $u1.$u2.$rest; - } elsif ( qsearch('rate_prefix', { 'countrycode' => $two } ) ) { #or 2 - $countrycode = $two; - $dest = $u2.$rest; - } else { #3 digit country code - $countrycode = $three; - $dest = $rest; - } - - } else { - $countrycode = '1'; - $dest =~ s/^1//;# if length($dest) > 10; - } - - warn "rating call to +$countrycode $dest\n" if $DEBUG; - - #find a rate prefix, first look at most specific (4 digits) then 3, etc., - # finally trying the country code only - my $rate_prefix = ''; - for my $len ( reverse(1..6) ) { - $rate_prefix = qsearchs('rate_prefix', { - 'countrycode' => $countrycode, - #'npa' => { op=> 'LIKE', value=> substr($dest, 0, $len) } - 'npa' => substr($dest, 0, $len), - } ) and last; - } - $rate_prefix ||= qsearchs('rate_prefix', { - 'countrycode' => $countrycode, - 'npa' => '', - }); - - die "Can't find rate for call to +$countrycode $dest\n" - unless $rate_prefix; - - my $regionnum = $rate_prefix->regionnum; - my $rate_detail = qsearchs('rate_detail', { - 'ratenum' => $ratenum, - 'dest_regionnum' => $regionnum, - } ); - - warn " found rate for regionnum $regionnum ". - "and rate detail $rate_detail\n" - if $DEBUG; - - ### - # find the price and add detail to the invoice - ### - - $included_min{$regionnum} = $rate_detail->min_included - unless exists $included_min{$regionnum}; - - my $granularity = $rate_detail->sec_granularity; - my $seconds = $session->{'acctsessiontime'}; - $seconds += $granularity - ( $seconds % $granularity ); - my $minutes = sprintf("%.1f", $seconds / 60); - $minutes =~ s/\.0$// if $granularity == 60; - - $included_min{$regionnum} -= $minutes; - - my $charge = 0; - if ( $included_min{$regionnum} < 0 ) { - my $charge_min = 0 - $included_min{$regionnum}; - $included_min{$regionnum} = 0; - $charge = sprintf('%.2f', $rate_detail->min_charge * $charge_min ); - $charges += $charge; - } - - my $rate_region = $rate_prefix->rate_region; - warn " (rate region $rate_region)\n" if $DEBUG; - - my @call_details = ( - #time2str("%Y %b %d - %r", $session->{'acctstarttime'}), - time2str("%c", $session->{'acctstarttime'}), - $minutes.'m', - '$'.$charge, - "+$countrycode $dest", - $rate_region->regionname, - ); - - warn " adding details on charge to invoice: ". - join(' - ', @call_details ) - if $DEBUG; - - push @$details, join(' - ', @call_details); #\@call_details, - - } # $session - - } # $cust_svc - - $self->option('recur_flat') + $charges; - -} - -sub is_free { - 0; -} - -sub base_recur { - my($self, $cust_pkg) = @_; - $self->option('recur_flat'); -} - -1; - diff --git a/FS/FS/part_pkg_option.pm b/FS/FS/part_pkg_option.pm deleted file mode 100644 index c2f609e1b..000000000 --- a/FS/FS/part_pkg_option.pm +++ /dev/null @@ -1,131 +0,0 @@ -package FS::part_pkg_option; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); -use FS::part_pkg; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::part_pkg_option - Object methods for part_pkg_option records - -=head1 SYNOPSIS - - use FS::part_pkg_option; - - $record = new FS::part_pkg_option \%hash; - $record = new FS::part_pkg_option { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_pkg_option object represents an package definition option. -FS::part_pkg_option inherits from FS::Record. The following fields are -currently supported: - -=over 4 - -=item optionnum - primary key - -=item pkgpart - package definition (see L) - -=item optionname - option name - -=item optionvalue - option value - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new package definition option. To add the package definition option -to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'part_pkg_option'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid package definition option. If -there is an error, returns the error, otherwise returns false. Called by the -insert and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('optionnum') - || $self->ut_foreign_key('pkgpart', 'part_pkg', 'pkgpart') - || $self->ut_alpha('optionname') - || $self->ut_anything('optionvalue') - ; - return $error if $error; - - #check options & values? - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -Possibly. - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_pkg_taxclass.pm b/FS/FS/part_pkg_taxclass.pm deleted file mode 100644 index fda200ee9..000000000 --- a/FS/FS/part_pkg_taxclass.pm +++ /dev/null @@ -1,158 +0,0 @@ -package FS::part_pkg_taxclass; - -use strict; -use vars qw( @ISA ); -use FS::UID qw(dbh); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::part_pkg_taxclass - Object methods for part_pkg_taxclass records - -=head1 SYNOPSIS - - use FS::part_pkg_taxclass; - - $record = new FS::part_pkg_taxclass \%hash; - $record = new FS::part_pkg_taxclass { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_pkg_taxclass object represents a tax class. FS::part_pkg_taxclass -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item taxclassnum - -Primary key - -=item taxclass - -Tax class - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new tax class. To add the tax class to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'part_pkg_taxclass'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid tax class. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('taxclassnum') - || $self->ut_text('taxclass') - ; - return $error if $error; - - $self->SUPER::check; -} - -=back - -=cut - -# _upgrade_data -# -# Used by FS::Upgrade to migrate to a new database. - -sub _upgrade_data { # class method - my ($class, %opts) = @_; - - my $sth = dbh->prepare(' - SELECT DISTINCT taxclass - FROM cust_main_county - LEFT JOIN part_pkg_taxclass USING ( taxclass ) - WHERE taxclassnum IS NULL - AND taxclass IS NOT NULL - ') or die dbh->errstr; - $sth->execute or die $sth->errstr; - my %taxclass = map { $_->[0] => 1 } @{$sth->fetchall_arrayref}; - my @taxclass = grep $_, keys %taxclass; - - foreach my $taxclass ( @taxclass ) { - - my $part_pkg_taxclass = new FS::part_pkg_taxclass ( { - 'taxclass' => $taxclass, - } ); - my $error = $part_pkg_taxclass->insert; - die $error if $error; - - } - -} - -=head1 BUGS - -Other tables (cust_main_county, part_pkg, agent_payment_gateway) have a text -taxclass instead of a key to this table. - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_pop_local.pm b/FS/FS/part_pop_local.pm deleted file mode 100644 index 01c59df93..000000000 --- a/FS/FS/part_pop_local.pm +++ /dev/null @@ -1,113 +0,0 @@ -package FS::part_pop_local; - -use strict; -use vars qw( @ISA ); -use FS::Record; # qw( qsearchs ); - -@ISA = qw( FS::Record ); - -=head1 NAME - -FS::part_pop_local - Object methods for part_pop_local records - -=head1 SYNOPSIS - - use FS::part_pop_local; - - $record = new FS::part_pop_local \%hash; - $record = new FS::part_pop_local { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_pop_local object represents a local call area. Each -FS::part_pop_local record maps a NPA/NXX (area code and exchange) to the POP -(see L) which is a local call. FS::part_pop_local inherits -from FS::Record. The following fields are currently supported: - -=over 4 - -=item localnum - primary key (assigned automatically for new accounts) - -=item popnum - see L - -=item city - -=item state - -=item npa - area code - -=item nxx - exchange - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new point of presence (if only it were that easy!). To add the -point of presence to the database, see L<"insert">. - -=cut - -sub table { 'part_pop_local'; } - -=item insert - -Adds this point of presence to the database. If there is an error, returns the -error, otherwise returns false. - -=item delete - -Removes this point of presence from the database. - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=item check - -Checks all fields to make sure this is a valid point of presence. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - $self->ut_numbern('localnum') - or $self->ut_numbern('popnum') - or $self->ut_text('city') - or $self->ut_text('state') - or $self->ut_number('npa') - or $self->ut_number('nxx') - or $self->SUPER::check - ; - -} - -=back - -=head1 BUGS - -US/CA-centric. - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_referral.pm b/FS/FS/part_referral.pm deleted file mode 100644 index 87bc87cba..000000000 --- a/FS/FS/part_referral.pm +++ /dev/null @@ -1,204 +0,0 @@ -package FS::part_referral; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs dbh ); -use FS::agent; - -@ISA = qw( FS::Record ); - -=head1 NAME - -FS::part_referral - Object methods for part_referral objects - -=head1 SYNOPSIS - - use FS::part_referral; - - $record = new FS::part_referral \%hash - $record = new FS::part_referral { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_referral represents a advertising source - where a customer heard -of your services. This can be used to track the effectiveness of a particular -piece of advertising, for example. FS::part_referral inherits from FS::Record. -The following fields are currently supported: - -=over 4 - -=item refnum - primary key (assigned automatically for new referrals) - -=item referral - Text name of this advertising source - -=item disabled - Disabled flag, empty or 'Y' - -=item agentnum - Optional agentnum (see L) - -=back - -=head1 NOTE - -These were called B before version 1.4.0 - the name was changed -so as not to be confused with the new customer-to-customer referrals. - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new advertising source. To add the referral to the database, see -L<"insert">. - -=cut - -sub table { 'part_referral'; } - -=item insert - -Adds this advertising source to the database. If there is an error, returns -the error, otherwise returns false. - -=item delete - -Currently unimplemented. - -=cut - -sub delete { - my $self = shift; - return "Can't (yet?) delete part_referral records"; - #need to make sure no customers have this referral! -} - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=item check - -Checks all fields to make sure this is a valid advertising source. If there is -an error, returns the error, otherwise returns false. Called by the insert and -replace methods. - -=cut - -sub check { - my $self = shift; - - my $error = $self->ut_numbern('refnum') - || $self->ut_text('referral') - || $self->ut_enum('disabled', [ '', 'Y' ] ) - #|| $self->ut_foreign_keyn('agentnum', 'agent', 'agentnum') - || $self->ut_agentnum_acl('agentnum', 'Edit global advertising sources') - ; - return $error if $error; - - $self->SUPER::check; -} - -=item agent - -Returns the associated agent for this referral, if any, as an FS::agent object. - -=cut - -sub agent { - my $self = shift; - qsearchs('agent', { 'agentnum' => $self->agentnum } ); -} - -=back - -=head1 CLASS METHODS - -=over 4 - -=item acl_agentnum_sql [ INCLUDE_GLOBAL_BOOL ] - -Returns an SQL fragment for searching for part_referral records allowed by the -current users's agent ACLs (and "Edit global advertising sources" right). - -Pass a true value to include global advertising sources (for example, when -simply using rather than editing advertising sources). - -=cut - -sub acl_agentnum_sql { - my $self = shift; - - my $curuser = $FS::CurrentUser::CurrentUser; - my $sql = $curuser->agentnums_sql; - $sql = " ( $sql OR agentnum IS NULL ) " - if $curuser->access_right('Edit global advertising sources') - or defined($_[0]) && $_[0]; - - $sql; - -} - -=item all_part_referral [ INCLUDE_GLOBAL_BOOL ] - -Returns all part_referral records allowed by the current users's agent ACLs -(and "Edit global advertising sources" right). - -Pass a true value to include global advertising sources (for example, when -simply using rather than editing advertising sources). - -=cut - -sub all_part_referral { - my $self = shift; - - qsearch({ - 'table' => 'part_referral', - 'extra_sql' => ' WHERE '. $self->acl_agentnum_sql(@_). ' ORDER BY refnum ', - }); - -} - -=item num_part_referral [ INCLUDE_GLOBAL_BOOL ] - -Returns the number of part_referral records allowed by the current users's -agent ACLs (and "Edit global advertising sources" right). - -=cut - -sub num_part_referral { - my $self = shift; - - my $sth = dbh->prepare( - 'SELECT COUNT(*) FROM part_referral WHERE '. $self->acl_agentnum_sql(@_) - ) or die dbh->errstr; - $sth->execute() or die $sth->errstr; - $sth->fetchrow_arrayref->[0]; -} - -=back - -=head1 BUGS - -The delete method is unimplemented. - -`Advertising source'. Yes, it's a sucky name. The only other ones I could -come up with were "Marketing channel" and "Heard Abouts" and those are -definately both worse. - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_svc.pm b/FS/FS/part_svc.pm deleted file mode 100644 index 4fae457e2..000000000 --- a/FS/FS/part_svc.pm +++ /dev/null @@ -1,825 +0,0 @@ -package FS::part_svc; - -use strict; -use vars qw( @ISA $DEBUG ); -use Tie::IxHash; -use FS::Record qw( qsearch qsearchs fields dbh ); -use FS::Schema qw( dbdef ); -use FS::part_svc_column; -use FS::part_export; -use FS::export_svc; -use FS::cust_svc; - -@ISA = qw(FS::Record); - -$DEBUG = 0; - -=head1 NAME - -FS::part_svc - Object methods for part_svc objects - -=head1 SYNOPSIS - - use FS::part_svc; - - $record = new FS::part_svc \%hash - $record = new FS::part_svc { 'column' => 'value' }; - - $error = $record->insert; - $error = $record->insert( [ 'pseudofield' ] ); - $error = $record->insert( [ 'pseudofield' ], \%exportnums ); - - $error = $new_record->replace($old_record); - $error = $new_record->replace($old_record, '1.3-COMPAT', [ 'pseudofield' ] ); - $error = $new_record->replace($old_record, '1.3-COMPAT', [ 'pseudofield' ], \%exportnums ); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_svc represents a service definition. FS::part_svc inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item svcpart - primary key (assigned automatically for new service definitions) - -=item svc - text name of this service definition - -=item svcdb - table used for this service. See L, -L, and L, among others. - -=item disabled - Disabled flag, empty or `Y' - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new service definition. To add the service definition to the -database, see L<"insert">. - -=cut - -sub table { 'part_svc'; } - -=item insert [ EXTRA_FIELDS_ARRAYREF [ , EXPORTNUMS_HASHREF [ , JOB ] ] ] - -Adds this service definition to the database. If there is an error, returns -the error, otherwise returns false. - -The following pseudo-fields may be defined, and will be maintained in -the part_svc_column table appropriately (see L). - -=over 4 - -=item I__I - Default or fixed value for I in I. - -=item I__I_flag - defines I__I action: null or empty (no default), `D' for default, `F' for fixed (unchangeable), `M' for manual selection from inventory, or `A' for automatic selection from inventory. For virtual fields, can also be 'X' for excluded. - -=back - -If you want to add part_svc_column records for fields that do not exist as -(real or virtual) fields in the I table, make sure to list then in -EXTRA_FIELDS_ARRAYREF also. - -If EXPORTNUMS_HASHREF is specified (keys are exportnums and values are -boolean), the appopriate export_svc records will be inserted. - -TODOC: JOB - -=cut - -sub insert { - my $self = shift; - my @fields = (); - my @exportnums = (); - @fields = @{shift(@_)} if @_; - if ( @_ ) { - my $exportnums = shift; - @exportnums = grep $exportnums->{$_}, keys %$exportnums; - } - my $job = ''; - $job = shift if @_; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - # add part_svc_column records - - my $svcdb = $self->svcdb; -# my @rows = map { /^${svcdb}__(.*)$/; $1 } -# grep ! /_flag$/, -# grep /^${svcdb}__/, -# fields('part_svc'); - foreach my $field ( - grep { $_ ne 'svcnum' - && defined( $self->getfield($svcdb.'__'.$_.'_flag') ) - } (fields($svcdb), @fields) - ) { - my $part_svc_column = $self->part_svc_column($field); - my $previous = qsearchs('part_svc_column', { - 'svcpart' => $self->svcpart, - 'columnname' => $field, - } ); - - my $flag = $self->getfield($svcdb.'__'.$field.'_flag'); - #if ( uc($flag) =~ /^([DFMAX])$/ ) { - if ( uc($flag) =~ /^([A-Z])$/ ) { #part_svc_column will test it - my $parser = FS::part_svc->svc_table_fields($svcdb)->{$field}->{parse} - || sub { shift }; - $part_svc_column->setfield('columnflag', $1); - $part_svc_column->setfield('columnvalue', - &$parser($self->getfield($svcdb.'__'.$field)) - ); - if ( $previous ) { - $error = $part_svc_column->replace($previous); - } else { - $error = $part_svc_column->insert; - } - } else { - $error = $previous ? $previous->delete : ''; - } - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - } - - # add export_svc records - my $slice = 100/scalar(@exportnums) if @exportnums; - my $done = 0; - foreach my $exportnum ( @exportnums ) { - my $export_svc = new FS::export_svc ( { - 'exportnum' => $exportnum, - 'svcpart' => $self->svcpart, - } ); - $error = $export_svc->insert($job, $slice*$done++, $slice); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -=item delete - -Currently unimplemented. Set the "disabled" field instead. - -=cut - -sub delete { - return "Can't (yet?) delete service definitions."; -# check & make sure the svcpart isn't in cust_svc or pkg_svc (in any packages)? -} - -=item replace OLD_RECORD [ '1.3-COMPAT' [ , EXTRA_FIELDS_ARRAYREF [ , EXPORTNUMS_HASHREF [ , JOB ] ] ] ] - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -TODOC: 1.3-COMPAT - -TODOC: EXTRA_FIELDS_ARRAYREF (same as insert method) - -TODOC: JOB - -=cut - -sub replace { - my ( $new, $old ) = ( shift, shift ); - my $compat = ''; - my @fields = (); - my $exportnums; - my $job = ''; - if ( @_ && $_[0] eq '1.3-COMPAT' ) { - shift; - $compat = '1.3'; - @fields = @{shift(@_)} if @_; - $exportnums = @_ ? shift : ''; - $job = shift if @_; - } else { - return 'non-1.3-COMPAT interface not yet written'; - #not yet implemented - } - - return "Can't change svcdb for an existing service definition!" - unless $old->svcdb eq $new->svcdb; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $new->SUPER::replace( $old ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( $compat eq '1.3' ) { - - # maintain part_svc_column records - - my $svcdb = $new->svcdb; - foreach my $field ( - grep { $_ ne 'svcnum' - && defined( $new->getfield($svcdb.'__'.$_.'_flag') ) - } (fields($svcdb),@fields) - ) { - my $part_svc_column = $new->part_svc_column($field); - my $previous = qsearchs('part_svc_column', { - 'svcpart' => $new->svcpart, - 'columnname' => $field, - } ); - - my $flag = $new->getfield($svcdb.'__'.$field.'_flag'); - #if ( uc($flag) =~ /^([DFMAX])$/ ) { - if ( uc($flag) =~ /^([A-Z])$/ ) { #part_svc_column will test it - my $parser = FS::part_svc->svc_table_fields($svcdb)->{$field}->{parse} - || sub { shift }; - $part_svc_column->setfield('columnflag', $1); - $part_svc_column->setfield('columnvalue', - &$parser($new->getfield($svcdb.'__'.$field)) - ); - if ( $previous ) { - $error = $part_svc_column->replace($previous); - } else { - $error = $part_svc_column->insert; - } - } else { - $error = $previous ? $previous->delete : ''; - } - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - # maintain export_svc records - - if ( $exportnums ) { - - #false laziness w/ edit/process/agent_type.cgi - my @new_export_svc = (); - foreach my $part_export ( qsearch('part_export', {}) ) { - my $exportnum = $part_export->exportnum; - my $hashref = { - 'exportnum' => $exportnum, - 'svcpart' => $new->svcpart, - }; - my $export_svc = qsearchs('export_svc', $hashref); - - if ( $export_svc && ! $exportnums->{$exportnum} ) { - $error = $export_svc->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } elsif ( ! $export_svc && $exportnums->{$exportnum} ) { - push @new_export_svc, new FS::export_svc ( $hashref ); - } - - } - - my $slice = 100/scalar(@new_export_svc) if @new_export_svc; - my $done = 0; - foreach my $export_svc (@new_export_svc) { - $error = $export_svc->insert($job, $slice*$done++, $slice); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - if ( $job ) { - $error = $job->update_statustext( int( $slice * $done ) ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - } - - } else { - $dbh->rollback if $oldAutoCommit; - return 'non-1.3-COMPAT interface not yet written'; - #not yet implemented - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -=item check - -Checks all fields to make sure this is a valid service definition. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - my $error; - $error= - $self->ut_numbern('svcpart') - || $self->ut_text('svc') - || $self->ut_alpha('svcdb') - || $self->ut_enum('disabled', [ '', 'Y' ] ) - ; - return $error if $error; - - my @fields = eval { fields( $self->svcdb ) }; #might die - return "Unknown svcdb: ". $self->svcdb. " (Error: $@)" - unless @fields; - - $self->SUPER::check; -} - -=item part_svc_column COLUMNNAME - -Returns the part_svc_column object (see L) for the given -COLUMNNAME, or a new part_svc_column object if none exists. - -=cut - -sub part_svc_column { - my( $self, $columnname) = @_; - $self->svcpart && - qsearchs('part_svc_column', { - 'svcpart' => $self->svcpart, - 'columnname' => $columnname, - } - ) or new FS::part_svc_column { - 'svcpart' => $self->svcpart, - 'columnname' => $columnname, - }; -} - -=item all_part_svc_column - -=cut - -sub all_part_svc_column { - my $self = shift; - qsearch('part_svc_column', { 'svcpart' => $self->svcpart } ); -} - -=item part_export [ EXPORTTYPE ] - -Returns a list of all exports (see L) for this service, or, -if an export type is specified, only returns exports of the given type. - -=cut - -sub part_export { - my $self = shift; - my %search; - $search{'exporttype'} = shift if @_; - map { qsearchs('part_export', { 'exportnum' => $_->exportnum, %search } ) } - qsearch('export_svc', { 'svcpart' => $self->svcpart } ); -} - -=item part_export_usage - -Returns a list of any exports (see L) for this service that -are capable of reporting usage information. - -=cut - -sub part_export_usage { - my $self = shift; - grep $_->can('usage_sessions'), $self->part_export; -} - -=item cust_svc [ PKGPART ] - -Returns a list of associated customer services (FS::cust_svc records). - -If a PKGPART is specified, returns the customer services which are contained -within packages of that type (see L). If PKGPARTis specified as -B<0>, returns unlinked customer services. - -=cut - -sub cust_svc { - my $self = shift; - - my $hashref = { 'svcpart' => $self->svcpart }; - - my( $addl_from, $extra_sql ) = ( '', '' ); - if ( @_ ) { - my $pkgpart = shift; - if ( $pkgpart =~ /^(\d+)$/ ) { - $addl_from = 'LEFT JOIN cust_pkg USING ( pkgnum )'; - $extra_sql = "AND pkgpart = $1"; - } elsif ( $pkgpart eq '0' ) { - $hashref->{'pkgnum'} = ''; - } - } - - qsearch({ - 'table' => 'cust_svc', - 'addl_from' => $addl_from, - 'hashref' => $hashref, - 'extra_sql' => $extra_sql, - }); -} - -=item num_cust_svc [ PKGPART ] - -Returns the number of associated customer services (FS::cust_svc records). - -If a PKGPART is specified, returns the number of customer services which are -contained within packages of that type (see L). If PKGPART -is specified as B<0>, returns the number of unlinked customer services. - -=cut - -sub num_cust_svc { - my $self = shift; - - my @param = ( $self->svcpart ); - - my( $join, $and ) = ( '', '' ); - if ( @_ ) { - my $pkgpart = shift; - if ( $pkgpart ) { - $join = 'LEFT JOIN cust_pkg USING ( pkgnum )'; - $and = 'AND pkgpart = ?'; - push @param, $pkgpart; - } elsif ( $pkgpart eq '0' ) { - $and = 'AND pkgnum IS NULL'; - } - } - - my $sth = dbh->prepare( - "SELECT COUNT(*) FROM cust_svc $join WHERE svcpart = ? $and" - ) or die dbh->errstr; - $sth->execute(@param) - or die $sth->errstr; - $sth->fetchrow_arrayref->[0]; -} - -=item svc_x - -Returns a list of associated FS::svc_* records. - -=cut - -sub svc_x { - my $self = shift; - map { $_->svc_x } $self->cust_svc; -} - -=back - -=head1 CLASS METHODS - -=over 4 - -=cut - -my $svc_defs; -sub _svc_defs { - - return $svc_defs if $svc_defs; #cache - - my $conf = new FS::Conf; - - #false laziness w/part_pkg.pm::plan_info - - my %info; - foreach my $INC ( @INC ) { - warn "globbing $INC/FS/svc_*.pm\n" if $DEBUG; - foreach my $file ( glob("$INC/FS/svc_*.pm") ) { - - warn "attempting to load service table info from $file\n" if $DEBUG; - $file =~ /\/(\w+)\.pm$/ or do { - warn "unrecognized file in $INC/FS/: $file\n"; - next; - }; - my $mod = $1; - - if ( $mod =~ /^svc_[A-Z]/ or $mod =~ /^svc_acct_pop$/ ) { - warn "skipping FS::$mod" if $DEBUG; - next; - } - - eval "use FS::$mod;"; - if ( $@ ) { - die "error using FS::$mod (skipping): $@\n" if $@; - next; - } - unless ( UNIVERSAL::can("FS::$mod", 'table_info') ) { - warn "FS::$mod has no table_info method; skipping"; - next; - } - - my $info = "FS::$mod"->table_info; - unless ( keys %$info ) { - warn "FS::$mod->table_info doesn't return info, skipping\n"; - next; - } - warn "got info from FS::$mod: $info\n" if $DEBUG; - if ( exists($info->{'disabled'}) && $info->{'disabled'} ) { - warn "skipping disabled service FS::$mod" if $DEBUG; - next; - } - $info{$mod} = $info; - } - } - - tie my %svc_defs, 'Tie::IxHash', - map { $_ => $info{$_}->{'fields'} } - sort { $info{$a}->{'display_weight'} <=> $info{$b}->{'display_weight'} } - keys %info, - ; - - # yuck. maybe this won't be so bad when virtual fields become real fields - my %vfields; - foreach my $svcdb (grep dbdef->table($_), keys %svc_defs ) { - eval "use FS::$svcdb;"; - my $self = "FS::$svcdb"->new; - $vfields{$svcdb} = {}; - foreach my $field ($self->virtual_fields) { # svc_Common::virtual_fields with a null svcpart returns all of them - my $pvf = $self->pvf($field); - my @list = $pvf->list; - if (scalar @list) { - $svc_defs{$svcdb}->{$field} = { desc => $pvf->label, - type => 'select', - select_list => \@list }; - } else { - $svc_defs{$svcdb}->{$field} = $pvf->label; - } #endif - $vfields{$svcdb}->{$field} = $pvf; - warn "\$vfields{$svcdb}->{$field} = $pvf" - if $DEBUG; - } #next $field - } #next $svcdb - - $svc_defs = \%svc_defs; #cache - -} - -=item svc_tables - -Returns a list of all svc_ tables. - -=cut - -sub svc_tables { - my $class = shift; - my $svc_defs = $class->_svc_defs; - grep { defined( dbdef->table($_) ) } keys %$svc_defs; -} - -=item svc_table_fields TABLE - -Given a table name, returns a hashref of field names. The field names -returned are those with additional (service-definition related) information, -not necessarily all database fields of the table. Pseudo-fields may also -be returned (i.e. svc_acct.usergroup). - -Each value of the hashref is another hashref, which can have one or more of -the following keys: - -=over 4 - -=item label - Description of the field - -=item def_label - Optional description of the field in the context of service definitions - -=item type - Currently "text", "select", "disabled", or "radius_usergroup_selector" - -=item disable_default - This field should not allow a default value in service definitions - -=item disable_fixed - This field should not allow a fixed value in service definitions - -=item disable_inventory - This field should not allow inventory values in service definitions - -=item select_list - If type is "text", this can be a listref of possible values. - -=item select_table - An alternative to select_list, this defines a database table with the possible choices. - -=item select_key - Used with select_table, this is the field name of keys - -=item select_label - Used with select_table, this is the field name of labels - -=back - -=cut - -#maybe this should move and be a class method in svc_Common.pm -sub svc_table_fields { - my($class, $table) = @_; - my $svc_defs = $class->_svc_defs; - my $def = $svc_defs->{$table}; - - foreach ( grep !ref($def->{$_}), keys %$def ) { - - #normalize the shortcut in %info hash - $def->{$_} = { 'label' => $def->{$_} }; - - $def->{$_}{'type'} ||= 'text'; - - } - - $def; -} - -=back - -=head1 SUBROUTINES - -=over 4 - -=item process - -Job-queue processor for web interface adds/edits - -=cut - -use Storable qw(thaw); -use Data::Dumper; -use MIME::Base64; -sub process { - my $job = shift; - - my $param = thaw(decode_base64(shift)); - warn Dumper($param) if $DEBUG; - - my $old = qsearchs('part_svc', { 'svcpart' => $param->{'svcpart'} }) - if $param->{'svcpart'}; - - $param->{'svc_acct__usergroup'} = - ref($param->{'svc_acct__usergroup'}) - ? join(',', @{$param->{'svc_acct__usergroup'}} ) - : $param->{'svc_acct__usergroup'}; - - my $new = new FS::part_svc ( { - map { - $_ => $param->{$_}; - # } qw(svcpart svc svcdb) - } ( fields('part_svc'), - map { my $svcdb = $_; - my @fields = fields($svcdb); - push @fields, 'usergroup' if $svcdb eq 'svc_acct'; #kludge - - map { - if ( $param->{ $svcdb.'__'.$_.'_flag' } =~ /^[MA]$/ ) { - $param->{ $svcdb.'__'.$_ } = - delete( $param->{ $svcdb.'__'.$_.'_classnum' } ); - } - if ( $param->{ $svcdb.'__'.$_.'_flag' } =~ /^S$/ ) { - $param->{ $svcdb.'__'.$_} = - ref($param->{ $svcdb.'__'.$_}) - ? join(',', @{$param->{ $svcdb.'__'.$_ }} ) - : $param->{ $svcdb.'__'.$_ }; - } - ( $svcdb.'__'.$_, $svcdb.'__'.$_.'_flag' ); - } - @fields; - - } FS::part_svc->svc_tables() - ) - } ); - - my %exportnums = - map { $_->exportnum => ( $param->{'exportnum'.$_->exportnum} || '') } - qsearch('part_export', {} ); - - my $error; - if ( $param->{'svcpart'} ) { - $error = $new->replace( $old, - '1.3-COMPAT', - [ 'usergroup' ], - \%exportnums, - $job - ); - } else { - $error = $new->insert( [ 'usergroup' ], - \%exportnums, - $job, - ); - $param->{'svcpart'} = $new->getfield('svcpart'); - } - - die "$error\n" if $error; -} - -=item process_bulk_cust_svc - -Job-queue processor for web interface bulk customer service changes - -=cut - -use Storable qw(thaw); -use Data::Dumper; -use MIME::Base64; -sub process_bulk_cust_svc { - my $job = shift; - - my $param = thaw(decode_base64(shift)); - warn Dumper($param) if $DEBUG; - - my $old_part_svc = - qsearchs('part_svc', { 'svcpart' => $param->{'old_svcpart'} } ); - - die "Must select a new service definition\n" unless $param->{'new_svcpart'}; - - #the rest should be abstracted out to to its own subroutine? - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - local( $FS::cust_svc::ignore_quantity ) = 1; - - my $total = $old_part_svc->num_cust_svc( $param->{'pkgpart'} ); - - my $n = 0; - foreach my $old_cust_svc ( $old_part_svc->cust_svc( $param->{'pkgpart'} ) ) { - - my $new_cust_svc = new FS::cust_svc { $old_cust_svc->hash }; - - $new_cust_svc->svcpart( $param->{'new_svcpart'} ); - my $error = $new_cust_svc->replace($old_cust_svc); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - die "$error\n" if $error; - } - - $error = $job->update_statustext( int( 100 * ++$n / $total ) ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - die $error if $error; - } - - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=head1 BUGS - -Delete is unimplemented. - -The list of svc_* tables is no longer hardcoded, but svc_acct_pop is skipped -as a special case until it is renamed. - -all_part_svc_column methods should be documented - -=head1 SEE ALSO - -L, L, L, L, -L, L, L, L, -schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_svc_column.pm b/FS/FS/part_svc_column.pm deleted file mode 100644 index d2b8fd91b..000000000 --- a/FS/FS/part_svc_column.pm +++ /dev/null @@ -1,120 +0,0 @@ -package FS::part_svc_column; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( fields ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::part_svc_column - Object methods for part_svc_column objects - -=head1 SYNOPSIS - - use FS::part_svc_column; - - $record = new FS::part_svc_column \%hash - $record = new FS::part_svc_column { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_svc_column record represents a service definition column -constraint. FS::part_svc_column inherits from FS::Record. The following -fields are currently supported: - -=over 4 - -=item columnnum - primary key (assigned automatcially for new records) - -=item svcpart - service definition (see L) - -=item columnname - column name in part_svc.svcdb table - -=item columnvalue - default or fixed value for the column - -=item columnflag - null or empty (no default), `D' for default, `F' for fixed (unchangeable), `S' for selectable choice, `M' for manual selection from inventory, or `A' for automatic selection from inventory. For virtual fields, can also be 'X' for excluded. - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new column constraint. To add the column constraint to the database, see L<"insert">. - -=cut - -sub table { 'part_svc_column'; } - -=item insert - -Adds this service definition to the database. If there is an error, returns -the error, otherwise returns false. - -=item delete - -Deletes this record from the database. If there is an error, returns the -error, otherwise returns false. - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=item check - -Checks all fields to make sure this is a valid record. If there is an error, -returns the error, otherwise returns false. Called by the insert and replace -methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('columnnum') - || $self->ut_number('svcpart') - || $self->ut_alpha('columnname') - || $self->ut_anything('columnvalue') - ; - return $error if $error; - - $self->columnflag =~ /^([DFSMAX])$/ - or return "illegal columnflag ". $self->columnflag; - $self->columnflag(uc($1)); - - if ( $self->columnflag =~ /^[MA]$/ ) { - $error = - $self->ut_foreign_key( 'columnvalue', 'inventory_class', 'classnum' ); - return $error if $error; - } - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, L, -L, L, L, L, -schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/part_svc_router.pm b/FS/FS/part_svc_router.pm deleted file mode 100755 index df04cc9fb..000000000 --- a/FS/FS/part_svc_router.pm +++ /dev/null @@ -1,33 +0,0 @@ -package FS::part_svc_router; - -use strict; -use vars qw( @ISA ); -use FS::Record qw(qsearchs); -use FS::router; -use FS::part_svc; - -@ISA = qw(FS::Record); - -sub table { 'part_svc_router'; } - -sub check { - my $self = shift; - my $error = - $self->ut_numbern('svcrouternum') - || $self->ut_foreign_key('svcpart', 'part_svc', 'svcpart') - || $self->ut_foreign_key('routernum', 'router', 'routernum'); - return $error if $error; - ''; #no error -} - -sub router { - my $self = shift; - return qsearchs('router', { routernum => $self->routernum }); -} - -sub part_svc { - my $self = shift; - return qsearchs('part_svc', { svcpart => $self->svcpart }); -} - -1; diff --git a/FS/FS/part_virtual_field.pm b/FS/FS/part_virtual_field.pm deleted file mode 100755 index ea973bafc..000000000 --- a/FS/FS/part_virtual_field.pm +++ /dev/null @@ -1,301 +0,0 @@ -package FS::part_virtual_field; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearchs qsearch ); -use FS::Schema qw( dbdef ); -use CGI qw(escapeHTML); - -@ISA = qw( FS::Record ); - -=head1 NAME - -FS::part_virtual_field - Object methods for part_virtual_field records - -=head1 SYNOPSIS - - use FS::part_virtual_field; - - $record = new FS::part_virtual_field \%hash; - $record = new FS::part_virtual_field { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::part_virtual_field object represents the definition of a virtual field -(see the BACKGROUND section). FS::part_virtual_field contains the name and -base table of the field, as well as validation rules and UI hints about the -display of the field. The actual data is stored in FS::virtual_field; see -its manpage for details. - -FS::part_virtual_field inherits from FS::Record. The following fields are -currently supported: - -=over 2 - -=item vfieldpart - primary key (assigned automatically) - -=item name - name of the field - -=item dbtable - table for which this virtual field is defined - -=item check_block - Perl code to validate/normalize data - -=item list_source - Perl code to generate a list of values (UI hint) - -=item length - expected length of the value (UI hint) - -=item label - descriptive label for the field (UI hint) - -=item sequence - sort key (UI hint; unimplemented) - -=back - -=head1 BACKGROUND - -"Form is none other than emptiness, - and emptiness is none other than form." --- Heart Sutra - -The virtual field mechanism allows site admins to make trivial changes to -the Freeside database schema without modifying the code. Specifically, the -user can add custom-defined 'fields' to the set of data tracked by Freeside -about objects such as customers and services. These fields are not associated -with any logic in the core Freeside system, but may be referenced in peripheral -code such as exports, price calculations, or alternate interfaces, or may just -be stored in the database for future reference. - -This system was originally devised for svc_broadband, which (by necessity) -comprises such a wide range of access technologies that no static set of fields -could contain all the information needed by the exports. In an appalling -display of False Laziness, a parallel mechanism was implemented for the -router table, to store properties such as passwords to configure routers. - -The original system treated svc_broadband custom fields (sb_fields) as records -in a completely separate table. Any code that accessed or manipulated these -fields had to be aware that they were I fields in svc_broadband, but -records in sb_field. For example, code that inserted a svc_broadband with -several custom fields had to create an FS::svc_broadband object, call its -insert() method, and then create several FS::sb_field objects and call I -insert() methods. - -This created a problem for exports. The insert method on any FS::svc_Common -object (including svc_broadband) automatically triggers exports after the -record has been inserted. However, at this point, the sb_fields had not yet -been inserted, so the export could not rely on their presence, which was the -original purpose of sb_fields. - -Hence the new system. Virtual fields are appended to the field list of every -record at the FS::Record level, whether the object is created ex nihilo with -new() or fetched with qsearch(). The fields() method now returns a list of -both real and virtual fields. The insert(), replace(), and delete() methods -now update both the base table and the virtual fields, in a single transaction. - -A new method is provided, virtual_fields(), which gives only the virtual -fields. UI code that dynamically generates form widgets to edit virtual field -data should use this to figure out what fields are defined. (See below.) - -Subclasses may override virtual_fields() to restrict the set of virtual -fields available. Some discipline and sanity on the part of the programmer -are required; in particular, this function should probably not depend on any -fields in the record other than the primary key, since the others may change -after the object is instantiated. (Making it depend on I fields is -just asking for pain.) One use of this is seen in FS::svc_Common; another -possibility is field-level access control based on FS::UID::getotaker(). - -As a trivial case, a subclass may opt out of supporting virtual fields with -the following code: - -sub virtual_fields { () } - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Create a new record. To add the record to the database, see "insert". - -=cut - -sub table { 'part_virtual_field'; } -sub virtual_fields { () } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=item delete - -Deletes this record from the database. If there is an error, returns the -error, otherwise returns false. - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=item check - -If there is an error, returns the error, otherwise returns false. -Called by the insert and replace methods. - -=back - -=cut - -sub check { - my $self = shift; - - my $error = $self->ut_text('name') || - $self->ut_text('dbtable') || - $self->ut_number('length') - ; - return $error if $error; - - # Make sure it's a real table with a numeric primary key - my ($table, $pkey); - if($table = dbdef->table($self->dbtable)) { - if($pkey = $table->primary_key) { - if($table->column($pkey)->type =~ /int/i) { - # this is what it should be - } else { - $error = "$table.$pkey is not an integer"; - } - } else { - $error = "$table does not have a single-field primary key"; - } - } else { - $error = "$table does not exist in the schema"; - } - return $error if $error; - - # Possibly some sanity checks for check_block and list_source? - - $self->SUPER::check; -} - -=item list - -Evaluates list_source. - -=cut - -sub list { - my $self = shift; - return () unless $self->list_source; - - my @opts = eval($self->list_source); - if($@) { - warn $@; - return (); - } else { - return @opts; - } -} - -=item widget UI_TYPE MODE [ VALUE ] - -Generates UI code for a widget suitable for editing/viewing the field, based on -list_source and length. - -The only UI_TYPE currently supported is 'HTML', and the only MODE is 'view'. -Others will be added later. - -In HTML, all widgets are assumed to be table rows. View widgets look like -LabelValue - -(Most of the display style stuff, such as the colors, should probably go into -a separate module specific to the UI. That can wait, though. The API for -this function won't change.) - -VALUE (optional) is the current value of the field. - -=cut - -sub widget { - my $self = shift; - my ($ui_type, $mode, $value) = @_; - my $text; - my $label = $self->label || $self->name; - - if ($ui_type eq 'HTML') { - if ($mode eq 'view') { - $text = q!! . $label . - q!! . $value . - q!! . "\n"; - } elsif ($mode eq 'edit') { - $text = q!! . $label . - q!!; - if ($self->list_source) { - $text .= q!length) { - $text .= q! SIZE="! . $self->length . q!"!; - } - $text .= '>'; - } - $text .= q!! . "\n"; - } else { - return ''; - } - } else { - return ''; - } - return $text; -} - -=head1 NOTES - -=head2 Semantics of check_block: - -This has been changed from the sb_field implementation to make check_blocks -simpler and more natural to Perl programmers who work on things other than -Freeside. - -The check_block is eval'd with the (proposed) new value of the field in $_, -and the object to be updated in $self. Its return value is ignored. The -check_block may change the value of $_ to override the proposed value, or -call die() (with an appropriate error message) to reject the update entirely; -the error string will be returned as the output of the check() method. - -This makes check_blocks like - -C - -do what you expect. - -The check_block is expected NOT to do anything freaky to $self, like modifying -other fields or calling $self->check(). You have been warned. - -(FIXME: Rewrite some of the warnings from part_sb_field and insert here.) - -=head1 BUGS - -None. It's absolutely falwless. - -=head1 SEE ALSO - -L, L - -=cut - -1; - - diff --git a/FS/FS/pay_batch.pm b/FS/FS/pay_batch.pm deleted file mode 100644 index 5448b031e..000000000 --- a/FS/FS/pay_batch.pm +++ /dev/null @@ -1,538 +0,0 @@ -package FS::pay_batch; - -use strict; -use vars qw( @ISA ); -use Time::Local; -use Text::CSV_XS; -use FS::Record qw( dbh qsearch qsearchs ); -use FS::cust_pay; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::pay_batch - Object methods for pay_batch records - -=head1 SYNOPSIS - - use FS::pay_batch; - - $record = new FS::pay_batch \%hash; - $record = new FS::pay_batch { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::pay_batch object represents an payment batch. FS::pay_batch inherits -from FS::Record. The following fields are currently supported: - -=over 4 - -=item batchnum - primary key - -=item payby - CARD or CHEK - -=item status - O (Open), I (In-transit), or R (Resolved) - -=item download - - -=item upload - - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new batch. To add the batch to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'pay_batch'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid batch. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('batchnum') - || $self->ut_enum('payby', [ 'CARD', 'CHEK' ]) - || $self->ut_enum('status', [ 'O', 'I', 'R' ]) - ; - return $error if $error; - - $self->SUPER::check; -} - -=item rebalance - -=cut - -sub rebalance { - my $self = shift; -} - -=item set_status - -=cut - -sub set_status { - my $self = shift; - $self->status(shift); - $self->download(time) - if $self->status eq 'I' && ! $self->download; - $self->upload(time) - if $self->status eq 'R' && ! $self->upload; - $self->replace(); -} - -=item import_results OPTION => VALUE, ... - -Import batch results. - -Options are: - -I - open filehandle of results file. - -I - "csv-td_canada_trust-merchant_pc_batch", "csv-chase_canada-E-xactBatch", "ach-spiritone", or "PAP" - -=cut - -sub import_results { - my $self = shift; - - my $param = ref($_[0]) ? shift : { @_ }; - my $fh = $param->{'filehandle'}; - my $format = $param->{'format'}; - - my $filetype; # CSV, Fixed80, Fixed264 - my @fields; - my $formatre; # for Fixed.+ - my @values; - my $begin_condition; - my $end_condition; - my $end_hook; - my $hook; - my $approved_condition; - my $declined_condition; - - if ( $format eq 'csv-td_canada_trust-merchant_pc_batch' ) { - - $filetype = "CSV"; - - @fields = ( - 'paybatchnum', # Reference#: Invoice number of the transaction - 'paid', # Amount: Amount of the transaction. Dollars and cents - # with no decimal entered. - '', # Card Type: 0 - MCrd, 1 - Visa, 2 - AMEX, 3 - Discover, - # 4 - Insignia, 5 - Diners/EnRoute, 6 - JCB - '_date', # Transaction Date: Date the Transaction was processed - 'time', # Transaction Time: Time the transaction was processed - 'payinfo', # Card Number: Card number for the transaction - '', # Expiry Date: Expiry date of the card - '', # Auth#: Authorization number entered for force post - # transaction - 'type', # Transaction Type: 0 - purchase, 40 - refund, - # 20 - force post - 'result', # Processing Result: 3 - Approval, - # 4 - Declined/Amount over limit, - # 5 - Invalid/Expired/stolen card, - # 6 - Comm Error - '', # Terminal ID: Terminal ID used to process the transaction - ); - - $end_condition = sub { - my $hash = shift; - $hash->{'type'} eq '0BC'; - }; - - $end_hook = sub { - my( $hash, $total) = @_; - $total = sprintf("%.2f", $total); - my $batch_total = sprintf("%.2f", $hash->{'paybatchnum'} / 100 ); - return "Our total $total does not match bank total $batch_total!" - if $total != $batch_total; - ''; - }; - - $hook = sub { - my $hash = shift; - $hash->{'paid'} = sprintf("%.2f", $hash->{'paid'} / 100 ); - $hash->{'_date'} = timelocal( substr($hash->{'time'}, 4, 2), - substr($hash->{'time'}, 2, 2), - substr($hash->{'time'}, 0, 2), - substr($hash->{'_date'}, 6, 2), - substr($hash->{'_date'}, 4, 2)-1, - substr($hash->{'_date'}, 0, 4)-1900, ); - }; - - $approved_condition = sub { - my $hash = shift; - $hash->{'type'} eq '0' && $hash->{'result'} == 3; - }; - - $declined_condition = sub { - my $hash = shift; - $hash->{'type'} eq '0' && ( $hash->{'result'} == 4 - || $hash->{'result'} == 5 ); - }; - - - }elsif ( $format eq 'csv-chase_canada-E-xactBatch' ) { - - $filetype = "CSV"; - - @fields = ( - '', # Internal(bank) id of the transaction - '', # Transaction Type: 00 - purchase, 01 - preauth, - # 02 - completion, 03 - forcepost, - # 04 - refund, 05 - auth, - # 06 - purchase corr, 07 - refund corr, - # 08 - void 09 - void return - '', # gateway used to process this transaction - 'paid', # Amount: Amount of the transaction. Dollars and cents - # with decimal entered. - 'auth', # Auth#: Authorization number (if approved) - 'payinfo', # Card Number: Card number for the transaction - '', # Expiry Date: Expiry date of the card - '', # Cardholder Name - 'bankcode', # Bank response code (3 alphanumeric) - 'bankmess', # Bank response message - 'etgcode', # ETG response code (2 alphanumeric) - 'etgmess', # ETG response message - '', # Returned customer number for the transaction - 'paybatchnum', # Reference#: paybatch number of the transaction - '', # Reference#: Invoice number of the transaction - 'result', # Processing Result: Approved of Declined - ); - - $end_condition = sub { - ''; - }; - - $hook = sub { - my $hash = shift; - my $cpb = shift; - $hash->{'paid'} = sprintf("%.2f", $hash->{'paid'}); #hmmmm - $hash->{'_date'} = time; # got a better one? - $hash->{'payinfo'} = $cpb->{'payinfo'} - if( substr($hash->{'payinfo'}, -4) eq substr($cpb->{'payinfo'}, -4) ); - }; - - $approved_condition = sub { - my $hash = shift; - $hash->{'etgcode'} eq '00' && $hash->{'result'} eq "Approved"; - }; - - $declined_condition = sub { - my $hash = shift; - $hash->{'etgcode'} ne '00' # internal processing error - || ( $hash->{'result'} eq "Declined" ); - }; - - - }elsif ( $format eq 'PAP' ) { - - $filetype = "Fixed264"; - - @fields = ( - 'recordtype', # We are interested in the 'D' or debit records - 'batchnum', # Record#: batch number we used when sending the file - 'datacenter', # Where in the bowels of the bank the data was processed - 'paid', # Amount: Amount of the transaction. Dollars and cents - # with no decimal entered. - '_date', # Transaction Date: Date the Transaction was processed - 'bank', # Routing information - 'payinfo', # Account number for the transaction - 'paybatchnum', # Reference#: Invoice number of the transaction - ); - - $formatre = '^(.).{19}(.{4})(.{3})(.{10})(.{6})(.{9})(.{12}).{110}(.{19}).{71}$'; - - $end_condition = sub { - my $hash = shift; - $hash->{'recordtype'} eq 'W'; - }; - - $end_hook = sub { - my( $hash, $total) = @_; - $total = sprintf("%.2f", $total); - my $batch_total = $hash->{'datacenter'}.$hash->{'paid'}. - substr($hash->{'_date'},0,1); # YUCK! - $batch_total = sprintf("%.2f", $batch_total / 100 ); - return "Our total $total does not match bank total $batch_total!" - if $total != $batch_total; - ''; - }; - - $hook = sub { - my $hash = shift; - $hash->{'paid'} = sprintf("%.2f", $hash->{'paid'} / 100 ); - my $tmpdate = timelocal( 0,0,1,1,0,substr($hash->{'_date'}, 0, 3)+2000); - $tmpdate += 86400*(substr($hash->{'_date'}, 3, 3)-1) ; - $hash->{'_date'} = $tmpdate; - $hash->{'payinfo'} = $hash->{'payinfo'} . '@' . $hash->{'bank'}; - }; - - $approved_condition = sub { - 1; - }; - - $declined_condition = sub { - 0; - }; - - }elsif ( $format eq 'ach-spiritone' ) { - - $filetype = "CSV"; - - @fields = ( - '', # Name - 'paybatchnum', # ID: Number of the transaction - 'aba', # ABA Number for the transaction - 'payinfo', # Bank Account Number for the transaction - '', # Transaction Type: 27 - debit - 'paid', # Amount: Amount of the transaction. Dollars and cents - # with decimal entered. - '', # Default Transaction Type - '', # Default Amount: Dollars and cents with decimal entered. - ); - - $end_condition = sub { - ''; - }; - - $hook = sub { - my $hash = shift; - $hash->{'_date'} = time; # got a better one? - $hash->{'payinfo'} = $hash->{'payinfo'} . '@' . $hash->{'aba'}; - }; - - $approved_condition = sub { - 1; - }; - - $declined_condition = sub { - 0; - }; - - - } else { - return "Unknown format $format"; - } - - my $csv = new Text::CSV_XS; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $reself = $self->select_for_update; - - unless ( $reself->status eq 'I' ) { - $dbh->rollback if $oldAutoCommit; - return "batchnum ". $self->batchnum. "no longer in transit"; - }; - - my $error = $self->set_status('R'); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error - } - - my $total = 0; - my $line; - while ( defined($line=<$fh>) ) { - - next if $line =~ /^\s*$/; #skip blank lines - - if ($filetype eq "CSV") { - $csv->parse($line) or do { - $dbh->rollback if $oldAutoCommit; - return "can't parse: ". $csv->error_input(); - }; - @values = $csv->fields(); - }elsif ($filetype eq "Fixed80" || $filetype eq "Fixed264"){ - @values = $line =~ /$formatre/; - unless (@values) { - $dbh->rollback if $oldAutoCommit; - return "can't parse: ". $line; - }; - }else{ - $dbh->rollback if $oldAutoCommit; - return "Unknown file type $filetype"; - } - - my %hash; - foreach my $field ( @fields ) { - my $value = shift @values; - next unless $field; - $hash{$field} = $value; - } - - if ( &{$end_condition}(\%hash) ) { - my $error = &{$end_hook}(\%hash, $total); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - last; - } - - my $cust_pay_batch = - qsearchs('cust_pay_batch', { 'paybatchnum' => $hash{'paybatchnum'}+0 } ); - unless ( $cust_pay_batch ) { - return "unknown paybatchnum $hash{'paybatchnum'}\n"; - } - my $custnum = $cust_pay_batch->custnum, - my $payby = $cust_pay_batch->payby, - - my $new_cust_pay_batch = new FS::cust_pay_batch { $cust_pay_batch->hash }; - - &{$hook}(\%hash, $cust_pay_batch->hashref); - - if ( &{$approved_condition}(\%hash) ) { - - $new_cust_pay_batch->status('Approved'); - - } elsif ( &{$declined_condition}(\%hash) ) { - - $new_cust_pay_batch->status('Declined'); - - } - - my $error = $new_cust_pay_batch->replace($cust_pay_batch); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error updating status of paybatchnum $hash{'paybatchnum'}: $error\n"; - } - - if ( $new_cust_pay_batch->status =~ /Approved/i ) { - - my $cust_pay = new FS::cust_pay ( { - 'custnum' => $custnum, - 'payby' => $payby, - 'paybatch' => $self->batchnum, - map { $_ => $hash{$_} } (qw( paid _date payinfo )), - } ); - $error = $cust_pay->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error adding payment paybatchnum $hash{'paybatchnum'}: $error\n"; - } - $total += $hash{'paid'}; - - $cust_pay->cust_main->apply_payments; - - } elsif ( $new_cust_pay_batch->status =~ /Declined/i ) { - - #false laziness w/cust_main::collect - - my $due_cust_event = $new_cust_pay_batch->cust_main->due_cust_event( - #'check_freq' => '1d', #? - 'eventtable' => 'cust_pay_batch', - 'objects' => [ $new_cust_pay_batch ], - ); - unless( ref($due_cust_event) ) { - $dbh->rollback if $oldAutoCommit; - return $due_cust_event; - } - - foreach my $cust_event ( @$due_cust_event ) { - - #XXX lock event - - #re-eval event conditions (a previous event could have changed things) - next unless $cust_event->test_conditions; - - if ( my $error = $cust_event->do_event() ) { - # gah, even with transactions. - #$dbh->commit if $oldAutoCommit; #well. - $dbh->rollback if $oldAutoCommit; - return $error; - } - - } - - } - - - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=back - -=head1 BUGS - -status is somewhat redundant now that download and upload exist - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/payby.pm b/FS/FS/payby.pm deleted file mode 100644 index 6684c95f0..000000000 --- a/FS/FS/payby.pm +++ /dev/null @@ -1,185 +0,0 @@ -package FS::payby; - -use strict; -use vars qw(%hash %payby2bop); -use Tie::IxHash; -use Business::CreditCard; - - -=head1 NAME - -FS::payby - Object methods for payment type records - -=head1 SYNOPSIS - - use FS::payby; - - #for now... - - my @payby = FS::payby->payby; - - my $bool = FS::payby->can_payby('cust_main', 'CARD'); - - tie my %payby, 'Tie::IxHash', FS::payby->payby2longname - - my @cust_payby = FS::payby->cust_payby; - - tie my %payby, 'Tie::IxHash', FS::payby->cust_payby2longname - -=head1 DESCRIPTION - -Payment types. - -=head1 METHODS - -=over 4 - -=item - -=cut - -# paybys can be any/all of: -# - a customer payment type (cust_main.payby) -# - a payment or refund type (cust_pay.payby, cust_pay_batch.payby, cust_refund.payby) -# - an event type (part_bill_event.payby) - -tie %hash, 'Tie::IxHash', - 'CARD' => { - tinyname => 'card', - shortname => 'Credit card', - longname => 'Credit card (automatic)', - }, - 'DCRD' => { - tinyname => 'card', - shortname => 'Credit card', - longname => 'Credit card (on-demand)', - cust_pay => 'CARD', #this is a customer type only, payments are CARD... - }, - 'CHEK' => { - tinyname => 'check', - shortname => 'Electronic check', - longname => 'Electronic check (automatic)', - }, - 'DCHK' => { - tinyname => 'check', - shortname => 'Electronic check', - longname => 'Electronic check (on-demand)', - cust_pay => 'CHEK', #this is a customer type only, payments are CHEK... - }, - 'LECB' => { - tinyname => 'phone bill', - shortname => 'Phone bill billing', - longname => 'Phone bill billing', - }, - 'BILL' => { - tinyname => 'billing', - shortname => 'Billing', - longname => 'Billing', - }, - 'PREP' => { - tinyname => 'prepaid card', - shortname => 'Prepaid card', - longname => 'Prepaid card', - cust_main => 'BILL', #this is a payment type only, customers go to BILL... - }, - 'CASH' => { - tinyname => 'cash', - shortname => 'Cash', # initial payment, then billing - longname => 'Cash', - cust_main => 'BILL', #this is a payment type only, customers go to BILL... - }, - 'WEST' => { - tinyname => 'western union', - shortname => 'Western Union', # initial payment, then billing - longname => 'Western Union', - cust_main => 'BILL', #this is a payment type only, customers go to BILL... - }, - 'MCRD' => { #not the same as DCRD - tinyname => 'card', - shortname => 'Manual credit card', # initial payment, then billing - longname => 'Manual credit card', - cust_main => 'BILL', #this is a payment type only, customers go to BILL... - }, - 'COMP' => { - tinyname => 'comp', - shortname => 'Complimentary', - longname => 'Complimentary', - cust_pay => '', # (free) is depricated as a payment type in cust_pay - }, - 'CBAK' => { - tinyname => 'chargeback', - shortname => 'Chargeback', - longname => 'Chargeback', - cust_main => '', # not a customer type - }, -; - -sub payby { - keys %hash; -} - -sub can_payby { - my( $self, $table, $payby ) = @_; - - #return "Illegal payby" unless $hash{$payby}; - return 0 unless $hash{$payby}; - - $table = 'cust_pay' if $table eq 'cust_pay_batch' || $table eq 'cust_refund'; - return 0 if exists( $hash{$payby}->{$table} ); - - return 1; -} - -sub payby2longname { - my $self = shift; - map { $_ => $hash{$_}->{longname} } $self->payby; -} - -sub shortname { - my( $self, $payby ) = @_; - $hash{$payby}->{shortname}; -} - -sub longname { - my( $self, $payby ) = @_; - $hash{$payby}->{longname}; -} - -%payby2bop = ( - 'CARD' => 'CC', - 'CHEK' => 'ECHECK', -); - -sub payby2bop { - my( $self, $payby ) = @_; - $payby2bop{ $self->payby2payment($payby) }; -} - -sub payby2payment { - my( $self, $payby ) = @_; - $hash{$payby}{'cust_pay'} || $payby; -} - -sub cust_payby { - my $self = shift; - grep { ! exists $hash{$_}->{cust_main} } $self->payby; -} - -sub cust_payby2longname { - my $self = shift; - map { $_ => $hash{$_}->{longname} } $self->cust_payby; -} - -=back - -=head1 BUGS - -This should eventually be an actual database table, and all tables that -currently have a char payby field should have a foreign key into here instead. - -=head1 SEE ALSO - -=cut - -1; - diff --git a/FS/FS/payinfo_Mixin.pm b/FS/FS/payinfo_Mixin.pm deleted file mode 100644 index 15c4e3979..000000000 --- a/FS/FS/payinfo_Mixin.pm +++ /dev/null @@ -1,249 +0,0 @@ -package FS::payinfo_Mixin; - -use strict; -use Business::CreditCard; -use FS::payby; - -=head1 NAME - -FS::payinfo_Mixin - Mixin class for records in tables that contain payinfo. - -=head1 SYNOPSIS - -package FS::some_table; -use vars qw(@ISA); -@ISA = qw( FS::payinfo_Mixin FS::Record ); - -=head1 DESCRIPTION - -This is a mixin class for records that contain payinfo. - -This class handles the following functions for payinfo... - -Payment Mask (Generation and Storage) -Data Validation (parent checks need to be sure to call this) -Encryption - In the Future (Pull from Record.pm) -Bad Card Stuff - In the Future (Integrate Banned Pay) -Currency - In the Future - -=head1 FIELDS - -=over 4 - -=item payby - -The following payment types (payby) are supported: - -For Customers (cust_main): -'CARD' (credit card - automatic), 'DCRD' (credit card - on-demand), -'CHEK' (electronic check - automatic), 'DCHK' (electronic check - on-demand), -'LECB' (Phone bill billing), 'BILL' (billing), 'COMP' (free), or -'PREPAY' (special billing type: applies a credit and sets billing type to I - see L) - -For Refunds (cust_refund): -'CARD' (credit cards), 'CHEK' (electronic check/ACH), -'LECB' (Phone bill billing), 'BILL' (billing), 'CASH' (cash), -'WEST' (Western Union), 'MCRD' (Manual credit card), 'CBAK' Chargeback, or 'COMP' (free) - - -For Payments (cust_pay): -'CARD' (credit cards), 'CHEK' (electronic check/ACH), -'LECB' (phone bill billing), 'BILL' (billing), 'PREP' (prepaid card), -'CASH' (cash), 'WEST' (Western Union), or 'MCRD' (Manual credit card) -'COMP' (free) is depricated as a payment type in cust_pay - -=cut - -# was this supposed to do something? - -#sub payby { -# my($self,$payby) = @_; -# if ( defined($payby) ) { -# $self->setfield('payby', $payby); -# } -# return $self->getfield('payby') -#} - -=item payinfo - -Payment information (payinfo) can be one of the following types: - -Card Number, P.O., comp issuer (4-8 lowercase alphanumerics; think username) or prepayment identifier (see L) - -=cut - -sub payinfo { - my($self,$payinfo) = @_; - if ( defined($payinfo) ) { - $self->setfield('payinfo', $payinfo); # This is okay since we are the 'setter' - $self->paymask($self->mask_payinfo()); - } else { - $payinfo = $self->getfield('payinfo'); # This is okay since we are the 'getter' - return $payinfo; - } -} - -=item paycvv - -Card Verification Value, "CVV2" (also known as CVC2 or CID), the 3 or 4 digit number on the back (or front, for American Express) of the credit card - -=cut - -sub paycvv { - my($self,$paycvv) = @_; - # This is only allowed in cust_main... Even then it really shouldn't be stored... - if ($self->table eq 'cust_main') { - if ( defined($paycvv) ) { - $self->setfield('paycvv', $paycvv); # This is okay since we are the 'setter' - } else { - $paycvv = $self->getfield('paycvv'); # This is okay since we are the 'getter' - return $paycvv; - } - } else { -# warn "This doesn't work for other tables besides cust_main - ''; - } -} - -=item paymask - -=cut - -sub paymask { - my($self, $paymask) = @_; - - if ( defined($paymask) && $paymask ne '' ) { - # I hate this little bit of magic... I don't expect it to cause a problem, - # but who knows... If the payinfo is passed in masked then ignore it and - # set it based on the payinfo. The only guy that should call this in this - # way is... $self->payinfo - $self->setfield('paymask', $self->mask_payinfo()); - - } else { - - $paymask=$self->getfield('paymask'); - if (!defined($paymask) || $paymask eq '') { - # Generate it if it's blank - Note that we're not going to set it - just - # generate - $paymask = $self->mask_payinfo(); - } - - } - - return $paymask; -} - -=back - -=head1 METHODS - -=over 4 - -=item mask_payinfo [ PAYBY, PAYINFO ] - -This method converts the payment info (credit card, bank account, etc.) into a -masked string. - -Optionally, an arbitrary payby and payinfo can be passed. - -=cut - -sub mask_payinfo { - my $self = shift; - my $payby = scalar(@_) ? shift : $self->payby; - my $payinfo = scalar(@_) ? shift : $self->payinfo; - - # Check to see if it's encrypted... - my $paymask; - if ( $self->is_encrypted($payinfo) ) { - $paymask = 'N/A'; - } else { - # if not, mask it... - if ($payby eq 'CARD' || $payby eq 'DCRD' || $payby eq 'MCRD') { - # Credit Cards - my $conf = new FS::Conf; - my $mask_method = $conf->config('card_masking_method') || 'first6last4'; - $mask_method =~ /^first(\d+)last(\d+)$/ - or die "can't parse card_masking_method $mask_method"; - my($first, $last) = ($1, $2); - - $paymask = substr($payinfo,0,$first). - 'x'x(length($payinfo)-$first-$last). - substr($payinfo,(length($payinfo)-$last)); - } elsif ($payby eq 'CHEK' || $payby eq 'DCHK' ) { - # Checks (Show last 2 @ bank) - my( $account, $aba ) = split('@', $payinfo ); - $paymask = 'x'x(length($account)-2). - substr($account,(length($account)-2))."@".$aba; - } else { # Tie up loose ends - $paymask = $payinfo; - } - } - return $paymask; -} - -=cut - -sub _mask_payinfo { - my $self = shift; - -=item payinfo_check - -Checks payby and payinfo. - -For Customers (cust_main): -'CARD' (credit card - automatic), 'DCRD' (credit card - on-demand), -'CHEK' (electronic check - automatic), 'DCHK' (electronic check - on-demand), -'LECB' (Phone bill billing), 'BILL' (billing), 'COMP' (free), or -'PREPAY' (special billing type: applies a credit - see L and sets billing type to I) - -For Refunds (cust_refund): -'CARD' (credit cards), 'CHEK' (electronic check/ACH), -'LECB' (Phone bill billing), 'BILL' (billing), 'CASH' (cash), -'WEST' (Western Union), 'MCRD' (Manual credit card), 'CBAK' (Chargeback), or 'COMP' (free) - -For Payments (cust_pay): -'CARD' (credit cards), 'CHEK' (electronic check/ACH), -'LECB' (phone bill billing), 'BILL' (billing), 'PREP' (prepaid card), -'CASH' (cash), 'WEST' (Western Union), or 'MCRD' (Manual credit card) -'COMP' (free) is depricated as a payment type in cust_pay - -=cut - -sub payinfo_check { - my $self = shift; - - FS::payby->can_payby($self->table, $self->payby) - or return "Illegal payby: ". $self->payby; - - if ( $self->payby eq 'CARD' ) { - my $payinfo = $self->payinfo; - $payinfo =~ s/\D//g; - $self->payinfo($payinfo); - if ( $self->payinfo ) { - $self->payinfo =~ /^(\d{13,16})$/ - or return "Illegal (mistyped?) credit card number (payinfo)"; - $self->payinfo($1); - validate($self->payinfo) or return "Illegal credit card number"; - return "Unknown card type" if cardtype($self->payinfo) eq "Unknown"; - } else { - $self->payinfo('N/A'); - } - } else { - my $error = $self->ut_textn('payinfo'); - return $error if $error; - } -} - -=head1 BUGS - -Have to add the future items... - -=head1 SEE ALSO - -L, L - -=cut - -1; - diff --git a/FS/FS/payment_gateway.pm b/FS/FS/payment_gateway.pm deleted file mode 100644 index 35b4f0835..000000000 --- a/FS/FS/payment_gateway.pm +++ /dev/null @@ -1,200 +0,0 @@ -package FS::payment_gateway; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs dbh ); -use FS::option_Common; -use FS::agent_payment_gateway; - -@ISA = qw( FS::option_Common ); - -=head1 NAME - -FS::payment_gateway - Object methods for payment_gateway records - -=head1 SYNOPSIS - - use FS::payment_gateway; - - $record = new FS::payment_gateway \%hash; - $record = new FS::payment_gateway { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::payment_gateway object represents an payment gateway. -FS::payment_gateway inherits from FS::Record. The following fields are -currently supported: - -=over 4 - -=item gatewaynum - primary key - -=item gateway_module - Business::OnlinePayment:: module name - -=item gateway_username - payment gateway username - -=item gateway_password - payment gateway password - -=item gateway_action - optional action or actions (multiple actions are separated with `,': for example: `Authorization Only, Post Authorization'). Defaults to `Normal Authorization'. - -=item disabled - Disabled flag, empty or 'Y' - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new payment gateway. To add the payment gateway to the database, see -L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'payment_gateway'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid payment gateway. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('gatewaynum') - || $self->ut_alpha('gateway_module') - || $self->ut_textn('gateway_username') - || $self->ut_anything('gateway_password') - || $self->ut_enum('disabled', [ '', 'Y' ] ) - #|| $self->ut_textn('gateway_action') - ; - return $error if $error; - - if ( $self->gateway_action ) { - my @actions = split(/,\s*/, $self->gateway_action); - $self->gateway_action( - join( ',', map { /^(Normal Authorization|Authorization Only|Credit|Post Authorization)$/ - or return "Unknown action $_"; - $1 - } - @actions - ) - ); - } else { - $self->gateway_action('Normal Authorization'); - } - - $self->SUPER::check; -} - -=item agent_payment_gateway - -Returns any agent overrides for this payment gateway. - -=cut - -sub agent_payment_gateway { - my $self = shift; - qsearch('agent_payment_gateway', { 'gatewaynum' => $self->gatewaynum } ); -} - -=item disable - -Disables this payment gateway: deletes all associated agent_payment_gateway -overrides and sets the I field to "B". - -=cut - -sub disable { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $agent_payment_gateway ( $self->agent_payment_gateway ) { - my $error = $agent_payment_gateway->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error deleting agent_payment_gateway override: $error"; - } - } - - $self->disabled('Y'); - my $error = $self->replace(); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error disabling payment_gateway: $error"; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/payment_gateway_option.pm b/FS/FS/payment_gateway_option.pm deleted file mode 100644 index 057602291..000000000 --- a/FS/FS/payment_gateway_option.pm +++ /dev/null @@ -1,126 +0,0 @@ -package FS::payment_gateway_option; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::payment_gateway_option - Object methods for payment_gateway_option records - -=head1 SYNOPSIS - - use FS::payment_gateway_option; - - $record = new FS::payment_gateway_option \%hash; - $record = new FS::payment_gateway_option { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::payment_gateway_option object represents an option key and value for -a payment gateway. FS::payment_gateway_option inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item optionnum - primary key - -=item gatewaynum - - -=item optionname - - -=item optionvalue - - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new option. To add the option to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'payment_gateway_option'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid option. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('optionnum') - || $self->ut_foreign_key('gatewaynum', 'payment_gateway', 'gatewaynum') - || $self->ut_text('optionname') - || $self->ut_textn('optionvalue') - ; - return $error if $error; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/pkg_class.pm b/FS/FS/pkg_class.pm deleted file mode 100644 index bab6e5e56..000000000 --- a/FS/FS/pkg_class.pm +++ /dev/null @@ -1,113 +0,0 @@ -package FS::pkg_class; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch ); -use FS::part_pkg; - -@ISA = qw( FS::Record ); - -=head1 NAME - -FS::pkg_class - Object methods for pkg_class records - -=head1 SYNOPSIS - - use FS::pkg_class; - - $record = new FS::pkg_class \%hash; - $record = new FS::pkg_class { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::pkg_class object represents an package class. Every package definition -(see L) has, optionally, a package class. FS::pkg_class inherits -from FS::Record. The following fields are currently supported: - -=over 4 - -=item classnum - primary key (assigned automatically for new package classes) - -=item classname - Text name of this package class - -=item disabled - Disabled flag, empty or 'Y' - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new package class. To add the package class to the database, see -L<"insert">. - -=cut - -sub table { 'pkg_class'; } - -=item insert - -Adds this package class to the database. If there is an error, returns the -error, otherwise returns false. - -=item delete - -Deletes this package class from the database. Only package classes with no -associated package definitions can be deleted. If there is an error, returns -the error, otherwise returns false. - -=cut - -sub delete { - my $self = shift; - - return "Can't delete an pkg_class with part_pkg records!" - if qsearch( 'part_pkg', { 'classnum' => $self->classnum } ); - - $self->SUPER::delete; -} - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=item check - -Checks all fields to make sure this is a valid package class. If there is an -error, returns the error, otherwise returns false. Called by the insert and -replace methods. - -=cut - -sub check { - my $self = shift; - - $self->ut_numbern('classnum') - or $self->ut_text('classname') - or $self->SUPER::check; - -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/pkg_referral.pm b/FS/FS/pkg_referral.pm deleted file mode 100644 index 333c2bf8a..000000000 --- a/FS/FS/pkg_referral.pm +++ /dev/null @@ -1,126 +0,0 @@ -package FS::pkg_referral; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::pkg_referral - Object methods for pkg_referral records - -=head1 SYNOPSIS - - use FS::pkg_referral; - - $record = new FS::pkg_referral \%hash; - $record = new FS::pkg_referral { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::pkg_referral object represents the association of an advertising source -with a specific customer package (purchase). FS::pkg_referral inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item pkgrefnum - primary key - -=item pkgnum - Customer package. See L - -=item refnum - Advertising source. See L - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new record. To add the record to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'pkg_referral'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid record. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('pkgrefnum') - || $self->ut_foreign_key('pkgnum', 'cust_pkg', 'pkgnum' ) - || $self->ut_foreign_key('refnum', 'part_referral', 'refnum' ) - ; - return $error if $error; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -Multiple pkg_referral records for a single package (configured off by default) -still seems weird. - -=head1 SEE ALSO - -L, L, L, schema.html from the -base documentation. - -=cut - -1; - diff --git a/FS/FS/pkg_svc.pm b/FS/FS/pkg_svc.pm deleted file mode 100644 index 9f3a4a1b7..000000000 --- a/FS/FS/pkg_svc.pm +++ /dev/null @@ -1,160 +0,0 @@ -package FS::pkg_svc; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearchs ); -use FS::part_pkg; -use FS::part_svc; - -@ISA = qw( FS::Record ); - -=head1 NAME - -FS::pkg_svc - Object methods for pkg_svc records - -=head1 SYNOPSIS - - use FS::pkg_svc; - - $record = new FS::pkg_svc \%hash; - $record = new FS::pkg_svc { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $part_pkg = $record->part_pkg; - - $part_svc = $record->part_svc; - -=head1 DESCRIPTION - -An FS::pkg_svc record links a billing item definition (see L) to -a service definition (see L). FS::pkg_svc inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item pkgsvcnum - primary key - -=item pkgpart - Billing item definition (see L) - -=item svcpart - Service definition (see L) - -=item quantity - Quantity of this service definition that this billing item -definition includes - -=item primary_svc - primary flag, empty or 'Y' - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Create a new record. To add the record to the database, see L<"insert">. - -=cut - -sub table { 'pkg_svc'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=item delete - -Deletes this record from the database. If there is an error, returns the -error, otherwise returns false. - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -sub replace { - my( $new, $old ) = ( shift, shift ); - - $old = $new->replace_old unless defined($old); - - return "Can't change pkgpart!" if $old->pkgpart != $new->pkgpart; - return "Can't change svcpart!" if $old->svcpart != $new->svcpart; - - $new->SUPER::replace($old); -} - -=item check - -Checks all fields to make sure this is a valid record. If there is an error, -returns the error, otherwise returns false. Called by the insert and replace -methods. - -=cut - -sub check { - my $self = shift; - - my $error; - $error = - $self->ut_numbern('pkgsvcnum') - || $self->ut_number('pkgpart') - || $self->ut_number('svcpart') - || $self->ut_number('quantity') - ; - return $error if $error; - - return "Unknown pkgpart!" unless $self->part_pkg; - return "Unknown svcpart!" unless $self->part_svc; - - if ( $self->dbdef_table->column('primary_svc') ) { - $error = $self->ut_enum('primary_svc', [ '', 'Y' ] ); - return $error if $error; - } - - $self->SUPER::check; -} - -=item part_pkg - -Returns the FS::part_pkg object (see L). - -=cut - -sub part_pkg { - my $self = shift; - qsearchs( 'part_pkg', { 'pkgpart' => $self->pkgpart } ); -} - -=item part_svc - -Returns the FS::part_svc object (see L). - -=cut - -sub part_svc { - my $self = shift; - qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } ); -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/FS/port.pm b/FS/FS/port.pm deleted file mode 100644 index c26ca85d4..000000000 --- a/FS/FS/port.pm +++ /dev/null @@ -1,154 +0,0 @@ -package FS::port; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearchs ); -use FS::nas; -use FS::session; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::port - Object methods for port records - -=head1 SYNOPSIS - - use FS::port; - - $record = new FS::port \%hash; - $record = new FS::port { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $session = $port->session; - -=head1 DESCRIPTION - -An FS::port object represents an individual port on a NAS. FS::port inherits -from FS::Record. The following fields are currently supported: - -=over 4 - -=item portnum - primary key - -=item ip - IP address of this port - -=item nasport - port number on the NAS - -=item nasnum - NAS this port is on - see L - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new port. To add the port to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'port'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid port. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - my $error = - $self->ut_numbern('portnum') - || $self->ut_ipn('ip') - || $self->ut_numbern('nasport') - || $self->ut_number('nasnum'); - ; - return $error if $error; - return "Either ip or nasport must be specified" - unless $self->ip || $self->nasport; - return "Unknown nasnum" - unless qsearchs('nas', { 'nasnum' => $self->nasnum } ); - $self->SUPER::check; -} - -=item session - -Returns the currently open session on this port, or if no session is currently -open, the most recent session. See L. - -=cut - -sub session { - my $self = shift; - qsearchs('session', { 'portnum' => $self->portnum }, '*', - 'ORDER BY login DESC LIMIT 1' ); -} - -=back - -=head1 BUGS - -The session method won't deal well if you have multiple open sessions on a -port, for example if your RADIUS server drops B records. Suggestions for -how to deal with this sort of lossage welcome; should we close the session -when we get a new session on that port? Tag it as invalid somehow? Close it -one second after it was opened? *sigh* Maybe FS::session shouldn't let you -create overlapping sessions, at least folks will find out their logging is -dropping records. - -If you think the above refers multiple user logins you need to read the -manpages again. - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/prepay_credit.pm b/FS/FS/prepay_credit.pm deleted file mode 100644 index 302ba37c7..000000000 --- a/FS/FS/prepay_credit.pm +++ /dev/null @@ -1,202 +0,0 @@ -package FS::prepay_credit; - -use strict; -use vars qw( @ISA ); -use FS::Record qw(qsearchs dbh); -use FS::agent; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::prepay_credit - Object methods for prepay_credit records - -=head1 SYNOPSIS - - use FS::prepay_credit; - - $record = new FS::prepay_credit \%hash; - $record = new FS::prepay_credit { - 'identifier' => '4198123455512121' - 'amount' => '19.95', - }; - - $record = new FS::prepay_credit { - 'identifier' => '4198123455512121' - 'seconds' => '7200', - }; - - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::prepay_credit object represents a pre-paid card. FS::prepay_credit -inherits from FS::Record. The following -fields are currently supported: - -=over 4 - -=item field - description - -=item identifier - identifier entered by the user to receive the credit - -=item amount - amount of the credit - -=item seconds - time amount of credit (see L) - -=item agentnum - optional agent (see L) for this prepaid card - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new pre-paid credit. To add the pre-paid credit to the database, see -L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -sub table { 'prepay_credit'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -=item delete - -Delete this record from the database. - -=cut - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -=item check - -Checks all fields to make sure this is a valid pre-paid credit. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - my $identifier = $self->identifier; - $identifier =~ s/\W//g; #anything else would just confuse things - $self->identifier($identifier); - - $self->ut_numbern('prepaynum') - || $self->ut_alpha('identifier') - || $self->ut_money('amount') - || $self->ut_numbern('seconds') - || $self->ut_numbern('upbytes') - || $self->ut_numbern('downbytes') - || $self->ut_numbern('totalbytes') - || $self->ut_foreign_keyn('agentnum', 'agent', 'agentnum') - || $self->SUPER::check - ; - -} - -=item agent - -Returns the agent (see L) for this prepaid card, if any. - -=cut - -sub agent { - my $self = shift; - qsearchs('agent', { 'agentnum' => $self->agentnum } ); -} - -=back - -=head1 SUBROUTINES - -=over 4 - -=item generate NUM TYPE HASHREF - -Generates the specified number of prepaid cards. Returns an array reference of -the newly generated card identifiers, or a scalar error message. - -=cut - -#false laziness w/agent::generate_reg_codes -sub generate { - my( $num, $type, $hashref ) = @_; - - my @codeset = (); - push @codeset, ( 'A'..'Z' ) if $type =~ /alpha/; - push @codeset, ( '1'..'9' ) if $type =~ /numeric/; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $condup = 0; #don't retry forever - - my @cards = (); - for ( 1 ... $num ) { - - my $identifier = join('', map($codeset[int(rand $#codeset)], (0..7) ) ); - - redo if qsearchs('prepay_credit',{identifier=>$identifier}) && $condup++<23; - $condup = 0; - - my $prepay_credit = new FS::prepay_credit { - 'identifier' => $identifier, - %$hashref, - }; - my $error = $prepay_credit->check || $prepay_credit->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "(inserting prepay_credit) $error"; - } - push @cards, $prepay_credit->identifier; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - \@cards; - -} - -=head1 BUGS - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/queue.pm b/FS/FS/queue.pm deleted file mode 100644 index 5f8bf11f0..000000000 --- a/FS/FS/queue.pm +++ /dev/null @@ -1,465 +0,0 @@ -package FS::queue; - -use strict; -use vars qw( @ISA @EXPORT_OK $DEBUG $conf $jobnums); -use Exporter; -use FS::UID qw(myconnect); -use FS::Conf; -use FS::Record qw( qsearch qsearchs dbh ); -#use FS::queue; -use FS::queue_arg; -use FS::queue_depend; -use FS::cust_svc; - -@ISA = qw(FS::Record); -@EXPORT_OK = qw( joblisting ); - -$DEBUG = 0; - -$FS::UID::callback{'FS::queue'} = sub { - $conf = new FS::Conf; -}; - -$jobnums = ''; - -=head1 NAME - -FS::queue - Object methods for queue records - -=head1 SYNOPSIS - - use FS::queue; - - $record = new FS::queue \%hash; - $record = new FS::queue { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::queue object represents an queued job. FS::queue inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item jobnum - primary key - -=item job - fully-qualified subroutine name - -=item status - job status - -=item statustext - freeform text status message - -=item _date - UNIX timestamp - -=item svcnum - optional link to service (see L) - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new job. To add the job to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'queue'; } - -=item insert [ ARGUMENT, ARGUMENT... ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -If any arguments are supplied, a queue_arg record for each argument is also -created (see L). - -=cut - -#false laziness w/part_export.pm -sub insert { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - foreach my $arg ( @_ ) { - my $queue_arg = new FS::queue_arg ( { - 'jobnum' => $self->jobnum, - 'arg' => $arg, - } ); - $error = $queue_arg->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - if ( $jobnums ) { - warn "jobnums global is active: $jobnums\n" if $DEBUG; - push @$jobnums, $self->jobnum; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item delete - -Delete this record from the database. Any corresponding queue_arg records are -deleted as well - -=cut - -sub delete { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my @del = qsearch( 'queue_arg', { 'jobnum' => $self->jobnum } ); - push @del, qsearch( 'queue_depend', { 'depend_jobnum' => $self->jobnum } ); - - my $error = $self->SUPER::delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - foreach my $del ( @del ) { - $error = $del->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid job. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - my $error = - $self->ut_numbern('jobnum') - || $self->ut_anything('job') - || $self->ut_numbern('_date') - || $self->ut_enum('status',['', qw( new locked failed )]) - || $self->ut_anything('statustext') - || $self->ut_numbern('svcnum') - ; - return $error if $error; - - $error = $self->ut_foreign_keyn('svcnum', 'cust_svc', 'svcnum'); - $self->svcnum('') if $error; - - $self->status('new') unless $self->status; - $self->_date(time) unless $self->_date; - - $self->SUPER::check; -} - -=item args - -Returns a list of the arguments associated with this job. - -=cut - -sub args { - my $self = shift; - map $_->arg, qsearch( 'queue_arg', - { 'jobnum' => $self->jobnum }, - '', - 'ORDER BY argnum' - ); -} - -=item cust_svc - -Returns the FS::cust_svc object associated with this job, if any. - -=cut - -sub cust_svc { - my $self = shift; - qsearchs('cust_svc', { 'svcnum' => $self->svcnum } ); -} - -=item queue_depend - -Returns the FS::queue_depend objects associated with this job, if any. -(Dependancies that must complete before this job can be run). - -=cut - -sub queue_depend { - my $self = shift; - qsearch('queue_depend', { 'jobnum' => $self->jobnum } ); -} - -=item depend_insert OTHER_JOBNUM - -Inserts a dependancy for this job - it will not be run until the other job -specified completes. If there is an error, returns the error, otherwise -returns false. - -When using job dependancies, you should wrap the insertion of all relevant jobs -in a database transaction. - -=cut - -sub depend_insert { - my($self, $other_jobnum) = @_; - my $queue_depend = new FS::queue_depend ( { - 'jobnum' => $self->jobnum, - 'depend_jobnum' => $other_jobnum, - } ); - $queue_depend->insert; -} - -=item queue_depended - -Returns the FS::queue_depend objects that associate other jobs with this job, -if any. (The jobs that are waiting for this job to complete before they can -run). - -=cut - -sub queue_depended { - my $self = shift; - qsearch('queue_depend', { 'depend_jobnum' => $self->jobnum } ); -} - -=item depended_delete - -Deletes the other queued jobs (FS::queue objects) that are waiting for this -job, if any. If there is an error, returns the error, otherwise returns false. - -=cut - -sub depended_delete { - my $self = shift; - my $error; - foreach my $job ( - map { qsearchs('queue', { 'jobnum' => $_->jobnum } ) } $self->queue_depended - ) { - $error = $job->depended_delete; - return $error if $error; - $error = $job->delete; - return $error if $error - } -} - -=item update_statustext VALUE - -Updates the statustext value of this job to supplied value, in the database. -If there is an error, returns the error, otherwise returns false. - -=cut - -use vars qw($_update_statustext_dbh); -sub update_statustext { - my( $self, $statustext ) = @_; - return '' if $statustext eq $self->statustext; - warn "updating statustext for $self to $statustext" if $DEBUG; - - $_update_statustext_dbh ||= myconnect; - - my $sth = $_update_statustext_dbh->prepare( - 'UPDATE queue set statustext = ? WHERE jobnum = ?' - ) or return $_update_statustext_dbh->errstr; - - $sth->execute($statustext, $self->jobnum) or return $sth->errstr; - $_update_statustext_dbh->commit or die $_update_statustext_dbh->errstr; - $self->statustext($statustext); - ''; - - #my $new = new FS::queue { $self->hash }; - #$new->statustext($statustext); - #my $error = $new->replace($self); - #return $error if $error; - #$self->statustext($statustext); - #''; -} - -=back - -=head1 SUBROUTINES - -=over 4 - -=item joblisting HASHREF NOACTIONS - -=cut - -sub joblisting { - my($hashref, $noactions) = @_; - - use Date::Format; - use HTML::Entities; - use FS::CGI; - - my @queue = qsearch( 'queue', $hashref ); - return '' unless scalar(@queue); - - my $p = FS::CGI::popurl(2); - - my $html = qq!
    !. - FS::CGI::table(). < - Job - Args - Date - Status -END - $html .= 'Account' unless $hashref->{svcnum}; - $html .= ''; - - my $dangerous = $conf->exists('queue_dangerous_controls'); - - my $areboxes = 0; - - foreach my $queue ( sort { - $a->getfield('jobnum') <=> $b->getfield('jobnum') - } @queue ) { - my $queue_hashref = $queue->hashref; - my $jobnum = $queue->jobnum; - - my $args; - if ( $dangerous || $queue->job !~ /^FS::part_export::/ || !$noactions ) { - $args = encode_entities( join(' ', $queue->args) ); - } else { - $args = ''; - } - - my $date = time2str( "%a %b %e %T %Y", $queue->_date ); - my $status = $queue->status; - $status .= ': '. $queue->statustext if $queue->statustext; - my @queue_depend = $queue->queue_depend; - $status .= ' (waiting for '. - join(', ', map { $_->depend_jobnum } @queue_depend ). - ')' - if @queue_depend; - my $changable = $dangerous - || ( ! $noactions && $status =~ /^failed/ || $status =~ /^locked/ ); - if ( $changable ) { - $status .= - qq! ( retry |!. - qq! remove )!; - } - my $cust_svc = $queue->cust_svc; - - $html .= < - $jobnum - $queue_hashref->{job} - $args - $date - $status -END - - unless ( $hashref->{svcnum} ) { - my $account; - if ( $cust_svc ) { - my $table = $cust_svc->part_svc->svcdb; - my $label = ( $cust_svc->label )[1]; - $account = qq!$label!; - } else { - $account = ''; - } - $html .= "$account"; - } - - if ( $changable ) { - $areboxes=1; - $html .= - qq!!; - - } - - $html .= ''; - -} - - $html .= ''; - - if ( $areboxes ) { - $html .= '
    '. - '
    '; - } - - $html; - -} - -=back - -=head1 BUGS - -$jobnums global - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/queue_arg.pm b/FS/FS/queue_arg.pm deleted file mode 100644 index c96ff1236..000000000 --- a/FS/FS/queue_arg.pm +++ /dev/null @@ -1,117 +0,0 @@ -package FS::queue_arg; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::queue_arg - Object methods for queue_arg records - -=head1 SYNOPSIS - - use FS::queue_arg; - - $record = new FS::queue_arg \%hash; - $record = new FS::queue_arg { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::queue_arg object represents job argument. FS::queue_arg inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item argnum - primary key - -=item jobnum - see L - -=item arg - argument - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new argument. To add the argument to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'queue_arg'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid argument. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - my $error = - $self->ut_numbern('argnum') - || $self->ut_numbern('jobnum') - || $self->ut_anything('arg') - ; - return $error if $error; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/queue_depend.pm b/FS/FS/queue_depend.pm deleted file mode 100644 index 99a22c5c6..000000000 --- a/FS/FS/queue_depend.pm +++ /dev/null @@ -1,121 +0,0 @@ -package FS::queue_depend; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); -use FS::queue; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::queue_depend - Object methods for queue_depend records - -=head1 SYNOPSIS - - use FS::queue_depend; - - $record = new FS::queue_depend \%hash; - $record = new FS::queue_depend { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::queue_depend object represents an job dependancy. FS::queue_depend -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item dependnum - primary key - -=item jobnum - source jobnum (see L). - -=item depend_jobnum - dependancy jobnum (see L) - -=back - -The job specified by B depends on the job specified B - -the B job will not be run until the B job has completed -successfully (or manually removed). - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new dependancy. To add the dependancy to the database, see -L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'queue_depend'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid dependancy. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - $self->ut_numbern('dependnum') - || $self->ut_foreign_key('jobnum', 'queue', 'jobnum') - || $self->ut_foreign_key('depend_jobnum', 'queue', 'jobnum') - || $self->SUPER::check - ; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/raddb.pm b/FS/FS/raddb.pm deleted file mode 100644 index 506b32568..000000000 --- a/FS/FS/raddb.pm +++ /dev/null @@ -1,1912 +0,0 @@ -package FS::raddb; -use vars qw(%attrib); - -%attrib = ( - '3com_user_access_level' => '3Com-User-Access-Level', - '3gpp2_accounting_contain' => '3GPP2-Accounting-Container', - '3gpp2_acct_stop_trigger' => '3GPP2-Acct-Stop-Trigger', - '3gpp2_active_time' => '3GPP2-Active-Time', - '3gpp2_airlink_priority' => '3GPP2-Airlink-Priority', - '3gpp2_airlink_record_typ' => '3GPP2-Airlink-Record-Type', - '3gpp2_airlink_sequence_n' => '3GPP2-Airlink-Sequence-Number', - '3gpp2_allowed_diffserv_m' => '3GPP2-Allowed-Diffserv-Marking', - '3gpp2_allowed_persistent' => '3GPP2-Allowed-Persistent-TFTs', - '3gpp2_bad_ppp_frame_coun' => '3GPP2-Bad-PPP-Frame-Count', - '3gpp2_begin_session' => '3GPP2-Begin-Session', - '3gpp2_bsid' => '3GPP2-BSID', - '3gpp2_compulsory_tunnel_' => '3GPP2-Compulsory-Tunnel-Indicator', - '3gpp2_correlation_id' => '3GPP2-Correlation-Id', - '3gpp2_dcch_frame_size' => '3GPP2-DCCH-Frame-Size', - '3gpp2_diffserv_class_opt' => '3GPP2-Diffserv-Class-Option', - '3gpp2_disconnect_reason' => '3GPP2-Disconnect-Reason', - '3gpp2_dns_update_capabil' => '3GPP2-DNS-Update-Capability', - '3gpp2_dns_update_require' => '3GPP2-DNS-Update-Required', - '3gpp2_esn' => '3GPP2-ESN', - '3gpp2_fch_frame_size' => '3GPP2-FCH-Frame-Size', - '3gpp2_foreign_agent_addr' => '3GPP2-Foreign-Agent-Address', - '3gpp2_forward_dcch_mux_o' => '3GPP2-Forward-DCCH-Mux-Option', - '3gpp2_forward_dcch_rc' => '3GPP2-Forward-DCCH-RC', - '3gpp2_forward_fch_mux_op' => '3GPP2-Forward-FCH-Mux-Option', - '3gpp2_forward_fch_rc' => '3GPP2-Forward-FCH-RC', - '3gpp2_forward_pdch_rc' => '3GPP2-Forward-PDCH-RC', - '3gpp2_forward_traffic_ty' => '3GPP2-Forward-Traffic-Type', - '3gpp2_home_agent_ip_addr' => '3GPP2-Home-Agent-IP-Address', - '3gpp2_ike_preshared_secr' => '3GPP2-Ike-Preshared-Secret-Request', - '3gpp2_inbound_mobile_ip_' => '3GPP2-Inbound-Mobile-IP-Sig-Octets', - '3gpp2_ip_qos' => '3GPP2-IP-QoS', - '3gpp2_ip_technology' => '3GPP2-IP-Technology', - '3gpp2_keyid' => '3GPP2-KeyID', - '3gpp2_last_user_activity' => '3GPP2-Last-User-Activity-Time', - '3gpp2_mip_lifetime' => '3GPP2-MIP-Lifetime', - '3gpp2_mn_aaa_removal_ind' => '3GPP2-MN-AAA-Removal-Indication', - '3gpp2_mn_ha_shared_key' => '3GPP2-MN-HA-Shared-Key', - '3gpp2_mn_ha_spi' => '3GPP2-MN-HA-SPI', - '3gpp2_module_orig_term_i' => '3GPP2-Module-Orig-Term-Indicator', - '3gpp2_number_active_tran' => '3GPP2-Number-Active-Transitions', - '3gpp2_originating_number' => '3GPP2-Originating-Number-SDBs', - '3gpp2_originating_sdb_oc' => '3GPP2-Originating-SDB-OCtet-Count', - '3gpp2_outbound_mobile_ip' => '3GPP2-Outbound-Mobile-IP-Sig-Octets', - '3gpp2_pcf_ip_address' => '3GPP2-PCF-IP-Address', - '3gpp2_pre_shared_secret' => '3GPP2-Pre-Shared-Secret', - '3gpp2_prepaid_acct_capab' => '3GPP2-Prepaid-acct-Capability', - '3gpp2_prepaid_acct_quota' => '3GPP2-Prepaid-Acct-Quota', - '3gpp2_prepaid_tariff_swi' => '3GPP2-PrePaid-Tariff-Switching', - '3gpp2_received_hdlc_octe' => '3GPP2-Received-HDLC-Octets', - '3gpp2_release_indicator' => '3GPP2-Release-Indicator', - '3gpp2_remote_address_tab' => '3GPP2-Remote-Address-Table-Index', - '3gpp2_remote_ip_address' => '3GPP2-Remote-IP-Address', - '3gpp2_remote_ipv4_addr_o' => '3GPP2-Remote-IPv4-Addr-Octet-Count', - '3gpp2_remote_ipv6_addres' => '3GPP2-Remote-IPv6-Address', - '3gpp2_remote_ipv6_octet_' => '3GPP2-Remote-IPv6-Octet-Count', - '3gpp2_reverse_dcch_mux_o' => '3GPP2-Reverse-DCCH-Mux-Option', - '3gpp2_reverse_dhhc_rc' => '3GPP2-Reverse-DHHC-RC', - '3gpp2_reverse_fch_mux_op' => '3GPP2-Reverse-FCH-Mux-Option', - '3gpp2_reverse_fch_rc' => '3GPP2-Reverse-FCH-RC', - '3gpp2_reverse_traffic_ty' => '3GPP2-Reverse-Traffic-Type', - '3gpp2_reverse_tunnel_spe' => '3GPP2-Reverse-Tunnel-Spec', - '3gpp2_rn_packet_data_ina' => '3GPP2-RN-Packet-Data-Inactivity-Timer', - '3gpp2_s_key' => '3GPP2-S-Key', - '3gpp2_s_lifetime' => '3GPP2-S-Lifetime', - '3gpp2_s_request' => '3GPP2-S-Request', - '3gpp2_security_level' => '3GPP2-Security-Level', - '3gpp2_service_option' => '3GPP2-Service-Option', - '3gpp2_service_option_pro' => '3GPP2-Service-Option-Profile', - '3gpp2_service_reference_' => '3GPP2-Service-Reference-Id', - '3gpp2_session_continue' => '3GPP2-Session-Continue', - '3gpp2_session_terminatio' => '3GPP2-Session-Termination-Capability', - '3gpp2_terminating_number' => '3GPP2-Terminating-Number-SDBs', - '3gpp2_terminating_sdb_oc' => '3GPP2-Terminating-SDB-Octet-Count', - '3gpp2_user_id' => '3GPP2-User-Id', - '3gpp_charging_characteri' => '3GPP-Charging-Characteristics', - '3gpp_charging_gateway_ad' => '3GPP-Charging-Gateway-Address', - '3gpp_charging_gateway_ip' => '3GPP-Charging-Gateway-IPv6-Address', - '3gpp_charging_id' => '3GPP-Charging-ID', - '3gpp_ggsn_address' => '3GPP-GGSN-Address', - '3gpp_ggsn_ipv6_address' => '3GPP-GGSN-IPv6-Address', - '3gpp_ggsn_mcc_mnc' => '3GPP-GGSN-MCC-MNC', - '3gpp_gprs_negotiated_qos' => '3GPP-GPRS-Negotiated-QoS-profile', - '3gpp_imsi' => '3GPP-IMSI', - '3gpp_imsi_mcc_mnc' => '3GPP-IMSI-MCC-MNC', - '3gpp_ipv6_dns_servers' => '3GPP-IPv6-DNS-Servers', - '3gpp_nsapi' => '3GPP-NSAPI', - '3gpp_pdp_type' => '3GPP-PDP-Type', - '3gpp_selection_mode' => '3GPP-Selection-Mode', - '3gpp_session_stop_indica' => '3GPP-Session-Stop-Indicator', - '3gpp_sgsn_address' => '3GPP-SGSN-Address', - '3gpp_sgsn_ipv6_address' => '3GPP-SGSN-IPv6-Address', - 'aat_assign_ip_pool' => 'AAT-Assign-IP-Pool', - 'aat_atm_direct' => 'AAT-ATM-Direct', - 'aat_atm_traffic_profile' => 'AAT-ATM-Traffic-Profile', - 'aat_atm_vci' => 'AAT-ATM-VCI', - 'aat_atm_vpi' => 'AAT-ATM-VPI', - 'aat_client_primary_dns' => 'AAT-Client-Primary-DNS', - 'aat_client_primary_wins_' => 'AAT-Client-Primary-WINS-NBNS', - 'aat_client_secondary_win' => 'AAT-Client-Secondary-WINS-NBNS', - 'aat_data_filter' => 'AAT-Data-Filter', - 'aat_input_octets_diff' => 'AAT-Input-Octets-Diff', - 'aat_ip_pool_definition' => 'AAT-IP-Pool-Definition', - 'aat_ip_tos' => 'AAT-IP-TOS', - 'aat_ip_tos_apply_to' => 'AAT-IP-TOS-Apply-To', - 'aat_ip_tos_precedence' => 'AAT-IP-TOS-Precedence', - 'aat_mcast_client' => 'AAT-MCast-Client', - 'aat_output_octets_diff' => 'AAT-Output-Octets-Diff', - 'aat_ppp_address' => 'AAT-PPP-Address', - 'aat_require_auth' => 'AAT-Require-Auth', - 'aat_source_ip_check' => 'AAT-Source-IP-Check', - 'aat_user_mac_address' => 'AAT-User-MAC-Address', - 'aat_vrouter_name' => 'AAT-Vrouter-Name', - 'acc_access_community' => 'Acc-Access-Community', - 'acc_access_partition' => 'Acc-Access-Partition', - 'acc_acct_on_off_reason' => 'Acc-Acct-On-Off-Reason', - 'acc_ace_token' => 'Acc-Ace-Token', - 'acc_ace_token_ttl' => 'Acc-Ace-Token-Ttl', - 'acc_apsm_oversubscribed' => 'Acc-Apsm-Oversubscribed', - 'acc_bridging_support' => 'Acc-Bridging-Support', - 'acc_callback_cbcp_type' => 'Acc-Callback-CBCP-Type', - 'acc_callback_delay' => 'Acc-Callback-Delay', - 'acc_callback_mode' => 'Acc-Callback-Mode', - 'acc_callback_num_valid' => 'Acc-Callback-Num-Valid', - 'acc_ccp_option' => 'Acc-Ccp-Option', - 'acc_clearing_cause' => 'Acc-Clearing-Cause', - 'acc_clearing_location' => 'Acc-Clearing-Location', - 'acc_connect_rx_speed' => 'Acc-Connect-Rx-Speed', - 'acc_connect_tx_speed' => 'Acc-Connect-Tx-Speed', - 'acc_customer_id' => 'Acc-Customer-Id', - 'acc_dial_port_index' => 'Acc-Dial-Port-Index', - 'acc_dialout_auth_mode' => 'Acc-Dialout-Auth-Mode', - 'acc_dialout_auth_passwor' => 'Acc-Dialout-Auth-Password', - 'acc_dialout_auth_usernam' => 'Acc-Dialout-Auth-Username', - 'acc_dns_server_pri' => 'Acc-Dns-Server-Pri', - 'acc_dns_server_sec' => 'Acc-Dns-Server-Sec', - 'acc_igmp_admin_state' => 'Acc-Igmp-Admin-State', - 'acc_igmp_version' => 'Acc-Igmp-Version', - 'acc_input_errors' => 'Acc-Input-Errors', - 'acc_ip_compression' => 'Acc-Ip-Compression', - 'acc_ip_gateway_pri' => 'Acc-Ip-Gateway-Pri', - 'acc_ip_gateway_sec' => 'Acc-Ip-Gateway-Sec', - 'acc_ip_pool_name' => 'Acc-Ip-Pool-Name', - 'acc_ipx_compression' => 'Acc-Ipx-Compression', - 'acc_ml_call_threshold' => 'Acc-ML-Call-Threshold', - 'acc_ml_clear_threshold' => 'Acc-ML-Clear-Threshold', - 'acc_ml_damping_factor' => 'Acc-ML-Damping-Factor', - 'acc_ml_mlx_admin_state' => 'Acc-ML-MLX-Admin-State', - 'acc_modem_error_protocol' => 'Acc-Modem-Error-Protocol', - 'acc_modem_modulation_typ' => 'Acc-Modem-Modulation-Type', - 'acc_nbns_server_pri' => 'Acc-Nbns-Server-Pri', - 'acc_nbns_server_sec' => 'Acc-Nbns-Server-Sec', - 'acc_output_errors' => 'Acc-Output-Errors', - 'acc_reason_code' => 'Acc-Reason-Code', - 'acc_request_type' => 'Acc-Request-Type', - 'acc_route_policy' => 'Acc-Route-Policy', - 'acc_service_profile' => 'Acc-Service-Profile', - 'acc_tunnel_port' => 'Acc-Tunnel-Port', - 'acc_tunnel_secret' => 'Acc-Tunnel-Secret', - 'acc_vpsm_reject_cause' => 'Acc-Vpsm-Reject-Cause', - 'acct_authentic' => 'Acct-Authentic', - 'acct_delay_time' => 'Acct-Delay-Time', - 'acct_dyn_ac_ent' => 'Acct_Dyn_Ac_Ent', - 'acct_dyn_ac_enu' => 'Acct-Dyn-Ac-Ent', - 'acct_input_gigawords' => 'Acct-Input-Gigawords', - 'acct_input_octets' => 'Acct-Input-Octets', - 'acct_input_octets_64' => 'Acct_Input_Octets_64', - 'acct_input_octets_65' => 'Acct-Input-Octets-64', - 'acct_input_packets' => 'Acct-Input-Packets', - 'acct_input_packets_64' => 'Acct_Input_Packets_64', - 'acct_input_packets_65' => 'Acct-Input-Packets-64', - 'acct_interim_interval' => 'Acct-Interim-Interval', - 'acct_link_count' => 'Acct-Link-Count', - 'acct_mcast_in_octets' => 'Acct_Mcast_In_Octets', - 'acct_mcast_in_octett' => 'Acct-Mcast-In-Octets', - 'acct_mcast_in_packets' => 'Acct_Mcast_In_Packets', - 'acct_mcast_in_packett' => 'Acct-Mcast-In-Packets', - 'acct_mcast_out_octets' => 'Acct_Mcast_Out_Octets', - 'acct_mcast_out_octett' => 'Acct-Mcast-Out-Octets', - 'acct_mcast_out_packets' => 'Acct_Mcast_Out_Packets', - 'acct_mcast_out_packett' => 'Acct-Mcast-Out-Packets', - 'acct_multi_session_id' => 'Acct-Multi-Session-Id', - 'acct_output_gigawords' => 'Acct-Output-Gigawords', - 'acct_output_octets' => 'Acct-Output-Octets', - 'acct_output_octets_64' => 'Acct_Output_Octets_64', - 'acct_output_octets_65' => 'Acct-Output-Octets-64', - 'acct_output_packets' => 'Acct-Output-Packets', - 'acct_output_packets_64' => 'Acct_Output_Packets_64', - 'acct_output_packets_65' => 'Acct-Output-Packets-64', - 'acct_session_gigawords' => 'Acct-Session-Gigawords', - 'acct_session_id' => 'Acct-Session-Id', - 'acct_session_input_gigaw' => 'Acct-Session-Input-Gigawords', - 'acct_session_input_octet' => 'Acct-Session-Input-Octets', - 'acct_session_octets' => 'Acct-Session-Octets', - 'acct_session_output_giga' => 'Acct-Session-Output-Gigawords', - 'acct_session_output_octe' => 'Acct-Session-Output-Octets', - 'acct_session_start_time' => 'Acct-Session-Start-Time', - 'acct_session_time' => 'Acct-Session-Time', - 'acct_status_type' => 'Acct-Status-Type', - 'acct_terminate_cause' => 'Acct-Terminate-Cause', - 'acct_tunnel_connection' => 'Acct-Tunnel-Connection', - 'acct_tunnel_packets_lost' => 'Acct-Tunnel-Packets-Lost', - 'acct_type' => 'Acct-Type', - 'acct_unique_session_id' => 'Acct-Unique-Session-Id', - 'add_prefix' => 'Add-Prefix', - 'add_suffix' => 'Add-Suffix', - 'alteon_service_type' => 'Alteon-Service-Type', - 'altiga_access_hours_g_u' => 'Altiga-Access-Hours-G/U', - 'altiga_allow_alpha_only_' => 'Altiga-Allow-Alpha-Only-Passwords-G', - 'altiga_ipsec_allow_passw' => 'Altiga-IPSec-Allow-Passwd-Store-G/U', - 'altiga_ipsec_authenticat' => 'Altiga-IPSec-Authentication-G', - 'altiga_ipsec_banner_g' => 'Altiga-IPSec-Banner-G', - 'altiga_ipsec_default_dom' => 'Altiga-IPSec-Default-Domain-G', - 'altiga_ipsec_l2l_keepali' => 'Altiga-IPSec-L2L-Keepalives-G', - 'altiga_ipsec_mode_config' => 'Altiga-IPSec-Mode-Config-G', - 'altiga_ipsec_over_nat_g' => 'Altiga-IPSec-Over-NAT-G', - 'altiga_ipsec_over_nat_po' => 'Altiga-IPSec-Over-NAT-Port-Num-G', - 'altiga_ipsec_sec_associa' => 'Altiga-IPSec-Sec-Association-G/U', - 'altiga_ipsec_secondary_d' => 'Altiga-IPSec-Secondary-Domains-G', - 'altiga_ipsec_split_tunne' => 'Altiga-IPSec-Split-Tunnel-List-G', - 'altiga_ipsec_tunnel_type' => 'Altiga-IPSec-Tunnel-Type-G', - 'altiga_ipsec_user_group_' => 'Altiga-IPSec-User-Group-Lock-G', - 'altiga_l2tp_encryption_g' => 'Altiga-L2TP-Encryption-G', - 'altiga_l2tp_min_authenti' => 'Altiga-L2TP-Min-Authentication-G/U', - 'altiga_min_password_leng' => 'Altiga-Min-Password-Length-G', - 'altiga_pptp_encryption_g' => 'Altiga-PPTP-Encryption-G', - 'altiga_pptp_min_authenti' => 'Altiga-PPTP-Min-Authentication-G/U', - 'altiga_primary_dns_g' => 'Altiga-Primary-DNS-G', - 'altiga_primary_wins_g' => 'Altiga-Primary-WINS-G', - 'altiga_priority_on_sep_g' => 'Altiga-Priority-on-SEP-G/U', - 'altiga_secondary_dns_g' => 'Altiga-Secondary-DNS-G', - 'altiga_secondary_wins_g' => 'Altiga-Secondary-WINS-G', - 'altiga_sep_card_assignme' => 'Altiga-SEP-Card-Assignment-G/U', - 'altiga_simultaneous_logi' => 'Altiga-Simultaneous-Logins-G/U', - 'altiga_tunneling_protoco' => 'Altiga-Tunneling-Protocols-G/U', - 'altiga_use_client_addres' => 'Altiga-Use-Client-Address-G/U', - 'annex_acct_servers' => 'Annex-Acct-Servers', - 'annex_addr_resolution_pr' => 'Annex-Addr-Resolution-Protocol', - 'annex_addr_resolution_se' => 'Annex-Addr-Resolution-Servers', - 'annex_audit_level' => 'Annex-Audit-Level', - 'annex_authen_servers' => 'Annex-Authen-Servers', - 'annex_begin_modulation' => 'Annex-Begin-Modulation', - 'annex_begin_receive_line' => 'Annex-Begin-Receive-Line-Level', - 'annex_callback_portlist' => 'Annex-Callback-Portlist', - 'annex_cli_command' => 'Annex-CLI-Command', - 'annex_cli_filter' => 'Annex-CLI-Filter', - 'annex_compression_protoc' => 'Annex-Compression-Protocol', - 'annex_connect_progress' => 'Annex-Connect-Progress', - 'annex_disconnect_reason' => 'Annex-Disconnect-Reason', - 'annex_domain_name' => 'Annex-Domain-Name', - 'annex_edo' => 'Annex-EDO', - 'annex_end_modulation' => 'Annex-End-Modulation', - 'annex_end_receive_line_l' => 'Annex-End-Receive-Line-Level', - 'annex_error_correction_p' => 'Annex-Error-Correction-Prot', - 'annex_filter' => 'Annex-Filter', - 'annex_host_allow' => 'Annex-Host-Allow', - 'annex_host_restrict' => 'Annex-Host-Restrict', - 'annex_input_filter' => 'Annex-Input-Filter', - 'annex_keypress_timeout' => 'Annex-Keypress-Timeout', - 'annex_local_ip_address' => 'Annex-Local-IP-Address', - 'annex_local_username' => 'Annex-Local-Username', - 'annex_logical_channel_nu' => 'Annex-Logical-Channel-Number', - 'annex_maximum_call_durat' => 'Annex-Maximum-Call-Duration', - 'annex_modem_disc_reason' => 'Annex-Modem-Disc-Reason', - 'annex_mrru' => 'Annex-MRRU', - 'annex_multicast_rate_lim' => 'Annex-Multicast-Rate-Limit', - 'annex_multilink_id' => 'Annex-Multilink-Id', - 'annex_num_in_multilink' => 'Annex-Num-In-Multilink', - 'annex_output_filter' => 'Annex-Output-Filter', - 'annex_pool_id' => 'Annex-Pool-Id', - 'annex_port' => 'Annex-Port', - 'annex_ppp_trace_level' => 'Annex-PPP-Trace-Level', - 'annex_pre_input_octets' => 'Annex-Pre-Input-Octets', - 'annex_pre_input_packets' => 'Annex-Pre-Input-Packets', - 'annex_pre_output_octets' => 'Annex-Pre-Output-Octets', - 'annex_pre_output_packets' => 'Annex-Pre-Output-Packets', - 'annex_primary_dns_server' => 'Annex-Primary-DNS-Server', - 'annex_primary_nbns_serve' => 'Annex-Primary-NBNS-Server', - 'annex_product_name' => 'Annex-Product-Name', - 'annex_rate_reneg_req_rcv' => 'Annex-Rate-Reneg-Req-Rcvd', - 'annex_rate_reneg_req_sen' => 'Annex-Rate-Reneg-Req-Sent', - 'annex_re_chap_timeout' => 'Annex-Re-CHAP-Timeout', - 'annex_receive_speed' => 'Annex-Receive-Speed', - 'annex_retrain_requests_r' => 'Annex-Retrain-Requests-Rcvd', - 'annex_retrain_requests_s' => 'Annex-Retrain-Requests-Sent', - 'annex_retransmitted_pack' => 'Annex-Retransmitted-Packets', - 'annex_sec_profile_index' => 'Annex-Sec-Profile-Index', - 'annex_secondary_dns_serv' => 'Annex-Secondary-DNS-Server', - 'annex_secondary_nbns_ser' => 'Annex-Secondary-NBNS-Server', - 'annex_signal_to_noise_ra' => 'Annex-Signal-to-Noise-Ratio', - 'annex_sw_version' => 'Annex-SW-Version', - 'annex_syslog_tap' => 'Annex-Syslog-Tap', - 'annex_system_disc_reason' => 'Annex-System-Disc-Reason', - 'annex_transmit_speed' => 'Annex-Transmit-Speed', - 'annex_transmitted_packet' => 'Annex-Transmitted-Packets', - 'annex_tunnel_authen_mode' => 'Annex-Tunnel-Authen-Mode', - 'annex_tunnel_authen_type' => 'Annex-Tunnel-Authen-Type', - 'annex_unauthenticated_ti' => 'Annex-Unauthenticated-Time', - 'annex_user_level' => 'Annex-User-Level', - 'annex_user_server_locati' => 'Annex-User-Server-Location', - 'annex_wan_number' => 'Annex-Wan-Number', - 'arap_challenge_response' => 'ARAP-Challenge-Response', - 'arap_features' => 'ARAP-Features', - 'arap_password' => 'ARAP-Password', - 'arap_security' => 'ARAP-Security', - 'arap_security_data' => 'ARAP-Security-Data', - 'arap_zone_access' => 'ARAP-Zone-Access', - 'ascend_access_intercept_' => 'Ascend-Access-Intercept-LEA', - 'ascend_access_intercepta' => 'Ascend-Access-Intercept-Log', - 'ascend_add_seconds' => 'Ascend-Add-Seconds', - 'ascend_appletalk_peer_mo' => 'Ascend-Appletalk-Peer-Mode', - 'ascend_appletalk_route' => 'Ascend-Appletalk-Route', - 'ascend_ara_pw' => 'Ascend-Ara-PW', - 'ascend_assign_ip_client' => 'Ascend-Assign-IP-Client', - 'ascend_assign_ip_global_' => 'Ascend-Assign-IP-Global-Pool', - 'ascend_assign_ip_pool' => 'Ascend-Assign-IP-Pool', - 'ascend_assign_ip_server' => 'Ascend-Assign-IP-Server', - 'ascend_atm_connect_group' => 'Ascend-ATM-Connect-Group', - 'ascend_atm_connect_vci' => 'Ascend-ATM-Connect-Vci', - 'ascend_atm_connect_vpi' => 'Ascend-ATM-Connect-Vpi', - 'ascend_atm_direct' => 'Ascend-ATM-Direct', - 'ascend_atm_direct_profil' => 'Ascend-ATM-Direct-Profile', - 'ascend_atm_fault_managem' => 'Ascend-ATM-Fault-Management', - 'ascend_atm_group' => 'Ascend-ATM-Group', - 'ascend_atm_loopback_cell' => 'Ascend-ATM-Loopback-Cell-Loss', - 'ascend_atm_vci' => 'Ascend-ATM-Vci', - 'ascend_atm_vpi' => 'Ascend-ATM-Vpi', - 'ascend_auth_delay' => 'Ascend-Auth-Delay', - 'ascend_auth_type' => 'Ascend-Auth-Type', - 'ascend_authen_alias' => 'Ascend-Authen-Alias', - 'ascend_backup' => 'Ascend-Backup', - 'ascend_bacp_enable' => 'Ascend-BACP-Enable', - 'ascend_base_channel_coun' => 'Ascend-Base-Channel-Count', - 'ascend_bi_directional_au' => 'Ascend-Bi-Directional-Auth', - 'ascend_billing_number' => 'Ascend-Billing-Number', - 'ascend_bir_bridge_group' => 'Ascend-BIR-Bridge-Group', - 'ascend_bir_enable' => 'Ascend-BIR-Enable', - 'ascend_bir_proxy' => 'Ascend-BIR-Proxy', - 'ascend_bridge' => 'Ascend-Bridge', - 'ascend_bridge_address' => 'Ascend-Bridge-Address', - 'ascend_bridge_non_pppoe' => 'Ascend-Bridge-Non-PPPoE', - 'ascend_cache_refresh' => 'Ascend-Cache-Refresh', - 'ascend_cache_time' => 'Ascend-Cache-Time', - 'ascend_call_attempt_limi' => 'Ascend-Call-Attempt-Limit', - 'ascend_call_block_durati' => 'Ascend-Call-Block-Duration', - 'ascend_call_by_call' => 'Ascend-Call-By-Call', - 'ascend_call_direction' => 'Ascend-Call-Direction', - 'ascend_call_filter' => 'Ascend-Call-Filter', - 'ascend_call_type' => 'Ascend-Call-Type', - 'ascend_callback' => 'Ascend-Callback', - 'ascend_callback_delay' => 'Ascend-Callback-Delay', - 'ascend_calling_id_number' => 'Ascend-Calling-Id-Number-Plan', - 'ascend_calling_id_presen' => 'Ascend-Calling-Id-Presentatn', - 'ascend_calling_id_screen' => 'Ascend-Calling-Id-Screening', - 'ascend_calling_id_type_o' => 'Ascend-Calling-Id-Type-Of-Num', - 'ascend_calling_subaddres' => 'Ascend-Calling-Subaddress', - 'ascend_cbcp_delay' => 'Ascend-CBCP-Delay', - 'ascend_cbcp_enable' => 'Ascend-CBCP-Enable', - 'ascend_cbcp_mode' => 'Ascend-CBCP-Mode', - 'ascend_cbcp_trunk_group' => 'Ascend-CBCP-Trunk-Group', - 'ascend_cir_timer' => 'Ascend-CIR-Timer', - 'ascend_ckt_type' => 'Ascend-Ckt-Type', - 'ascend_client_assign_dns' => 'Ascend-Client-Assign-DNS', - 'ascend_client_assign_win' => 'Ascend-Client-Assign-WINS', - 'ascend_client_gateway' => 'Ascend-Client-Gateway', - 'ascend_client_primary_dn' => 'Ascend-Client-Primary-DNS', - 'ascend_client_primary_wi' => 'Ascend-Client-Primary-WINS', - 'ascend_client_secondary_' => 'Ascend-Client-Secondary-WINS', - 'ascend_client_secondarya' => 'Ascend-Client-Secondary-DNS', - 'ascend_connect_progress' => 'Ascend-Connect-Progress', - 'ascend_data_filter' => 'Ascend-Data-Filter', - 'ascend_data_rate' => 'Ascend-Data-Rate', - 'ascend_data_svc' => 'Ascend-Data-Svc', - 'ascend_dba_monitor' => 'Ascend-DBA-Monitor', - 'ascend_dec_channel_count' => 'Ascend-Dec-Channel-Count', - 'ascend_destination_nas_p' => 'Ascend-Destination-Nas-Port', - 'ascend_dhcp_maximum_leas' => 'Ascend-DHCP-Maximum-Leases', - 'ascend_dhcp_pool_number' => 'Ascend-DHCP-Pool-Number', - 'ascend_dhcp_reply' => 'Ascend-DHCP-Reply', - 'ascend_dial_number' => 'Ascend-Dial-Number', - 'ascend_dialed_number' => 'Ascend-Dialed-Number', - 'ascend_dialout_allowed' => 'Ascend-Dialout-Allowed', - 'ascend_disconnect_cause' => 'Ascend-Disconnect-Cause', - 'ascend_dropped_octets' => 'Ascend-Dropped-Octets', - 'ascend_dropped_packets' => 'Ascend-Dropped-Packets', - 'ascend_dsl_cir_recv_limi' => 'Ascend-Dsl-CIR-Recv-Limit', - 'ascend_dsl_cir_xmit_limi' => 'Ascend-Dsl-CIR-Xmit-Limit', - 'ascend_dsl_downstream_li' => 'Ascend-Dsl-Downstream-Limit', - 'ascend_dsl_rate_mode' => 'Ascend-Dsl-Rate-Mode', - 'ascend_dsl_rate_type' => 'Ascend-Dsl-Rate-Type', - 'ascend_dsl_upstream_limi' => 'Ascend-Dsl-Upstream-Limit', - 'ascend_egress_enabled' => 'Ascend-Egress-Enabled', - 'ascend_endpoint_disc' => 'Ascend-Endpoint-Disc', - 'ascend_event_type' => 'Ascend-Event-Type', - 'ascend_expect_callback' => 'Ascend-Expect-Callback', - 'ascend_fcp_parameter' => 'Ascend-FCP-Parameter', - 'ascend_filter' => 'Ascend-Filter', - 'ascend_filter_required' => 'Ascend-Filter-Required', - 'ascend_first_dest' => 'Ascend-First-Dest', - 'ascend_force_56' => 'Ascend-Force-56', - 'ascend_fr_08_mode' => 'Ascend-FR-08-Mode', - 'ascend_fr_circuit_name' => 'Ascend-FR-Circuit-Name', - 'ascend_fr_dce_n392' => 'Ascend-FR-DCE-N392', - 'ascend_fr_dce_n393' => 'Ascend-FR-DCE-N393', - 'ascend_fr_direct' => 'Ascend-FR-Direct', - 'ascend_fr_direct_dlci' => 'Ascend-FR-Direct-DLCI', - 'ascend_fr_direct_profile' => 'Ascend-FR-Direct-Profile', - 'ascend_fr_dlci' => 'Ascend-FR-DLCI', - 'ascend_fr_dte_n392' => 'Ascend-FR-DTE-N392', - 'ascend_fr_dte_n393' => 'Ascend-FR-DTE-N393', - 'ascend_fr_link_mgt' => 'Ascend-FR-Link-Mgt', - 'ascend_fr_link_status_dl' => 'Ascend-FR-Link-Status-DLCI', - 'ascend_fr_linkup' => 'Ascend-FR-LinkUp', - 'ascend_fr_n391' => 'Ascend-FR-N391', - 'ascend_fr_nailed_grp' => 'Ascend-FR-Nailed-Grp', - 'ascend_fr_profile_name' => 'Ascend-FR-Profile-Name', - 'ascend_fr_svc_addr' => 'Ascend-FR-SVC-Addr', - 'ascend_fr_t391' => 'Ascend-FR-T391', - 'ascend_fr_t392' => 'Ascend-FR-T392', - 'ascend_fr_type' => 'Ascend-FR-Type', - 'ascend_ft1_caller' => 'Ascend-FT1-Caller', - 'ascend_global_call_id' => 'Ascend-Global-Call-Id', - 'ascend_group' => 'Ascend-Group', - 'ascend_h323_conference_i' => 'Ascend-H323-Conference-Id', - 'ascend_h323_dialed_time' => 'Ascend-H323-Dialed-Time', - 'ascend_h323_fegw_address' => 'Ascend-H323-Fegw-Address', - 'ascend_h323_gatekeeper' => 'Ascend-H323-Gatekeeper', - 'ascend_handle_ipx' => 'Ascend-Handle-IPX', - 'ascend_history_weigh_typ' => 'Ascend-History-Weigh-Type', - 'ascend_home_agent_ip_add' => 'Ascend-Home-Agent-IP-Addr', - 'ascend_home_agent_passwo' => 'Ascend-Home-Agent-Password', - 'ascend_home_agent_udp_po' => 'Ascend-Home-Agent-UDP-Port', - 'ascend_home_network_name' => 'Ascend-Home-Network-Name', - 'ascend_host_info' => 'Ascend-Host-Info', - 'ascend_idle_limit' => 'Ascend-Idle-Limit', - 'ascend_if_netmask' => 'Ascend-IF-Netmask', - 'ascend_inc_channel_count' => 'Ascend-Inc-Channel-Count', - 'ascend_inter_arrival_jit' => 'Ascend-Inter-Arrival-Jitter', - 'ascend_ip_direct' => 'Ascend-IP-Direct', - 'ascend_ip_pool_chaining' => 'Ascend-IP-Pool-Chaining', - 'ascend_ip_pool_definitio' => 'Ascend-IP-Pool-Definition', - 'ascend_ip_tos' => 'Ascend-IP-TOS', - 'ascend_ip_tos_apply_to' => 'Ascend-IP-TOS-Apply-To', - 'ascend_ip_tos_precedence' => 'Ascend-IP-TOS-Precedence', - 'ascend_ipsec_profile' => 'Ascend-IPSEC-Profile', - 'ascend_ipx_alias' => 'Ascend-IPX-Alias', - 'ascend_ipx_header_compre' => 'Ascend-IPX-Header-Compression', - 'ascend_ipx_node_addr' => 'Ascend-IPX-Node-Addr', - 'ascend_ipx_peer_mode' => 'Ascend-IPX-Peer-Mode', - 'ascend_ipx_route' => 'Ascend-IPX-Route', - 'ascend_link_compression' => 'Ascend-Link-Compression', - 'ascend_max_shared_users' => 'Ascend-Max-Shared-Users', - 'ascend_maximum_call_dura' => 'Ascend-Maximum-Call-Duration', - 'ascend_maximum_channels' => 'Ascend-Maximum-Channels', - 'ascend_maximum_time' => 'Ascend-Maximum-Time', - 'ascend_menu_item' => 'Ascend-Menu-Item', - 'ascend_menu_selector' => 'Ascend-Menu-Selector', - 'ascend_metric' => 'Ascend-Metric', - 'ascend_minimum_channels' => 'Ascend-Minimum-Channels', - 'ascend_modem_portno' => 'Ascend-Modem-PortNo', - 'ascend_modem_shelfno' => 'Ascend-Modem-ShelfNo', - 'ascend_modem_slotno' => 'Ascend-Modem-SlotNo', - 'ascend_mpp_idle_percent' => 'Ascend-MPP-Idle-Percent', - 'ascend_mtu' => 'Ascend-MTU', - 'ascend_multicast_client' => 'Ascend-Multicast-Client', - 'ascend_multicast_gleave_' => 'Ascend-Multicast-GLeave-Delay', - 'ascend_multicast_rate_li' => 'Ascend-Multicast-Rate-Limit', - 'ascend_multilink_id' => 'Ascend-Multilink-ID', - 'ascend_nas_port_format' => 'Ascend-NAS-Port-Format', - 'ascend_netware_timeout' => 'Ascend-Netware-timeout', - 'ascend_num_in_multilink' => 'Ascend-Num-In-Multilink', - 'ascend_number_sessions' => 'Ascend-Number-Sessions', - 'ascend_numbering_plan_id' => 'Ascend-Numbering-Plan-ID', - 'ascend_owner_ip_addr' => 'Ascend-Owner-IP-Addr', - 'ascend_port_redir_portnu' => 'Ascend-Port-Redir-Portnum', - 'ascend_port_redir_protoc' => 'Ascend-Port-Redir-Protocol', - 'ascend_port_redir_server' => 'Ascend-Port-Redir-Server', - 'ascend_ppp_address' => 'Ascend-PPP-Address', - 'ascend_ppp_async_map' => 'Ascend-PPP-Async-Map', - 'ascend_ppp_vj_1172' => 'Ascend-PPP-VJ-1172', - 'ascend_ppp_vj_slot_comp' => 'Ascend-PPP-VJ-Slot-Comp', - 'ascend_pppoe_enable' => 'Ascend-PPPoE-Enable', - 'ascend_pre_input_octets' => 'Ascend-Pre-Input-Octets', - 'ascend_pre_input_packets' => 'Ascend-Pre-Input-Packets', - 'ascend_pre_output_octets' => 'Ascend-Pre-Output-Octets', - 'ascend_pre_output_packet' => 'Ascend-Pre-Output-Packets', - 'ascend_preempt_limit' => 'Ascend-Preempt-Limit', - 'ascend_presession_time' => 'Ascend-PreSession-Time', - 'ascend_pri_number_type' => 'Ascend-PRI-Number-Type', - 'ascend_primary_home_agen' => 'Ascend-Primary-Home-Agent', - 'ascend_private_route' => 'Ascend-Private-Route', - 'ascend_private_route_req' => 'Ascend-Private-Route-Required', - 'ascend_private_route_tab' => 'Ascend-Private-Route-Table-ID', - 'ascend_pw_lifetime' => 'Ascend-PW-Lifetime', - 'ascend_pw_warntime' => 'Ascend-PW-Warntime', - 'ascend_qos_downstream' => 'Ascend-QOS-Downstream', - 'ascend_qos_upstream' => 'Ascend-QOS-Upstream', - 'ascend_receive_secret' => 'Ascend-Receive-Secret', - 'ascend_recv_name' => 'Ascend-Recv-Name', - 'ascend_redirect_number' => 'Ascend-Redirect-Number', - 'ascend_remote_addr' => 'Ascend-Remote-Addr', - 'ascend_remote_fw' => 'Ascend-Remote-FW', - 'ascend_remove_seconds' => 'Ascend-Remove-Seconds', - 'ascend_require_auth' => 'Ascend-Require-Auth', - 'ascend_route_appletalk' => 'Ascend-Route-Appletalk', - 'ascend_route_ip' => 'Ascend-Route-IP', - 'ascend_route_ipx' => 'Ascend-Route-IPX', - 'ascend_secondary_home_ag' => 'Ascend-Secondary-Home-Agent', - 'ascend_seconds_of_histor' => 'Ascend-Seconds-Of-History', - 'ascend_send_auth' => 'Ascend-Send-Auth', - 'ascend_send_passwd' => 'Ascend-Send-Passwd', - 'ascend_send_secret' => 'Ascend-Send-Secret', - 'ascend_service_type' => 'Ascend-Service-Type', - 'ascend_session_svr_key' => 'Ascend-Session-Svr-Key', - 'ascend_session_type' => 'Ascend-Session-Type', - 'ascend_shared_profile_en' => 'Ascend-Shared-Profile-Enable', - 'ascend_source_auth' => 'Ascend-Source-Auth', - 'ascend_source_ip_check' => 'Ascend-Source-IP-Check', - 'ascend_svc_enabled' => 'Ascend-SVC-Enabled', - 'ascend_target_util' => 'Ascend-Target-Util', - 'ascend_telnet_profile' => 'Ascend-Telnet-Profile', - 'ascend_temporary_rtes' => 'Ascend-Temporary-Rtes', - 'ascend_third_prompt' => 'Ascend-Third-Prompt', - 'ascend_token_expiry' => 'Ascend-Token-Expiry', - 'ascend_token_idle' => 'Ascend-Token-Idle', - 'ascend_token_immediate' => 'Ascend-Token-Immediate', - 'ascend_traffic_shaper' => 'Ascend-Traffic-Shaper', - 'ascend_transit_number' => 'Ascend-Transit-Number', - 'ascend_ts_idle_limit' => 'Ascend-TS-Idle-Limit', - 'ascend_ts_idle_mode' => 'Ascend-TS-Idle-Mode', - 'ascend_tunnel_vrouter_na' => 'Ascend-Tunnel-VRouter-Name', - 'ascend_tunneling_protoco' => 'Ascend-Tunneling-Protocol', - 'ascend_user_acct_base' => 'Ascend-User-Acct-Base', - 'ascend_user_acct_host' => 'Ascend-User-Acct-Host', - 'ascend_user_acct_key' => 'Ascend-User-Acct-Key', - 'ascend_user_acct_port' => 'Ascend-User-Acct-Port', - 'ascend_user_acct_time' => 'Ascend-User-Acct-Time', - 'ascend_user_acct_type' => 'Ascend-User-Acct-Type', - 'ascend_uu_info' => 'Ascend-UU-Info', - 'ascend_vrouter_name' => 'Ascend-VRouter-Name', - 'ascend_x25_cug' => 'Ascend-X25-Cug', - 'ascend_x25_nui' => 'Ascend-X25-Nui', - 'ascend_x25_nui_password_' => 'Ascend-X25-Nui-Password-Prompt', - 'ascend_x25_nui_prompt' => 'Ascend-X25-Nui-Prompt', - 'ascend_x25_pad_alias_1' => 'Ascend-X25-Pad-Alias-1', - 'ascend_x25_pad_alias_2' => 'Ascend-X25-Pad-Alias-2', - 'ascend_x25_pad_alias_3' => 'Ascend-X25-Pad-Alias-3', - 'ascend_x25_pad_banner' => 'Ascend-X25-Pad-Banner', - 'ascend_x25_pad_prompt' => 'Ascend-X25-Pad-Prompt', - 'ascend_x25_pad_x3_parame' => 'Ascend-X25-Pad-X3-Parameters', - 'ascend_x25_pad_x3_profil' => 'Ascend-X25-Pad-X3-Profile', - 'ascend_x25_profile_name' => 'Ascend-X25-Profile-Name', - 'ascend_x25_reverse_charg' => 'Ascend-X25-Reverse-Charging', - 'ascend_x25_rpoa' => 'Ascend-X25-Rpoa', - 'ascend_x25_x121_address' => 'Ascend-X25-X121-Address', - 'ascend_xmit_rate' => 'Ascend-Xmit-Rate', - 'assigned_ip_address' => 'Assigned_IP_Address', - 'assigned_ip_addrest' => 'Assigned-IP-Address', - 'auth_type' => 'Auth-Type', - 'autz_type' => 'Autz-Type', - 'bg_aging_time' => 'BG_Aging_Time', - 'bg_aging_timf' => 'BG-Aging-Time', - 'bg_path_cost' => 'BG_Path_Cost', - 'bg_path_cosu' => 'BG-Path-Cost', - 'bg_span_dis' => 'BG_Span_Dis', - 'bg_span_dit' => 'BG-Span-Dis', - 'bg_trans_bpdu' => 'BG_Trans_BPDU', - 'bg_trans_bpdv' => 'BG-Trans-BPDU', - 'bind_auth_context' => 'Bind_Auth_Context', - 'bind_auth_contexu' => 'Bind-Auth-Context', - 'bind_auth_max_sessions' => 'Bind_Auth_Max_Sessions', - 'bind_auth_max_sessiont' => 'Bind-Auth-Max-Sessions', - 'bind_auth_protocol' => 'Bind_Auth_Protocol', - 'bind_auth_protocom' => 'Bind-Auth-Protocol', - 'bind_auth_service_grp' => 'Bind_Auth_Service_Grp', - 'bind_auth_service_grq' => 'Bind-Auth-Service-Grp', - 'bind_bypass_bypass' => 'Bind_Bypass_Bypass', - 'bind_bypass_bypast' => 'Bind-Bypass-Bypass', - 'bind_bypass_context' => 'Bind_Bypass_Context', - 'bind_bypass_contexu' => 'Bind-Bypass-Context', - 'bind_dot1q_port' => 'Bind_Dot1q_Port', - 'bind_dot1q_poru' => 'Bind-Dot1q-Port', - 'bind_dot1q_slot' => 'Bind_Dot1q_Slot', - 'bind_dot1q_slou' => 'Bind-Dot1q-Slot', - 'bind_dot1q_vlan_tag_id' => 'Bind_Dot1q_Vlan_Tag_Id', - 'bind_dot1q_vlan_tag_ie' => 'Bind-Dot1q-Vlan-Tag-Id', - 'bind_int_context' => 'Bind_Int_Context', - 'bind_int_contexu' => 'Bind-Int-Context', - 'bind_int_interface_name' => 'Bind_Int_Interface_Name', - 'bind_int_interface_namf' => 'Bind-Int-Interface-Name', - 'bind_l2tp_flow_control' => 'Bind_L2TP_Flow_Control', - 'bind_l2tp_flow_controm' => 'Bind-L2TP-Flow-Control', - 'bind_l2tp_tunnel_name' => 'Bind_L2TP_Tunnel_Name', - 'bind_l2tp_tunnel_namf' => 'Bind-L2TP-Tunnel-Name', - 'bind_ses_context' => 'Bind_Ses_Context', - 'bind_ses_contexu' => 'Bind-Ses-Context', - 'bind_sub_password' => 'Bind_Sub_Password', - 'bind_sub_passwore' => 'Bind-Sub-Password', - 'bind_sub_user_at_context' => 'Bind_Sub_User_At_Context', - 'bind_sub_user_at_contexu' => 'Bind-Sub-User-At-Context', - 'bind_tun_context' => 'Bind_Tun_Context', - 'bind_tun_contexu' => 'Bind-Tun-Context', - 'bind_type' => 'Bind_Type', - 'bind_typf' => 'Bind-Type', - 'bintec_bibodialtable' => 'BinTec-biboDialTable', - 'bintec_biboppptable' => 'BinTec-biboPPPTable', - 'bintec_ipextiftable' => 'BinTec-ipExtIfTable', - 'bintec_ipextrttable' => 'BinTec-ipExtRtTable', - 'bintec_ipfiltertable' => 'BinTec-ipFilterTable', - 'bintec_ipnatpresettable' => 'BinTec-ipNatPresetTable', - 'bintec_ipqostable' => 'BinTec-ipQoSTable', - 'bintec_iproutetable' => 'BinTec-ipRouteTable', - 'bintec_ipxcirctable' => 'BinTec-ipxCircTable', - 'bintec_ipxstaticroutetab' => 'BinTec-ipxStaticRouteTable', - 'bintec_ipxstaticservtabl' => 'BinTec-ipxStaticServTable', - 'bintec_ospfiftable' => 'BinTec-ospfIfTable', - 'bintec_pppextiftable' => 'BinTec-pppExtIfTable', - 'bintec_qosiftable' => 'BinTec-qosIfTable', - 'bintec_qospolicytable' => 'BinTec-qosPolicyTable', - 'bintec_ripcirctable' => 'BinTec-ripCircTable', - 'bintec_sapcirctable' => 'BinTec-sapCircTable', - 'bridge_group' => 'Bridge_Group', - 'bridge_grouq' => 'Bridge-Group', - 'cabletron_protocol_calla' => 'Cabletron-Protocol-Callable', - 'cabletron_protocol_enabl' => 'Cabletron-Protocol-Enable', - 'call_id' => 'call-id', - 'callback_id' => 'Callback-Id', - 'callback_number' => 'Callback-Number', - 'called_station_id' => 'Called-Station-Id', - 'caller_id' => 'Caller-ID', - 'calling_station_id' => 'Calling-Station-Id', - 'cbbsm_bandwidth' => 'CBBSM-Bandwidth', - 'challenge_state' => 'Challenge-State', - 'chap_challenge' => 'CHAP-Challenge', - 'chap_password' => 'CHAP-Password', - 'char_noecho' => 'Char-Noecho', - 'cisco_abort_cause' => 'Cisco-Abort-Cause', - 'cisco_account_info' => 'Cisco-Account-Info', - 'cisco_assign_ip_pool' => 'Cisco-Assign-IP-Pool', - 'cisco_avpair' => 'Cisco-AVPair', - 'cisco_call_filter' => 'Cisco-Call-Filter', - 'cisco_call_type' => 'Cisco-Call-Type', - 'cisco_command_code' => 'Cisco-Command-Code', - 'cisco_control_info' => 'Cisco-Control-Info', - 'cisco_data_filter' => 'Cisco-Data-Filter', - 'cisco_data_rate' => 'Cisco-Data-Rate', - 'cisco_disconnect_cause' => 'Cisco-Disconnect-Cause', - 'cisco_email_server_ack_f' => 'Cisco-Email-Server-Ack-Flag', - 'cisco_email_server_addre' => 'Cisco-Email-Server-Address', - 'cisco_fax_account_id_ori' => 'Cisco-Fax-Account-Id-Origin', - 'cisco_fax_auth_status' => 'Cisco-Fax-Auth-Status', - 'cisco_fax_connect_speed' => 'Cisco-Fax-Connect-Speed', - 'cisco_fax_coverpage_flag' => 'Cisco-Fax-Coverpage-Flag', - 'cisco_fax_dsn_address' => 'Cisco-Fax-Dsn-Address', - 'cisco_fax_dsn_flag' => 'Cisco-Fax-Dsn-Flag', - 'cisco_fax_mdn_address' => 'Cisco-Fax-Mdn-Address', - 'cisco_fax_mdn_flag' => 'Cisco-Fax-Mdn-Flag', - 'cisco_fax_modem_time' => 'Cisco-Fax-Modem-Time', - 'cisco_fax_msg_id' => 'Cisco-Fax-Msg-Id', - 'cisco_fax_pages' => 'Cisco-Fax-Pages', - 'cisco_fax_process_abort_' => 'Cisco-Fax-Process-Abort-Flag', - 'cisco_fax_recipient_coun' => 'Cisco-Fax-Recipient-Count', - 'cisco_gateway_id' => 'Cisco-Gateway-Id', - 'cisco_idle_limit' => 'Cisco-Idle-Limit', - 'cisco_ip_direct' => 'Cisco-IP-Direct', - 'cisco_ip_pool_definition' => 'Cisco-IP-Pool-Definition', - 'cisco_link_compression' => 'Cisco-Link-Compression', - 'cisco_maximum_channels' => 'Cisco-Maximum-Channels', - 'cisco_maximum_time' => 'Cisco-Maximum-Time', - 'cisco_multilink_id' => 'Cisco-Multilink-ID', - 'cisco_nas_port' => 'Cisco-NAS-Port', - 'cisco_num_in_multilink' => 'Cisco-Num-In-Multilink', - 'cisco_port_used' => 'Cisco-Port-Used', - 'cisco_ppp_async_map' => 'Cisco-PPP-Async-Map', - 'cisco_ppp_vj_slot_comp' => 'Cisco-PPP-VJ-Slot-Comp', - 'cisco_pre_input_octets' => 'Cisco-Pre-Input-Octets', - 'cisco_pre_input_packets' => 'Cisco-Pre-Input-Packets', - 'cisco_pre_output_octets' => 'Cisco-Pre-Output-Octets', - 'cisco_pre_output_packets' => 'Cisco-Pre-Output-Packets', - 'cisco_presession_time' => 'Cisco-PreSession-Time', - 'cisco_pw_lifetime' => 'Cisco-PW-Lifetime', - 'cisco_route_ip' => 'Cisco-Route-IP', - 'cisco_service_info' => 'Cisco-Service-Info', - 'cisco_target_util' => 'Cisco-Target-Util', - 'cisco_xmit_rate' => 'Cisco-Xmit-Rate', - 'class' => 'Class', - 'client_dns_pri' => 'Client_DNS_Pri', - 'client_dns_prj' => 'Client-DNS-Pri', - 'client_dns_sec' => 'Client_DNS_Sec', - 'client_dns_sed' => 'Client-DNS-Sec', - 'client_id' => 'Client-Id', - 'client_ip_address' => 'Client-IP-Address', - 'client_port_dnis' => 'Client-Port-DNIS', - 'client_port_id' => 'Client-Port-Id', - 'colubris_avpair' => 'Colubris-AVPair', - 'configuration_token' => 'Configuration-Token', - 'connect_info' => 'Connect-Info', - 'connect_rate' => 'Connect-Rate', - 'context_name' => 'Context_Name', - 'context_namf' => 'Context-Name', - 'crypt_password' => 'Crypt-Password', - 'current_time' => 'Current-Time', - 'cvpn3000_access_hours' => 'CVPN3000-Access-Hours', - 'cvpn3000_allow_network_e' => 'CVPN3000-Allow-Network-Extension-Mode', - 'cvpn3000_auth_server_pas' => 'CVPN3000-Auth-Server-Password', - 'cvpn3000_auth_server_pri' => 'CVPN3000-Auth-Server-Priority', - 'cvpn3000_auth_server_typ' => 'CVPN3000-Auth-Server-Type', - 'cvpn3000_authd_user_idle' => 'CVPN3000-Authd-User-Idle-Timeout', - 'cvpn3000_cisco_ip_phone_' => 'CVPN3000-Cisco-IP-Phone-Bypass', - 'cvpn3000_dhcp_network_sc' => 'CVPN3000-DHCP-Network-Scope', - 'cvpn3000_ike_keep_alives' => 'CVPN3000-IKE-Keep-Alives', - 'cvpn3000_ipsec_allow_pas' => 'CVPN3000-IPSec-Allow-Passwd-Store', - 'cvpn3000_ipsec_auth_on_r' => 'CVPN3000-IPSec-Auth-On-Rekey', - 'cvpn3000_ipsec_authentic' => 'CVPN3000-IPSec-Authentication', - 'cvpn3000_ipsec_authoriza' => 'CVPN3000-IPSec-Authorization-Type', - 'cvpn3000_ipsec_authorizb' => 'CVPN3000-IPSec-Authorization-Required', - 'cvpn3000_ipsec_backup_se' => 'CVPN3000-IPSec-Backup-Servers', - 'cvpn3000_ipsec_backup_sf' => 'CVPN3000-IPSec-Backup-Server-List', - 'cvpn3000_ipsec_banner1' => 'CVPN3000-IPSec-Banner1', - 'cvpn3000_ipsec_banner2' => 'CVPN3000-IPSec-Banner2', - 'cvpn3000_ipsec_client_fw' => 'CVPN3000-IPSec-Client-Fw-Filter-Name', - 'cvpn3000_ipsec_client_fx' => 'CVPN3000-IPSec-Client-Fw-Filter-Opt', - 'cvpn3000_ipsec_confidenc' => 'CVPN3000-IPSec-Confidence-Level', - 'cvpn3000_ipsec_default_d' => 'CVPN3000-IPSec-Default-Domain', - 'cvpn3000_ipsec_dn_field' => 'CVPN3000-IPSec-DN-Field', - 'cvpn3000_ipsec_group_nam' => 'CVPN3000-IPSec-Group-Name', - 'cvpn3000_ipsec_ike_peer_' => 'CVPN3000-IPSec-IKE-Peer-ID-Check', - 'cvpn3000_ipsec_ip_compre' => 'CVPN3000-IPSec-IP-Compression', - 'cvpn3000_ipsec_ltl_keepa' => 'CVPN3000-IPSec-LTL-Keepalives', - 'cvpn3000_ipsec_mode_conf' => 'CVPN3000-IPSec-Mode-Config', - 'cvpn3000_ipsec_over_udp' => 'CVPN3000-IPSec-Over-UDP', - 'cvpn3000_ipsec_over_udp_' => 'CVPN3000-IPSec-Over-UDP-Port', - 'cvpn3000_ipsec_reqrd_cli' => 'CVPN3000-IPSec-Reqrd-Client-Fw-Cap', - 'cvpn3000_ipsec_sec_assoc' => 'CVPN3000-IPSec-Sec-Association', - 'cvpn3000_ipsec_split_dns' => 'CVPN3000-IPSec-Split-DNS-Names', - 'cvpn3000_ipsec_split_tun' => 'CVPN3000-IPSec-Split-Tunnel-List', - 'cvpn3000_ipsec_split_tuo' => 'CVPN3000-IPSec-Split-Tunneling-Policy', - 'cvpn3000_ipsec_tunnel_ty' => 'CVPN3000-IPSec-Tunnel-Type', - 'cvpn3000_ipsec_user_grou' => 'CVPN3000-IPSec-User-Group-Lock', - 'cvpn3000_l2tp_encryption' => 'CVPN3000-L2TP-Encryption', - 'cvpn3000_l2tp_min_auth_p' => 'CVPN3000-L2TP-Min-Auth-Protocol', - 'cvpn3000_l2tp_mppc_compr' => 'CVPN3000-L2TP-MPPC-Compression', - 'cvpn3000_leap_bypass' => 'CVPN3000-LEAP-Bypass', - 'cvpn3000_ms_client_icpt_' => 'CVPN3000-MS-Client-Icpt-DHCP-Conf-Msg', - 'cvpn3000_ms_client_subne' => 'CVPN3000-MS-Client-Subnet-Mask', - 'cvpn3000_partition_max_s' => 'CVPN3000-Partition-Max-Sessions', - 'cvpn3000_partition_mobil' => 'CVPN3000-Partition-Mobile-IP-Key', - 'cvpn3000_partition_mobim' => 'CVPN3000-Partition-Mobile-IP-Address', - 'cvpn3000_partition_mobin' => 'CVPN3000-Partition-Mobile-IP-SPI', - 'cvpn3000_partition_premi' => 'CVPN3000-Partition-Premise-Router', - 'cvpn3000_partition_prima' => 'CVPN3000-Partition-Primary-DHCP', - 'cvpn3000_partition_secon' => 'CVPN3000-Partition-Secondary-DHCP', - 'cvpn3000_pptp_encryption' => 'CVPN3000-PPTP-Encryption', - 'cvpn3000_pptp_min_auth_p' => 'CVPN3000-PPTP-Min-Auth-Protocol', - 'cvpn3000_pptp_mppc_compr' => 'CVPN3000-PPTP-MPPC-Compression', - 'cvpn3000_primary_dns' => 'CVPN3000-Primary-DNS', - 'cvpn3000_primary_wins' => 'CVPN3000-Primary-WINS', - 'cvpn3000_priority_on_sep' => 'CVPN3000-Priority-On-SEP', - 'cvpn3000_reqrd_client_fw' => 'CVPN3000-Reqrd-Client-Fw-Vendor-Code', - 'cvpn3000_reqrd_client_fx' => 'CVPN3000-Reqrd-Client-Fw-Product-Code', - 'cvpn3000_reqrd_client_fy' => 'CVPN3000-Reqrd-Client-Fw-Description', - 'cvpn3000_request_auth_ve' => 'CVPN3000-Request-Auth-Vector', - 'cvpn3000_require_hw_clie' => 'CVPN3000-Require-HW-Client-Auth', - 'cvpn3000_require_individ' => 'CVPN3000-Require-Individual-User-Auth', - 'cvpn3000_secondary_dns' => 'CVPN3000-Secondary-DNS', - 'cvpn3000_secondary_wins' => 'CVPN3000-Secondary-WINS', - 'cvpn3000_sep_card_assign' => 'CVPN3000-SEP-Card-Assignment', - 'cvpn3000_simultaneous_lo' => 'CVPN3000-Simultaneous-Logins', - 'cvpn3000_strip_realm' => 'CVPN3000-Strip-Realm', - 'cvpn3000_tunneling_proto' => 'CVPN3000-Tunneling-Protocols', - 'cvpn3000_use_client_addr' => 'CVPN3000-Use-Client-Address', - 'cvpn3000_user_auth_serve' => 'CVPN3000-User-Auth-Server-Name', - 'cvpn3000_user_auth_servf' => 'CVPN3000-User-Auth-Server-Port', - 'cvpn3000_user_auth_servg' => 'CVPN3000-User-Auth-Server-Secret', - 'cvpn5000_client_assigned' => 'CVPN5000-Client-Assigned-IP', - 'cvpn5000_client_assignee' => 'CVPN5000-Client-Assigned-IPX', - 'cvpn5000_client_real_ip' => 'CVPN5000-Client-Real-IP', - 'cvpn5000_echo' => 'CVPN5000-Echo', - 'cvpn5000_tunnel_throughp' => 'CVPN5000-Tunnel-Throughput', - 'cvpn5000_vpn_groupinfo' => 'CVPN5000-VPN-GroupInfo', - 'cvpn5000_vpn_password' => 'CVPN5000-VPN-Password', - 'cvx_assign_ip_pool' => 'CVX-Assign-IP-Pool', - 'cvx_client_assign_dns' => 'CVX-Client-Assign-DNS', - 'cvx_data_filter' => 'CVX-Data-Filter', - 'cvx_data_rate' => 'CVX-Data-Rate', - 'cvx_disconnect_cause' => 'CVX-Disconnect-Cause', - 'cvx_identification' => 'CVX-Identification', - 'cvx_idle_limit' => 'CVX-Idle-Limit', - 'cvx_ipsvc_aznlvl' => 'CVX-IPSVC-AZNLVL', - 'cvx_ipsvc_mask' => 'CVX-IPSVC-Mask', - 'cvx_maximum_channels' => 'CVX-Maximum-Channels', - 'cvx_modem_begin_modulati' => 'CVX-Modem-Begin-Modulation', - 'cvx_modem_begin_recv_lin' => 'CVX-Modem-Begin-Recv-Line-Lvl', - 'cvx_modem_data_compressi' => 'CVX-Modem-Data-Compression', - 'cvx_modem_end_modulation' => 'CVX-Modem-End-Modulation', - 'cvx_modem_end_recv_line_' => 'CVX-Modem-End-Recv-Line-Lvl', - 'cvx_modem_error_correcti' => 'CVX-Modem-Error-Correction', - 'cvx_modem_local_rate_neg' => 'CVX-Modem-Local-Rate-Negs', - 'cvx_modem_local_retrains' => 'CVX-Modem-Local-Retrains', - 'cvx_modem_remote_rate_ne' => 'CVX-Modem-Remote-Rate-Negs', - 'cvx_modem_remote_retrain' => 'CVX-Modem-Remote-Retrains', - 'cvx_modem_retx_packets' => 'CVX-Modem-ReTx-Packets', - 'cvx_modem_snr' => 'CVX-Modem-SNR', - 'cvx_modem_tx_packets' => 'CVX-Modem-Tx-Packets', - 'cvx_multicast_client' => 'CVX-Multicast-Client', - 'cvx_multicast_rate_limit' => 'CVX-Multicast-Rate-Limit', - 'cvx_multilink_group_numb' => 'CVX-Multilink-Group-Number', - 'cvx_multilink_match_info' => 'CVX-Multilink-Match-Info', - 'cvx_ppp_address' => 'CVX-PPP-Address', - 'cvx_ppp_log_mask' => 'CVX-PPP-Log-Mask', - 'cvx_presession_time' => 'CVX-PreSession-Time', - 'cvx_primary_dns' => 'CVX-Primary-DNS', - 'cvx_radius_redirect' => 'CVX-Radius-Redirect', - 'cvx_secondary_dns' => 'CVX-Secondary-DNS', - 'cvx_ss7_session_id_type' => 'CVX-SS7-Session-ID-Type', - 'cvx_vpop_id' => 'CVX-VPOP-ID', - 'cvx_xmit_rate' => 'CVX-Xmit-Rate', - 'dhcp_max_leases' => 'DHCP_Max_Leases', - 'dhcp_max_leaset' => 'DHCP-Max-Leases', - 'dialback_name' => 'Dialback-Name', - 'dialback_no' => 'Dialback-No', - 'digest_algorithm' => 'Digest-Algorithm', - 'digest_attributes' => 'Digest-Attributes', - 'digest_body_digest' => 'Digest-Body-Digest', - 'digest_cnonce' => 'Digest-CNonce', - 'digest_method' => 'Digest-Method', - 'digest_nonce' => 'Digest-Nonce', - 'digest_nonce_count' => 'Digest-Nonce-Count', - 'digest_qop' => 'Digest-QOP', - 'digest_realm' => 'Digest-Realm', - 'digest_response' => 'Digest-Response', - 'digest_uri' => 'Digest-URI', - 'digest_user_name' => 'Digest-User-Name', - 'eap_code' => 'EAP-Code', - 'eap_id' => 'EAP-Id', - 'eap_md5_password' => 'EAP-MD5-Password', - 'eap_message' => 'EAP-Message', - 'eap_sim_any_id_req' => 'EAP-Sim-ANY_ID_REQ', - 'eap_sim_checkcode' => 'EAP-Sim-CHECKCODE', - 'eap_sim_counter' => 'EAP-Sim-COUNTER', - 'eap_sim_counter_too_smal' => 'EAP-Sim-COUNTER_TOO_SMALL', - 'eap_sim_encr_data' => 'EAP-Sim-ENCR_DATA', - 'eap_sim_extra' => 'EAP-Sim-EXTRA', - 'eap_sim_fullauth_id_req' => 'EAP-Sim-FULLAUTH_ID_REQ', - 'eap_sim_hmac' => 'EAP-Sim-HMAC', - 'eap_sim_identity' => 'EAP-Sim-IDENTITY', - 'eap_sim_imsi' => 'EAP-Sim-IMSI', - 'eap_sim_iv' => 'EAP-Sim-IV', - 'eap_sim_kc1' => 'EAP-Sim-KC1', - 'eap_sim_kc2' => 'EAP-Sim-KC2', - 'eap_sim_kc3' => 'EAP-Sim-KC3', - 'eap_sim_key' => 'EAP-Sim-KEY', - 'eap_sim_mac' => 'EAP-Sim-MAC', - 'eap_sim_next_pseudonum' => 'EAP-Sim-NEXT_PSEUDONUM', - 'eap_sim_next_reauth_id' => 'EAP-Sim-NEXT_REAUTH_ID', - 'eap_sim_nonce_mt' => 'EAP-Sim-NONCE_MT', - 'eap_sim_nonce_s' => 'EAP-Sim-NONCE_S', - 'eap_sim_notification' => 'EAP-Sim-NOTIFICATION', - 'eap_sim_padding' => 'EAP-Sim-PADDING', - 'eap_sim_permanent_id_req' => 'EAP-Sim-PERMANENT_ID_REQ', - 'eap_sim_rand' => 'EAP-Sim-RAND', - 'eap_sim_rand1' => 'EAP-Sim-Rand1', - 'eap_sim_rand2' => 'EAP-Sim-Rand2', - 'eap_sim_rand3' => 'EAP-Sim-Rand3', - 'eap_sim_selected_version' => 'EAP-Sim-SELECTED_VERSION', - 'eap_sim_sres1' => 'EAP-Sim-SRES1', - 'eap_sim_sres2' => 'EAP-Sim-SRES2', - 'eap_sim_sres3' => 'EAP-Sim-SRES3', - 'eap_sim_state' => 'EAP-Sim-State', - 'eap_sim_subtype' => 'EAP-Sim-Subtype', - 'eap_sim_version_list' => 'EAP-Sim-VERSION_LIST', - 'eap_tls_require_client_c' => 'EAP-TLS-Require-Client-Cert', - 'eap_type' => 'EAP-Type', - 'eap_type_gtc' => 'EAP-Type-GTC', - 'eap_type_identity' => 'EAP-Type-Identity', - 'eap_type_leap' => 'EAP-Type-LEAP', - 'eap_type_md5' => 'EAP-Type-MD5', - 'eap_type_nak' => 'EAP-Type-NAK', - 'eap_type_notification' => 'EAP-Type-Notification', - 'eap_type_otp' => 'EAP-Type-OTP', - 'eap_type_peap' => 'EAP-Type-PEAP', - 'eap_type_sim' => 'EAP-Type-SIM', - 'eap_type_sim2' => 'EAP-Type-SIM2', - 'eap_type_tls' => 'EAP-Type-TLS', - 'eap_type_ttls' => 'EAP-Type-TTLS', - 'error_cause' => 'Error-Cause', - 'erx_address_pool_name' => 'ERX-Address-Pool-Name', - 'erx_alternate_cli_access' => 'ERX-Alternate-Cli-Access-Level', - 'erx_alternate_cli_vroute' => 'ERX-Alternate-Cli-Vrouter-Name', - 'erx_atm_mbs' => 'ERX-Atm-MBS', - 'erx_atm_pcr' => 'ERX-Atm-PCR', - 'erx_atm_scr' => 'ERX-Atm-SCR', - 'erx_atm_service_category' => 'ERX-Atm-Service-Category', - 'erx_bearer_type' => 'ERX-Bearer-Type', - 'erx_cli_allow_all_vr_acc' => 'ERX-Cli-Allow-All-VR-Access', - 'erx_cli_initial_access_l' => 'ERX-Cli-Initial-Access-Level', - 'erx_dial_out_number' => 'ERX-Dial-Out-Number', - 'erx_egress_policy_name' => 'ERX-Egress-Policy-Name', - 'erx_egress_statistics' => 'ERX-Egress-Statistics', - 'erx_framed_ip_route_tag' => 'ERX-Framed-Ip-Route-Tag', - 'erx_igmp_enable' => 'ERX-Igmp-Enable', - 'erx_ingress_policy_name' => 'ERX-Ingress-Policy-Name', - 'erx_ingress_statistics' => 'ERX-Ingress-Statistics', - 'erx_input_gigapkts' => 'ERX-Input-Gigapkts', - 'erx_ipv6_local_interface' => 'ERX-IpV6-Local-Interface', - 'erx_ipv6_primary_dns' => 'ERX-Ipv6-Primary-Dns', - 'erx_ipv6_secondary_dns' => 'ERX-Ipv6-Secondary-Dns', - 'erx_ipv6_virtual_router' => 'ERX-IpV6-Virtual-Router', - 'erx_local_loopback_inter' => 'ERX-Local-Loopback-Interface', - 'erx_maximum_bps' => 'ERX-Maximum-BPS', - 'erx_minimum_bps' => 'ERX-Minimum-BPS', - 'erx_output_gigapkts' => 'ERX-Output-Gigapkts', - 'erx_ppp_auth_protocol' => 'ERX-PPP-Auth-Protocol', - 'erx_ppp_password' => 'ERX-PPP-Password', - 'erx_ppp_username' => 'ERX-PPP-Username', - 'erx_pppoe_description' => 'ERX-Pppoe-Description', - 'erx_pppoe_max_sessions' => 'ERX-Pppoe-Max-Sessions', - 'erx_pppoe_url' => 'ERX-Pppoe-Url', - 'erx_primary_dns' => 'ERX-Primary-Dns', - 'erx_primary_wins' => 'ERX-Primary-Wins', - 'erx_qos_profile_interfac' => 'ERX-Qos-Profile-Interface-Type', - 'erx_qos_profile_name' => 'ERX-Qos-Profile-Name', - 'erx_redirect_vr_name' => 'ERX-Redirect-VR-Name', - 'erx_sa_validate' => 'ERX-Sa-Validate', - 'erx_secondary_dns' => 'ERX-Secondary-Dns', - 'erx_secondary_wins' => 'ERX-Secondary-Wins', - 'erx_service_bundle' => 'ERX-Service-Bundle', - 'erx_tunnel_interface_id' => 'ERX-Tunnel-Interface-Id', - 'erx_tunnel_maximum_sessi' => 'ERX-Tunnel-Maximum-Sessions', - 'erx_tunnel_nas_port_meth' => 'ERX-Tunnel-Nas-Port-Method', - 'erx_tunnel_password' => 'ERX-Tunnel-Password', - 'erx_tunnel_tos' => 'ERX-Tunnel-Tos', - 'erx_tunnel_virtual_route' => 'ERX-Tunnel-Virtual-Router', - 'erx_virtual_router_name' => 'ERX-Virtual-Router-Name', - 'event_timestamp' => 'Event-Timestamp', - 'exec_program' => 'Exec-Program', - 'exec_program_wait' => 'Exec-Program-Wait', - 'expiration' => 'Expiration', - 'extreme_netlogin_only' => 'Extreme-Netlogin-Only', - 'extreme_netlogin_url' => 'Extreme-Netlogin-Url', - 'extreme_netlogin_url_des' => 'Extreme-Netlogin-Url-Desc', - 'extreme_netlogin_vlan' => 'Extreme-Netlogin-Vlan', - 'fall_through' => 'Fall-Through', - 'filter_id' => 'Filter-Id', - 'foundry_command_exceptio' => 'Foundry-Command-Exception-Flag', - 'foundry_command_string' => 'Foundry-Command-String', - 'foundry_inm_privilege' => 'Foundry-INM-Privilege', - 'foundry_privilege_level' => 'Foundry-Privilege-Level', - 'framed_address' => 'Framed-Address', - 'framed_appletalk_link' => 'Framed-AppleTalk-Link', - 'framed_appletalk_network' => 'Framed-AppleTalk-Network', - 'framed_appletalk_zone' => 'Framed-AppleTalk-Zone', - 'framed_callback_id' => 'Framed-Callback-Id', - 'framed_compression' => 'Framed-Compression', - 'framed_filter_id' => 'Framed-Filter-Id', - 'framed_interface_id' => 'Framed-Interface-Id', - 'framed_ip_address' => 'Framed-IP-Address', - 'framed_ip_netmask' => 'Framed-IP-Netmask', - 'framed_ipv6_pool' => 'Framed-IPv6-Pool', - 'framed_ipv6_prefix' => 'Framed-IPv6-Prefix', - 'framed_ipv6_route' => 'Framed-IPv6-Route', - 'framed_ipx_network' => 'Framed-IPX-Network', - 'framed_mtu' => 'Framed-MTU', - 'framed_netmask' => 'Framed-Netmask', - 'framed_pool' => 'Framed-Pool', - 'framed_protocol' => 'Framed-Protocol', - 'framed_route' => 'Framed-Route', - 'framed_routing' => 'Framed-Routing', - 'freeradius_proxied_to' => 'FreeRADIUS-Proxied-To', - 'gandalf_around_the_corne' => 'Gandalf-Around-The-Corner', - 'gandalf_authentication_s' => 'Gandalf-Authentication-String', - 'gandalf_calling_line_id_' => 'Gandalf-Calling-Line-ID-1', - 'gandalf_calling_line_ida' => 'Gandalf-Calling-Line-ID-2', - 'gandalf_channel_group_na' => 'Gandalf-Channel-Group-Name-1', - 'gandalf_channel_group_nb' => 'Gandalf-Channel-Group-Name-2', - 'gandalf_compression_stat' => 'Gandalf-Compression-Status', - 'gandalf_dial_prefix_name' => 'Gandalf-Dial-Prefix-Name-1', - 'gandalf_dial_prefix_namf' => 'Gandalf-Dial-Prefix-Name-2', - 'gandalf_fwd_broadcast_in' => 'Gandalf-Fwd-Broadcast-In', - 'gandalf_fwd_broadcast_ou' => 'Gandalf-Fwd-Broadcast-Out', - 'gandalf_fwd_multicast_in' => 'Gandalf-Fwd-Multicast-In', - 'gandalf_fwd_multicast_ou' => 'Gandalf-Fwd-Multicast-Out', - 'gandalf_fwd_unicast_in' => 'Gandalf-Fwd-Unicast-In', - 'gandalf_fwd_unicast_out' => 'Gandalf-Fwd-Unicast-Out', - 'gandalf_hunt_group' => 'Gandalf-Hunt-Group', - 'gandalf_ipx_spoofing_sta' => 'Gandalf-IPX-Spoofing-State', - 'gandalf_ipx_watchdog_spo' => 'Gandalf-IPX-Watchdog-Spoof', - 'gandalf_min_outgoing_bea' => 'Gandalf-Min-Outgoing-Bearer', - 'gandalf_modem_mode' => 'Gandalf-Modem-Mode', - 'gandalf_modem_required_1' => 'Gandalf-Modem-Required-1', - 'gandalf_modem_required_2' => 'Gandalf-Modem-Required-2', - 'gandalf_operational_mode' => 'Gandalf-Operational-Modes', - 'gandalf_phone_number_1' => 'Gandalf-Phone-Number-1', - 'gandalf_phone_number_2' => 'Gandalf-Phone-Number-2', - 'gandalf_ppp_authenticati' => 'Gandalf-PPP-Authentication', - 'gandalf_ppp_ncp_type' => 'Gandalf-PPP-NCP-Type', - 'gandalf_remote_lan_name' => 'Gandalf-Remote-LAN-Name', - 'gandalf_sap_group_name_1' => 'Gandalf-SAP-Group-Name-1', - 'gandalf_sap_group_name_2' => 'Gandalf-SAP-Group-Name-2', - 'gandalf_sap_group_name_3' => 'Gandalf-SAP-Group-Name-3', - 'gandalf_sap_group_name_4' => 'Gandalf-SAP-Group-Name-4', - 'gandalf_sap_group_name_5' => 'Gandalf-SAP-Group-Name-5', - 'garderos_location_name' => 'Garderos-Location-Name', - 'garderos_service_name' => 'Garderos-Service-Name', - 'group' => 'Group', - 'group_name' => 'Group-Name', - 'gw_final_xlated_cdn' => 'gw-final-xlated-cdn', - 'gw_rxd_cdn' => 'gw-rxd-cdn', - 'h323_billing_model' => 'h323-billing-model', - 'h323_call_origin' => 'h323-call-origin', - 'h323_call_type' => 'h323-call-type', - 'h323_conf_id' => 'h323-conf-id', - 'h323_connect_time' => 'h323-connect-time', - 'h323_credit_amount' => 'h323-credit-amount', - 'h323_credit_time' => 'h323-credit-time', - 'h323_currency' => 'h323-currency', - 'h323_disconnect_cause' => 'h323-disconnect-cause', - 'h323_disconnect_time' => 'h323-disconnect-time', - 'h323_gw_id' => 'h323-gw-id', - 'h323_incoming_conf_id' => 'h323-incoming-conf-id', - 'h323_preferred_lang' => 'h323-preferred-lang', - 'h323_prompt_id' => 'h323-prompt-id', - 'h323_redirect_ip_address' => 'h323-redirect-ip-address', - 'h323_redirect_number' => 'h323-redirect-number', - 'h323_remote_address' => 'h323-remote-address', - 'h323_return_code' => 'h323-return-code', - 'h323_setup_time' => 'h323-setup-time', - 'h323_time_and_day' => 'h323-time-and-day', - 'h323_voice_quality' => 'h323-voice-quality', - 'hint' => 'Hint', - 'huntgroup_name' => 'Huntgroup-Name', - 'idle_timeout' => 'Idle-Timeout', - 'incoming_req_uri' => 'incoming-req-uri', - 'initial_modulation_type' => 'Initial-Modulation-Type', - 'ip3_ip_option' => 'IP3-IP-Option', - 'ip3_rdata_rate' => 'IP3-RData-Rate', - 'ip3_xdata_rate' => 'IP3-XData-Rate', - 'ip_address_pool_name' => 'Ip_Address_Pool_Name', - 'ip_address_pool_namf' => 'Ip-Address-Pool-Name', - 'ip_host_addr' => 'Ip_Host_Addr', - 'ip_host_adds' => 'Ip-Host-Addr', - 'ip_tos_field' => 'IP_TOS_Field', - 'ip_tos_fiele' => 'IP-TOS-Field', - 'itk_acct_serv_ip' => 'ITK-Acct-Serv-IP', - 'itk_acct_serv_prot' => 'ITK-Acct-Serv-Prot', - 'itk_auth_req_type' => 'ITK-Auth-Req-Type', - 'itk_auth_serv_ip' => 'ITK-Auth-Serv-IP', - 'itk_auth_serv_prot' => 'ITK-Auth-Serv-Prot', - 'itk_banner' => 'ITK-Banner', - 'itk_channel_binding' => 'ITK-Channel-Binding', - 'itk_ddi' => 'ITK-DDI', - 'itk_dest_no' => 'ITK-Dest-No', - 'itk_dialout_type' => 'ITK-Dialout-Type', - 'itk_filter_rule' => 'ITK-Filter-Rule', - 'itk_ftp_auth_ip' => 'ITK-Ftp-Auth-IP', - 'itk_ip_pool' => 'ITK-IP-Pool', - 'itk_isdn_prot' => 'ITK-ISDN-Prot', - 'itk_modem_init_string' => 'ITK-Modem-Init-String', - 'itk_modem_pool_id' => 'ITK-Modem-Pool-Id', - 'itk_nas_name' => 'ITK-NAS-Name', - 'itk_password_prompt' => 'ITK-Password-Prompt', - 'itk_ppp_auth_type' => 'ITK-PPP-Auth-Type', - 'itk_ppp_client_server_mo' => 'ITK-PPP-Client-Server-Mode', - 'itk_ppp_compression_prot' => 'ITK-PPP-Compression-Prot', - 'itk_prompt' => 'ITK-Prompt', - 'itk_provider_id' => 'ITK-Provider-Id', - 'itk_start_delay' => 'ITK-Start-Delay', - 'itk_tunnel_ip' => 'ITK-Tunnel-IP', - 'itk_tunnel_prot' => 'ITK-Tunnel-Prot', - 'itk_usergroup' => 'ITK-Usergroup', - 'itk_username' => 'ITK-Username', - 'itk_username_prompt' => 'ITK-Username-Prompt', - 'itk_users_default_entry' => 'ITK-Users-Default-Entry', - 'itk_users_default_pw' => 'ITK-Users-Default-Pw', - 'itk_welcome_message' => 'ITK-Welcome-Message', - 'juniper_allow_commands' => 'Juniper-Allow-Commands', - 'juniper_allow_configurat' => 'Juniper-Allow-Configuration', - 'juniper_deny_commands' => 'Juniper-Deny-Commands', - 'juniper_deny_configurati' => 'Juniper-Deny-Configuration', - 'juniper_local_user_name' => 'Juniper-Local-User-Name', - 'karlnet_turbocell_name' => 'KarlNet-TurboCell-Name', - 'karlnet_turbocell_opmode' => 'KarlNet-TurboCell-OpMode', - 'karlnet_turbocell_opstat' => 'KarlNet-TurboCell-OpState', - 'karlnet_turbocell_txrate' => 'KarlNet-TurboCell-TxRate', - 'lac_port' => 'LAC_Port', - 'lac_port_type' => 'LAC_Port_Type', - 'lac_port_typf' => 'LAC-Port-Type', - 'lac_poru' => 'LAC-Port', - 'lac_real_port' => 'LAC_Real_Port', - 'lac_real_port_type' => 'LAC_Real_Port_Type', - 'lac_real_port_typf' => 'LAC-Real-Port-Type', - 'lac_real_poru' => 'LAC-Real-Port', - 'ldap_group' => 'Ldap-Group', - 'ldap_userdn' => 'Ldap-UserDn', - 'le_admin_group' => 'LE-Admin-Group', - 'le_advice_of_charge' => 'LE-Advice-of-Charge', - 'le_connect_detail' => 'LE-Connect-Detail', - 'le_ip_gateway' => 'LE-IP-Gateway', - 'le_ip_pool' => 'LE-IP-Pool', - 'le_ipsec_active_profile' => 'LE-IPSec-Active-Profile', - 'le_ipsec_deny_action' => 'LE-IPSec-Deny-Action', - 'le_ipsec_log_options' => 'LE-IPSec-Log-Options', - 'le_ipsec_outsource_profi' => 'LE-IPSec-Outsource-Profile', - 'le_ipsec_passive_profile' => 'LE-IPSec-Passive-Profile', - 'le_modem_info' => 'LE-Modem-Info', - 'le_multicast_client' => 'LE-Multicast-Client', - 'le_nat_inmap' => 'LE-NAT-Inmap', - 'le_nat_log_options' => 'LE-NAT-Log-Options', - 'le_nat_other_session_tim' => 'LE-NAT-Other-Session-Timeout', - 'le_nat_outmap' => 'LE-NAT-Outmap', - 'le_nat_outsource_inmap' => 'LE-NAT-Outsource-Inmap', - 'le_nat_outsource_outmap' => 'LE-NAT-Outsource-Outmap', - 'le_nat_sess_dir_fail_act' => 'LE-NAT-Sess-Dir-Fail-Action', - 'le_nat_tcp_session_timeo' => 'LE-NAT-TCP-Session-Timeout', - 'le_terminate_detail' => 'LE-Terminate-Detail', - 'lm_password' => 'LM-Password', - 'local_web_acct_duration' => 'Local-Web-Acct-Duration', - 'local_web_acct_interim_r' => 'Local-Web-Acct-Interim-Rx-Bytes', - 'local_web_acct_interim_s' => 'Local-Web-Acct-Interim-Rx-Gigawords', - 'local_web_acct_interim_t' => 'Local-Web-Acct-Interim-Tx-Bytes', - 'local_web_acct_interim_u' => 'Local-Web-Acct-Interim-Tx-Gigawords', - 'local_web_acct_interim_v' => 'Local-Web-Acct-Interim-Tx-Mgmt', - 'local_web_acct_interim_w' => 'Local-Web-Acct-Interim-Rx-Mgmt', - 'local_web_acct_rx_mgmt' => 'Local-Web-Acct-Rx-Mgmt', - 'local_web_acct_time' => 'Local-Web-Acct-Time', - 'local_web_acct_tx_mgmt' => 'Local-Web-Acct-Tx-Mgmt', - 'local_web_border_router' => 'Local-Web-Border-Router', - 'local_web_client_ip' => 'Local-Web-Client-Ip', - 'local_web_reauth_counter' => 'Local-Web-Reauth-Counter', - 'local_web_rx_limit' => 'Local-Web-Rx-Limit', - 'local_web_tx_limit' => 'Local-Web-Tx-Limit', - 'login_callback_number' => 'Login-Callback-Number', - 'login_host' => 'Login-Host', - 'login_ip_host' => 'Login-IP-Host', - 'login_ipv6_host' => 'Login-IPv6-Host', - 'login_lat_group' => 'Login-LAT-Group', - 'login_lat_node' => 'Login-LAT-Node', - 'login_lat_port' => 'Login-LAT-Port', - 'login_lat_service' => 'Login-LAT-Service', - 'login_port' => 'Login-Port', - 'login_service' => 'Login-Service', - 'login_tcp_port' => 'Login-TCP-Port', - 'login_time' => 'Login-Time', - 'mcast_maxgroups' => 'Mcast_MaxGroups', - 'mcast_maxgroupt' => 'Mcast-MaxGroups', - 'mcast_receive' => 'Mcast_Receive', - 'mcast_receivf' => 'Mcast-Receive', - 'mcast_send' => 'Mcast_Send', - 'mcast_sene' => 'Mcast-Send', - 'medium_type' => 'Medium_Type', - 'medium_typf' => 'Medium-Type', - 'menu' => 'Menu', - 'merit_proxy_action' => 'Merit-Proxy-Action', - 'merit_user_id' => 'Merit-User-Id', - 'merit_user_realm' => 'Merit-User-Realm', - 'message_authenticator' => 'Message-Authenticator', - 'method' => 'method', - 'mikrotik_group' => 'Mikrotik-Group', - 'mikrotik_recv_limit' => 'Mikrotik-Recv-Limit', - 'mikrotik_xmit_limit' => 'Mikrotik-Xmit-Limit', - 'module_failure_message' => 'Module-Failure-Message', - 'module_success_message' => 'Module-Success-Message', - 'motorola_canopy_cirenabl' => 'Motorola-Canopy-CIRENABLE', - 'motorola_canopy_dlba' => 'Motorola-Canopy-DLBA', - 'motorola_canopy_enable' => 'Motorola-Canopy-Enable', - 'motorola_canopy_higherbw' => 'Motorola-Canopy-HIGHERBW', - 'motorola_canopy_hpcenabl' => 'Motorola-Canopy-HPCENABLE', - 'motorola_canopy_hpsdldr' => 'Motorola-Canopy-HPSDLDR', - 'motorola_canopy_hpsuldr' => 'Motorola-Canopy-HPSULDR', - 'motorola_canopy_lpsdldr' => 'Motorola-Canopy-LPSDLDR', - 'motorola_canopy_lpsuldr' => 'Motorola-Canopy-LPSULDR', - 'motorola_canopy_sdldr' => 'Motorola-Canopy-SDLDR', - 'motorola_canopy_shared_s' => 'Motorola-Canopy-Shared-Secret', - 'motorola_canopy_suldr' => 'Motorola-Canopy-SULDR', - 'motorola_canopy_ulba' => 'Motorola-Canopy-ULBA', - 'ms_acct_auth_type' => 'MS-Acct-Auth-Type', - 'ms_acct_eap_type' => 'MS-Acct-EAP-Type', - 'ms_arap_pw_change_reason' => 'MS-ARAP-PW-Change-Reason', - 'ms_bap_usage' => 'MS-BAP-Usage', - 'ms_chap2_cpw' => 'MS-CHAP2-CPW', - 'ms_chap2_response' => 'MS-CHAP2-Response', - 'ms_chap2_success' => 'MS-CHAP2-Success', - 'ms_chap_challenge' => 'MS-CHAP-Challenge', - 'ms_chap_cpw_1' => 'MS-CHAP-CPW-1', - 'ms_chap_cpw_2' => 'MS-CHAP-CPW-2', - 'ms_chap_domain' => 'MS-CHAP-Domain', - 'ms_chap_error' => 'MS-CHAP-Error', - 'ms_chap_lm_enc_pw' => 'MS-CHAP-LM-Enc-PW', - 'ms_chap_mppe_keys' => 'MS-CHAP-MPPE-Keys', - 'ms_chap_nt_enc_pw' => 'MS-CHAP-NT-Enc-PW', - 'ms_chap_response' => 'MS-CHAP-Response', - 'ms_chap_use_ntlm_auth' => 'MS-CHAP-Use-NTLM-Auth', - 'ms_filter' => 'MS-Filter', - 'ms_link_drop_time_limit' => 'MS-Link-Drop-Time-Limit', - 'ms_link_utilization_thre' => 'MS-Link-Utilization-Threshold', - 'ms_mppe_encryption_polic' => 'MS-MPPE-Encryption-Policy', - 'ms_mppe_encryption_type' => 'MS-MPPE-Encryption-Type', - 'ms_mppe_encryption_types' => 'MS-MPPE-Encryption-Types', - 'ms_mppe_recv_key' => 'MS-MPPE-Recv-Key', - 'ms_mppe_send_key' => 'MS-MPPE-Send-Key', - 'ms_new_arap_password' => 'MS-New-ARAP-Password', - 'ms_old_arap_password' => 'MS-Old-ARAP-Password', - 'ms_primary_dns_server' => 'MS-Primary-DNS-Server', - 'ms_primary_nbns_server' => 'MS-Primary-NBNS-Server', - 'ms_ras_vendor' => 'MS-RAS-Vendor', - 'ms_ras_version' => 'MS-RAS-Version', - 'ms_secondary_dns_server' => 'MS-Secondary-DNS-Server', - 'ms_secondary_nbns_server' => 'MS-Secondary-NBNS-Server', - 'multi_link_flag' => 'Multi-Link-Flag', - 'nas_identifier' => 'NAS-Identifier', - 'nas_ip_address' => 'NAS-IP-Address', - 'nas_ipv6_address' => 'NAS-IPv6-Address', - 'nas_port' => 'NAS-Port', - 'nas_port_id' => 'NAS-Port-Id', - 'nas_port_type' => 'NAS-Port-Type', - 'nas_real_port' => 'NAS_Real_Port', - 'nas_real_poru' => 'NAS-Real-Port', - 'navini_avpair' => 'Navini-AVPair', - 'next_hop_dn' => 'next-hop-dn', - 'next_hop_ip' => 'next-hop-ip', - 'nn_data_rate' => 'NN-Data-Rate', - 'nn_data_rate_ceiling' => 'NN-Data-Rate-Ceiling', - 'nn_homenode' => 'NN-Homenode', - 'nn_homeservice' => 'NN-Homeservice', - 'nn_homeservice_name' => 'NN-Homeservice-Name', - 'no_such_attribute' => 'No-Such-Attribute', - 'nokia_charging_id' => 'Nokia-Charging-Id', - 'nokia_ggsn_ip_address' => 'Nokia-GGSN-IP-Address', - 'nokia_imsi' => 'Nokia-IMSI', - 'nokia_prepaid_ind' => 'Nokia-Prepaid-Ind', - 'nokia_sgsn_ip_address' => 'Nokia-SGSN-IP-Address', - 'nomadix_bw_down' => 'Nomadix-Bw-Down', - 'nomadix_bw_up' => 'Nomadix-Bw-Up', - 'nomadix_config_url' => 'Nomadix-Config-URL', - 'nomadix_endofsession' => 'Nomadix-EndofSession', - 'nomadix_expiration' => 'Nomadix-Expiration', - 'nomadix_goodbye_url' => 'Nomadix-Goodbye-URL', - 'nomadix_ip_upsell' => 'Nomadix-IP-Upsell', - 'nomadix_logoff_url' => 'Nomadix-Logoff-URL', - 'nomadix_maxbytesdown' => 'Nomadix-MaxBytesDown', - 'nomadix_maxbytesup' => 'Nomadix-MaxBytesUp', - 'nomadix_net_vlan' => 'Nomadix-Net-VLAN', - 'nomadix_subnet' => 'Nomadix-Subnet', - 'nomadix_url_redirection' => 'Nomadix-URL-Redirection', - 'ns_admin_privilege' => 'NS-Admin-Privilege', - 'ns_mta_md5_password' => 'NS-MTA-MD5-Password', - 'ns_primary_dns' => 'NS-Primary-DNS', - 'ns_primary_wins' => 'NS-Primary-WINS', - 'ns_secondary_dns' => 'NS-Secondary-DNS', - 'ns_secondary_wins' => 'NS-Secondary-WINS', - 'ns_user_group' => 'NS-User-Group', - 'ns_vsys_name' => 'NS-VSYS-Name', - 'nt_password' => 'NT-Password', - 'ntlm_user_name' => 'NTLM-User-Name', - 'old_password' => 'Old-Password', - 'outgoing_req_uri' => 'outgoing-req-uri', - 'packet_dst_port' => 'Packet-Dst-Port', - 'packet_type' => 'Packet-Type', - 'pam_auth' => 'Pam-Auth', - 'password' => 'Password', - 'password_retry' => 'Password-Retry', - 'police_burst' => 'Police_Burst', - 'police_bursu' => 'Police-Burst', - 'police_rate' => 'Police_Rate', - 'police_ratf' => 'Police-Rate', - 'pool_name' => 'Pool-Name', - 'port_limit' => 'Port-Limit', - 'port_message' => 'Port-Message', - 'post_auth_type' => 'Post-Auth-Type', - 'post_proxy_type' => 'Post-Proxy-Type', - 'postauth_type' => 'PostAuth-Type', - 'pppoe_motm' => 'PPPOE_MOTM', - 'pppoe_motn' => 'PPPOE-MOTM', - 'pppoe_url' => 'PPPOE_URL', - 'pppoe_urm' => 'PPPOE-URL', - 'pre_acct_type' => 'Pre-Acct-Type', - 'pre_proxy_type' => 'Pre-Proxy-Type', - 'prefix' => 'Prefix', - 'prev_hop_ip' => 'prev-hop-ip', - 'prev_hop_via' => 'prev-hop-via', - 'prompt' => 'Prompt', - 'propel_accelerate' => 'Propel-Accelerate', - 'propel_client_ip_address' => 'Propel-Client-IP-Address', - 'propel_client_nas_ip_add' => 'Propel-Client-NAS-IP-Address', - 'propel_client_source_id' => 'Propel-Client-Source-ID', - 'propel_dialed_digits' => 'Propel-Dialed-Digits', - 'proxy_state' => 'Proxy-State', - 'proxy_to_realm' => 'Proxy-To-Realm', - 'pvc_circuit_padding' => 'PVC_Circuit_Padding', - 'pvc_circuit_paddinh' => 'PVC-Circuit-Padding', - 'pvc_encapsulation_type' => 'PVC_Encapsulation_Type', - 'pvc_encapsulation_typf' => 'PVC-Encapsulation-Type', - 'pvc_profile_name' => 'PVC_Profile_Name', - 'pvc_profile_namf' => 'PVC-Profile-Name', - 'quintum_avpair' => 'Quintum-AVPair', - 'quintum_h323_billing_mod' => 'Quintum-h323-billing-model', - 'quintum_h323_call_origin' => 'Quintum-h323-call-origin', - 'quintum_h323_call_type' => 'Quintum-h323-call-type', - 'quintum_h323_conf_id' => 'Quintum-h323-conf-id', - 'quintum_h323_connect_tim' => 'Quintum-h323-connect-time', - 'quintum_h323_credit_amou' => 'Quintum-h323-credit-amount', - 'quintum_h323_credit_time' => 'Quintum-h323-credit-time', - 'quintum_h323_currency_ty' => 'Quintum-h323-currency-type', - 'quintum_h323_disconnect_' => 'Quintum-h323-disconnect-time', - 'quintum_h323_disconnecta' => 'Quintum-h323-disconnect-cause', - 'quintum_h323_gw_id' => 'Quintum-h323-gw-id', - 'quintum_h323_incoming_co' => 'Quintum-h323-incoming-conf-id', - 'quintum_h323_preferred_l' => 'Quintum-h323-preferred-lang', - 'quintum_h323_prompt_id' => 'Quintum-h323-prompt-id', - 'quintum_h323_redirect_ip' => 'Quintum-h323-redirect-ip-address', - 'quintum_h323_redirect_nu' => 'Quintum-h323-redirect-number', - 'quintum_h323_remote_addr' => 'Quintum-h323-remote-address', - 'quintum_h323_return_code' => 'Quintum-h323-return-code', - 'quintum_h323_setup_time' => 'Quintum-h323-setup-time', - 'quintum_h323_time_and_da' => 'Quintum-h323-time-and-day', - 'quintum_h323_voice_quali' => 'Quintum-h323-voice-quality', - 'quintum_nas_port' => 'Quintum-NAS-Port', - 'rate_limit_burst' => 'Rate_Limit_Burst', - 'rate_limit_bursu' => 'Rate-Limit-Burst', - 'rate_limit_rate' => 'Rate_Limit_Rate', - 'rate_limit_ratf' => 'Rate-Limit-Rate', - 'realm' => 'Realm', - 'redcreek_tunneled_dns_se' => 'RedCreek-Tunneled-DNS-Server', - 'redcreek_tunneled_domain' => 'RedCreek-Tunneled-DomainName', - 'redcreek_tunneled_gatewa' => 'RedCreek-Tunneled-Gateway', - 'redcreek_tunneled_hostna' => 'RedCreek-Tunneled-HostName', - 'redcreek_tunneled_ip_add' => 'RedCreek-Tunneled-IP-Addr', - 'redcreek_tunneled_ip_net' => 'RedCreek-Tunneled-IP-Netmask', - 'redcreek_tunneled_search' => 'RedCreek-Tunneled-Search-List', - 'redcreek_tunneled_wins_s' => 'RedCreek-Tunneled-WINS-Server1', - 'redcreek_tunneled_wins_t' => 'RedCreek-Tunneled-WINS-Server2', - 'replicate_to_realm' => 'Replicate-To-Realm', - 'reply_message' => 'Reply-Message', - 'response_packet_type' => 'Response-Packet-Type', - 'rewrite_rule' => 'Rewrite-Rule', - 'sdx_service_name' => 'Sdx-Service-Name', - 'sdx_session_volume_quota' => 'Sdx-Session-Volume-Quota', - 'sdx_tunnel_disconnect_ca' => 'Sdx-Tunnel-Disconnect-Cause-Info', - 'service_type' => 'Service-Type', - 'session' => 'Session', - 'session_error_code' => 'Session_Error_Code', - 'session_error_codf' => 'Session-Error-Code', - 'session_error_msg' => 'Session_Error_Msg', - 'session_error_msh' => 'Session-Error-Msg', - 'session_protocol' => 'session-protocol', - 'session_timeout' => 'Session-Timeout', - 'session_type' => 'Session-Type', - 'shasta_service_profile' => 'Shasta-Service-Profile', - 'shasta_user_privilege' => 'Shasta-User-Privilege', - 'shasta_vpn_name' => 'Shasta-VPN-Name', - 'shiva_acct_serv_switch' => 'Shiva-Acct-Serv-Switch', - 'shiva_called_number' => 'Shiva-Called-Number', - 'shiva_calling_number' => 'Shiva-Calling-Number', - 'shiva_compression_type' => 'Shiva-Compression-Type', - 'shiva_connect_reason' => 'Shiva-Connect-Reason', - 'shiva_customer_id' => 'Shiva-Customer-Id', - 'shiva_disconnect_reason' => 'Shiva-Disconnect-Reason', - 'shiva_event_flags' => 'Shiva-Event-Flags', - 'shiva_function' => 'Shiva-Function', - 'shiva_link_protocol' => 'Shiva-Link-Protocol', - 'shiva_link_speed' => 'Shiva-Link-Speed', - 'shiva_links_in_bundle' => 'Shiva-Links-In-Bundle', - 'shiva_network_protocols' => 'Shiva-Network-Protocols', - 'shiva_session_id' => 'Shiva-Session-Id', - 'shiva_type_of_service' => 'Shiva-Type-Of-Service', - 'shiva_user_attributes' => 'Shiva-User-Attributes', - 'simultaneous_use' => 'Simultaneous-Use', - 'sip_from' => 'Sip-From', - 'sip_hdr' => 'sip-hdr', - 'sip_method' => 'Sip-Method', - 'sip_to' => 'Sip-To', - 'sip_translated_request_u' => 'Sip-Translated-Request-URI', - 'smb_account_ctrl' => 'SMB-Account-CTRL', - 'smb_account_ctrl_text' => 'SMB-Account-CTRL-TEXT', - 'sonicwall_user_group' => 'SonicWall-User-Group', - 'sonicwall_user_privilege' => 'SonicWall-User-Privilege', - 'source_validation' => 'Source_Validation', - 'source_validatioo' => 'Source-Validation', - 'sql_group' => 'Sql-Group', - 'sql_user_name' => 'SQL-User-Name', - 'ss3_firewall_user_privil' => 'SS3-Firewall-User-Privilege', - 'st_acct_vc_connection_id' => 'ST-Acct-VC-Connection-Id', - 'st_policy_name' => 'ST-Policy-Name', - 'st_primary_dns_server' => 'ST-Primary-DNS-Server', - 'st_primary_nbns_server' => 'ST-Primary-NBNS-Server', - 'st_secondary_dns_server' => 'ST-Secondary-DNS-Server', - 'st_secondary_nbns_server' => 'ST-Secondary-NBNS-Server', - 'st_service_domain' => 'ST-Service-Domain', - 'st_service_name' => 'ST-Service-Name', - 'state' => 'State', - 'strip_user_name' => 'Strip-User-Name', - 'stripped_user_name' => 'Stripped-User-Name', - 'subscriber' => 'subscriber', - 'suffix' => 'Suffix', - 'telebit_accounting_info' => 'Telebit-Accounting-Info', - 'telebit_activate_command' => 'Telebit-Activate-Command', - 'telebit_login_command' => 'Telebit-Login-Command', - 'telebit_port_name' => 'Telebit-Port-Name', - 'termination_action' => 'Termination-Action', - 'termination_menu' => 'Termination-Menu', - 'trapeze_encryption_type' => 'Trapeze-Encryption-Type', - 'trapeze_end_date' => 'Trapeze-End-Date', - 'trapeze_mobility_profile' => 'Trapeze-Mobility-Profile', - 'trapeze_ssid' => 'Trapeze-SSID', - 'trapeze_start_date' => 'Trapeze-Start-Date', - 'trapeze_time_of_day' => 'Trapeze-Time-Of-Day', - 'trapeze_url' => 'Trapeze-URL', - 'trapeze_vlan_name' => 'Trapeze-VLAN-Name', - 'tty_level_max' => 'TTY_Level_Max', - 'tty_level_may' => 'TTY-Level-Max', - 'tty_level_start' => 'TTY_Level_Start', - 'tty_level_staru' => 'TTY-Level-Start', - 'tunnel_algorithm' => 'Tunnel_Algorithm', - 'tunnel_algorithn' => 'Tunnel-Algorithm', - 'tunnel_assignment_id' => 'Tunnel-Assignment-Id', - 'tunnel_client_auth_id' => 'Tunnel-Client-Auth-Id', - 'tunnel_client_endpoint' => 'Tunnel-Client-Endpoint', - 'tunnel_cmd_timeout' => 'Tunnel_Cmd_Timeout', - 'tunnel_cmd_timeouu' => 'Tunnel-Cmd-Timeout', - 'tunnel_connection_id' => 'Tunnel-Connection-Id', - 'tunnel_context' => 'Tunnel_Context', - 'tunnel_contexu' => 'Tunnel-Context', - 'tunnel_deadtime' => 'Tunnel_Deadtime', - 'tunnel_deadtimf' => 'Tunnel-Deadtime', - 'tunnel_dnis' => 'Tunnel_DNIS', - 'tunnel_dnit' => 'Tunnel-DNIS', - 'tunnel_domain' => 'Tunnel_Domain', - 'tunnel_domaio' => 'Tunnel-Domain', - 'tunnel_function' => 'Tunnel_Function', - 'tunnel_functioo' => 'Tunnel-Function', - 'tunnel_group' => 'Tunnel_Group', - 'tunnel_grouq' => 'Tunnel-Group', - 'tunnel_l2f_second_passwo' => 'Tunnel_L2F_Second_Password', - 'tunnel_l2f_second_passwp' => 'Tunnel-L2F-Second-Password', - 'tunnel_local_name' => 'Tunnel_Local_Name', - 'tunnel_local_namf' => 'Tunnel-Local-Name', - 'tunnel_max_sessions' => 'Tunnel_Max_Sessions', - 'tunnel_max_sessiont' => 'Tunnel-Max-Sessions', - 'tunnel_max_tunnels' => 'Tunnel_Max_Tunnels', - 'tunnel_max_tunnelt' => 'Tunnel-Max-Tunnels', - 'tunnel_medium_type' => 'Tunnel-Medium-Type', - 'tunnel_password' => 'Tunnel-Password', - 'tunnel_police_burst' => 'Tunnel_Police_Burst', - 'tunnel_police_bursu' => 'Tunnel-Police-Burst', - 'tunnel_police_rate' => 'Tunnel_Police_Rate', - 'tunnel_police_ratf' => 'Tunnel-Police-Rate', - 'tunnel_preference' => 'Tunnel-Preference', - 'tunnel_private_group_id' => 'Tunnel-Private-Group-Id', - 'tunnel_rate_limit_burst' => 'Tunnel_Rate_Limit_Burst', - 'tunnel_rate_limit_bursu' => 'Tunnel-Rate-Limit-Burst', - 'tunnel_rate_limit_rate' => 'Tunnel_Rate_Limit_Rate', - 'tunnel_rate_limit_ratf' => 'Tunnel-Rate-Limit-Rate', - 'tunnel_remote_name' => 'Tunnel_Remote_Name', - 'tunnel_remote_namf' => 'Tunnel-Remote-Name', - 'tunnel_retransmit' => 'Tunnel_Retransmit', - 'tunnel_retransmiu' => 'Tunnel-Retransmit', - 'tunnel_server_auth_id' => 'Tunnel-Server-Auth-Id', - 'tunnel_server_endpoint' => 'Tunnel-Server-Endpoint', - 'tunnel_session_auth' => 'Tunnel_Session_Auth', - 'tunnel_session_auth_ctx' => 'Tunnel_Session_Auth_Ctx', - 'tunnel_session_auth_cty' => 'Tunnel-Session-Auth-Ctx', - 'tunnel_session_auth_serv' => 'Tunnel_Session_Auth_Service_Grp', - 'tunnel_session_auth_serw' => 'Tunnel-Session-Auth-Service-Grp', - 'tunnel_session_auti' => 'Tunnel-Session-Auth', - 'tunnel_type' => 'Tunnel-Type', - 'tunnel_window' => 'Tunnel_Window', - 'tunnel_windox' => 'Tunnel-Window', - 'unix_ftp_gid' => 'Unix-FTP-GID', - 'unix_ftp_group_ids' => 'Unix-FTP-Group-Ids', - 'unix_ftp_group_names' => 'Unix-FTP-Group-Names', - 'unix_ftp_home' => 'Unix-FTP-Home', - 'unix_ftp_shell' => 'Unix-FTP-Shell', - 'unix_ftp_uid' => 'Unix-FTP-UID', - 'user_category' => 'User-Category', - 'user_name' => 'User-Name', - 'user_name_is_star' => 'User-Name-Is-Star', - 'user_password' => 'User-Password', - 'user_profile' => 'User-Profile', - 'user_service_type' => 'User-Service-Type', - 'usr_accm_type' => 'USR-ACCM-Type', - 'usr_acct_reason_code' => 'USR-Acct-Reason-Code', - 'usr_actual_voltage' => 'USR-Actual-Voltage', - 'usr_appletalk' => 'USR-Appletalk', - 'usr_appletalk_network_ra' => 'USR-Appletalk-Network-Range', - 'usr_at_call_input_filter' => 'USR-AT-Call-Input-Filter', - 'usr_at_call_output_filte' => 'USR-AT-Call-Output-Filter', - 'usr_at_input_filter' => 'USR-AT-Input-Filter', - 'usr_at_output_filter' => 'USR-AT-Output-Filter', - 'usr_at_rtmp_input_filter' => 'USR-AT-RTMP-Input-Filter', - 'usr_at_rtmp_output_filte' => 'USR-AT-RTMP-Output-Filter', - 'usr_at_zip_input_filter' => 'USR-AT-Zip-Input-Filter', - 'usr_at_zip_output_filter' => 'USR-AT-Zip-Output-Filter', - 'usr_auth_mode' => 'USR-Auth-Mode', - 'usr_back_channel_data_ra' => 'USR-Back-Channel-Data-Rate', - 'usr_bearer_capabilities' => 'USR-Bearer-Capabilities', - 'usr_block_error_count_li' => 'USR-Block-Error-Count-Limit', - 'usr_blocks_received' => 'USR-Blocks-Received', - 'usr_blocks_resent' => 'USR-Blocks-Resent', - 'usr_blocks_sent' => 'USR-Blocks-Sent', - 'usr_bridging' => 'USR-Bridging', - 'usr_call_arrival_in_gmt' => 'USR-Call-Arrival-in-GMT', - 'usr_call_arrival_time' => 'USR-Call-Arrival-Time', - 'usr_call_connect_in_gmt' => 'USR-Call-Connect-in-GMT', - 'usr_call_connecting_time' => 'USR-Call-Connecting-Time', - 'usr_call_end_date_time' => 'USR-Call-End-Date-Time', - 'usr_call_end_time' => 'USR-Call-End-Time', - 'usr_call_error_code' => 'USR-Call-Error-Code', - 'usr_call_event_code' => 'USR-Call-Event-Code', - 'usr_call_reference_numbe' => 'USR-Call-Reference-Number', - 'usr_call_start_date_time' => 'USR-Call-Start-Date-Time', - 'usr_call_terminate_in_gm' => 'USR-Call-Terminate-in-GMT', - 'usr_call_type' => 'USR-Call-Type', - 'usr_callback_type' => 'USR-Callback-Type', - 'usr_called_party_number' => 'USR-Called-Party-Number', - 'usr_calling_party_number' => 'USR-Calling-Party-Number', - 'usr_card_type' => 'USR-Card-Type', - 'usr_ccp_algorithm' => 'USR-CCP-Algorithm', - 'usr_cdma_call_reference_' => 'USR-CDMA-Call-Reference-Number', - 'usr_channel' => 'USR-Channel', - 'usr_channel_connected_to' => 'USR-Channel-Connected-To', - 'usr_channel_decrement' => 'USR-Channel-Decrement', - 'usr_channel_expansion' => 'USR-Channel-Expansion', - 'usr_characters_received' => 'USR-Characters-Received', - 'usr_characters_sent' => 'USR-Characters-Sent', - 'usr_chassis_call_channel' => 'USR-Chassis-Call-Channel', - 'usr_chassis_call_slot' => 'USR-Chassis-Call-Slot', - 'usr_chassis_call_span' => 'USR-Chassis-Call-Span', - 'usr_chassis_slot' => 'USR-Chassis-Slot', - 'usr_chassis_temp_thresho' => 'USR-Chassis-Temp-Threshold', - 'usr_chassis_temperature' => 'USR-Chassis-Temperature', - 'usr_chat_script_name' => 'USR-Chat-Script-Name', - 'usr_compression_algorith' => 'USR-Compression-Algorithm', - 'usr_compression_reset_mo' => 'USR-Compression-Reset-Mode', - 'usr_compression_type' => 'USR-Compression-Type', - 'usr_connect_speed' => 'USR-Connect-Speed', - 'usr_connect_term_reason' => 'USR-Connect-Term-Reason', - 'usr_connect_time' => 'USR-Connect-Time', - 'usr_connect_time_limit' => 'USR-Connect-Time-Limit', - 'usr_cusr_hat_script_rule' => 'USR-CUSR-hat-Script-Rules', - 'usr_default_dte_data_rat' => 'USR-Default-DTE-Data-Rate', - 'usr_device_connected_to' => 'USR-Device-Connected-To', - 'usr_disconnect_cause_ind' => 'USR-Disconnect-Cause-Indicator', - 'usr_dnis_reauthenticatio' => 'USR-DNIS-ReAuthentication', - 'usr_ds0' => 'USR-DS0', - 'usr_ds0s' => 'USR-DS0s', - 'usr_dte_data_idle_timout' => 'USR-DTE-Data-Idle-Timout', - 'usr_dte_ring_no_answer_l' => 'USR-DTE-Ring-No-Answer-Limit', - 'usr_dtr_false_timeout' => 'USR-DTR-False-Timeout', - 'usr_dtr_true_timeout' => 'USR-DTR-True-Timeout', - 'usr_end_time' => 'USR-End-Time', - 'usr_equalization_type' => 'USR-Equalization-Type', - 'usr_esn' => 'USR-ESN', - 'usr_et_bridge_call_outpu' => 'USR-ET-Bridge-Call-Output-Filte', - 'usr_et_bridge_input_filt' => 'USR-ET-Bridge-Input-Filter', - 'usr_et_bridge_output_fil' => 'USR-ET-Bridge-Output-Filter', - 'usr_event_date_time' => 'USR-Event-Date-Time', - 'usr_event_id' => 'USR-Event-Id', - 'usr_expansion_algorithm' => 'USR-Expansion-Algorithm', - 'usr_expected_voltage' => 'USR-Expected-Voltage', - 'usr_failure_to_connect_r' => 'USR-Failure-to-Connect-Reason', - 'usr_fallback_enabled' => 'USR-Fallback-Enabled', - 'usr_fallback_limit' => 'USR-Fallback-Limit', - 'usr_filter_zones' => 'USR-Filter-Zones', - 'usr_final_rx_link_data_r' => 'USR-Final-Rx-Link-Data-Rate', - 'usr_final_tx_link_data_r' => 'USR-Final-Tx-Link-Data-Rate', - 'usr_framed_ip_address_po' => 'USR-Framed_IP_Address_Pool_Name', - 'usr_framed_ipx_route' => 'USR-Framed-IPX-Route', - 'usr_gateway_ip_address' => 'USR-Gateway-IP-Address', - 'usr_harc_disconnect_code' => 'USR-HARC-Disconnect-Code', - 'usr_host_type' => 'USR-Host-Type', - 'usr_ids0_call_type' => 'USR-IDS0-Call-Type', - 'usr_igmp_maximum_respons' => 'USR-IGMP-Maximum-Response-Time', - 'usr_igmp_query_interval' => 'USR-IGMP-Query-Interval', - 'usr_igmp_robustness' => 'USR-IGMP-Robustness', - 'usr_igmp_routing' => 'USR-IGMP-Routing', - 'usr_igmp_version' => 'USR-IGMP-Version', - 'usr_imsi' => 'USR-IMSI', - 'usr_initial_rx_link_data' => 'USR-Initial-Rx-Link-Data-Rate', - 'usr_initial_tx_link_data' => 'USR-Initial-Tx-Link-Data-Rate', - 'usr_interface_index' => 'USR-Interface-Index', - 'usr_ip' => 'USR-IP', - 'usr_ip_call_input_filter' => 'USR-IP-Call-Input-Filter', - 'usr_ip_call_output_filte' => 'USR-IP-Call-Output-Filter', - 'usr_ip_default_route_opt' => 'USR-IP-Default-Route-Option', - 'usr_ip_rip_input_filter' => 'USR-IP-RIP-Input-Filter', - 'usr_ip_rip_output_filter' => 'USR-IP-RIP-Output-Filter', - 'usr_ip_rip_policies' => 'USR-IP-RIP-Policies', - 'usr_ip_rip_simple_auth_p' => 'USR-IP-RIP-Simple-Auth-Password', - 'usr_ip_saa_filter' => 'USR-IP-SAA-Filter', - 'usr_ipx' => 'USR-IPX', - 'usr_ipx_call_input_filte' => 'USR-IPX-Call-Input-Filter', - 'usr_ipx_call_output_filt' => 'USR-IPX-Call-Output-Filter', - 'usr_ipx_rip_input_filter' => 'USR-IPX-RIP-Input-Filter', - 'usr_ipx_rip_output_filte' => 'USR-IPX-RIP-Output-Filter', - 'usr_ipx_routing' => 'USR-IPX-Routing', - 'usr_ipx_wan' => 'USR-IPX-WAN', - 'usr_iwf_call_identifier' => 'USR-IWF-Call-Identifier', - 'usr_iwf_ip_address' => 'USR-IWF-IP-Address', - 'usr_keypress_timeout' => 'USR-Keypress-Timeout', - 'usr_last_callers_number_' => 'USR-Last-Callers-Number-ANI', - 'usr_last_number_dialed_i' => 'USR-Last-Number-Dialed-In-DNIS', - 'usr_last_number_dialed_o' => 'USR-Last-Number-Dialed-Out', - 'usr_line_reversals' => 'USR-Line-Reversals', - 'usr_local_framed_ip_addr' => 'USR-Local-Framed-IP-Addr', - 'usr_local_ip_address' => 'USR-Local-IP-Address', - 'usr_log_filter_packets' => 'USR-Log-Filter-Packets', - 'usr_max_channels' => 'USR-Max-Channels', - 'usr_mbi_ct_bchannel_used' => 'USR-Mbi_Ct_BChannel_Used', - 'usr_mbi_ct_pri_card_slot' => 'USR-Mbi_Ct_PRI_Card_Slot', - 'usr_mbi_ct_pri_card_span' => 'USR-Mbi_Ct_PRI_Card_Span_Line', - 'usr_mbi_ct_tdm_time_slot' => 'USR-Mbi_Ct_TDM_Time_Slot', - 'usr_mic' => 'USR-MIC', - 'usr_min_compression_size' => 'USR-Min-Compression-Size', - 'usr_mobile_ip_address' => 'USR-Mobile-IP-Address', - 'usr_mobile_numbytes_rxed' => 'USR-Mobile-NumBytes-Rxed', - 'usr_mobile_numbytes_txed' => 'USR-Mobile-NumBytes-Txed', - 'usr_mobileip_home_agent_' => 'USR-MobileIP-Home-Agent-Address', - 'usr_modem_group' => 'USR-Modem-Group', - 'usr_modem_setup_time' => 'USR-Modem-Setup-Time', - 'usr_modem_training_time' => 'USR-Modem-Training-Time', - 'usr_modulation_type' => 'USR-Modulation-Type', - 'usr_mp_edo' => 'USR-MP-EDO', - 'usr_mp_edo_hiper' => 'USR-MP-EDO-HIPER', - 'usr_mp_mrru' => 'USR-MP-MRRU', - 'usr_mpip_tunnel_originat' => 'USR-MPIP-Tunnel-Originator', - 'usr_multicast_forwarding' => 'USR-Multicast-Forwarding', - 'usr_multicast_proxy' => 'USR-Multicast-Proxy', - 'usr_multicast_receive' => 'USR-Multicast-Receive', - 'usr_nas_type' => 'USR-NAS-Type', - 'usr_nfas_id' => 'USR-NFAS-ID', - 'usr_num_fax_pages_proces' => 'USR-Num-Fax-Pages-Processed', - 'usr_number_of_blers' => 'USR-Number-of-Blers', - 'usr_number_of_characters' => 'USR-Number-Of-Characters-Lost', - 'usr_number_of_fallbacks' => 'USR-Number-of-Fallbacks', - 'usr_number_of_link_naks' => 'USR-Number-of-Link-NAKs', - 'usr_number_of_link_timeo' => 'USR-Number-of-Link-Timeouts', - 'usr_number_of_rings_limi' => 'USR-Number-of-Rings-Limit', - 'usr_number_of_upshifts' => 'USR-Number-of-Upshifts', - 'usr_orig_nas_type' => 'USR-Orig-NAS-Type', - 'usr_originate_answer_mod' => 'USR-Originate-Answer-Mode', - 'usr_ospf_addressless_ind' => 'USR-OSPF-Addressless-Index', - 'usr_packet_bus_session' => 'USR-Packet-Bus-Session', - 'usr_physical_state' => 'USR-Physical-State', - 'usr_port_tap' => 'USR-Port-Tap', - 'usr_port_tap_address' => 'USR-Port-Tap-Address', - 'usr_port_tap_facility' => 'USR-Port-Tap-Facility', - 'usr_port_tap_format' => 'USR-Port-Tap-Format', - 'usr_port_tap_output' => 'USR-Port-Tap-Output', - 'usr_port_tap_priority' => 'USR-Port-Tap-Priority', - 'usr_power_supply_number' => 'USR-Power-Supply-Number', - 'usr_primary_dns_server' => 'USR-Primary_DNS_Server', - 'usr_primary_nbns_server' => 'USR-Primary_NBNS_Server', - 'usr_pw_cutoff' => 'USR-PW_Cutoff', - 'usr_pw_framed_routing_v2' => 'USR-PW_Framed_Routing_V2', - 'usr_pw_index' => 'USR-PW_Index', - 'usr_pw_packet' => 'USR-PW_Packet', - 'usr_pw_tunnel_authentica' => 'USR-PW_Tunnel_Authentication', - 'usr_pw_usr_ifilter_ip' => 'USR-PW_USR_IFilter_IP', - 'usr_pw_usr_ifilter_ipx' => 'USR-PW_USR_IFilter_IPX', - 'usr_pw_usr_ofilter_ip' => 'USR-PW_USR_OFilter_IP', - 'usr_pw_usr_ofilter_ipx' => 'USR-PW_USR_OFilter_IPX', - 'usr_pw_usr_ofilter_sap' => 'USR-PW_USR_OFilter_SAP', - 'usr_pw_vpn_gateway' => 'USR-PW_VPN_Gateway', - 'usr_pw_vpn_id' => 'USR-PW_VPN_ID', - 'usr_pw_vpn_name' => 'USR-PW_VPN_Name', - 'usr_pw_vpn_neighbor' => 'USR-PW_VPN_Neighbor', - 'usr_q931_call_reference_' => 'USR-Q931-Call-Reference-Value', - 'usr_rad_dvmrp_metric' => 'USR-Rad-Dvmrp-Metric', - 'usr_rad_location_type' => 'USR-Rad-Location-Type', - 'usr_rad_multicast_routin' => 'USR-Rad-Multicast-Routing-Ttl', - 'usr_rad_multicast_routio' => 'USR-Rad-Multicast-Routing-RtLim', - 'usr_rad_multicast_routip' => 'USR-Rad-Multicast-Routing-Proto', - 'usr_rad_multicast_routiq' => 'USR-Rad-Multicast-Routing-Bound', - 'usr_re_chap_timeout' => 'USR-Re-Chap-Timeout', - 'usr_receive_acc_map' => 'USR-Receive-Acc-Map', - 'usr_reply_script1' => 'USR-Reply-Script1', - 'usr_reply_script2' => 'USR-Reply-Script2', - 'usr_reply_script3' => 'USR-Reply-Script3', - 'usr_reply_script4' => 'USR-Reply-Script4', - 'usr_reply_script5' => 'USR-Reply-Script5', - 'usr_reply_script6' => 'USR-Reply-Script6', - 'usr_request_type' => 'USR-Request-Type', - 'usr_retrains_granted' => 'USR-Retrains-Granted', - 'usr_retrains_requested' => 'USR-Retrains-Requested', - 'usr_rmmie_firmware_build' => 'USR-RMMIE-Firmware-Build-Date', - 'usr_rmmie_firmware_versi' => 'USR-RMMIE-Firmware-Version', - 'usr_rmmie_last_update_ev' => 'USR-RMMIE-Last-Update-Event', - 'usr_rmmie_last_update_ti' => 'USR-RMMIE-Last-Update-Time', - 'usr_rmmie_manufacturer_i' => 'USR-RMMIE-Manufacturer-ID', - 'usr_rmmie_num_of_updates' => 'USR-RMMIE-Num-Of-Updates', - 'usr_rmmie_planned_discon' => 'USR-RMMIE-Planned-Disconnect', - 'usr_rmmie_product_code' => 'USR-RMMIE-Product-Code', - 'usr_rmmie_pwrlvl_farecho' => 'USR-RMMIE-PwrLvl-FarEcho-Canc', - 'usr_rmmie_pwrlvl_nearech' => 'USR-RMMIE-PwrLvl-NearEcho-Canc', - 'usr_rmmie_pwrlvl_noise_l' => 'USR-RMMIE-PwrLvl-Noise-Lvl', - 'usr_rmmie_pwrlvl_xmit_lv' => 'USR-RMMIE-PwrLvl-Xmit-Lvl', - 'usr_rmmie_rcv_pwrlvl_330' => 'USR-RMMIE-Rcv-PwrLvl-3300Hz', - 'usr_rmmie_rcv_pwrlvl_375' => 'USR-RMMIE-Rcv-PwrLvl-3750Hz', - 'usr_rmmie_rcv_tot_pwrlvl' => 'USR-RMMIE-Rcv-Tot-PwrLvl', - 'usr_rmmie_serial_number' => 'USR-RMMIE-Serial-Number', - 'usr_rmmie_status' => 'USR-RMMIE-Status', - 'usr_rmmie_x2_status' => 'USR-RMMIE-x2-Status', - 'usr_routing_protocol' => 'USR-Routing-Protocol', - 'usr_sap_filter_in' => 'USR-SAP-Filter-In', - 'usr_secondary_dns_server' => 'USR-Secondary_DNS_Server', - 'usr_secondary_nbns_serve' => 'USR-Secondary_NBNS_Server', - 'usr_security_login_limit' => 'USR-Security-Login-Limit', - 'usr_security_resp_limit' => 'USR-Security-Resp-Limit', - 'usr_send_name' => 'USR-Send-Name', - 'usr_send_password' => 'USR-Send-Password', - 'usr_send_script1' => 'USR-Send-Script1', - 'usr_send_script2' => 'USR-Send-Script2', - 'usr_send_script3' => 'USR-Send-Script3', - 'usr_send_script4' => 'USR-Send-Script4', - 'usr_send_script5' => 'USR-Send-Script5', - 'usr_send_script6' => 'USR-Send-Script6', - 'usr_server_time' => 'USR-Server-Time', - 'usr_service_option' => 'USR-Service-Option', - 'usr_simplified_mnp_level' => 'USR-Simplified-MNP-Levels', - 'usr_simplified_v42bis_us' => 'USR-Simplified-V42bis-Usage', - 'usr_slot_connected_to' => 'USR-Slot-Connected-To', - 'usr_speed_of_connection' => 'USR-Speed-Of-Connection', - 'usr_spoofing' => 'USR-Spoofing', - 'usr_start_time' => 'USR-Start-Time', - 'usr_supports_tags' => 'USR-Supports-Tags', - 'usr_sync_async_mode' => 'USR-Sync-Async-Mode', - 'usr_syslog_tap' => 'USR-Syslog-Tap', - 'usr_terminal_type' => 'USR-Terminal-Type', - 'usr_transmit_acc_map' => 'USR-Transmit-Acc-Map', - 'usr_tunnel_auth_hostname' => 'USR-Tunnel-Auth-Hostname', - 'usr_tunnel_security' => 'USR-Tunnel-Security', - 'usr_tunnel_switch_endpoi' => 'USR-Tunnel-Switch-Endpoint', - 'usr_tunneled_mlpp' => 'USR-Tunneled-MLPP', - 'usr_unauthenticated_time' => 'USR-Unauthenticated-Time', - 'usr_vpn_encrypter' => 'USR-VPN-Encrypter', - 'usr_vpn_gw_location_id' => 'USR-VPN-GW-Location-Id', - 'usr_vts_session_key' => 'USR-VTS-Session-Key', - 'vendor_specific' => 'Vendor-Specific', - 'versanet_termination_cau' => 'Versanet-Termination-Cause', - 'vnc_pppoe_cbq_rx' => 'VNC-PPPoE-CBQ-RX', - 'vnc_pppoe_cbq_rx_fallbac' => 'VNC-PPPoE-CBQ-RX-Fallback', - 'vnc_pppoe_cbq_tx' => 'VNC-PPPoE-CBQ-TX', - 'vnc_pppoe_cbq_tx_fallbac' => 'VNC-PPPoE-CBQ-TX-Fallback', - 'vnc_splash' => 'VNC-Splash', - 'wispr_bandwidth_max_down' => 'WISPr-Bandwidth-Max-Down', - 'wispr_bandwidth_max_up' => 'WISPr-Bandwidth-Max-Up', - 'wispr_bandwidth_min_down' => 'WISPr-Bandwidth-Min-Down', - 'wispr_bandwidth_min_up' => 'WISPr-Bandwidth-Min-Up', - 'wispr_billing_class_of_s' => 'WISPr-Billing-Class-Of-Service', - 'wispr_location_id' => 'WISPr-Location-ID', - 'wispr_location_name' => 'WISPr-Location-Name', - 'wispr_logoff_url' => 'WISPr-Logoff-URL', - 'wispr_redirection_url' => 'WISPr-Redirection-URL', - 'wispr_session_terminate_' => 'WISPr-Session-Terminate-Time', - 'wispr_session_terminatea' => 'WISPr-Session-Terminate-End-Of-Day', - 'x_ascend_add_seconds' => 'X-Ascend-Add-Seconds', - 'x_ascend_ara_pw' => 'X-Ascend-Ara-PW', - 'x_ascend_assign_ip_clien' => 'X-Ascend-Assign-IP-Client', - 'x_ascend_assign_ip_globa' => 'X-Ascend-Assign-IP-Global-Pool', - 'x_ascend_assign_ip_pool' => 'X-Ascend-Assign-IP-Pool', - 'x_ascend_assign_ip_serve' => 'X-Ascend-Assign-IP-Server', - 'x_ascend_authen_alias' => 'X-Ascend-Authen-Alias', - 'x_ascend_backup' => 'X-Ascend-Backup', - 'x_ascend_bacp_enable' => 'X-Ascend-BACP-Enable', - 'x_ascend_base_channel_co' => 'X-Ascend-Base-Channel-Count', - 'x_ascend_billing_number' => 'X-Ascend-Billing-Number', - 'x_ascend_bridge' => 'X-Ascend-Bridge', - 'x_ascend_bridge_address' => 'X-Ascend-Bridge-Address', - 'x_ascend_call_attempt_li' => 'X-Ascend-Call-Attempt-Limit', - 'x_ascend_call_block_dura' => 'X-Ascend-Call-Block-Duration', - 'x_ascend_call_by_call' => 'X-Ascend-Call-By-Call', - 'x_ascend_call_filter' => 'X-Ascend-Call-Filter', - 'x_ascend_call_type' => 'X-Ascend-Call-Type', - 'x_ascend_callback' => 'X-Ascend-Callback', - 'x_ascend_client_assign_d' => 'X-Ascend-Client-Assign-DNS', - 'x_ascend_client_gateway' => 'X-Ascend-Client-Gateway', - 'x_ascend_client_primary_' => 'X-Ascend-Client-Primary-DNS', - 'x_ascend_client_secondar' => 'X-Ascend-Client-Secondary-DNS', - 'x_ascend_connect_progres' => 'X-Ascend-Connect-Progress', - 'x_ascend_data_filter' => 'X-Ascend-Data-Filter', - 'x_ascend_data_rate' => 'X-Ascend-Data-Rate', - 'x_ascend_data_svc' => 'X-Ascend-Data-Svc', - 'x_ascend_dba_monitor' => 'X-Ascend-DBA-Monitor', - 'x_ascend_dec_channel_cou' => 'X-Ascend-Dec-Channel-Count', - 'x_ascend_dhcp_maximum_le' => 'X-Ascend-DHCP-Maximum-Leases', - 'x_ascend_dhcp_pool_numbe' => 'X-Ascend-DHCP-Pool-Number', - 'x_ascend_dhcp_reply' => 'X-Ascend-DHCP-Reply', - 'x_ascend_dial_number' => 'X-Ascend-Dial-Number', - 'x_ascend_dialout_allowed' => 'X-Ascend-Dialout-Allowed', - 'x_ascend_disconnect_caus' => 'X-Ascend-Disconnect-Cause', - 'x_ascend_event_type' => 'X-Ascend-Event-Type', - 'x_ascend_expect_callback' => 'X-Ascend-Expect-Callback', - 'x_ascend_fcp_parameter' => 'X-Ascend-FCP-Parameter', - 'x_ascend_first_dest' => 'X-Ascend-First-Dest', - 'x_ascend_force_56' => 'X-Ascend-Force-56', - 'x_ascend_fr_circuit_name' => 'X-Ascend-FR-Circuit-Name', - 'x_ascend_fr_dce_n392' => 'X-Ascend-FR-DCE-N392', - 'x_ascend_fr_dce_n393' => 'X-Ascend-FR-DCE-N393', - 'x_ascend_fr_direct' => 'X-Ascend-FR-Direct', - 'x_ascend_fr_direct_dlci' => 'X-Ascend-FR-Direct-DLCI', - 'x_ascend_fr_direct_profi' => 'X-Ascend-FR-Direct-Profile', - 'x_ascend_fr_dlci' => 'X-Ascend-FR-DLCI', - 'x_ascend_fr_dte_n392' => 'X-Ascend-FR-DTE-N392', - 'x_ascend_fr_dte_n393' => 'X-Ascend-FR-DTE-N393', - 'x_ascend_fr_link_mgt' => 'X-Ascend-FR-Link-Mgt', - 'x_ascend_fr_linkup' => 'X-Ascend-FR-LinkUp', - 'x_ascend_fr_n391' => 'X-Ascend-FR-N391', - 'x_ascend_fr_nailed_grp' => 'X-Ascend-FR-Nailed-Grp', - 'x_ascend_fr_profile_name' => 'X-Ascend-FR-Profile-Name', - 'x_ascend_fr_t391' => 'X-Ascend-FR-T391', - 'x_ascend_fr_t392' => 'X-Ascend-FR-T392', - 'x_ascend_fr_type' => 'X-Ascend-FR-Type', - 'x_ascend_ft1_caller' => 'X-Ascend-FT1-Caller', - 'x_ascend_group' => 'X-Ascend-Group', - 'x_ascend_handle_ipx' => 'X-Ascend-Handle-IPX', - 'x_ascend_history_weigh_t' => 'X-Ascend-History-Weigh-Type', - 'x_ascend_home_agent_ip_a' => 'X-Ascend-Home-Agent-IP-Addr', - 'x_ascend_home_agent_pass' => 'X-Ascend-Home-Agent-Password', - 'x_ascend_home_agent_udp_' => 'X-Ascend-Home-Agent-UDP-Port', - 'x_ascend_home_network_na' => 'X-Ascend-Home-Network-Name', - 'x_ascend_host_info' => 'X-Ascend-Host-Info', - 'x_ascend_idle_limit' => 'X-Ascend-Idle-Limit', - 'x_ascend_if_netmask' => 'X-Ascend-IF-Netmask', - 'x_ascend_inc_channel_cou' => 'X-Ascend-Inc-Channel-Count', - 'x_ascend_ip_direct' => 'X-Ascend-IP-Direct', - 'x_ascend_ip_pool_definit' => 'X-Ascend-IP-Pool-Definition', - 'x_ascend_ipx_alias' => 'X-Ascend-IPX-Alias', - 'x_ascend_ipx_node_addr' => 'X-Ascend-IPX-Node-Addr', - 'x_ascend_ipx_peer_mode' => 'X-Ascend-IPX-Peer-Mode', - 'x_ascend_ipx_route' => 'X-Ascend-IPX-Route', - 'x_ascend_link_compressio' => 'X-Ascend-Link-Compression', - 'x_ascend_maximum_call_du' => 'X-Ascend-Maximum-Call-Duration', - 'x_ascend_maximum_channel' => 'X-Ascend-Maximum-Channels', - 'x_ascend_maximum_time' => 'X-Ascend-Maximum-Time', - 'x_ascend_menu_item' => 'X-Ascend-Menu-Item', - 'x_ascend_menu_selector' => 'X-Ascend-Menu-Selector', - 'x_ascend_metric' => 'X-Ascend-Metric', - 'x_ascend_minimum_channel' => 'X-Ascend-Minimum-Channels', - 'x_ascend_modem_portno' => 'X-Ascend-Modem-PortNo', - 'x_ascend_modem_shelfno' => 'X-Ascend-Modem-ShelfNo', - 'x_ascend_modem_slotno' => 'X-Ascend-Modem-SlotNo', - 'x_ascend_mpp_idle_percen' => 'X-Ascend-MPP-Idle-Percent', - 'x_ascend_multicast_clien' => 'X-Ascend-Multicast-Client', - 'x_ascend_multicast_rate_' => 'X-Ascend-Multicast-Rate-Limit', - 'x_ascend_multilink_id' => 'X-Ascend-Multilink-ID', - 'x_ascend_netware_timeout' => 'X-Ascend-Netware-timeout', - 'x_ascend_num_in_multilin' => 'X-Ascend-Num-In-Multilink', - 'x_ascend_number_sessions' => 'X-Ascend-Number-Sessions', - 'x_ascend_ppp_address' => 'X-Ascend-PPP-Address', - 'x_ascend_ppp_async_map' => 'X-Ascend-PPP-Async-Map', - 'x_ascend_ppp_vj_1172' => 'X-Ascend-PPP-VJ-1172', - 'x_ascend_ppp_vj_slot_com' => 'X-Ascend-PPP-VJ-Slot-Comp', - 'x_ascend_pre_input_octet' => 'X-Ascend-Pre-Input-Octets', - 'x_ascend_pre_input_packe' => 'X-Ascend-Pre-Input-Packets', - 'x_ascend_pre_output_octe' => 'X-Ascend-Pre-Output-Octets', - 'x_ascend_pre_output_pack' => 'X-Ascend-Pre-Output-Packets', - 'x_ascend_preempt_limit' => 'X-Ascend-Preempt-Limit', - 'x_ascend_presession_time' => 'X-Ascend-PreSession-Time', - 'x_ascend_pri_number_type' => 'X-Ascend-PRI-Number-Type', - 'x_ascend_primary_home_ag' => 'X-Ascend-Primary-Home-Agent', - 'x_ascend_pw_lifetime' => 'X-Ascend-PW-Lifetime', - 'x_ascend_pw_warntime' => 'X-Ascend-PW-Warntime', - 'x_ascend_receive_secret' => 'X-Ascend-Receive-Secret', - 'x_ascend_remote_addr' => 'X-Ascend-Remote-Addr', - 'x_ascend_remove_seconds' => 'X-Ascend-Remove-Seconds', - 'x_ascend_require_auth' => 'X-Ascend-Require-Auth', - 'x_ascend_route_ip' => 'X-Ascend-Route-IP', - 'x_ascend_route_ipx' => 'X-Ascend-Route-IPX', - 'x_ascend_secondary_home_' => 'X-Ascend-Secondary-Home-Agent', - 'x_ascend_seconds_of_hist' => 'X-Ascend-Seconds-Of-History', - 'x_ascend_send_auth' => 'X-Ascend-Send-Auth', - 'x_ascend_send_passwd' => 'X-Ascend-Send-Passwd', - 'x_ascend_send_secret' => 'X-Ascend-Send-Secret', - 'x_ascend_session_svr_key' => 'X-Ascend-Session-Svr-Key', - 'x_ascend_shared_profile_' => 'X-Ascend-Shared-Profile-Enable', - 'x_ascend_target_util' => 'X-Ascend-Target-Util', - 'x_ascend_temporary_rtes' => 'X-Ascend-Temporary-Rtes', - 'x_ascend_third_prompt' => 'X-Ascend-Third-Prompt', - 'x_ascend_token_expiry' => 'X-Ascend-Token-Expiry', - 'x_ascend_token_idle' => 'X-Ascend-Token-Idle', - 'x_ascend_token_immediate' => 'X-Ascend-Token-Immediate', - 'x_ascend_transit_number' => 'X-Ascend-Transit-Number', - 'x_ascend_ts_idle_limit' => 'X-Ascend-TS-Idle-Limit', - 'x_ascend_ts_idle_mode' => 'X-Ascend-TS-Idle-Mode', - 'x_ascend_tunneling_proto' => 'X-Ascend-Tunneling-Protocol', - 'x_ascend_user_acct_base' => 'X-Ascend-User-Acct-Base', - 'x_ascend_user_acct_host' => 'X-Ascend-User-Acct-Host', - 'x_ascend_user_acct_key' => 'X-Ascend-User-Acct-Key', - 'x_ascend_user_acct_port' => 'X-Ascend-User-Acct-Port', - 'x_ascend_user_acct_time' => 'X-Ascend-User-Acct-Time', - 'x_ascend_user_acct_type' => 'X-Ascend-User-Acct-Type', - 'x_ascend_xmit_rate' => 'X-Ascend-Xmit-Rate', - 'xedia_address_pool' => 'Xedia-Address-Pool', - 'xedia_client_access_netw' => 'Xedia-Client-Access-Network', - 'xedia_dns_server' => 'Xedia-DNS-Server', - 'xedia_netbios_server' => 'Xedia-NetBios-Server', - 'xedia_ppp_echo_interval' => 'Xedia-PPP-Echo-Interval', - 'xedia_ssh_privileges' => 'Xedia-SSH-Privileges', - - #NETC.NET.AU (RADIATOR?) - 'authentication_type' => 'Authentication-Type', - - #wtxs (dunno) - #'radius_operator' => 'Radius-Operator', - -); - -1; diff --git a/FS/FS/radius_usergroup.pm b/FS/FS/radius_usergroup.pm deleted file mode 100644 index 9bba057c9..000000000 --- a/FS/FS/radius_usergroup.pm +++ /dev/null @@ -1,131 +0,0 @@ -package FS::radius_usergroup; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); -use FS::svc_acct; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::radius_usergroup - Object methods for radius_usergroup records - -=head1 SYNOPSIS - - use FS::radius_usergroup; - - $record = new FS::radius_usergroup \%hash; - $record = new FS::radius_usergroup { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::radius_usergroup object links an account (see L) with a -RADIUS group. FS::radius_usergroup inherits from FS::Record. The following -fields are currently supported: - -=over 4 - -=item usergroupnum - primary key - -=item svcnum - Account (see L). - -=item groupname - group name - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new record. To add the record to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'radius_usergroup'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -#inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -#inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -#inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid record. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - $self->ut_numbern('usergroupnum') - || $self->ut_number('svcnum') - || $self->ut_foreign_key('svcnum','svc_acct','svcnum') - || $self->ut_text('groupname') - || $self->SUPER::check - ; -} - -=item svc_acct - -Returns the account associated with this record (see L). - -=cut - -sub svc_acct { - my $self = shift; - qsearchs('svc_acct', { svcnum => $self->svcnum } ); -} - -=back - -=head1 BUGS - -Don't let 'em get you down. - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/rate.pm b/FS/FS/rate.pm deleted file mode 100644 index c50ca044a..000000000 --- a/FS/FS/rate.pm +++ /dev/null @@ -1,379 +0,0 @@ -package FS::rate; - -use strict; -use vars qw( @ISA $DEBUG ); -use FS::Record qw( qsearch qsearchs dbh fields ); -use FS::rate_detail; - -@ISA = qw(FS::Record); - -$DEBUG = 0; - -=head1 NAME - -FS::rate - Object methods for rate records - -=head1 SYNOPSIS - - use FS::rate; - - $record = new FS::rate \%hash; - $record = new FS::rate { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::rate object represents an rate plan. FS::rate inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item ratenum - primary key - -=item ratename - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new rate plan. To add the rate plan to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'rate'; } - -=item insert [ , OPTION => VALUE ... ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -Currently available options are: I - -If I is set to an array reference of FS::rate_detail objects, the -objects will have their ratenum field set and will be inserted after this -record. - -=cut - -sub insert { - my $self = shift; - my %options = @_; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->check; - return $error if $error; - - $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( $options{'rate_detail'} ) { - - my( $num, $last, $min_sec ) = (0, time, 5); #progressbar foo - - foreach my $rate_detail ( @{$options{'rate_detail'}} ) { - - $rate_detail->ratenum($self->ratenum); - $error = $rate_detail->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( $options{'job'} ) { - $num++; - if ( time - $min_sec > $last ) { - my $error = $options{'job'}->update_statustext( - int( 100 * $num / scalar( @{$options{'rate_detail'}} ) ) - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - $last = time; - } - } - - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - - - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD [ , OPTION => VALUE ... ] - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -Currently available options are: I - -If I is set to an array reference of FS::rate_detail objects, the -objects will have their ratenum field set and will be inserted after this -record. Any existing rate_detail records associated with this record will be -deleted. - -=cut - -sub replace { - my ($new, $old) = (shift, shift); - my %options = @_; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - -# my @old_rate_detail = (); -# @old_rate_detail = $old->rate_detail if $options{'rate_detail'}; - - my $error = $new->SUPER::replace($old); - if ($error) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - -# foreach my $old_rate_detail ( @old_rate_detail ) { -# -# my $error = $old_rate_detail->delete; -# if ($error) { -# $dbh->rollback if $oldAutoCommit; -# return $error; -# } -# -# if ( $options{'job'} ) { -# $num++; -# if ( time - $min_sec > $last ) { -# my $error = $options{'job'}->update_statustext( -# int( 50 * $num / scalar( @old_rate_detail ) ) -# ); -# if ( $error ) { -# $dbh->rollback if $oldAutoCommit; -# return $error; -# } -# $last = time; -# } -# } -# -# } - if ( $options{'rate_detail'} ) { - my $sth = $dbh->prepare('DELETE FROM rate_detail WHERE ratenum = ?') or do { - $dbh->rollback if $oldAutoCommit; - return $dbh->errstr; - }; - - $sth->execute($old->ratenum) or do { - $dbh->rollback if $oldAutoCommit; - return $sth->errstr; - }; - - my( $num, $last, $min_sec ) = (0, time, 5); #progresbar foo -# $num = 0; - foreach my $rate_detail ( @{$options{'rate_detail'}} ) { - - $rate_detail->ratenum($new->ratenum); - $error = $rate_detail->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( $options{'job'} ) { - $num++; - if ( time - $min_sec > $last ) { - my $error = $options{'job'}->update_statustext( - int( 100 * $num / scalar( @{$options{'rate_detail'}} ) ) - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - $last = time; - } - } - - } - - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=item check - -Checks all fields to make sure this is a valid rate plan. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('ratenum') - || $self->ut_text('ratename') - ; - return $error if $error; - - $self->SUPER::check; -} - -=item dest_detail REGIONNUM | RATE_REGION_OBJECTD - -Returns the rate detail (see L) for this rate to the -specificed destination. - -=cut - -sub dest_detail { - my $self = shift; - my $regionnum = ref($_[0]) ? shift->regionnum : shift; - qsearchs( 'rate_detail', { 'ratenum' => $self->ratenum, - 'dest_regionnum' => $regionnum, } ); -} - -=item rate_detail - -Returns all region-specific details (see L) for this rate. - -=cut - -sub rate_detail { - my $self = shift; - qsearch( 'rate_detail', { 'ratenum' => $self->ratenum } ); -} - - -=back - -=head1 SUBROUTINES - -=over 4 - -=item process - -Experimental job-queue processor for web interface adds/edits - -=cut - -use Storable qw(thaw); -use Data::Dumper; -use MIME::Base64; -sub process { - my $job = shift; - - my $param = thaw(decode_base64(shift)); - warn Dumper($param) if $DEBUG; - - my $old = qsearchs('rate', { 'ratenum' => $param->{'ratenum'} } ) - if $param->{'ratenum'}; - - my @rate_detail = map { - - my $regionnum = $_->regionnum; - if ( $param->{"sec_granularity$regionnum"} ) { - - new FS::rate_detail { - 'dest_regionnum' => $regionnum, - map { $_ => $param->{"$_$regionnum"} } - qw( min_included min_charge sec_granularity ) - }; - - } else { - - new FS::rate_detail { - 'dest_regionnum' => $regionnum, - 'min_included' => 0, - 'min_charge' => 0, - 'sec_granularity' => '60' - }; - - } - - } qsearch('rate_region', {} ); - - my $rate = new FS::rate { - map { $_ => $param->{$_} } - fields('rate') - }; - - my $error = ''; - if ( $param->{'ratenum'} ) { - warn "$rate replacing $old (". $param->{'ratenum'}. ")\n" if $DEBUG; - $error = $rate->replace( $old, - 'rate_detail' => \@rate_detail, - 'job' => $job, - ); - } else { - warn "inserting $rate\n" if $DEBUG; - $error = $rate->insert( 'rate_detail' => \@rate_detail, - 'job' => $job, - ); - #$ratenum = $rate->getfield('ratenum'); - } - - die "$error\n" if $error; - -} - -=head1 BUGS - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/rate_detail.pm b/FS/FS/rate_detail.pm deleted file mode 100644 index ad41b40ec..000000000 --- a/FS/FS/rate_detail.pm +++ /dev/null @@ -1,202 +0,0 @@ -package FS::rate_detail; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); -use FS::rate; -use FS::rate_region; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::rate_detail - Object methods for rate_detail records - -=head1 SYNOPSIS - - use FS::rate_detail; - - $record = new FS::rate_detail \%hash; - $record = new FS::rate_detail { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::rate_detail object represents an call plan rate. FS::rate_detail -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item ratedetailnum - primary key - -=item ratenum - rate plan (see L) - -=item orig_regionnum - call origination region - -=item dest_regionnum - call destination region - -=item min_included - included minutes - -=item min_charge - charge per minute - -=item sec_granularity - granularity in seconds, i.e. 6 or 60; 0 for per-call - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new call plan rate. To add the call plan rate to the database, see -L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'rate_detail'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid call plan rate. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('ratedetailnum') - || $self->ut_foreign_key('ratenum', 'rate', 'ratenum') - || $self->ut_foreign_keyn('orig_regionnum', 'rate_region', 'regionnum' ) - || $self->ut_foreign_key('dest_regionnum', 'rate_region', 'regionnum' ) - || $self->ut_number('min_included') - - #|| $self->ut_money('min_charge') - #good enough for now... - || $self->ut_float('min_charge') - - || $self->ut_number('sec_granularity') - ; - return $error if $error; - - $self->SUPER::check; -} - -=item rate - -Returns the parent call plan (see L) associated with this call plan -rate. - -=cut - -sub rate { - my $self = shift; - qsearchs('rate', { 'ratenum' => $self->ratenum } ); -} - -=item orig_region - -Returns the origination region (see L) associated with this -call plan rate. - -=cut - -sub orig_region { - my $self = shift; - qsearchs('rate_region', { 'regionnum' => $self->orig_regionnum } ); -} - -=item dest_region - -Returns the destination region (see L) associated with this -call plan rate. - -=cut - -sub dest_region { - my $self = shift; - qsearchs('rate_region', { 'regionnum' => $self->dest_regionnum } ); -} - -=item dest_regionname - -Returns the name of the destination region (see L) associated -with this call plan rate. - -=cut - -sub dest_regionname { - my $self = shift; - $self->dest_region->regionname; -} - -=item dest_regionname - -Returns a short list of the prefixes for the destination region -(see L) associated with this call plan rate. - -=cut - -sub dest_prefixes_short { - my $self = shift; - $self->dest_region->prefixes_short; -} - - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L, -schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/rate_prefix.pm b/FS/FS/rate_prefix.pm deleted file mode 100644 index 42b004f5b..000000000 --- a/FS/FS/rate_prefix.pm +++ /dev/null @@ -1,139 +0,0 @@ -package FS::rate_prefix; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); -use FS::rate_region; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::rate_prefix - Object methods for rate_prefix records - -=head1 SYNOPSIS - - use FS::rate_prefix; - - $record = new FS::rate_prefix \%hash; - $record = new FS::rate_prefix { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::rate_prefix object represents an call rating prefix. FS::rate_prefix -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item prefixnum - primary key - -=item regionnum - call ration region (see L) - -=item countrycode - -=item npa - -=item nxx - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new prefix. To add the prefix to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'rate_prefix'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid prefix. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('prefixnum') - || $self->ut_foreign_key('regionnum', 'rate_region', 'regionnum' ) - || $self->ut_number('countrycode') - || $self->ut_numbern('npa') - || $self->ut_numbern('nxx') - ; - return $error if $error; - - $self->SUPER::check; -} - -=item rate_region - -Returns the rate region (see L) for this prefix. - -=cut - -sub rate_region { - my $self = shift; - qsearchs('rate_region', { 'regionnum' => $self->regionnum } ); -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/rate_region.pm b/FS/FS/rate_region.pm deleted file mode 100644 index 65dfd2a25..000000000 --- a/FS/FS/rate_region.pm +++ /dev/null @@ -1,313 +0,0 @@ -package FS::rate_region; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs dbh ); -use FS::rate_prefix; -use FS::rate_detail; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::rate_region - Object methods for rate_region records - -=head1 SYNOPSIS - - use FS::rate_region; - - $record = new FS::rate_region \%hash; - $record = new FS::rate_region { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::rate_region object represents an call rating region. FS::rate_region -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item regionnum - primary key - -=item regionname - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new region. To add the region to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'rate_region'; } - -=item insert [ , OPTION => VALUE ... ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -Currently available options are: I and I - -If I is set to an array reference of FS::rate_prefix objects, the -objects will have their regionnum field set and will be inserted after this -record. - -If I is set to an array reference of FS::rate_detail objects, the -objects will have their dest_regionnum field set and will be inserted after -this record. - - -=cut - -sub insert { - my $self = shift; - my %options = @_; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->check; - return $error if $error; - - $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( $options{'rate_prefix'} ) { - foreach my $rate_prefix ( @{$options{'rate_prefix'}} ) { - $rate_prefix->regionnum($self->regionnum); - $error = $rate_prefix->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - if ( $options{'dest_detail'} ) { - foreach my $rate_detail ( @{$options{'dest_detail'}} ) { - $rate_detail->dest_regionnum($self->regionnum); - $error = $rate_detail->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD [ , OPTION => VALUE ... ] - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -Currently available options are: I and I - -If I is set to an array reference of FS::rate_prefix objects, the -objects will have their regionnum field set and will be inserted after this -record. Any existing rate_prefix records associated with this record will be -deleted. - -If I is set to an array reference of FS::rate_detail objects, the -objects will have their dest_regionnum field set and will be inserted after -this record. Any existing rate_detail records associated with this record will -be deleted. - -=cut - -sub replace { - my ($new, $old) = (shift, shift); - my %options = @_; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my @old_rate_prefix = (); - @old_rate_prefix = $old->rate_prefix if $options{'rate_prefix'}; - my @old_dest_detail = (); - @old_dest_detail = $old->dest_detail if $options{'dest_detail'}; - - my $error = $new->SUPER::replace($old); - if ($error) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - foreach my $old_rate_prefix ( @old_rate_prefix ) { - my $error = $old_rate_prefix->delete; - if ($error) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - foreach my $old_dest_detail ( @old_dest_detail ) { - my $error = $old_dest_detail->delete; - if ($error) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - foreach my $rate_prefix ( @{$options{'rate_prefix'}} ) { - $rate_prefix->regionnum($new->regionnum); - $error = $rate_prefix->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - foreach my $rate_detail ( @{$options{'dest_detail'}} ) { - $rate_detail->dest_regionnum($new->regionnum); - $error = $rate_detail->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=item check - -Checks all fields to make sure this is a valid region. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('regionnum') - || $self->ut_text('regionname') - ; - return $error if $error; - - $self->SUPER::check; -} - -=item rate_prefix - -Returns all prefixes (see L) for this region. - -=cut - -sub rate_prefix { - my $self = shift; - - sort { $a->countrycode cmp $b->countrycode - or $a->npa cmp $b->npa - or $a->nxx cmp $b->nxx - } - qsearch( 'rate_prefix', { 'regionnum' => $self->regionnum } ); -} - -=item dest_detail - -Returns all rate details (see L) for this region as a -destionation. - -=cut - -sub dest_detail { - my $self = shift; - qsearch( 'rate_detail', { 'dest_regionnum' => $self->regionnum, } ); -} - -=item prefixes_short - -Returns a string representing all the prefixes for this region. - -=cut - -sub prefixes_short { - my $self = shift; - - my $countrycode = ''; - my $out = ''; - - foreach my $rate_prefix ( $self->rate_prefix ) { - if ( $countrycode ne $rate_prefix->countrycode ) { - $out =~ s/, $//; - $countrycode = $rate_prefix->countrycode; - $out.= " +$countrycode "; - } - my $npa = $rate_prefix->npa; - if ( $countrycode eq '1' ) { - $out .= '('. substr( $npa, 0, 3 ). ')'; - $out .= ' '. substr( $npa, 3 ) if length($npa) > 3; - } else { - $out .= $rate_prefix->npa; - } - $out .= ', '; - } - $out =~ s/, $//; - - $out; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/reason.pm b/FS/FS/reason.pm deleted file mode 100644 index 5311ec5aa..000000000 --- a/FS/FS/reason.pm +++ /dev/null @@ -1,184 +0,0 @@ -package FS::reason; - -use strict; -use vars qw( @ISA $DEBUG $me ); -use DBIx::DBSchema; -use DBIx::DBSchema::Table; -use DBIx::DBSchema::Column; -use FS::Record qw( qsearch qsearchs dbh dbdef ); -use FS::reason_type; - -@ISA = qw(FS::Record); -$DEBUG = 0; -$me = '[FS::reason]'; - -=head1 NAME - -FS::reason - Object methods for reason records - -=head1 SYNOPSIS - - use FS::reason; - - $record = new FS::reason \%hash; - $record = new FS::reason { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::reason object represents a reason message. FS::reason inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item reasonnum - primary key - -=item reason_type - index into FS::reason_type - -=item reason - text of the reason - -=item disabled - 'Y' or '' - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new reason. To add the example to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -sub table { 'reason'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -=item delete - -Delete this record from the database. - -=cut - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -=item check - -Checks all fields to make sure this is a valid reason. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('reasonnum') - || $self->ut_text('reason') - ; - return $error if $error; - - $self->SUPER::check; -} - -=item reasontype - -Returns the reason_type (see FS::reason_type) associated with this reason. - -=cut - -sub reasontype { - qsearchs( 'reason_type', { 'typenum' => shift->reason_type } ); -} - -# _upgrade_data -# -# Used by FS::Upgrade to migrate to a new database. -# -# - -sub _upgrade_data { # class method - my ($self, %opts) = @_; - my $dbh = dbh; - - warn "$me upgrading $self\n" if $DEBUG; - - my $column = dbdef->table($self->table)->column('reason'); - unless ($column->type eq 'text') { # assume history matches main table - - # ideally this would be supported in DBIx-DBSchema and friends - warn "$me Shifting reason column to type 'text'\n" if $DEBUG; - foreach my $table ( $self->table, 'h_'. $self->table ) { - my @sql = (); - - $column = dbdef->table($self->table)->column('reason'); - my $columndef = $column->line($dbh); - $columndef =~ s/varchar\(\d+\)/text/i; - - if ( $dbh->{Driver}->{Name} eq 'Pg' ) { - - my $notnull = $columndef =~ s/not null//i; - push @sql,"ALTER TABLE $table RENAME reason TO freeside_upgrade_reason"; - push @sql,"ALTER TABLE $table ADD $columndef"; - push @sql,"UPDATE $table SET reason = freeside_upgrade_reason"; - push @sql,"ALTER TABLE $table ALTER reason SET NOT NULL" - if $notnull; - push @sql,"ALTER TABLE $table DROP freeside_upgrade_reason"; - - } elsif ( $dbh->{Driver}->{Name} =~ /^mysql/i ){ - - #crap, this isn't working - #push @sql,"ALTER TABLE $table MODIFY reason ". $column->line($dbh); - warn "WARNING: reason table upgrade not yet supported for mysql, sorry"; - - } else { - die "watchu talkin' 'bout, Willis? (unsupported database type)"; - } - - foreach (@sql) { - my $sth = $dbh->prepare($_) or die $dbh->errstr; - $sth->execute or die $sth->errstr; - } - } - } - - ''; - -} -=back - -=head1 BUGS - -Here be termintes. Don't use on wooden computers. - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/reason_type.pm b/FS/FS/reason_type.pm deleted file mode 100644 index 482ea34e8..000000000 --- a/FS/FS/reason_type.pm +++ /dev/null @@ -1,211 +0,0 @@ -package FS::reason_type; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::Record); - -our %class_name = ( - 'C' => 'cancel', - 'R' => 'credit', - 'S' => 'suspend', -); - -our %class_purpose = ( - 'C' => 'explain why a customer package was cancelled', - 'R' => 'explain why a customer was credited', - 'S' => 'explain why a customer package was suspended', -); - -=head1 NAME - -FS::reason_type - Object methods for reason_type records - -=head1 SYNOPSIS - - use FS::reason_type; - - $record = new FS::reason_type \%hash; - $record = new FS::reason_type { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::reason_type object represents a grouping of reasons. FS::reason_type -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item typenum - primary key - -=item class - currently 'C', 'R', or 'S' for cancel, credit, or suspend - -=item type - name of the type of reason - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new reason_type. To add the example to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -sub table { 'reason_type'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -=item delete - -Delete this record from the database. - -=cut - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -=item check - -Checks all fields to make sure this is a valid reason_type. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('typenum') - || $self->ut_enum('class', [ keys %class_name ] ) - || $self->ut_text('type') - ; - return $error if $error; - - $self->SUPER::check; -} - -=item reasons - -Returns a list of all reasons associated with this type. - -=cut - -sub reasons { - qsearch( 'reason', { 'reason_type' => shift->typenum } ); -} - -=item enabled_reasons - -Returns a list of enabled reasons associated with this type. - -=cut - -sub enabled_reasons { - qsearch( 'reason', { 'reason_type' => shift->typenum, - 'enabled' => '', - } ); -} - -# _populate_initial_data -# -# Used by FS::Setup to initialize a new database. -# -# - -sub _populate_initial_data { # class method - my ($self, %opts) = @_; - - my $conf = new FS::Conf; - - foreach ( keys %class_name ) { - my $object = $self->new( {'class' => $_, - 'type' => ucfirst($class_name{$_}). ' Reason', - } ); - my $error = $object->insert(); - die "error inserting $self into database: $error\n" - if $error; - } - - my $object = qsearchs('reason_type', { 'class' => 'R' }); - die "can't find credit reason type just inserted!\n" - unless $object; - - foreach ( keys %FS::cust_credit::reasontype_map ) { -# my $object = $self->new( {'class' => 'R', -# 'type' => $FS::cust_credit::reasontype_map{$_}, -# } ); -# my $error = $object->insert(); -# die "error inserting $self into database: $error\n" -# if $error; -# # or clause for 1.7.x - $conf->set($_, $object->typenum) - or die "failed setting config"; - } - - ''; - -} - -# _upgrade_data -# -# Used by FS::Upgrade to migrate to a new database. -# -# - -sub _upgrade_data { # class method - my ($self, %opts) = @_; - - foreach ( keys %class_name ) { - unless (scalar(qsearch('reason_type', { 'class' => $_ }))) { - my $object = $self->new( {'class' => $_, - 'type' => ucfirst($class_name{$_}), - } ); - my $error = $object->insert(); - die "error inserting $self into database: $error\n" - if $error; - } - } - - ''; - -} - -=back - -=head1 BUGS - -Here be termintes. Don't use on wooden computers. - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/reg_code.pm b/FS/FS/reg_code.pm deleted file mode 100644 index f48ccf048..000000000 --- a/FS/FS/reg_code.pm +++ /dev/null @@ -1,223 +0,0 @@ -package FS::reg_code; - -use strict; -use vars qw( @ISA ); -use FS::Record qw(qsearch dbh); -use FS::agent; -use FS::reg_code_pkg; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::reg_code - One-time registration codes - -=head1 SYNOPSIS - - use FS::reg_code; - - $record = new FS::reg_code \%hash; - $record = new FS::reg_code { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::reg_code object is a one-time registration code. FS::reg_code inherits -from FS::Record. The following fields are currently supported: - -=over 4 - -=item codenum - primary key - -=item code - registration code string - -=item agentnum - Agent (see L) - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new registration code. To add the code to the database, see -L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'reg_code'; } - -=item insert [ PKGPART_ARRAYREF ] - -Adds this record to the database. If an arrayref of pkgparts -(see L) is specified, the appropriate reg_code_pkg records -(see L) will be inserted. - -If there is an error, returns the error, otherwise returns false. - -=cut - -sub insert { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( @_ ) { - my $pkgparts = shift; - foreach my $pkgpart ( @$pkgparts ) { - my $reg_code_pkg = new FS::reg_code_pkg ( { - 'codenum' => $self->codenum, - 'pkgpart' => $pkgpart, - } ); - $error = $reg_code_pkg->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=item delete - -Delete this record (and all associated reg_code_pkg records) from the database. - -=cut - -sub delete { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $reg_code_pkg ( $self->reg_code_pkg ) { - my $error = $reg_code_pkg->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - my $error = $self->SUPER::delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid registration code. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('codenum') - || $self->ut_alpha('code') - || $self->ut_foreign_key('agentnum', 'agent', 'agentnum') - ; - return $error if $error; - - $self->SUPER::check; -} - -=item part_pkg - -Returns all package definitions (see L for this registration -code. - -=cut - -sub part_pkg { - my $self = shift; - map { $_->part_pkg } $self->reg_code_pkg; -} - -=item reg_code_pkg - -Returns all FS::reg_code_pkg records for this registration code. - -=cut - -sub reg_code_pkg { - my $self = shift; - qsearch('reg_code_pkg', { 'codenum' => $self->codenum } ); -} - - -=back - -=head1 BUGS - -Feeping creaturitis. - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - - diff --git a/FS/FS/reg_code_pkg.pm b/FS/FS/reg_code_pkg.pm deleted file mode 100644 index 837b755e6..000000000 --- a/FS/FS/reg_code_pkg.pm +++ /dev/null @@ -1,139 +0,0 @@ -package FS::reg_code_pkg; - -use strict; -use vars qw( @ISA ); -use FS::Record qw(qsearchs); -use FS::reg_code; -use FS::part_pkg; - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::reg_code_pkg - Class linking registration codes (see L) with package definitions (see L) - -=head1 SYNOPSIS - - use FS::reg_code_pkg; - - $record = new FS::reg_code_pkg \%hash; - $record = new FS::reg_code_pkg { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::reg_code_pkg object links a registration code to a package definition. -FS::table_name inherits from FS::Record. The following fields are currently -supported: - -=over 4 - -=item codepkgnum - primary key - -=item codenum - registration code (see L) - -=item pkgpart - package definition (see L) - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new registration code. To add the registration code to the database, -see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'reg_code_pkg'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid record. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('codepkgnum') - || $self->ut_foreign_key('codenum', 'reg_code', 'codenum') - || $self->ut_foreign_key('pkgpart', 'part_pkg', 'pkgpart') - ; - return $error if $error; - - $self->SUPER::check; -} - -=item part_pkg - -Returns the package definition (see L) - -=cut - -sub part_pkg { - my $self = shift; - qsearchs('part_pkg', { 'pkgpart' => $self->pkgpart } ); -} - -=back - -=head1 BUGS - -Feeping creaturitis. - -=head1 SEE ALSO - -L, L, schema.html from the base documentation. - -=cut - -1; - - diff --git a/FS/FS/registrar.pm b/FS/FS/registrar.pm deleted file mode 100644 index cf5dc4907..000000000 --- a/FS/FS/registrar.pm +++ /dev/null @@ -1,119 +0,0 @@ -package FS::registrar; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::registrar - Object methods for registrar records - -=head1 SYNOPSIS - - use FS::registrar; - - $record = new FS::registrar \%hash; - $record = new FS::registrar { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::registrar object represents a registrar. FS::registrar inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item registrarnum - primary key - -=item registrarname - - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new registrar. To add the registrar to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'registrar'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid registrar. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('registrarnum') - || $self->ut_text('registrarname') - ; - return $error if $error; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/router.pm b/FS/FS/router.pm deleted file mode 100755 index 88ba99032..000000000 --- a/FS/FS/router.pm +++ /dev/null @@ -1,140 +0,0 @@ -package FS::router; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearchs qsearch ); -use FS::addr_block; - -@ISA = qw( FS::Record ); - -=head1 NAME - -FS::router - Object methods for router records - -=head1 SYNOPSIS - - use FS::router; - - $record = new FS::router \%hash; - $record = new FS::router { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::router record describes a broadband router, such as a DSLAM or a wireless - access point. FS::router inherits from FS::Record. The following -fields are currently supported: - -=over 4 - -=item routernum - primary key - -=item routername - descriptive name for the router - -=item svcnum - svcnum of the owning FS::svc_broadband, if appropriate - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Create a new record. To add the record to the database, see "insert". - -=cut - -sub table { 'router'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=item delete - -Deletes this record from the database. If there is an error, returns the -error, otherwise returns false. - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=item check - -Checks all fields to make sure this is a valid record. If there is an error, -returns the error, otherwise returns false. Called by the insert and replace -methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('routernum') - || $self->ut_text('routername'); - return $error if $error; - - $self->SUPER::check; -} - -=item addr_block - -Returns a list of FS::addr_block objects (address blocks) associated -with this object. - -=cut - -sub addr_block { - my $self = shift; - return qsearch('addr_block', { routernum => $self->routernum }); -} - -=item part_svc_router - -Returns a list of FS::part_svc_router objects associated with this -object. This is unlikely to be useful for any purpose other than retrieving -the associated FS::part_svc objects. See below. - -=cut - -sub part_svc_router { - my $self = shift; - return qsearch('part_svc_router', { routernum => $self->routernum }); -} - -=item part_svc - -Returns a list of FS::part_svc objects associated with this object. - -=cut - -sub part_svc { - my $self = shift; - return map { qsearchs('part_svc', { svcpart => $_->svcpart }) } - $self->part_svc_router; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -FS::svc_broadband, FS::router, FS::addr_block, FS::part_svc, -schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/session.pm b/FS/FS/session.pm deleted file mode 100644 index 615c8ae8b..000000000 --- a/FS/FS/session.pm +++ /dev/null @@ -1,265 +0,0 @@ -package FS::session; - -use strict; -use vars qw( @ISA $conf $start $stop ); -use FS::UID qw( dbh ); -use FS::Record qw( qsearchs ); -use FS::svc_acct; -use FS::port; -use FS::nas; - -@ISA = qw(FS::Record); - -$FS::UID::callback{'FS::session'} = sub { - $conf = new FS::Conf; - $start = $conf->exists('session-start') ? $conf->config('session-start') : ''; - $stop = $conf->exists('session-stop') ? $conf->config('session-stop') : ''; -}; - -=head1 NAME - -FS::session - Object methods for session records - -=head1 SYNOPSIS - - use FS::session; - - $record = new FS::session \%hash; - $record = new FS::session { - 'portnum' => 1, - 'svcnum' => 2, - 'login' => $timestamp, - 'logout' => $timestamp, - }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->nas_heartbeat($timestamp); - -=head1 DESCRIPTION - -An FS::session object represents an user login session. FS::session inherits -from FS::Record. The following fields are currently supported: - -=over 4 - -=item sessionnum - primary key - -=item portnum - NAS port for this session - see L - -=item svcnum - User for this session - see L - -=item login - timestamp indicating the beginning of this user session. - -=item logout - timestamp indicating the end of this user session. May be null, - which indicates a currently open session. - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new session. To add the session to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'session'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. If the `login' field is empty, it is replaced with -the current time. - -=cut - -sub insert { - my $self = shift; - my $error; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - $error = $self->check; - return $error if $error; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - if ( qsearchs('session', { 'portnum' => $self->portnum, 'logout' => '' } ) ) { - $dbh->rollback if $oldAutoCommit; - return "a session on that port is already open!"; - } - - $self->setfield('login', time()) unless $self->getfield('login'); - - $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $self->nas_heartbeat($self->getfield('login')); - - #session-starting callback - #redundant with heartbeat, yuck - my $port = qsearchs('port',{'portnum'=>$self->portnum}); - my $nas = qsearchs('nas',{'nasnum'=>$port->nasnum}); - #kcuy - my( $ip, $nasip, $nasfqdn ) = ( $port->ip, $nas->nasip, $nas->nasfqdn ); - system( eval qq("$start") ) if $start; - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. If the `logout' field is empty, -it is replaced with the current time. - -=cut - -sub replace { - my($self, $old) = @_; - my $error; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - $error = $self->check; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $self->setfield('logout', time()) unless $self->getfield('logout'); - - $error = $self->SUPER::replace($old); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $self->nas_heartbeat($self->getfield('logout')); - - #session-ending callback - #redundant with heartbeat, yuck - my $port = qsearchs('port',{'portnum'=>$self->portnum}); - my $nas = qsearchs('nas',{'nasnum'=>$port->nasnum}); - #kcuy - my( $ip, $nasip, $nasfqdn ) = ( $port->ip, $nas->nasip, $nas->nasfqdn ); - system( eval qq("$stop") ) if $stop; - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -=item check - -Checks all fields to make sure this is a valid session. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - my $error = - $self->ut_numbern('sessionnum') - || $self->ut_number('portnum') - || $self->ut_number('svcnum') - || $self->ut_numbern('login') - || $self->ut_numbern('logout') - ; - return $error if $error; - return "Unknown svcnum" - unless qsearchs('svc_acct', { 'svcnum' => $self->svcnum } ); - $self->SUPER::check; -} - -=item nas_heartbeat - -Heartbeats the nas associated with this session (see L). - -=cut - -sub nas_heartbeat { - my $self = shift; - my $port = qsearchs('port',{'portnum'=>$self->portnum}); - my $nas = qsearchs('nas',{'nasnum'=>$port->nasnum}); - $nas->heartbeat(shift); -} - -=item svc_acct - -Returns the svc_acct record associated with this session (see L). - -=cut - -sub svc_acct { - my $self = shift; - qsearchs('svc_acct', { 'svcnum' => $self->svcnum } ); -} - -=back - -=head1 BUGS - -Maybe you shouldn't be able to insert a session if there's currently an open -session on that port. Or maybe the open session on that port should be flagged -as problematic? autoclosed? *sigh* - -Hmm, sessions refer to current svc_acct records... probably need to constrain -deletions to svc_acct records such that no svc_acct records are deleted which -have a session (even if long-closed). - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm deleted file mode 100644 index d830f2fad..000000000 --- a/FS/FS/svc_Common.pm +++ /dev/null @@ -1,828 +0,0 @@ -package FS::svc_Common; - -use strict; -use vars qw( @ISA $noexport_hack $DEBUG $me ); -use Carp qw( cluck carp croak ); #specify cluck have to specify them all.. -use FS::Record qw( qsearch qsearchs fields dbh ); -use FS::cust_main_Mixin; -use FS::cust_svc; -use FS::part_svc; -use FS::queue; -use FS::cust_main; -use FS::inventory_item; -use FS::inventory_class; - -@ISA = qw( FS::cust_main_Mixin FS::Record ); - -$me = '[FS::svc_Common]'; -$DEBUG = 0; - -=head1 NAME - -FS::svc_Common - Object method for all svc_ records - -=head1 SYNOPSIS - -use FS::svc_Common; - -@ISA = qw( FS::svc_Common ); - -=head1 DESCRIPTION - -FS::svc_Common is intended as a base class for table-specific classes to -inherit from, i.e. FS::svc_acct. FS::svc_Common inherits from FS::Record. - -=head1 METHODS - -=over 4 - -=item search_sql_field FIELD STRING - -Class method which returns an SQL fragment to search for STRING in FIELD. - -=cut - -sub search_sql_field { - my( $class, $field, $string ) = @_; - my $table = $class->table; - my $q_string = dbh->quote($string); - "$table.$field = $q_string"; -} - -#fallback for services that don't provide a search... -sub search_sql { - #my( $class, $string ) = @_; - '1 = 0'; #false -} - -=item new - -=cut - -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); - - unless ( defined ( $self->table ) ) { - $self->{'Table'} = shift; - carp "warning: FS::Record::new called with table name ". $self->{'Table'}; - } - - #$self->{'Hash'} = shift; - my $newhash = shift; - $self->{'Hash'} = { map { $_ => $newhash->{$_} } qw(svcnum svcpart) }; - - $self->setdefault( $self->_fieldhandlers ) - unless $self->svcnum; - - $self->{'Hash'}{$_} = $newhash->{$_} - foreach grep { defined($newhash->{$_}) && length($newhash->{$_}) } - keys %$newhash; - - foreach my $field ( grep !defined($self->{'Hash'}{$_}), $self->fields ) { - $self->{'Hash'}{$field}=''; - } - - $self->_rebless if $self->can('_rebless'); - - $self->{'modified'} = 0; - - $self->_cache($self->{'Hash'}, shift) if $self->can('_cache') && @_; - - $self; -} - -#empty default -sub _fieldhandlers { {}; } - -sub virtual_fields { - - # This restricts the fields based on part_svc_column and the svcpart of - # the service. There are four possible cases: - # 1. svcpart passed as part of the svc_x hash. - # 2. svcpart fetched via cust_svc based on svcnum. - # 3. No svcnum or svcpart. In this case, return ALL the fields with - # dbtable eq $self->table. - # 4. Called via "fields('svc_acct')" or something similar. In this case - # there is no $self object. - - my $self = shift; - my $svcpart; - my @vfields = $self->SUPER::virtual_fields; - - return @vfields unless (ref $self); # Case 4 - - if ($self->svcpart) { # Case 1 - $svcpart = $self->svcpart; - } elsif ( $self->svcnum - && qsearchs('cust_svc',{'svcnum'=>$self->svcnum} ) - ) { #Case 2 - $svcpart = $self->cust_svc->svcpart; - } else { # Case 3 - $svcpart = ''; - } - - if ($svcpart) { #Cases 1 and 2 - my %flags = map { $_->columnname, $_->columnflag } ( - qsearch ('part_svc_column', { svcpart => $svcpart } ) - ); - return grep { not ( defined($flags{$_}) && $flags{$_} eq 'X') } @vfields; - } else { # Case 3 - return @vfields; - } - return (); -} - -=item label - -svc_Common provides a fallback label subroutine that just returns the svcnum. - -=cut - -sub label { - my $self = shift; - cluck "warning: ". ref($self). " not loaded or missing label method; ". - "using svcnum"; - $self->svcnum; -} - -=item check - -Checks the validity of fields in this record. - -At present, this does nothing but call FS::Record::check (which, in turn, -does nothing but run virtual field checks). - -=cut - -sub check { - my $self = shift; - $self->SUPER::check; -} - -=item insert [ , OPTION => VALUE ... ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -The additional fields pkgnum and svcpart (see L) should be -defined. An FS::cust_svc record will be created and inserted. - -Currently available options are: I, I and -I. - -If I is set to an array reference, the jobnums of any export jobs will -be added to the referenced array. - -If I is set to an array reference of FS::tablename objects (for -example, FS::acct_snarf objects), they will have their svcnum field set and -will be inserted after this record, but before any exports are run. Each -element of the array can also optionally be a two-element array reference -containing the child object and the name of an alternate field to be filled in -with the newly-inserted svcnum, for example C<[ $svc_forward, 'srcsvc' ]> - -If I is set (to a scalar jobnum or an array reference of -jobnums), all provisioning jobs will have a dependancy on the supplied -jobnum(s) (they will not run until the specific job(s) complete(s)). - -If I is set to an array reference, the referenced list will be -passed to export commands. - -=cut - -sub insert { - my $self = shift; - my %options = @_; - warn "[$me] insert called with options ". - join(', ', map { "$_: $options{$_}" } keys %options ). "\n" - if $DEBUG; - - my @jobnums = (); - local $FS::queue::jobnums = \@jobnums; - warn "[$me] insert: set \$FS::queue::jobnums to $FS::queue::jobnums\n" - if $DEBUG; - my $objects = $options{'child_objects'} || []; - my $depend_jobnums = $options{'depend_jobnum'} || []; - $depend_jobnums = [ $depend_jobnums ] unless ref($depend_jobnums); - my $error; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - $error = $self->check; - return $error if $error; - - my $svcnum = $self->svcnum; - my $cust_svc = $svcnum ? qsearchs('cust_svc',{'svcnum'=>$self->svcnum}) : ''; - #unless ( $svcnum ) { - if ( !$svcnum or !$cust_svc ) { - $cust_svc = new FS::cust_svc ( { - #hua?# 'svcnum' => $svcnum, - 'svcnum' => $self->svcnum, - 'pkgnum' => $self->pkgnum, - 'svcpart' => $self->svcpart, - } ); - $error = $cust_svc->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - $svcnum = $self->svcnum($cust_svc->svcnum); - } else { - #$cust_svc = qsearchs('cust_svc',{'svcnum'=>$self->svcnum}); - unless ( $cust_svc ) { - $dbh->rollback if $oldAutoCommit; - return "no cust_svc record found for svcnum ". $self->svcnum; - } - $self->pkgnum($cust_svc->pkgnum); - $self->svcpart($cust_svc->svcpart); - } - - $error = $self->set_auto_inventory; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - foreach my $object ( @$objects ) { - my($field, $obj); - if ( ref($object) eq 'ARRAY' ) { - ($obj, $field) = @$object; - } else { - $obj = $object; - $field = 'svcnum'; - } - $obj->$field($self->svcnum); - $error = $obj->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - #new-style exports! - unless ( $noexport_hack ) { - - warn "[$me] insert: \$FS::queue::jobnums is $FS::queue::jobnums\n" - if $DEBUG; - - my $export_args = $options{'export_args'} || []; - - foreach my $part_export ( $self->cust_svc->part_svc->part_export ) { - my $error = $part_export->export_insert($self, @$export_args); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "exporting to ". $part_export->exporttype. - " (transaction rolled back): $error"; - } - } - - foreach my $depend_jobnum ( @$depend_jobnums ) { - warn "[$me] inserting dependancies on supplied job $depend_jobnum\n" - if $DEBUG; - foreach my $jobnum ( @jobnums ) { - my $queue = qsearchs('queue', { 'jobnum' => $jobnum } ); - warn "[$me] inserting dependancy for job $jobnum on $depend_jobnum\n" - if $DEBUG; - my $error = $queue->depend_insert($depend_jobnum); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error queuing job dependancy: $error"; - } - } - } - - } - - if ( exists $options{'jobnums'} ) { - push @{ $options{'jobnums'} }, @jobnums; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -=item delete [ , OPTION => VALUE ... ] - -Deletes this account from the database. If there is an error, returns the -error, otherwise returns false. - -The corresponding FS::cust_svc record will be deleted as well. - -=cut - -sub delete { - my $self = shift; - my %options = @_; - my $export_args = $options{'export_args'} || []; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::delete - || $self->export('delete', @$export_args) - || $self->return_inventory - || $self->cust_svc->delete - ; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one. If there is an error, returns the error, -otherwise returns false. - -=cut - -sub replace { - my ($new, $old) = (shift, shift); - my %options = @_; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - # We absolutely have to have an old vs. new record to make this work. - $old = $new->replace_old unless defined($old); - - my $error = $new->set_auto_inventory; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $error = $new->SUPER::replace($old); - if ($error) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - #new-style exports! - unless ( $noexport_hack ) { - - my $export_args = $options{'export_args'} || []; - - #not quite false laziness, but same pattern as FS::svc_acct::replace and - #FS::part_export::sqlradius::_export_replace. List::Compare or something - #would be useful but too much of a pain in the ass to deploy - - my @old_part_export = $old->cust_svc->part_svc->part_export; - my %old_exportnum = map { $_->exportnum => 1 } @old_part_export; - my @new_part_export = - $new->svcpart - ? qsearchs('part_svc', { svcpart=>$new->svcpart } )->part_export - : $new->cust_svc->part_svc->part_export; - my %new_exportnum = map { $_->exportnum => 1 } @new_part_export; - - foreach my $delete_part_export ( - grep { ! $new_exportnum{$_->exportnum} } @old_part_export - ) { - my $error = $delete_part_export->export_delete($old, @$export_args); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error deleting, export to ". $delete_part_export->exporttype. - " (transaction rolled back): $error"; - } - } - - foreach my $replace_part_export ( - grep { $old_exportnum{$_->exportnum} } @new_part_export - ) { - my $error = - $replace_part_export->export_replace( $new, $old, @$export_args); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error exporting to ". $replace_part_export->exporttype. - " (transaction rolled back): $error"; - } - } - - foreach my $insert_part_export ( - grep { ! $old_exportnum{$_->exportnum} } @new_part_export - ) { - my $error = $insert_part_export->export_insert($new, @$export_args ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error inserting export to ". $insert_part_export->exporttype. - " (transaction rolled back): $error"; - } - } - - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; -} - -=item setfixed - -Sets any fixed fields for this service (see L). If there is an -error, returns the error, otherwise returns the FS::part_svc object (use ref() -to test the return). Usually called by the check method. - -=cut - -sub setfixed { - my $self = shift; - $self->setx('F', @_); -} - -=item setdefault - -Sets all fields to their defaults (see L), overriding their -current values. If there is an error, returns the error, otherwise returns -the FS::part_svc object (use ref() to test the return). - -=cut - -sub setdefault { - my $self = shift; - $self->setx('D', @_ ); -} - -=item set_default_and_fixed - -=cut - -sub set_default_and_fixed { - my $self = shift; - $self->setx( [ 'D', 'F' ], @_ ); -} - -=item setx FLAG | FLAG_ARRAYREF , [ CALLBACK_HASHREF ] - -Sets fields according to the passed in flag or arrayref of flags. - -Optionally, a hashref of field names and callback coderefs can be passed. -If a coderef exists for a given field name, instead of setting the field, -the coderef is called with the column value (part_svc_column.columnvalue) -as the single parameter. - -=cut - -sub setx { - my $self = shift; - my $x = shift; - my @x = ref($x) ? @$x : ($x); - my $coderef = scalar(@_) ? shift : $self->_fieldhandlers; - - my $error = - $self->ut_numbern('svcnum') - ; - return $error if $error; - - my $part_svc = $self->part_svc; - return "Unkonwn svcpart" unless $part_svc; - - #set default/fixed/whatever fields from part_svc - - foreach my $part_svc_column ( - grep { my $f = $_->columnflag; grep { $f eq $_ } @x } #columnflag in @x - $part_svc->all_part_svc_column - ) { - - my $columnname = $part_svc_column->columnname; - my $columnvalue = $part_svc_column->columnvalue; - - $columnvalue = &{ $coderef->{$columnname} }( $self, $columnvalue ) - if exists( $coderef->{$columnname} ); - $self->setfield( $columnname, $columnvalue ); - - } - - $part_svc; - -} - -sub part_svc { - my $self = shift; - - #get part_svc - my $svcpart; - if ( $self->get('svcpart') ) { - $svcpart = $self->get('svcpart'); - } elsif ( $self->svcnum && qsearchs('cust_svc', {'svcnum'=>$self->svcnum}) ) { - my $cust_svc = $self->cust_svc; - return "Unknown svcnum" unless $cust_svc; - $svcpart = $cust_svc->svcpart; - } - - qsearchs( 'part_svc', { 'svcpart' => $svcpart } ); - -} - -=item set_auto_inventory - -Sets any fields which auto-populate from inventory (see L). -If there is an error, returns the error, otherwise returns false. - -=cut - -sub set_auto_inventory { - my $self = shift; - - my $error = - $self->ut_numbern('svcnum') - ; - return $error if $error; - - my $part_svc = $self->part_svc; - return "Unkonwn svcpart" unless $part_svc; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - #set default/fixed/whatever fields from part_svc - my $table = $self->table; - foreach my $field ( grep { $_ ne 'svcnum' } $self->fields ) { - my $part_svc_column = $part_svc->part_svc_column($field); - if ( $part_svc_column->columnflag eq 'A' && $self->$field() eq '' ) { - - my $classnum = $part_svc_column->columnvalue; - my $inventory_item = qsearchs({ - 'table' => 'inventory_item', - 'hashref' => { 'classnum' => $classnum, - 'svcnum' => '', - }, - 'extra_sql' => 'LIMIT 1 FOR UPDATE', - }); - - unless ( $inventory_item ) { - $dbh->rollback if $oldAutoCommit; - my $inventory_class = - qsearchs('inventory_class', { 'classnum' => $classnum } ); - return "Can't find inventory_class.classnum $classnum" - unless $inventory_class; - return "Out of ". $inventory_class->classname. "s\n"; #Lingua:: BS - #for pluralizing - } - - $inventory_item->svcnum( $self->svcnum ); - my $ierror = $inventory_item->replace(); - if ( $ierror ) { - $dbh->rollback if $oldAutoCommit; - return "Error provisioning inventory: $ierror"; - - } - - $self->setfield( $field, $inventory_item->item ); - - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; - -} - -=item return_inventory - -=cut - -sub return_inventory { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $inventory_item ( $self->inventory_item ) { - $inventory_item->svcnum(''); - my $error = $inventory_item->replace(); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error returning inventory: $error"; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; -} - -=item inventory_item - -Returns the inventory items associated with this svc_ record, as -FS::inventory_item objects (see L. - -=cut - -sub inventory_item { - my $self = shift; - qsearch({ - 'table' => 'inventory_item', - 'hashref' => { 'svcnum' => $self->svcnum, }, - }); -} - -=item cust_svc - -Returns the cust_svc record associated with this svc_ record, as a FS::cust_svc -object (see L). - -=cut - -sub cust_svc { - my $self = shift; - qsearchs('cust_svc', { 'svcnum' => $self->svcnum } ); -} - -=item suspend - -Runs export_suspend callbacks. - -=cut - -sub suspend { - my $self = shift; - my %options = @_; - my $export_args = $options{'export_args'} || []; - $self->export('suspend', @$export_args); -} - -=item unsuspend - -Runs export_unsuspend callbacks. - -=cut - -sub unsuspend { - my $self = shift; - my %options = @_; - my $export_args = $options{'export_args'} || []; - $self->export('unsuspend', @$export_args); -} - -=item export_links - -Runs export_links callbacks and returns the links. - -=cut - -sub export_links { - my $self = shift; - my $return = []; - $self->export('links', $return); - $return; -} - -=item export HOOK [ EXPORT_ARGS ] - -Runs the provided export hook (i.e. "suspend", "unsuspend") for this service. - -=cut - -sub export { - my( $self, $method ) = ( shift, shift ); - - $method = "export_$method" unless $method =~ /^export_/; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - #new-style exports! - unless ( $noexport_hack ) { - foreach my $part_export ( $self->cust_svc->part_svc->part_export ) { - next unless $part_export->can($method); - my $error = $part_export->$method($self, @_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error exporting $method event to ". $part_export->exporttype. - " (transaction rolled back): $error"; - } - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -=item overlimit - -Sets or retrieves overlimit date. - -=cut - -sub overlimit { - my $self = shift; - $self->cust_svc->overlimit(@_); -} - -=item cancel - -Stub - returns false (no error) so derived classes don't need to define this -methods. Called by the cancel method of FS::cust_pkg (see L). - -This method is called *before* the deletion step which actually deletes the -services. This method should therefore only be used for "pre-deletion" -cancellation steps, if necessary. - -=cut - -sub cancel { ''; } - -=item clone_suspended - -Constructor used by FS::part_export::_export_suspend fallback. Stub returning -same object for svc_ classes which don't implement a suspension fallback -(everything except svc_acct at the moment). Document better. - -=cut - -sub clone_suspended { - shift; -} - -=item clone_kludge_unsuspend - -Constructor used by FS::part_export::_export_unsuspend fallback. Stub returning -same object for svc_ classes which don't implement a suspension fallback -(everything except svc_acct at the moment). Document better. - -=cut - -sub clone_kludge_unsuspend { - shift; -} - -=back - -=head1 BUGS - -The setfixed method return value. - -B method isn't used by insert and replace methods yet. - -=head1 SEE ALSO - -L, L, L, L, schema.html -from the base documentation. - -=cut - -1; - diff --git a/FS/FS/svc_External_Common.pm b/FS/FS/svc_External_Common.pm deleted file mode 100644 index a5805aafd..000000000 --- a/FS/FS/svc_External_Common.pm +++ /dev/null @@ -1,199 +0,0 @@ -package FS::svc_External_Common; - -use strict; -use vars qw(@ISA); -use FS::svc_Common; - -@ISA = qw( FS::svc_Common ); - -=head1 NAME - -FS::svc_external - Object methods for svc_external records - -=head1 SYNOPSIS - - use FS::svc_external; - - $record = new FS::svc_external \%hash; - $record = new FS::svc_external { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->suspend; - - $error = $record->unsuspend; - - $error = $record->cancel; - -=head1 DESCRIPTION - -FS::svc_External_Common is intended as a base class for table-specific classes -to inherit from. FS::svc_External_Common is used for services which connect -to externally tracked services via "id" and "table" fields. - -FS::svc_External_Common inherits from FS::svc_Common. - -The following fields are currently supported: - -=over 4 - -=item svcnum - primary key - -=item id - unique number of external record - -=item title - for invoice line items - -=back - -=head1 METHODS - -=over 4 - -=item search_sql - -Provides a default search_sql method which returns an SQL fragment to search -the B field. - -=cut - -sub search_sql { - my($class, $string) = @_; - $class->search_sql_field('title', $string); -} - -=item new HASHREF - -Creates a new external service. To add the external service to the database, -see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I<hash> method. - -=cut - -=item label - -Returns a string identifying this external service in the form "id:title" - -=cut - -sub label { - my $self = shift; - $self->id. ':'. $self->title; -} - -=item insert [ , OPTION => VALUE ... ] - -Adds this external service to the database. If there is an error, returns the -error, otherwise returns false. - -The additional fields pkgnum and svcpart (see L<FS::cust_svc>) should be -defined. An FS::cust_svc record will be created and inserted. - -Currently available options are: I<depend_jobnum> - -If I<depend_jobnum> is set (to a scalar jobnum or an array reference of -jobnums), all provisioning jobs will have a dependancy on the supplied -jobnum(s) (they will not run until the specific job(s) complete(s)). - -=cut - -#sub insert { -# my $self = shift; -# my $error; -# -# $error = $self->SUPER::insert(@_); -# return $error if $error; -# -# ''; -#} - -=item delete - -Delete this record from the database. - -=cut - -#sub delete { -# my $self = shift; -# my $error; -# -# $error = $self->SUPER::delete; -# return $error if $error; -# -# ''; -#} - - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -#sub replace { -# my ( $new, $old ) = ( shift, shift ); -# my $error; -# -# $error = $new->SUPER::replace($old); -# return $error if $error; -# -# ''; -#} - -=item suspend - -Called by the suspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item unsuspend - -Called by the unsuspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item cancel - -Called by the cancel method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item check - -Checks all fields to make sure this is a valid external service. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - my $x = $self->setfixed; - return $x unless ref($x); - my $part_svc = $x; - - my $error = - $self->ut_numbern('svcnum') - || $self->ut_numbern('id') - || $self->ut_textn('title') - ; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L<FS::svc_Common>, L<FS::Record>, L<FS::cust_svc>, L<FS::part_svc>, -L<FS::cust_pkg>, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/svc_Parent_Mixin.pm b/FS/FS/svc_Parent_Mixin.pm deleted file mode 100644 index 4501bafc8..000000000 --- a/FS/FS/svc_Parent_Mixin.pm +++ /dev/null @@ -1,103 +0,0 @@ -package FS::svc_Parent_Mixin; - -use strict; -use NEXT; -use FS::Record qw(qsearch qsearchs); -use FS::cust_svc; - -=head1 NAME - -FS::svc_Parent_Mixin - Mixin class for svc_ classes with a parent_svcnum field - -=head1 SYNOPSIS - -package FS::svc_table; -use vars qw(@ISA); -@ISA = qw( FS::svc_Parent_Mixin FS::svc_Common ); - -=head1 DESCRIPTION - -This is a mixin class for svc_ classes that contain a parent_svcnum field. - -=cut - -=head1 METHODS - -=over 4 - -=item parent_cust_svc - -Returns the parent FS::cust_svc object. - -=cut - -sub parent_cust_svc { - my $self = shift; - qsearchs('cust_svc', { 'svcnum' => $self->parent_svcnum } ); -} - -=item parent_svc_x - -Returns the corresponding parent FS::svc_ object. - -=cut - -sub parent_svc_x { - my $self = shift; - $self->parent_cust_svc->svc_x; -} - -=item children_cust_svc - -Returns a list of any child FS::cust_svc objects. - -Note: This is not recursive; it only returns direct children. - -=cut - -sub children_cust_svc { - my $self = shift; - qsearch('cust_svc', { 'parent_svcnum' => $self->svcnum } ); -} - -=item children_svc_x - -Returns the corresponding list of child FS::svc_ objects. - -=cut - -sub children_svc_x { - my $self = shift; - map { $_->svc_x } $self->children_cust_svc; -} - -=item check - -This class provides a check subroutine which takes care of checking the -parent_svcnum field. The svc_ class which uses it will call SUPER::check at -the end of its own checks, and this class will call NEXT::check to pass -the check "up the chain" (see L<NEXT>). - -=cut - -sub check { - my $self = shift; - - $self->ut_foreign_keyn('parent_svcnum', 'cust_svc', 'svcnum') - || $self->NEXT::check; - -} - -=back - -=head1 BUGS - -Do we need a recursive child finder for multi-layered children? - -=head1 SEE ALSO - -L<FS::svc_Common>, L<FS::Record> - -=cut - -1; diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm deleted file mode 100644 index 4343df5cc..000000000 --- a/FS/FS/svc_acct.pm +++ /dev/null @@ -1,2664 +0,0 @@ -package FS::svc_acct; - -use strict; -use vars qw( @ISA $DEBUG $me $conf $skip_fuzzyfiles - $dir_prefix @shells $usernamemin - $usernamemax $passwordmin $passwordmax - $username_ampersand $username_letter $username_letterfirst - $username_noperiod $username_nounderscore $username_nodash - $username_uppercase $username_percent - $password_noampersand $password_noexclamation - $warning_template $warning_from $warning_subject $warning_mimetype - $warning_cc - $smtpmachine - $radius_password $radius_ip - $dirhash - @saltset @pw_set ); -use Carp; -use Fcntl qw(:flock); -use Date::Format; -use Crypt::PasswdMD5 1.2; -use Data::Dumper; -use Authen::Passphrase; -use FS::UID qw( datasrc driver_name ); -use FS::Conf; -use FS::Record qw( qsearch qsearchs fields dbh dbdef ); -use FS::Msgcat qw(gettext); -use FS::UI::bytecount; -use FS::svc_Common; -use FS::cust_svc; -use FS::part_svc; -use FS::svc_acct_pop; -use FS::cust_main_invoice; -use FS::svc_domain; -use FS::raddb; -use FS::queue; -use FS::radius_usergroup; -use FS::export_svc; -use FS::part_export; -use FS::svc_forward; -use FS::svc_www; -use FS::cdr; - -@ISA = qw( FS::svc_Common ); - -$DEBUG = 0; -$me = '[FS::svc_acct]'; - -#ask FS::UID to run this stuff for us later -$FS::UID::callback{'FS::svc_acct'} = sub { - $conf = new FS::Conf; - $dir_prefix = $conf->config('home'); - @shells = $conf->config('shells'); - $usernamemin = $conf->config('usernamemin') || 2; - $usernamemax = $conf->config('usernamemax'); - $passwordmin = $conf->config('passwordmin') || 6; - $passwordmax = $conf->config('passwordmax') || 8; - $username_letter = $conf->exists('username-letter'); - $username_letterfirst = $conf->exists('username-letterfirst'); - $username_noperiod = $conf->exists('username-noperiod'); - $username_nounderscore = $conf->exists('username-nounderscore'); - $username_nodash = $conf->exists('username-nodash'); - $username_uppercase = $conf->exists('username-uppercase'); - $username_ampersand = $conf->exists('username-ampersand'); - $username_percent = $conf->exists('username-percent'); - $password_noampersand = $conf->exists('password-noexclamation'); - $password_noexclamation = $conf->exists('password-noexclamation'); - $dirhash = $conf->config('dirhash') || 0; - if ( $conf->exists('warning_email') ) { - $warning_template = new Text::Template ( - TYPE => 'ARRAY', - SOURCE => [ map "$_\n", $conf->config('warning_email') ] - ) or warn "can't create warning email template: $Text::Template::ERROR"; - $warning_from = $conf->config('warning_email-from'); # || 'your-isp-is-dum' - $warning_subject = $conf->config('warning_email-subject') || 'Warning'; - $warning_mimetype = $conf->config('warning_email-mimetype') || 'text/plain'; - $warning_cc = $conf->config('warning_email-cc'); - } else { - $warning_template = ''; - $warning_from = ''; - $warning_subject = ''; - $warning_mimetype = ''; - $warning_cc = ''; - } - $smtpmachine = $conf->config('smtpmachine'); - $radius_password = $conf->config('radius-password') || 'Password'; - $radius_ip = $conf->config('radius-ip') || 'Framed-IP-Address'; - @pw_set = ( 'A'..'Z' ) if $conf->exists('password-generated-allcaps'); -}; - -@saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' ); -@pw_set = ( 'a'..'z', 'A'..'Z', '0'..'9', '(', ')', '#', '!', '.', ',' ); - -sub _cache { - my $self = shift; - my ( $hashref, $cache ) = @_; - if ( $hashref->{'svc_acct_svcnum'} ) { - $self->{'_domsvc'} = FS::svc_domain->new( { - 'svcnum' => $hashref->{'domsvc'}, - 'domain' => $hashref->{'svc_acct_domain'}, - 'catchall' => $hashref->{'svc_acct_catchall'}, - } ); - } -} - -=head1 NAME - -FS::svc_acct - Object methods for svc_acct records - -=head1 SYNOPSIS - - use FS::svc_acct; - - $record = new FS::svc_acct \%hash; - $record = new FS::svc_acct { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->suspend; - - $error = $record->unsuspend; - - $error = $record->cancel; - - %hash = $record->radius; - - %hash = $record->radius_reply; - - %hash = $record->radius_check; - - $domain = $record->domain; - - $svc_domain = $record->svc_domain; - - $email = $record->email; - - $seconds_since = $record->seconds_since($timestamp); - -=head1 DESCRIPTION - -An FS::svc_acct object represents an account. FS::svc_acct inherits from -FS::svc_Common. The following fields are currently supported: - -=over 4 - -=item svcnum - primary key (assigned automatcially for new accounts) - -=item username - -=item _password - generated if blank - -=item _password_encoding - plain, crypt, ldap (or empty for autodetection) - -=item sec_phrase - security phrase - -=item popnum - Point of presence (see L<FS::svc_acct_pop>) - -=item uid - -=item gid - -=item finger - GECOS - -=item dir - set automatically if blank (and uid is not) - -=item shell - -=item quota - (unimplementd) - -=item slipip - IP address - -=item seconds - - -=item upbytes - - -=item downbytes - - -=item totalbytes - - -=item domsvc - svcnum from svc_domain - -=item radius_I<Radius_Attribute> - I<Radius-Attribute> (reply) - -=item rc_I<Radius_Attribute> - I<Radius-Attribute> (check) - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new account. To add the account to the database, see L<"insert">. - -=cut - -sub table_info { - { - 'name' => 'Account', - 'longname_plural' => 'Access accounts and mailboxes', - 'sorts' => [ 'username', 'uid', 'seconds', 'last_login' ], - 'display_weight' => 10, - 'cancel_weight' => 50, - 'fields' => { - 'dir' => 'Home directory', - 'uid' => { - label => 'UID', - def_label => 'UID (set to fixed and blank for no UIDs)', - type => 'text', - }, - 'slipip' => 'IP address', - # 'popnum' => qq!<A HREF="$p/browse/svc_acct_pop.cgi/">POP number</A>!, - 'popnum' => { - label => 'Access number', - type => 'select', - select_table => 'svc_acct_pop', - select_key => 'popnum', - select_label => 'city', - disable_select => 1, - }, - 'username' => { - label => 'Username', - type => 'text', - disable_default => 1, - disable_fixed => 1, - disable_select => 1, - }, - 'quota' => { - label => 'Quota', - type => 'text', - disable_inventory => 1, - disable_select => 1, - }, - '_password' => 'Password', - 'gid' => { - label => 'GID', - def_label => 'GID (when blank, defaults to UID)', - type => 'text', - }, - 'shell' => { - #desc =>'Shell (all service definitions should have a default or fixed shell that is present in the <b>shells</b> configuration file, set to blank for no shell tracking)', - label => 'Shell', - def_label=> 'Shell (set to blank for no shell tracking)', - type =>'select', - select_list => [ $conf->config('shells') ], - disable_inventory => 1, - disable_select => 1, - }, - 'finger' => 'Real name (GECOS)', - 'domsvc' => { - label => 'Domain', - #def_label => 'svcnum from svc_domain', - type => 'select', - select_table => 'svc_domain', - select_key => 'svcnum', - select_label => 'domain', - disable_inventory => 1, - - }, - 'usergroup' => { - label => 'RADIUS groups', - type => 'radius_usergroup_selector', - disable_inventory => 1, - disable_select => 1, - }, - 'seconds' => { label => 'Seconds', - label_sort => 'with Time Remaining', - type => 'text', - disable_inventory => 1, - disable_select => 1, - }, - 'upbytes' => { label => 'Upload', - type => 'text', - disable_inventory => 1, - disable_select => 1, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'downbytes' => { label => 'Download', - type => 'text', - disable_inventory => 1, - disable_select => 1, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'totalbytes'=> { label => 'Total up and download', - type => 'text', - disable_inventory => 1, - disable_select => 1, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'seconds_threshold' => { label => 'Seconds threshold', - type => 'text', - disable_inventory => 1, - disable_select => 1, - }, - 'upbytes_threshold' => { label => 'Upload threshold', - type => 'text', - disable_inventory => 1, - disable_select => 1, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'downbytes_threshold' => { label => 'Download threshold', - type => 'text', - disable_inventory => 1, - disable_select => 1, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'totalbytes_threshold'=> { label => 'Total up and download threshold', - type => 'text', - disable_inventory => 1, - disable_select => 1, - 'format' => \&FS::UI::bytecount::display_bytecount, - 'parse' => \&FS::UI::bytecount::parse_bytecount, - }, - 'last_login'=> { - label => 'Last login', - type => 'disabled', - }, - 'last_logout'=> { - label => 'Last logout', - type => 'disabled', - }, - }, - }; -} - -sub table { 'svc_acct'; } - -sub _fieldhandlers { - { - #false laziness with edit/svc_acct.cgi - 'usergroup' => sub { - my( $self, $groups ) = @_; - if ( ref($groups) eq 'ARRAY' ) { - $groups; - } elsif ( length($groups) ) { - [ split(/\s*,\s*/, $groups) ]; - } else { - []; - } - }, - }; -} - -sub last_login { - shift->_lastlog('in', @_); -} - -sub last_logout { - shift->_lastlog('out', @_); -} - -sub _lastlog { - my( $self, $op, $time ) = @_; - - if ( defined($time) ) { - warn "$me last_log$op called on svcnum ". $self->svcnum. - ' ('. $self->email. "): $time\n" - if $DEBUG; - - my $dbh = dbh; - - my $sql = "UPDATE svc_acct SET last_log$op = ? WHERE svcnum = ?"; - warn "$me $sql\n" - if $DEBUG; - - my $sth = $dbh->prepare( $sql ) - or die "Error preparing $sql: ". $dbh->errstr; - my $rv = $sth->execute($time, $self->svcnum); - die "Error executing $sql: ". $sth->errstr - unless defined($rv); - die "Can't update last_log$op for svcnum". $self->svcnum - if $rv == 0; - - $self->{'Hash'}->{"last_log$op"} = $time; - }else{ - $self->getfield("last_log$op"); - } -} - -=item search_sql STRING - -Class method which returns an SQL fragment to search for the given string. - -=cut - -sub search_sql { - my( $class, $string ) = @_; - if ( $string =~ /^([^@]+)@([^@]+)$/ ) { - my( $username, $domain ) = ( $1, $2 ); - my $q_username = dbh->quote($username); - my @svc_domain = qsearch('svc_domain', { 'domain' => $domain } ); - if ( @svc_domain ) { - "svc_acct.username = $q_username AND ( ". - join( ' OR ', map { "svc_acct.domsvc = ". $_->svcnum; } @svc_domain ). - " )"; - } else { - '1 = 0'; #false - } - } elsif ( $string =~ /^(\d{1,3}\.){3}\d{1,3}$/ ) { - ' ( '. - $class->search_sql_field('slipip', $string ). - ' OR '. - $class->search_sql_field('username', $string ). - ' ) '; - } else { - $class->search_sql_field('username', $string); - } -} - -=item label [ END_TIMESTAMP [ START_TIMESTAMP ] ] - -Returns the "username@domain" string for this account. - -END_TIMESTAMP and START_TIMESTAMP can optionally be passed when dealing with -history records. - -=cut - -sub label { - my $self = shift; - $self->email(@_); -} - -=cut - -=item insert [ , OPTION => VALUE ... ] - -Adds this account to the database. If there is an error, returns the error, -otherwise returns false. - -The additional fields pkgnum and svcpart (see L<FS::cust_svc>) should be -defined. An FS::cust_svc record will be created and inserted. - -The additional field I<usergroup> can optionally be defined; if so it should -contain an arrayref of group names. See L<FS::radius_usergroup>. - -The additional field I<child_objects> can optionally be defined; if so it -should contain an arrayref of FS::tablename objects. They will have their -svcnum fields set and will be inserted after this record, but before any -exports are run. Each element of the array can also optionally be a -two-element array reference containing the child object and the name of an -alternate field to be filled in with the newly-inserted svcnum, for example -C<[ $svc_forward, 'srcsvc' ]> - -Currently available options are: I<depend_jobnum> - -If I<depend_jobnum> is set (to a scalar jobnum or an array reference of -jobnums), all provisioning jobs will have a dependancy on the supplied -jobnum(s) (they will not run until the specific job(s) complete(s)). - -(TODOC: L<FS::queue> and L<freeside-queued>) - -(TODOC: new exports!) - -=cut - -sub insert { - my $self = shift; - my %options = @_; - - if ( $DEBUG ) { - warn "[$me] insert called on $self: ". Dumper($self). - "\nwith options: ". Dumper(%options); - } - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $self->check; - return $error if $error; - - if ( $self->svcnum && qsearchs('cust_svc',{'svcnum'=>$self->svcnum}) ) { - my $cust_svc = qsearchs('cust_svc',{'svcnum'=>$self->svcnum}); - unless ( $cust_svc ) { - $dbh->rollback if $oldAutoCommit; - return "no cust_svc record found for svcnum ". $self->svcnum; - } - $self->pkgnum($cust_svc->pkgnum); - $self->svcpart($cust_svc->svcpart); - } - - $error = $self->_check_duplicate; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - my @jobnums; - $error = $self->SUPER::insert( - 'jobnums' => \@jobnums, - 'child_objects' => $self->child_objects, - %options, - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( $self->usergroup ) { - foreach my $groupname ( @{$self->usergroup} ) { - my $radius_usergroup = new FS::radius_usergroup ( { - svcnum => $self->svcnum, - groupname => $groupname, - } ); - my $error = $radius_usergroup->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - } - - unless ( $skip_fuzzyfiles ) { - $error = $self->queue_fuzzyfiles_update; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "updating fuzzy search cache: $error"; - } - } - - my $cust_pkg = $self->cust_svc->cust_pkg; - - if ( $cust_pkg ) { - my $cust_main = $cust_pkg->cust_main; - my $agentnum = $cust_main->agentnum; - - if ( $conf->exists('emailinvoiceautoalways') - || $conf->exists('emailinvoiceauto') - && ! $cust_main->invoicing_list_emailonly - ) { - my @invoicing_list = $cust_main->invoicing_list; - push @invoicing_list, $self->email; - $cust_main->invoicing_list(\@invoicing_list); - } - - #welcome email - my ($to,$welcome_template,$welcome_from,$welcome_subject,$welcome_subject_template,$welcome_mimetype) - = ('','','','','',''); - - if ( $conf->exists('welcome_email', $agentnum) ) { - $welcome_template = new Text::Template ( - TYPE => 'ARRAY', - SOURCE => [ map "$_\n", $conf->config('welcome_email', $agentnum) ] - ) or warn "can't create welcome email template: $Text::Template::ERROR"; - $welcome_from = $conf->config('welcome_email-from', $agentnum); - # || 'your-isp-is-dum' - $welcome_subject = $conf->config('welcome_email-subject', $agentnum) - || 'Welcome'; - $welcome_subject_template = new Text::Template ( - TYPE => 'STRING', - SOURCE => $welcome_subject, - ) or warn "can't create welcome email subject template: $Text::Template::ERROR"; - $welcome_mimetype = $conf->config('welcome_email-mimetype', $agentnum) - || 'text/plain'; - } - if ( $welcome_template && $cust_pkg ) { - my $to = join(', ', grep { $_ !~ /^(POST|FAX)$/ } $cust_main->invoicing_list ); - if ( $to ) { - - my %hash = ( - 'custnum' => $self->custnum, - 'username' => $self->username, - 'password' => $self->_password, - 'first' => $cust_main->first, - 'last' => $cust_main->getfield('last'), - 'pkg' => $cust_pkg->part_pkg->pkg, - ); - my $wqueue = new FS::queue { - 'svcnum' => $self->svcnum, - 'job' => 'FS::svc_acct::send_email' - }; - my $error = $wqueue->insert( - 'to' => $to, - 'from' => $welcome_from, - 'subject' => $welcome_subject_template->fill_in( HASH => \%hash, ), - 'mimetype' => $welcome_mimetype, - 'body' => $welcome_template->fill_in( HASH => \%hash, ), - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error queuing welcome email: $error"; - } - - if ( $options{'depend_jobnum'} ) { - warn "$me depend_jobnum found; adding to welcome email dependancies" - if $DEBUG; - if ( ref($options{'depend_jobnum'}) ) { - warn "$me adding jobs ". join(', ', @{$options{'depend_jobnum'}} ). - "to welcome email dependancies" - if $DEBUG; - push @jobnums, @{ $options{'depend_jobnum'} }; - } else { - warn "$me adding job $options{'depend_jobnum'} ". - "to welcome email dependancies" - if $DEBUG; - push @jobnums, $options{'depend_jobnum'}; - } - } - - foreach my $jobnum ( @jobnums ) { - my $error = $wqueue->depend_insert($jobnum); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error queuing welcome email job dependancy: $error"; - } - } - - } - - } - - } # if ( $cust_pkg ) - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; #no error -} - -=item delete - -Deletes this account from the database. If there is an error, returns the -error, otherwise returns false. - -The corresponding FS::cust_svc record will be deleted as well. - -(TODOC: new exports!) - -=cut - -sub delete { - my $self = shift; - - return "can't delete system account" if $self->_check_system; - - return "Can't delete an account which is a (svc_forward) source!" - if qsearch( 'svc_forward', { 'srcsvc' => $self->svcnum } ); - - return "Can't delete an account which is a (svc_forward) destination!" - if qsearch( 'svc_forward', { 'dstsvc' => $self->svcnum } ); - - return "Can't delete an account with (svc_www) web service!" - if qsearch( 'svc_www', { 'usersvc' => $self->svcnum } ); - - # what about records in session ? (they should refer to history table) - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $cust_main_invoice ( - qsearch( 'cust_main_invoice', { 'dest' => $self->svcnum } ) - ) { - unless ( defined($cust_main_invoice) ) { - warn "WARNING: something's wrong with qsearch"; - next; - } - my %hash = $cust_main_invoice->hash; - $hash{'dest'} = $self->email; - my $new = new FS::cust_main_invoice \%hash; - my $error = $new->replace($cust_main_invoice); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - foreach my $svc_domain ( - qsearch( 'svc_domain', { 'catchall' => $self->svcnum } ) - ) { - my %hash = new FS::svc_domain->hash; - $hash{'catchall'} = ''; - my $new = new FS::svc_domain \%hash; - my $error = $new->replace($svc_domain); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - my $error = $self->SUPER::delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - foreach my $radius_usergroup ( - qsearch('radius_usergroup', { 'svcnum' => $self->svcnum } ) - ) { - my $error = $radius_usergroup->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; -} - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -The additional field I<usergroup> can optionally be defined; if so it should -contain an arrayref of group names. See L<FS::radius_usergroup>. - - -=cut - -sub replace { - my ( $new, $old ) = ( shift, shift ); - my $error; - warn "$me replacing $old with $new\n" if $DEBUG; - - # We absolutely have to have an old vs. new record to make this work. - if (!defined($old)) { - $old = qsearchs( 'svc_acct', { 'svcnum' => $new->svcnum } ); - } - - return "can't modify system account" if $old->_check_system; - - { - #no warnings 'numeric'; #alas, a 5.006-ism - local($^W) = 0; - - foreach my $xid (qw( uid gid )) { - - return "Can't change $xid!" - if ! $conf->exists("svc_acct-edit_$xid") - && $old->$xid() != $new->$xid() - && $new->cust_svc->part_svc->part_svc_column($xid)->columnflag ne 'F' - } - - } - - #change homdir when we change username - $new->setfield('dir', '') if $old->username ne $new->username; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - # redundant, but so $new->usergroup gets set - $error = $new->check; - return $error if $error; - - $old->usergroup( [ $old->radius_groups ] ); - if ( $DEBUG ) { - warn $old->email. " old groups: ". join(' ',@{$old->usergroup}). "\n"; - warn $new->email. "new groups: ". join(' ',@{$new->usergroup}). "\n"; - } - if ( $new->usergroup ) { - #(sorta) false laziness with FS::part_export::sqlradius::_export_replace - my @newgroups = @{$new->usergroup}; - foreach my $oldgroup ( @{$old->usergroup} ) { - if ( grep { $oldgroup eq $_ } @newgroups ) { - @newgroups = grep { $oldgroup ne $_ } @newgroups; - next; - } - my $radius_usergroup = qsearchs('radius_usergroup', { - svcnum => $old->svcnum, - groupname => $oldgroup, - } ); - my $error = $radius_usergroup->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error deleting radius_usergroup $oldgroup: $error"; - } - } - - foreach my $newgroup ( @newgroups ) { - my $radius_usergroup = new FS::radius_usergroup ( { - svcnum => $new->svcnum, - groupname => $newgroup, - } ); - my $error = $radius_usergroup->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error adding radius_usergroup $newgroup: $error"; - } - } - - } - - if ( $old->username ne $new->username || $old->domsvc != $new->domsvc ) { - $new->svcpart( $new->cust_svc->svcpart ) unless $new->svcpart; - $error = $new->_check_duplicate; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - } - - $error = $new->SUPER::replace($old, @_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error if $error; - } - - if ( $new->username ne $old->username && ! $skip_fuzzyfiles ) { - $error = $new->queue_fuzzyfiles_update; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "updating fuzzy search cache: $error"; - } - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; #no error -} - -=item queue_fuzzyfiles_update - -Used by insert & replace to update the fuzzy search cache - -=cut - -sub queue_fuzzyfiles_update { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $queue = new FS::queue { - 'svcnum' => $self->svcnum, - 'job' => 'FS::svc_acct::append_fuzzyfiles' - }; - my $error = $queue->insert($self->username); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "queueing job (transaction rolled back): $error"; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - - -=item suspend - -Suspends this account by calling export-specific suspend hooks. If there is -an error, returns the error, otherwise returns false. - -Called by the suspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=cut - -sub suspend { - my $self = shift; - return "can't suspend system account" if $self->_check_system; - $self->SUPER::suspend(@_); -} - -=item unsuspend - -Unsuspends this account by by calling export-specific suspend hooks. If there -is an error, returns the error, otherwise returns false. - -Called by the unsuspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=cut - -sub unsuspend { - my $self = shift; - my %hash = $self->hash; - if ( $hash{_password} =~ /^\*SUSPENDED\* (.*)$/ ) { - $hash{_password} = $1; - my $new = new FS::svc_acct ( \%hash ); - my $error = $new->replace($self); - return $error if $error; - } - - $self->SUPER::unsuspend(@_); -} - -=item cancel - -Called by the cancel method of FS::cust_pkg (see L<FS::cust_pkg>). - -If the B<auto_unset_catchall> configuration option is set, this method will -automatically remove any references to the canceled service in the catchall -field of svc_domain. This allows packages that contain both a svc_domain and -its catchall svc_acct to be canceled in one step. - -=cut - -sub cancel { - # Only one thing to do at this level - my $self = shift; - foreach my $svc_domain ( - qsearch( 'svc_domain', { catchall => $self->svcnum } ) ) { - if($conf->exists('auto_unset_catchall')) { - my %hash = $svc_domain->hash; - $hash{catchall} = ''; - my $new = new FS::svc_domain ( \%hash ); - my $error = $new->replace($svc_domain); - return $error if $error; - } else { - return "cannot unprovision svc_acct #".$self->svcnum. - " while assigned as catchall for svc_domain #".$svc_domain->svcnum; - } - } - - $self->SUPER::cancel(@_); -} - - -=item check - -Checks all fields to make sure this is a valid service. If there is an error, -returns the error, otherwise returns false. Called by the insert and replace -methods. - -Sets any fixed values; see L<FS::part_svc>. - -=cut - -sub check { - my $self = shift; - - my($recref) = $self->hashref; - - my $x = $self->setfixed( $self->_fieldhandlers ); - return $x unless ref($x); - my $part_svc = $x; - - if ( $part_svc->part_svc_column('usergroup')->columnflag eq "F" ) { - $self->usergroup( - [ split(',', $part_svc->part_svc_column('usergroup')->columnvalue) ] ); - } - - my $error = $self->ut_numbern('svcnum') - #|| $self->ut_number('domsvc') - || $self->ut_foreign_key('domsvc', 'svc_domain', 'svcnum' ) - || $self->ut_textn('sec_phrase') - || $self->ut_snumbern('seconds') - || $self->ut_snumbern('upbytes') - || $self->ut_snumbern('downbytes') - || $self->ut_snumbern('totalbytes') - || $self->ut_enum( '_password_encoding', - [ '', qw( plain crypt ldap ) ] - ) - ; - return $error if $error; - - my $ulen = $usernamemax || $self->dbdef_table->column('username')->length; - if ( $username_uppercase ) { - $recref->{username} =~ /^([a-z0-9_\-\.\&\%]{$usernamemin,$ulen})$/i - or return gettext('illegal_username'). " ($usernamemin-$ulen): ". $recref->{username}; - $recref->{username} = $1; - } else { - $recref->{username} =~ /^([a-z0-9_\-\.\&\%]{$usernamemin,$ulen})$/ - or return gettext('illegal_username'). " ($usernamemin-$ulen): ". $recref->{username}; - $recref->{username} = $1; - } - - if ( $username_letterfirst ) { - $recref->{username} =~ /^[a-z]/ or return gettext('illegal_username'); - } elsif ( $username_letter ) { - $recref->{username} =~ /[a-z]/ or return gettext('illegal_username'); - } - if ( $username_noperiod ) { - $recref->{username} =~ /\./ and return gettext('illegal_username'); - } - if ( $username_nounderscore ) { - $recref->{username} =~ /_/ and return gettext('illegal_username'); - } - if ( $username_nodash ) { - $recref->{username} =~ /\-/ and return gettext('illegal_username'); - } - unless ( $username_ampersand ) { - $recref->{username} =~ /\&/ and return gettext('illegal_username'); - } - unless ( $username_percent ) { - $recref->{username} =~ /\%/ and return gettext('illegal_username'); - } - - $recref->{popnum} =~ /^(\d*)$/ or return "Illegal popnum: ".$recref->{popnum}; - $recref->{popnum} = $1; - return "Unknown popnum" unless - ! $recref->{popnum} || - qsearchs('svc_acct_pop',{'popnum'=> $recref->{popnum} } ); - - unless ( $part_svc->part_svc_column('uid')->columnflag eq 'F' ) { - - $recref->{uid} =~ /^(\d*)$/ or return "Illegal uid"; - $recref->{uid} = $1 eq '' ? $self->unique('uid') : $1; - - $recref->{gid} =~ /^(\d*)$/ or return "Illegal gid"; - $recref->{gid} = $1 eq '' ? $recref->{uid} : $1; - #not all systems use gid=uid - #you can set a fixed gid in part_svc - - return "Only root can have uid 0" - if $recref->{uid} == 0 - && $recref->{username} !~ /^(root|toor|smtp)$/; - - unless ( $recref->{username} eq 'sync' ) { - if ( grep $_ eq $recref->{shell}, @shells ) { - $recref->{shell} = (grep $_ eq $recref->{shell}, @shells)[0]; - } else { - return "Illegal shell \`". $self->shell. "\'; ". - "shells configuration value contains: @shells"; - } - } else { - $recref->{shell} = '/bin/sync'; - } - - } else { - $recref->{gid} ne '' ? - return "Can't have gid without uid" : ( $recref->{gid}='' ); - #$recref->{dir} ne '' ? - # return "Can't have directory without uid" : ( $recref->{dir}='' ); - $recref->{shell} ne '' ? - return "Can't have shell without uid" : ( $recref->{shell}='' ); - } - - unless ( $part_svc->part_svc_column('dir')->columnflag eq 'F' ) { - - $recref->{dir} =~ /^([\/\w\-\.\&]*)$/ - or return "Illegal directory: ". $recref->{dir}; - $recref->{dir} = $1; - return "Illegal directory" - if $recref->{dir} =~ /(^|\/)\.+(\/|$)/; #no .. component - return "Illegal directory" - if $recref->{dir} =~ /\&/ && ! $username_ampersand; - unless ( $recref->{dir} ) { - $recref->{dir} = $dir_prefix . '/'; - if ( $dirhash > 0 ) { - for my $h ( 1 .. $dirhash ) { - $recref->{dir} .= substr($recref->{username}, $h-1, 1). '/'; - } - } elsif ( $dirhash < 0 ) { - for my $h ( reverse $dirhash .. -1 ) { - $recref->{dir} .= substr($recref->{username}, $h, 1). '/'; - } - } - $recref->{dir} .= $recref->{username}; - ; - } - - } - - # $error = $self->ut_textn('finger'); - # return $error if $error; - if ( $self->getfield('finger') eq '' ) { - my $cust_pkg = $self->svcnum - ? $self->cust_svc->cust_pkg - : qsearchs('cust_pkg', { 'pkgnum' => $self->getfield('pkgnum') } ); - if ( $cust_pkg ) { - my $cust_main = $cust_pkg->cust_main; - $self->setfield('finger', $cust_main->first.' '.$cust_main->get('last') ); - } - } - $self->getfield('finger') =~ - /^([\w \t\!\@\#\$\%\&\(\)\-\+\;\'\"\,\.\?\/\*\<\>]*)$/ - or return "Illegal finger: ". $self->getfield('finger'); - $self->setfield('finger', $1); - - $recref->{quota} =~ /^(\w*)$/ or return "Illegal quota"; - $recref->{quota} = $1; - - unless ( $part_svc->part_svc_column('slipip')->columnflag eq 'F' ) { - if ( $recref->{slipip} eq '' ) { - $recref->{slipip} = ''; - } elsif ( $recref->{slipip} eq '0e0' ) { - $recref->{slipip} = '0e0'; - } else { - $recref->{slipip} =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/ - or return "Illegal slipip: ". $self->slipip; - $recref->{slipip} = $1; - } - - } - - #arbitrary RADIUS stuff; allow ut_textn for now - foreach ( grep /^radius_/, fields('svc_acct') ) { - $self->ut_textn($_); - } - - if ( $recref->{_password_encoding} eq 'ldap' ) { - - if ( $recref->{_password} =~ /^(\{[\w\-]+\})(!?.{0,64})$/ ) { - $recref->{_password} = uc($1).$2; - } else { - return 'Illegal (ldap-encoded) password: '. $recref->{_password}; - } - - } elsif ( $recref->{_password_encoding} eq 'crypt' ) { - - if ( $recref->{_password} =~ - #/^(\$\w+\$.*|[\w\+\/]{13}|_[\w\+\/]{19}|\*)$/ - /^(!!?)?(\$\w+\$.*|[\w\+\/]{13}|_[\w\+\/]{19}|\*)$/ - ) { - - $recref->{_password} = $1.$2; - - } else { - return 'Illegal (crypt-encoded) password'; - } - - } elsif ( $recref->{_password_encoding} eq 'plain' ) { - - #generate a password if it is blank - $recref->{_password} = join('',map($pw_set[ int(rand $#pw_set) ], (0..7) ) ) - unless length( $recref->{_password} ); - - if ( $recref->{_password} =~ /^([^\t\n]{$passwordmin,$passwordmax})$/ ) { - $recref->{_password} = $1; - } else { - return gettext('illegal_password'). " $passwordmin-$passwordmax ". - FS::Msgcat::_gettext('illegal_password_characters'). - ": ". $recref->{_password}; - } - - if ( $password_noampersand ) { - $recref->{_password} =~ /\&/ and return gettext('illegal_password'); - } - if ( $password_noexclamation ) { - $recref->{_password} =~ /\!/ and return gettext('illegal_password'); - } - - } else { - - #carp "warning: _password_encoding unspecified\n"; - - #generate a password if it is blank - unless ( length( $recref->{_password} ) ) { - - $recref->{_password} = - join('',map($pw_set[ int(rand $#pw_set) ], (0..7) ) ); - $recref->{_password_encoding} = 'plain'; - - } else { - - #if ( $recref->{_password} =~ /^((\*SUSPENDED\* )?)([^\t\n]{4,16})$/ ) { - if ( $recref->{_password} =~ /^((\*SUSPENDED\* |!!?)?)([^\t\n]{$passwordmin,$passwordmax})$/ ) { - $recref->{_password} = $1.$3; - $recref->{_password_encoding} = 'plain'; - } elsif ( $recref->{_password} =~ - /^((\*SUSPENDED\* |!!?)?)([\w\.\/\$\;\+]{13,64})$/ - ) { - $recref->{_password} = $1.$3; - $recref->{_password_encoding} = 'crypt'; - } elsif ( $recref->{_password} eq '*' ) { - $recref->{_password} = '*'; - $recref->{_password_encoding} = 'crypt'; - } elsif ( $recref->{_password} eq '!' ) { - $recref->{_password_encoding} = 'crypt'; - $recref->{_password} = '!'; - } elsif ( $recref->{_password} eq '!!' ) { - $recref->{_password} = '!!'; - $recref->{_password_encoding} = 'crypt'; - } else { - #return "Illegal password"; - return gettext('illegal_password'). " $passwordmin-$passwordmax ". - FS::Msgcat::_gettext('illegal_password_characters'). - ": ". $recref->{_password}; - } - - } - - } - - $self->SUPER::check; - -} - -=item _check_system - -Internal function to check the username against the list of system usernames -from the I<system_usernames> configuration value. Returns true if the username -is listed on the system username list. - -=cut - -sub _check_system { - my $self = shift; - scalar( grep { $self->username eq $_ || $self->email eq $_ } - $conf->config('system_usernames') - ); -} - -=item _check_duplicate - -Internal function to check for duplicates usernames, username@domain pairs and -uids. - -If the I<global_unique-username> configuration value is set to B<username> or -B<username@domain>, enforces global username or username@domain uniqueness. - -In all cases, check for duplicate uids and usernames or username@domain pairs -per export and with identical I<svcpart> values. - -=cut - -sub _check_duplicate { - my $self = shift; - - my $global_unique = $conf->config('global_unique-username') || 'none'; - return '' if $global_unique eq 'disabled'; - - warn "$me locking svc_acct table for duplicate search" if $DEBUG; - if ( driver_name =~ /^Pg/i ) { - dbh->do("LOCK TABLE svc_acct IN SHARE ROW EXCLUSIVE MODE") - or die dbh->errstr; - } elsif ( driver_name =~ /^mysql/i ) { - dbh->do("SELECT * FROM duplicate_lock - WHERE lockname = 'svc_acct' - FOR UPDATE" - ) or die dbh->errstr; - } else { - die "unknown database ". driver_name. - "; don't know how to lock for duplicate search"; - } - warn "$me acquired svc_acct table lock for duplicate search" if $DEBUG; - - my $part_svc = qsearchs('part_svc', { 'svcpart' => $self->svcpart } ); - unless ( $part_svc ) { - return 'unknown svcpart '. $self->svcpart; - } - - my @dup_user = grep { !$self->svcnum || $_->svcnum != $self->svcnum } - qsearch( 'svc_acct', { 'username' => $self->username } ); - return gettext('username_in_use') - if $global_unique eq 'username' && @dup_user; - - my @dup_userdomain = grep { !$self->svcnum || $_->svcnum != $self->svcnum } - qsearch( 'svc_acct', { 'username' => $self->username, - 'domsvc' => $self->domsvc } ); - return gettext('username_in_use') - if $global_unique eq 'username@domain' && @dup_userdomain; - - my @dup_uid; - if ( $part_svc->part_svc_column('uid')->columnflag ne 'F' - && $self->username !~ /^(toor|(hyla)?fax)$/ ) { - @dup_uid = grep { !$self->svcnum || $_->svcnum != $self->svcnum } - qsearch( 'svc_acct', { 'uid' => $self->uid } ); - } else { - @dup_uid = (); - } - - if ( @dup_user || @dup_userdomain || @dup_uid ) { - my $exports = FS::part_export::export_info('svc_acct'); - my %conflict_user_svcpart; - my %conflict_userdomain_svcpart = ( $self->svcpart => 'SELF', ); - - foreach my $part_export ( $part_svc->part_export ) { - - #this will catch to the same exact export - my @svcparts = map { $_->svcpart } $part_export->export_svc; - - #this will catch to exports w/same exporthost+type ??? - #my @other_part_export = qsearch('part_export', { - # 'machine' => $part_export->machine, - # 'exporttype' => $part_export->exporttype, - #} ); - #foreach my $other_part_export ( @other_part_export ) { - # push @svcparts, map { $_->svcpart } - # qsearch('export_svc', { 'exportnum' => $part_export->exportnum }); - #} - - #my $nodomain = $exports->{$part_export->exporttype}{'nodomain'}; - #silly kludge to avoid uninitialized value errors - my $nodomain = exists( $exports->{$part_export->exporttype}{'nodomain'} ) - ? $exports->{$part_export->exporttype}{'nodomain'} - : ''; - if ( $nodomain =~ /^Y/i ) { - $conflict_user_svcpart{$_} = $part_export->exportnum - foreach @svcparts; - } else { - $conflict_userdomain_svcpart{$_} = $part_export->exportnum - foreach @svcparts; - } - } - - foreach my $dup_user ( @dup_user ) { - my $dup_svcpart = $dup_user->cust_svc->svcpart; - if ( exists($conflict_user_svcpart{$dup_svcpart}) ) { - return "duplicate username: conflicts with svcnum ". $dup_user->svcnum. - " via exportnum ". $conflict_user_svcpart{$dup_svcpart}; - } - } - - foreach my $dup_userdomain ( @dup_userdomain ) { - my $dup_svcpart = $dup_userdomain->cust_svc->svcpart; - if ( exists($conflict_userdomain_svcpart{$dup_svcpart}) ) { - return "duplicate username\@domain: conflicts with svcnum ". - $dup_userdomain->svcnum. " via exportnum ". - $conflict_userdomain_svcpart{$dup_svcpart}; - } - } - - foreach my $dup_uid ( @dup_uid ) { - my $dup_svcpart = $dup_uid->cust_svc->svcpart; - if ( exists($conflict_user_svcpart{$dup_svcpart}) - || exists($conflict_userdomain_svcpart{$dup_svcpart}) ) { - return "duplicate uid: conflicts with svcnum ". $dup_uid->svcnum. - " via exportnum ". $conflict_user_svcpart{$dup_svcpart} - || $conflict_userdomain_svcpart{$dup_svcpart}; - } - } - - } - - return ''; - -} - -=item radius - -Depriciated, use radius_reply instead. - -=cut - -sub radius { - carp "FS::svc_acct::radius depriciated, use radius_reply"; - $_[0]->radius_reply; -} - -=item radius_reply - -Returns key/value pairs, suitable for assigning to a hash, for any RADIUS -reply attributes of this record. - -Note that this is now the preferred method for reading RADIUS attributes - -accessing the columns directly is discouraged, as the column names are -expected to change in the future. - -=cut - -sub radius_reply { - my $self = shift; - - return %{ $self->{'radius_reply'} } - if exists $self->{'radius_reply'}; - - my %reply = - map { - /^(radius_(.*))$/; - my($column, $attrib) = ($1, $2); - #$attrib =~ s/_/\-/g; - ( $FS::raddb::attrib{lc($attrib)}, $self->getfield($column) ); - } grep { /^radius_/ && $self->getfield($_) } fields( $self->table ); - - if ( $self->slipip && $self->slipip ne '0e0' ) { - $reply{$radius_ip} = $self->slipip; - } - - if ( $self->seconds !~ /^$/ ) { - $reply{'Session-Timeout'} = $self->seconds; - } - - %reply; -} - -=item radius_check - -Returns key/value pairs, suitable for assigning to a hash, for any RADIUS -check attributes of this record. - -Note that this is now the preferred method for reading RADIUS attributes - -accessing the columns directly is discouraged, as the column names are -expected to change in the future. - -=cut - -sub radius_check { - my $self = shift; - - return %{ $self->{'radius_check'} } - if exists $self->{'radius_check'}; - - my %check = - map { - /^(rc_(.*))$/; - my($column, $attrib) = ($1, $2); - #$attrib =~ s/_/\-/g; - ( $FS::raddb::attrib{lc($attrib)}, $self->getfield($column) ); - } grep { /^rc_/ && $self->getfield($_) } fields( $self->table ); - - my $password = $self->_password; - my $pw_attrib = length($password) <= 12 ? $radius_password : 'Crypt-Password'; $check{$pw_attrib} = $password; - - my $cust_svc = $self->cust_svc; - die "FATAL: no cust_svc record for svc_acct.svcnum ". $self->svcnum. "\n" - unless $cust_svc; - my $cust_pkg = $cust_svc->cust_pkg; - if ( $cust_pkg && $cust_pkg->part_pkg->is_prepaid && $cust_pkg->bill ) { - $check{'Expiration'} = time2str('%B %e %Y %T', $cust_pkg->bill ); #http://lists.cistron.nl/pipermail/freeradius-users/2005-January/040184.html - } - - %check; - -} - -=item snapshot - -This method instructs the object to "snapshot" or freeze RADIUS check and -reply attributes to the current values. - -=cut - -#bah, my english is too broken this morning -#Of note is the "Expiration" attribute, which, for accounts in prepaid packages, is typically defined on-the-fly as the associated packages cust_pkg.bill. (This is used by -#the FS::cust_pkg's replace method to trigger the correct export updates when -#package dates change) - -sub snapshot { - my $self = shift; - - $self->{$_} = { $self->$_() } - foreach qw( radius_reply radius_check ); - -} - -=item forget_snapshot - -This methos instructs the object to forget any previously snapshotted -RADIUS check and reply attributes. - -=cut - -sub forget_snapshot { - my $self = shift; - - delete $self->{$_} - foreach qw( radius_reply radius_check ); - -} - -=item domain [ END_TIMESTAMP [ START_TIMESTAMP ] ] - -Returns the domain associated with this account. - -END_TIMESTAMP and START_TIMESTAMP can optionally be passed when dealing with -history records. - -=cut - -sub domain { - my $self = shift; - die "svc_acct.domsvc is null for svcnum ". $self->svcnum unless $self->domsvc; - my $svc_domain = $self->svc_domain(@_) - or die "no svc_domain.svcnum for svc_acct.domsvc ". $self->domsvc; - $svc_domain->domain; -} - -=item svc_domain - -Returns the FS::svc_domain record for this account's domain (see -L<FS::svc_domain>). - -=cut - -# FS::h_svc_acct has a history-aware svc_domain override - -sub svc_domain { - my $self = shift; - $self->{'_domsvc'} - ? $self->{'_domsvc'} - : qsearchs( 'svc_domain', { 'svcnum' => $self->domsvc } ); -} - -=item cust_svc - -Returns the FS::cust_svc record for this account (see L<FS::cust_svc>). - -=cut - -#inherited from svc_Common - -=item email [ END_TIMESTAMP [ START_TIMESTAMP ] ] - -Returns an email address associated with the account. - -END_TIMESTAMP and START_TIMESTAMP can optionally be passed when dealing with -history records. - -=cut - -sub email { - my $self = shift; - $self->username. '@'. $self->domain(@_); -} - -=item acct_snarf - -Returns an array of FS::acct_snarf records associated with the account. -If the acct_snarf table does not exist or there are no associated records, -an empty list is returned - -=cut - -sub acct_snarf { - my $self = shift; - return () unless dbdef->table('acct_snarf'); - eval "use FS::acct_snarf;"; - die $@ if $@; - qsearch('acct_snarf', { 'svcnum' => $self->svcnum } ); -} - -=item decrement_upbytes OCTETS - -Decrements the I<upbytes> field of this record by the given amount. If there -is an error, returns the error, otherwise returns false. - -=cut - -sub decrement_upbytes { - shift->_op_usage('-', 'upbytes', @_); -} - -=item increment_upbytes OCTETS - -Increments the I<upbytes> field of this record by the given amount. If there -is an error, returns the error, otherwise returns false. - -=cut - -sub increment_upbytes { - shift->_op_usage('+', 'upbytes', @_); -} - -=item decrement_downbytes OCTETS - -Decrements the I<downbytes> field of this record by the given amount. If there -is an error, returns the error, otherwise returns false. - -=cut - -sub decrement_downbytes { - shift->_op_usage('-', 'downbytes', @_); -} - -=item increment_downbytes OCTETS - -Increments the I<downbytes> field of this record by the given amount. If there -is an error, returns the error, otherwise returns false. - -=cut - -sub increment_downbytes { - shift->_op_usage('+', 'downbytes', @_); -} - -=item decrement_totalbytes OCTETS - -Decrements the I<totalbytes> field of this record by the given amount. If there -is an error, returns the error, otherwise returns false. - -=cut - -sub decrement_totalbytes { - shift->_op_usage('-', 'totalbytes', @_); -} - -=item increment_totalbytes OCTETS - -Increments the I<totalbytes> field of this record by the given amount. If there -is an error, returns the error, otherwise returns false. - -=cut - -sub increment_totalbytes { - shift->_op_usage('+', 'totalbytes', @_); -} - -=item decrement_seconds SECONDS - -Decrements the I<seconds> field of this record by the given amount. If there -is an error, returns the error, otherwise returns false. - -=cut - -sub decrement_seconds { - shift->_op_usage('-', 'seconds', @_); -} - -=item increment_seconds SECONDS - -Increments the I<seconds> field of this record by the given amount. If there -is an error, returns the error, otherwise returns false. - -=cut - -sub increment_seconds { - shift->_op_usage('+', 'seconds', @_); -} - - -my %op2action = ( - '-' => 'suspend', - '+' => 'unsuspend', -); -my %op2condition = ( - '-' => sub { my($self, $column, $amount) = @_; - $self->$column - $amount <= 0; - }, - '+' => sub { my($self, $column, $amount) = @_; - $self->$column + $amount > 0; - }, -); -my %op2warncondition = ( - '-' => sub { my($self, $column, $amount) = @_; - my $threshold = $column . '_threshold'; - $self->$column - $amount <= $self->$threshold + 0; - }, - '+' => sub { my($self, $column, $amount) = @_; - $self->$column + $amount > 0; - }, -); - -sub _op_usage { - my( $self, $op, $column, $amount ) = @_; - - warn "$me _op_usage called for $column on svcnum ". $self->svcnum. - ' ('. $self->email. "): $op $amount\n" - if $DEBUG; - - return '' unless $amount; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $sql = "UPDATE svc_acct SET $column = ". - " CASE WHEN $column IS NULL THEN 0 ELSE $column END ". #$column||0 - " $op ? WHERE svcnum = ?"; - warn "$me $sql\n" - if $DEBUG; - - my $sth = $dbh->prepare( $sql ) - or die "Error preparing $sql: ". $dbh->errstr; - my $rv = $sth->execute($amount, $self->svcnum); - die "Error executing $sql: ". $sth->errstr - unless defined($rv); - die "Can't update $column for svcnum". $self->svcnum - if $rv == 0; - - my $action = $op2action{$op}; - - if ( &{$op2condition{$op}}($self, $column, $amount) && - ( $action eq 'suspend' && !$self->overlimit - || $action eq 'unsuspend' && $self->overlimit ) - ) { - foreach my $part_export ( $self->cust_svc->part_svc->part_export ) { - if ($part_export->option('overlimit_groups')) { - my ($new,$old); - my $other = new FS::svc_acct $self->hashref; - my $groups = &{ $self->_fieldhandlers->{'usergroup'} } - ($self, $part_export->option('overlimit_groups')); - $other->usergroup( $groups ); - if ($action eq 'suspend'){ - $new = $other; $old = $self; - }else{ - $new = $self; $old = $other; - } - my $error = $part_export->export_replace($new, $old); - $error ||= $self->overlimit($action); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error replacing radius groups in export, ${op}: $error"; - } - } - } - } - - if ( $conf->exists("svc_acct-usage_$action") - && &{$op2condition{$op}}($self, $column, $amount) ) { - #my $error = $self->$action(); - my $error = $self->cust_svc->cust_pkg->$action(); - # $error ||= $self->overlimit($action); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error ${action}ing: $error"; - } - } - - if ($warning_template && &{$op2warncondition{$op}}($self, $column, $amount)) { - my $wqueue = new FS::queue { - 'svcnum' => $self->svcnum, - 'job' => 'FS::svc_acct::reached_threshold', - }; - - my $to = ''; - if ($op eq '-'){ - $to = $warning_cc if &{$op2condition{$op}}($self, $column, $amount); - } - - # x_threshold race - my $error = $wqueue->insert( - 'svcnum' => $self->svcnum, - 'op' => $op, - 'column' => $column, - 'to' => $to, - ); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error queuing threshold activity: $error"; - } - } - - warn "$me update successful; committing\n" - if $DEBUG; - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - -sub set_usage { - my( $self, $valueref ) = @_; - - warn "$me set_usage called for svcnum ". $self->svcnum. - ' ('. $self->email. "): ". - join(', ', map { "$_ => " . $valueref->{$_}} keys %$valueref) . "\n" - if $DEBUG; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - local $FS::svc_Common::noexport_hack = 1; - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $reset = 0; - my %handyhash = (); - foreach my $field (keys %$valueref){ - $reset = 1 if $valueref->{$field}; - $self->setfield($field, $valueref->{$field}); - $self->setfield( $field.'_threshold', - int($self->getfield($field) - * ( $conf->exists('svc_acct-usage_threshold') - ? 1 - $conf->config('svc_acct-usage_threshold')/100 - : 0.20 - ) - ) - ); - $handyhash{$field} = $self->getfield($field); - $handyhash{$field.'_threshold'} = $self->getfield($field.'_threshold'); - } - #my $error = $self->replace; #NO! we avoid the call to ->check for - #die $error if $error; #services not explicity changed via the UI - - my $sql = "UPDATE svc_acct SET " . - join (',', map { "$_ = ?" } (keys %handyhash) ). - " WHERE svcnum = ?"; - - warn "$me $sql\n" - if $DEBUG; - - if (scalar(keys %handyhash)) { - my $sth = $dbh->prepare( $sql ) - or die "Error preparing $sql: ". $dbh->errstr; - my $rv = $sth->execute((values %handyhash), $self->svcnum); - die "Error executing $sql: ". $sth->errstr - unless defined($rv); - die "Can't update usage for svcnum ". $self->svcnum - if $rv == 0; - } - - if ( $reset ) { - my $error; - - if ($self->overlimit) { - $error = $self->overlimit('unsuspend'); - foreach my $part_export ( $self->cust_svc->part_svc->part_export ) { - if ($part_export->option('overlimit_groups')) { - my $old = new FS::svc_acct $self->hashref; - my $groups = &{ $self->_fieldhandlers->{'usergroup'} } - ($self, $part_export->option('overlimit_groups')); - $old->usergroup( $groups ); - $error ||= $part_export->export_replace($self, $old); - } - } - } - - if ( $conf->exists("svc_acct-usage_unsuspend")) { - $error ||= $self->cust_svc->cust_pkg->unsuspend; - } - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error unsuspending: $error"; - } - } - - warn "$me update successful; committing\n" - if $DEBUG; - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; - -} - - -=item recharge HASHREF - - Increments usage columns by the amount specified in HASHREF as - column=>amount pairs. - -=cut - -sub recharge { - my ($self, $vhash) = @_; - - if ( $DEBUG ) { - warn "[$me] recharge called on $self: ". Dumper($self). - "\nwith vhash: ". Dumper($vhash); - } - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - my $error = ''; - - foreach my $column (keys %$vhash){ - $error ||= $self->_op_usage('+', $column, $vhash->{$column}); - } - - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - }else{ - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - } - return $error; -} - -=item is_rechargeable - -Returns true if this svc_account can be "recharged" and false otherwise. - -=cut - -sub is_rechargable { - my $self = shift; - $self->seconds ne '' - || $self->upbytes ne '' - || $self->downbytes ne '' - || $self->totalbytes ne ''; -} - -=item seconds_since TIMESTAMP - -Returns the number of seconds this account has been online since TIMESTAMP, -according to the session monitor (see L<FS::Session>). - -TIMESTAMP is specified as a UNIX timestamp; see L<perlfunc/"time">. Also see -L<Time::Local> and L<Date::Parse> for conversion functions. - -=cut - -#note: POD here, implementation in FS::cust_svc -sub seconds_since { - my $self = shift; - $self->cust_svc->seconds_since(@_); -} - -=item seconds_since_sqlradacct TIMESTAMP_START TIMESTAMP_END - -Returns the numbers of seconds this account has been online between -TIMESTAMP_START (inclusive) and TIMESTAMP_END (exclusive), according to an -external SQL radacct table, specified via sqlradius export. Sessions which -started in the specified range but are still open are counted from session -start to the end of the range (unless they are over 1 day old, in which case -they are presumed missing their stop record and not counted). Also, sessions -which end in the range but started earlier are counted from the start of the -range to session end. Finally, sessions which start before the range but end -after are counted for the entire range. - -TIMESTAMP_START and TIMESTAMP_END are specified as UNIX timestamps; see -L<perlfunc/"time">. Also see L<Time::Local> and L<Date::Parse> for conversion -functions. - -=cut - -#note: POD here, implementation in FS::cust_svc -sub seconds_since_sqlradacct { - my $self = shift; - $self->cust_svc->seconds_since_sqlradacct(@_); -} - -=item attribute_since_sqlradacct TIMESTAMP_START TIMESTAMP_END ATTRIBUTE - -Returns the sum of the given attribute for all accounts (see L<FS::svc_acct>) -in this package for sessions ending between TIMESTAMP_START (inclusive) and -TIMESTAMP_END (exclusive). - -TIMESTAMP_START and TIMESTAMP_END are specified as UNIX timestamps; see -L<perlfunc/"time">. Also see L<Time::Local> and L<Date::Parse> for conversion -functions. - -=cut - -#note: POD here, implementation in FS::cust_svc -sub attribute_since_sqlradacct { - my $self = shift; - $self->cust_svc->attribute_since_sqlradacct(@_); -} - -=item get_session_history TIMESTAMP_START TIMESTAMP_END - -Returns an array of hash references of this customers login history for the -given time range. (document this better) - -=cut - -sub get_session_history { - my $self = shift; - $self->cust_svc->get_session_history(@_); -} - -=item last_login_text - -Returns text describing the time of last login. - -=cut - -sub last_login_text { - my $self = shift; - $self->last_login ? ctime($self->last_login) : 'unknown'; -} - -=item get_cdrs TIMESTAMP_START TIMESTAMP_END [ 'OPTION' => 'VALUE ... ] - -=cut - -sub get_cdrs { - my($self, $start, $end, %opt ) = @_; - - my $did = $self->username; #yup - - my $prefix = $opt{'default_prefix'}; #convergent.au '+61' - - my $for_update = $opt{'for_update'} ? 'FOR UPDATE' : ''; - - #SELECT $for_update * FROM cdr - # WHERE calldate >= $start #need a conversion - # AND calldate < $end #ditto - # AND ( charged_party = "$did" - # OR charged_party = "$prefix$did" #if length($prefix); - # OR ( ( charged_party IS NULL OR charged_party = '' ) - # AND - # ( src = "$did" OR src = "$prefix$did" ) # if length($prefix) - # ) - # ) - # AND ( freesidestatus IS NULL OR freesidestatus = '' ) - - my $charged_or_src; - if ( length($prefix) ) { - $charged_or_src = - " AND ( charged_party = '$did' - OR charged_party = '$prefix$did' - OR ( ( charged_party IS NULL OR charged_party = '' ) - AND - ( src = '$did' OR src = '$prefix$did' ) - ) - ) - "; - } else { - $charged_or_src = - " AND ( charged_party = '$did' - OR ( ( charged_party IS NULL OR charged_party = '' ) - AND - src = '$did' - ) - ) - "; - - } - - qsearch( - 'select' => "$for_update *", - 'table' => 'cdr', - 'hashref' => { - #( freesidestatus IS NULL OR freesidestatus = '' ) - 'freesidestatus' => '', - }, - 'extra_sql' => $charged_or_src, - - ); - -} - -=item radius_groups - -Returns all RADIUS groups for this account (see L<FS::radius_usergroup>). - -=cut - -sub radius_groups { - my $self = shift; - if ( $self->usergroup ) { - confess "explicitly specified usergroup not an arrayref: ". $self->usergroup - unless ref($self->usergroup) eq 'ARRAY'; - #when provisioning records, export callback runs in svc_Common.pm before - #radius_usergroup records can be inserted... - @{$self->usergroup}; - } else { - map { $_->groupname } - qsearch('radius_usergroup', { 'svcnum' => $self->svcnum } ); - } -} - -=item clone_suspended - -Constructor used by FS::part_export::_export_suspend fallback. Document -better. - -=cut - -sub clone_suspended { - my $self = shift; - my %hash = $self->hash; - $hash{_password} = join('',map($pw_set[ int(rand $#pw_set) ], (0..7) ) ); - new FS::svc_acct \%hash; -} - -=item clone_kludge_unsuspend - -Constructor used by FS::part_export::_export_unsuspend fallback. Document -better. - -=cut - -sub clone_kludge_unsuspend { - my $self = shift; - my %hash = $self->hash; - $hash{_password} = ''; - new FS::svc_acct \%hash; -} - -=item check_password - -Checks the supplied password against the (possibly encrypted) password in the -database. Returns true for a successful authentication, false for no match. - -Currently supported encryptions are: classic DES crypt() and MD5 - -=cut - -sub check_password { - my($self, $check_password) = @_; - - #remove old-style SUSPENDED kludge, they should be allowed to login to - #self-service and pay up - ( my $password = $self->_password ) =~ s/^\*SUSPENDED\* //; - - if ( $self->_password_encoding eq 'ldap' ) { - - my $auth = from_rfc2307 Authen::Passphrase $self->_password; - return $auth->match($check_password); - - } elsif ( $self->_password_encoding eq 'crypt' ) { - - my $auth = from_crypt Authen::Passphrase $self->_password; - return $auth->match($check_password); - - } elsif ( $self->_password_encoding eq 'plain' ) { - - return $check_password eq $password; - - } else { - - #XXX this could be replaced with Authen::Passphrase stuff - - if ( $password =~ /^(\*|!!?)$/ ) { #no self-service login - return 0; - } elsif ( length($password) < 13 ) { #plaintext - $check_password eq $password; - } elsif ( length($password) == 13 ) { #traditional DES crypt - crypt($check_password, $password) eq $password; - } elsif ( $password =~ /^\$1\$/ ) { #MD5 crypt - unix_md5_crypt($check_password, $password) eq $password; - } elsif ( $password =~ /^\$2a?\$/ ) { #Blowfish - warn "Can't check password: Blowfish encryption not yet supported, ". - "svcnum ". $self->svcnum. "\n"; - 0; - } else { - warn "Can't check password: Unrecognized encryption for svcnum ". - $self->svcnum. "\n"; - 0; - } - - } - -} - -=item crypt_password [ DEFAULT_ENCRYPTION_TYPE ] - -Returns an encrypted password, either by passing through an encrypted password -in the database or by encrypting a plaintext password from the database. - -The optional DEFAULT_ENCRYPTION_TYPE parameter can be set to I<crypt> (classic -UNIX DES crypt), I<md5> (md5 crypt supported by most modern Linux and BSD -distrubtions), or (eventually) I<blowfish> (blowfish hashing supported by -OpenBSD, SuSE, other Linux distibutions with pam_unix2, etc.). The default -encryption type is only used if the password is not already encrypted in the -database. - -=cut - -sub crypt_password { - my $self = shift; - - if ( $self->_password_encoding eq 'ldap' ) { - - if ( $self->_password =~ /^\{(PLAIN|CLEARTEXT)\}(.+)$/ ) { - my $plain = $2; - - #XXX this could be replaced with Authen::Passphrase stuff - - my $encryption = ( scalar(@_) && $_[0] ) ? shift : 'crypt'; - if ( $encryption eq 'crypt' ) { - crypt( - $self->_password, - $saltset[int(rand(64))].$saltset[int(rand(64))] - ); - } elsif ( $encryption eq 'md5' ) { - unix_md5_crypt( $self->_password ); - } elsif ( $encryption eq 'blowfish' ) { - croak "unknown encryption method $encryption"; - } else { - croak "unknown encryption method $encryption"; - } - - } elsif ( $self->_password =~ /^\{CRYPT\}(.+)$/ ) { - $1; - } - - } elsif ( $self->_password_encoding eq 'crypt' ) { - - return $self->_password; - - } elsif ( $self->_password_encoding eq 'plain' ) { - - #XXX this could be replaced with Authen::Passphrase stuff - - my $encryption = ( scalar(@_) && $_[0] ) ? shift : 'crypt'; - if ( $encryption eq 'crypt' ) { - crypt( - $self->_password, - $saltset[int(rand(64))].$saltset[int(rand(64))] - ); - } elsif ( $encryption eq 'md5' ) { - unix_md5_crypt( $self->_password ); - } elsif ( $encryption eq 'blowfish' ) { - croak "unknown encryption method $encryption"; - } else { - croak "unknown encryption method $encryption"; - } - - } else { - - if ( length($self->_password) == 13 - || $self->_password =~ /^\$(1|2a?)\$/ - || $self->_password =~ /^(\*|NP|\*LK\*|!!?)$/ - ) - { - $self->_password; - } else { - - #XXX this could be replaced with Authen::Passphrase stuff - - my $encryption = ( scalar(@_) && $_[0] ) ? shift : 'crypt'; - if ( $encryption eq 'crypt' ) { - crypt( - $self->_password, - $saltset[int(rand(64))].$saltset[int(rand(64))] - ); - } elsif ( $encryption eq 'md5' ) { - unix_md5_crypt( $self->_password ); - } elsif ( $encryption eq 'blowfish' ) { - croak "unknown encryption method $encryption"; - } else { - croak "unknown encryption method $encryption"; - } - - } - - } - -} - -=item ldap_password [ DEFAULT_ENCRYPTION_TYPE ] - -Returns an encrypted password in "LDAP" format, with a curly-bracked prefix -describing the format, for example, "{PLAIN}himom", "{CRYPT}94pAVyK/4oIBk" or -"{MD5}5426824942db4253f87a1009fd5d2d4". - -The optional DEFAULT_ENCRYPTION_TYPE is not yet used, but the idea is for it -to work the same as the B</crypt_password> method. - -=cut - -sub ldap_password { - my $self = shift; - #eventually should check a "password-encoding" field - - if ( $self->_password_encoding eq 'ldap' ) { - - return $self->_password; - - } elsif ( $self->_password_encoding eq 'crypt' ) { - - if ( length($self->_password) == 13 ) { #crypt - return '{CRYPT}'. $self->_password; - } elsif ( $self->_password =~ /^\$1\$(.*)$/ && length($1) == 31 ) { #passwdMD5 - return '{MD5}'. $1; - #} elsif ( $self->_password =~ /^\$2a?\$(.*)$/ ) { #Blowfish - # die "Blowfish encryption not supported in this context, svcnum ". - # $self->svcnum. "\n"; - } else { - warn "encryption method not (yet?) supported in LDAP context"; - return '{CRYPT}*'; #unsupported, should not auth - } - - } elsif ( $self->_password_encoding eq 'plain' ) { - - return '{PLAIN}'. $self->_password; - - #return '{CLEARTEXT}'. $self->_password; #? - - } else { - - if ( length($self->_password) == 13 ) { #crypt - return '{CRYPT}'. $self->_password; - } elsif ( $self->_password =~ /^\$1\$(.*)$/ && length($1) == 31 ) { #passwdMD5 - return '{MD5}'. $1; - } elsif ( $self->_password =~ /^\$2a?\$(.*)$/ ) { #Blowfish - warn "Blowfish encryption not supported in this context, svcnum ". - $self->svcnum. "\n"; - return '{CRYPT}*'; - - #are these two necessary anymore? - } elsif ( $self->_password =~ /^(\w{48})$/ ) { #LDAP SSHA - return '{SSHA}'. $1; - } elsif ( $self->_password =~ /^(\w{64})$/ ) { #LDAP NS-MTA-MD5 - return '{NS-MTA-MD5}'. $1; - - } else { #plaintext - return '{PLAIN}'. $self->_password; - - #return '{CLEARTEXT}'. $self->_password; #? - - #XXX this could be replaced with Authen::Passphrase stuff if it gets used - #my $encryption = ( scalar(@_) && $_[0] ) ? shift : 'crypt'; - #if ( $encryption eq 'crypt' ) { - # return '{CRYPT}'. crypt( - # $self->_password, - # $saltset[int(rand(64))].$saltset[int(rand(64))] - # ); - #} elsif ( $encryption eq 'md5' ) { - # unix_md5_crypt( $self->_password ); - #} elsif ( $encryption eq 'blowfish' ) { - # croak "unknown encryption method $encryption"; - #} else { - # croak "unknown encryption method $encryption"; - #} - } - - } - -} - -=item domain_slash_username - -Returns $domain/$username/ - -=cut - -sub domain_slash_username { - my $self = shift; - $self->domain. '/'. $self->username. '/'; -} - -=item virtual_maildir - -Returns $domain/maildirs/$username/ - -=cut - -sub virtual_maildir { - my $self = shift; - $self->domain. '/maildirs/'. $self->username. '/'; -} - -=back - -=head1 SUBROUTINES - -=over 4 - -=item send_email - -This is the FS::svc_acct job-queue-able version. It still uses -FS::Misc::send_email under-the-hood. - -=cut - -sub send_email { - my %opt = @_; - - eval "use FS::Misc qw(send_email)"; - die $@ if $@; - - $opt{mimetype} ||= 'text/plain'; - $opt{mimetype} .= '; charset="iso-8859-1"' unless $opt{mimetype} =~ /charset/; - - my $error = send_email( - 'from' => $opt{from}, - 'to' => $opt{to}, - 'subject' => $opt{subject}, - 'content-type' => $opt{mimetype}, - 'body' => [ map "$_\n", split("\n", $opt{body}) ], - ); - die $error if $error; -} - -=item check_and_rebuild_fuzzyfiles - -=cut - -sub check_and_rebuild_fuzzyfiles { - my $dir = $FS::UID::conf_dir. "/cache.". $FS::UID::datasrc; - -e "$dir/svc_acct.username" - or &rebuild_fuzzyfiles; -} - -=item rebuild_fuzzyfiles - -=cut - -sub rebuild_fuzzyfiles { - - use Fcntl qw(:flock); - - my $dir = $FS::UID::conf_dir. "/cache.". $FS::UID::datasrc; - - #username - - open(USERNAMELOCK,">>$dir/svc_acct.username") - or die "can't open $dir/svc_acct.username: $!"; - flock(USERNAMELOCK,LOCK_EX) - or die "can't lock $dir/svc_acct.username: $!"; - - my @all_username = map $_->getfield('username'), qsearch('svc_acct', {}); - - open (USERNAMECACHE,">$dir/svc_acct.username.tmp") - or die "can't open $dir/svc_acct.username.tmp: $!"; - print USERNAMECACHE join("\n", @all_username), "\n"; - close USERNAMECACHE or die "can't close $dir/svc_acct.username.tmp: $!"; - - rename "$dir/svc_acct.username.tmp", "$dir/svc_acct.username"; - close USERNAMELOCK; - -} - -=item all_username - -=cut - -sub all_username { - my $dir = $FS::UID::conf_dir. "/cache.". $FS::UID::datasrc; - open(USERNAMECACHE,"<$dir/svc_acct.username") - or die "can't open $dir/svc_acct.username: $!"; - my @array = map { chomp; $_; } <USERNAMECACHE>; - close USERNAMECACHE; - \@array; -} - -=item append_fuzzyfiles USERNAME - -=cut - -sub append_fuzzyfiles { - my $username = shift; - - &check_and_rebuild_fuzzyfiles; - - use Fcntl qw(:flock); - - my $dir = $FS::UID::conf_dir. "/cache.". $FS::UID::datasrc; - - open(USERNAME,">>$dir/svc_acct.username") - or die "can't open $dir/svc_acct.username: $!"; - flock(USERNAME,LOCK_EX) - or die "can't lock $dir/svc_acct.username: $!"; - - print USERNAME "$username\n"; - - flock(USERNAME,LOCK_UN) - or die "can't unlock $dir/svc_acct.username: $!"; - close USERNAME; - - 1; -} - - - -=item radius_usergroup_selector GROUPS_ARRAYREF [ SELECTNAME ] - -=cut - -sub radius_usergroup_selector { - my $sel_groups = shift; - my %sel_groups = map { $_=>1 } @$sel_groups; - - my $selectname = shift || 'radius_usergroup'; - - my $dbh = dbh; - my $sth = $dbh->prepare( - 'SELECT DISTINCT(groupname) FROM radius_usergroup ORDER BY groupname' - ) or die $dbh->errstr; - $sth->execute() or die $sth->errstr; - my @all_groups = map { $_->[0] } @{$sth->fetchall_arrayref}; - - my $html = <<END; - <SCRIPT> - function ${selectname}_doadd(object) { - var myvalue = object.${selectname}_add.value; - var optionName = new Option(myvalue,myvalue,false,true); - var length = object.$selectname.length; - object.$selectname.options[length] = optionName; - object.${selectname}_add.value = ""; - } - </SCRIPT> - <SELECT MULTIPLE NAME="$selectname"> -END - - foreach my $group ( @all_groups ) { - $html .= qq(<OPTION VALUE="$group"); - if ( $sel_groups{$group} ) { - $html .= ' SELECTED'; - $sel_groups{$group} = 0; - } - $html .= ">$group</OPTION>\n"; - } - foreach my $group ( grep { $sel_groups{$_} } keys %sel_groups ) { - $html .= qq(<OPTION VALUE="$group" SELECTED>$group</OPTION>\n); - }; - $html .= '</SELECT>'; - - $html .= qq!<BR><INPUT TYPE="text" NAME="${selectname}_add">!. - qq!<INPUT TYPE="button" VALUE="Add new group" onClick="${selectname}_doadd(this.form)">!; - - $html; -} - -=item reached_threshold - -Performs some activities when svc_acct thresholds (such as number of seconds -remaining) are reached. - -=cut - -sub reached_threshold { - my %opt = @_; - - my $svc_acct = qsearchs('svc_acct', { 'svcnum' => $opt{'svcnum'} } ); - die "Cannot find svc_acct with svcnum " . $opt{'svcnum'} unless $svc_acct; - - if ( $opt{'op'} eq '+' ){ - $svc_acct->setfield( $opt{'column'}.'_threshold', - int($svc_acct->getfield($opt{'column'}) - * ( $conf->exists('svc_acct-usage_threshold') - ? $conf->config('svc_acct-usage_threshold')/100 - : 0.80 - ) - ) - ); - my $error = $svc_acct->replace; - die $error if $error; - }elsif ( $opt{'op'} eq '-' ){ - - my $threshold = $svc_acct->getfield( $opt{'column'}.'_threshold' ); - return '' if ($threshold eq '' ); - - $svc_acct->setfield( $opt{'column'}.'_threshold', 0 ); - my $error = $svc_acct->replace; - die $error if $error; # email next time, i guess - - if ( $warning_template ) { - eval "use FS::Misc qw(send_email)"; - die $@ if $@; - - my $cust_pkg = $svc_acct->cust_svc->cust_pkg; - my $cust_main = $cust_pkg->cust_main; - - my $to = join(', ', grep { $_ !~ /^(POST|FAX)$/ } - $cust_main->invoicing_list, - ($opt{'to'} ? $opt{'to'} : ()) - ); - - my $mimetype = $warning_mimetype; - $mimetype .= '; charset="iso-8859-1"' unless $opt{mimetype} =~ /charset/; - - my $body = $warning_template->fill_in( HASH => { - 'custnum' => $cust_main->custnum, - 'username' => $svc_acct->username, - 'password' => $svc_acct->_password, - 'first' => $cust_main->first, - 'last' => $cust_main->getfield('last'), - 'pkg' => $cust_pkg->part_pkg->pkg, - 'column' => $opt{'column'}, - 'amount' => $opt{'column'} =~/bytes/ - ? FS::UI::bytecount::display_bytecount($svc_acct->getfield($opt{'column'})) - : $svc_acct->getfield($opt{'column'}), - 'threshold' => $opt{'column'} =~/bytes/ - ? FS::UI::bytecount::display_bytecount($threshold) - : $threshold, - } ); - - - my $error = send_email( - 'from' => $warning_from, - 'to' => $to, - 'subject' => $warning_subject, - 'content-type' => $mimetype, - 'body' => [ map "$_\n", split("\n", $body) ], - ); - die $error if $error; - } - }else{ - die "unknown op: " . $opt{'op'}; - } -} - -=back - -=head1 BUGS - -The $recref stuff in sub check should be cleaned up. - -The suspend, unsuspend and cancel methods update the database, but not the -current object. This is probably a bug as it's unexpected and -counterintuitive. - -radius_usergroup_selector? putting web ui components in here? they should -probably live somewhere else... - -insertion of RADIUS group stuff in insert could be done with child_objects now -(would probably clean up export of them too) - -=head1 SEE ALSO - -L<FS::svc_Common>, edit/part_svc.cgi from an installed web interface, -export.html from the base documentation, L<FS::Record>, L<FS::Conf>, -L<FS::cust_svc>, L<FS::part_svc>, L<FS::cust_pkg>, L<FS::queue>, -L<freeside-queued>), L<FS::svc_acct_pop>, -schema.html from the base documentation. - -=cut - -=item domain_select_hash %OPTIONS - -Returns a hash SVCNUM => DOMAIN ... representing the domains this customer -may at present purchase. - -Currently available options are: I<pkgnum> I<svcpart> - -=cut - -sub domain_select_hash { - my ($self, %options) = @_; - my %domains = (); - my $part_svc; - my $cust_pkg; - - if (ref($self)) { - $part_svc = $self->part_svc; - $cust_pkg = $self->cust_svc->cust_pkg - if $self->cust_svc; - } - - $part_svc = qsearchs('part_svc', { 'svcpart' => $options{svcpart} }) - if $options{'svcpart'}; - - $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $options{pkgnum} }) - if $options{'pkgnum'}; - - if ($part_svc && ( $part_svc->part_svc_column('domsvc')->columnflag eq 'S' - || $part_svc->part_svc_column('domsvc')->columnflag eq 'F')) { - %domains = map { $_->svcnum => $_->domain } - map { qsearchs('svc_domain', { 'svcnum' => $_ }) } - split(',', $part_svc->part_svc_column('domsvc')->columnvalue); - }elsif ($cust_pkg && !$conf->exists('svc_acct-alldomains') ) { - %domains = map { $_->svcnum => $_->domain } - map { qsearchs('svc_domain', { 'svcnum' => $_->svcnum }) } - map { qsearch('cust_svc', { 'pkgnum' => $_->pkgnum } ) } - qsearch('cust_pkg', { 'custnum' => $cust_pkg->custnum }); - }else{ - %domains = map { $_->svcnum => $_->domain } qsearch('svc_domain', {} ); - } - - if ($part_svc && $part_svc->part_svc_column('domsvc')->columnflag eq 'D') { - my $svc_domain = qsearchs('svc_domain', - { 'svcnum' => $part_svc->part_svc_column('domsvc')->columnvalue } ); - if ( $svc_domain ) { - $domains{$svc_domain->svcnum} = $svc_domain->domain; - }else{ - warn "unknown svc_domain.svcnum for part_svc_column domsvc: ". - $part_svc->part_svc_column('domsvc')->columnvalue; - - } - } - - (%domains); -} - -1; - diff --git a/FS/FS/svc_acct_pop.pm b/FS/FS/svc_acct_pop.pm deleted file mode 100644 index de41f5bb6..000000000 --- a/FS/FS/svc_acct_pop.pm +++ /dev/null @@ -1,206 +0,0 @@ -package FS::svc_acct_pop; - -use strict; -use vars qw( @ISA @EXPORT_OK @svc_acct_pop %svc_acct_pop ); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw( FS::Record Exporter ); -@EXPORT_OK = qw( popselector ); - -=head1 NAME - -FS::svc_acct_pop - Object methods for svc_acct_pop records - -=head1 SYNOPSIS - - use FS::svc_acct_pop; - - $record = new FS::svc_acct_pop \%hash; - $record = new FS::svc_acct_pop { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $html = FS::svc_acct_pop::popselector( $popnum, $state ); - -=head1 DESCRIPTION - -An FS::svc_acct object represents an point of presence. FS::svc_acct_pop -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item popnum - primary key (assigned automatically for new accounts) - -=item city - -=item state - -=item ac - area code - -=item exch - exchange - -=item loc - rest of number - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new point of presence (if only it were that easy!). To add the -point of presence to the database, see L<"insert">. - -=cut - -sub table { 'svc_acct_pop'; } - -=item insert - -Adds this point of presence to the database. If there is an error, returns the -error, otherwise returns false. - -=item delete - -Removes this point of presence from the database. - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=item check - -Checks all fields to make sure this is a valid point of presence. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - $self->ut_numbern('popnum') - or $self->ut_text('city') - or $self->ut_text('state') - or $self->ut_number('ac') - or $self->ut_number('exch') - or $self->ut_numbern('loc') - or $self->SUPER::check - ; - -} - -=item text - -Returns: - -"$city, $state ($ac)/$exch" - -=cut - -sub text { - my $self = shift; - $self->city. ', '. $self->state. - ' ('. $self->ac. ')/'. $self->exch. '-'. $self->loc; -} - -=back - -=head1 SUBROUTINES - -=over 4 - -=item popselector [ POPNUM [ STATE ] ] - -=cut - -#horrible false laziness with signup.cgi (pull special-case for 0 & 1 -# pop code out from signup.cgi??) -sub popselector { - my( $popnum, $state ) = @_; - - unless ( @svc_acct_pop ) { #cache pop list - @svc_acct_pop = qsearch('svc_acct_pop', {} ); - %svc_acct_pop = (); - push @{$svc_acct_pop{$_->state}}, $_ foreach @svc_acct_pop; - } - - my $text = <<END; - <SCRIPT> - function opt(what,href,text) { - var optionName = new Option(text, href, false, false) - var length = what.length; - what.options[length] = optionName; - } - - function popstate_changed(what) { - state = what.options[what.selectedIndex].text; - what.form.popnum.options.length = 0 - what.form.popnum.options[0] = new Option("", "", false, true); -END - - foreach my $popstate ( sort { $a cmp $b } keys %svc_acct_pop ) { - $text .= "\nif ( state == \"$popstate\" ) {\n"; - - foreach my $pop ( @{$svc_acct_pop{$popstate}}) { - my $o_popnum = $pop->popnum; - my $poptext = $pop->text; - $text .= "opt(what.form.popnum, \"$o_popnum\", \"$poptext\");\n" - } - $text .= "}\n"; - } - - $text .= "}\n</SCRIPT>\n"; - - $text .= - qq!<SELECT NAME="popstate" SIZE=1 onChange="popstate_changed(this)">!. - qq!<OPTION> !; - $text .= "<OPTION>$_" foreach sort { $a cmp $b } keys %svc_acct_pop; - $text .= '</SELECT>'; #callback? return 3 html pieces? #'</TD><TD>'; - - $text .= qq!<SELECT NAME="popnum" SIZE=1><OPTION> !; - my @initial_select; - if ( scalar(@svc_acct_pop) > 100 ) { - @initial_select = qsearchs( 'svc_acct_pop', { 'popnum' => $popnum } ); - } else { - @initial_select = @svc_acct_pop; - } - foreach my $pop ( @initial_select ) { - $text .= qq!<OPTION VALUE="!. $pop->popnum. '"'. - ( ( $popnum && $pop->popnum == $popnum ) ? ' SELECTED' : '' ). ">". - $pop->text; - } - $text .= '</SELECT>'; - - $text; - -} - -=back - -=head1 BUGS - -It should be renamed to part_pop. - -popselector? putting web ui components in here? they should probably live -somewhere else... - -popselector: pull special-case for 0 & 1 pop code out from signup.cgi - -=head1 SEE ALSO - -L<FS::Record>, L<FS::svc_acct>, L<FS::part_pop_local>, schema.html from the -base documentation. - -=cut - -1; - diff --git a/FS/FS/svc_broadband.pm b/FS/FS/svc_broadband.pm deleted file mode 100755 index d1235246e..000000000 --- a/FS/FS/svc_broadband.pm +++ /dev/null @@ -1,301 +0,0 @@ -package FS::svc_broadband; - -use strict; -use vars qw(@ISA $conf); -use FS::Record qw( qsearchs qsearch dbh ); -use FS::svc_Common; -use FS::cust_svc; -use FS::addr_block; -use NetAddr::IP; - -@ISA = qw( FS::svc_Common ); - -$FS::UID::callback{'FS::svc_broadband'} = sub { - $conf = new FS::Conf; -}; - -=head1 NAME - -FS::svc_broadband - Object methods for svc_broadband records - -=head1 SYNOPSIS - - use FS::svc_broadband; - - $record = new FS::svc_broadband \%hash; - $record = new FS::svc_broadband { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->suspend; - - $error = $record->unsuspend; - - $error = $record->cancel; - -=head1 DESCRIPTION - -An FS::svc_broadband object represents a 'broadband' Internet connection, such -as a DSL, cable modem, or fixed wireless link. These services are assumed to -have the following properties: - -FS::svc_broadband inherits from FS::svc_Common. The following fields are -currently supported: - -=over 4 - -=item svcnum - primary key - -=item blocknum - see FS::addr_block - -=item -speed_up - maximum upload speed, in bits per second. If set to zero, upload -speed will be unlimited. Exports that do traffic shaping should handle this -correctly, and not blindly set the upload speed to zero and kill the customer's -connection. - -=item -speed_down - maximum download speed, as above - -=item ip_addr - the customer's IP address. If the customer needs more than one -IP address, set this to the address of the customer's router. As a result, the -customer's router will have the same address for both its internal and external -interfaces thus saving address space. This has been found to work on most NAT -routers available. - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new svc_broadband. To add the record to the database, see -"insert". - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I<hash> method. - -=cut - -sub table_info { - { - 'name' => 'Broadband', - 'name_plural' => 'Broadband services', - 'longname_plural' => 'Fixed (username-less) broadband services', - 'display_weight' => 50, - 'cancel_weight' => 70, - 'fields' => { - 'description' => 'Descriptive label for this particular device.', - 'speed_down' => 'Maximum download speed for this service in Kbps. 0 denotes unlimited.', - 'speed_up' => 'Maximum upload speed for this service in Kbps. 0 denotes unlimited.', - 'ip_addr' => 'IP address. Leave blank for automatic assignment.', - 'blocknum' => { 'label' => 'Address block', - 'type' => 'select', - 'select_table' => 'addr_block', - 'select_key' => 'blocknum', - 'select_label' => 'cidr', - 'disable_inventory' => 1, - }, - }, - }; -} - -sub table { 'svc_broadband'; } - -=item search_sql STRING - -Class method which returns an SQL fragment to search for the given string. - -=cut - -sub search_sql { - my( $class, $string ) = @_; - if ( $string =~ /^(\d{1,3}\.){3}\d{1,3}$/ ) { - $class->search_sql_field('ip_addr', $string ); - }elsif ( $string =~ /^([a-fA-F0-9]{12})$/ ) { - $class->search_sql_field('mac_addr', uc($string)); - }elsif ( $string =~ /^(([a-fA-F0-9]{1,2}:){5}([a-fA-F0-9]{1,2}))$/ ) { - $class->search_sql_field('mac_addr', uc("$2$3$4$5$6$7") ); - } else { - '1 = 0'; #false - } -} - -=item label - -Returns the IP address. - -=cut - -sub label { - my $self = shift; - $self->ip_addr; -} - -=item insert [ , OPTION => VALUE ... ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -The additional fields pkgnum and svcpart (see FS::cust_svc) should be -defined. An FS::cust_svc record will be created and inserted. - -Currently available options are: I<depend_jobnum> - -If I<depend_jobnum> is set (to a scalar jobnum or an array reference of -jobnums), all provisioning jobs will have a dependancy on the supplied -jobnum(s) (they will not run until the specific job(s) complete(s)). - -=cut - -# Standard FS::svc_Common::insert - -=item delete - -Delete this record from the database. - -=cut - -# Standard FS::svc_Common::delete - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# Standard FS::svc_Common::replace - -=item suspend - -Called by the suspend method of FS::cust_pkg (see FS::cust_pkg). - -=item unsuspend - -Called by the unsuspend method of FS::cust_pkg (see FS::cust_pkg). - -=item cancel - -Called by the cancel method of FS::cust_pkg (see FS::cust_pkg). - -=item check - -Checks all fields to make sure this is a valid broadband service. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - my $x = $self->setfixed; - - return $x unless ref($x); - - my $error = - $self->ut_numbern('svcnum') - || $self->ut_foreign_key('blocknum', 'addr_block', 'blocknum') - || $self->ut_textn('description') - || $self->ut_number('speed_up') - || $self->ut_number('speed_down') - || $self->ut_ipn('ip_addr') - || $self->ut_hexn('mac_addr') - || $self->ut_hexn('auth_key') - || $self->ut_coordn('latitude', -90, 90) - || $self->ut_coordn('longitude', -180, 180) - || $self->ut_sfloatn('altitude') - || $self->ut_textn('vlan_profile') - ; - return $error if $error; - - if($self->speed_up < 0) { return 'speed_up must be positive'; } - if($self->speed_down < 0) { return 'speed_down must be positive'; } - - if (not($self->ip_addr) or $self->ip_addr eq '0.0.0.0') { - my $next_addr = $self->addr_block->next_free_addr; - if ($next_addr) { - $self->ip_addr($next_addr->addr); - } else { - return "No free addresses in addr_block (blocknum: ".$self->blocknum.")"; - } - } - - # This should catch errors in the ip_addr. If it doesn't, - # they'll almost certainly not map into the block anyway. - my $self_addr = $self->NetAddr; #netmask is /32 - return ('Cannot parse address: ' . $self->ip_addr) unless $self_addr; - - my $block_addr = $self->addr_block->NetAddr; - unless ($block_addr->contains($self_addr)) { - return 'blocknum '.$self->blocknum.' does not contain address '.$self->ip_addr; - } - - my $router = $self->addr_block->router - or return 'Cannot assign address from unallocated block:'.$self->addr_block->blocknum; - if(grep { $_->routernum == $router->routernum} $self->allowed_routers) { - } # do nothing - else { - return 'Router '.$router->routernum.' cannot provide svcpart '.$self->svcpart; - } - - $self->SUPER::check; -} - -=item NetAddr - -Returns a NetAddr::IP object containing the IP address of this service. The netmask -is /32. - -=cut - -sub NetAddr { - my $self = shift; - new NetAddr::IP ($self->ip_addr); -} - -=item addr_block - -Returns the FS::addr_block record (i.e. the address block) for this broadband service. - -=cut - -sub addr_block { - my $self = shift; - qsearchs('addr_block', { blocknum => $self->blocknum }); -} - -=back - -=item allowed_routers - -Returns a list of allowed FS::router objects. - -=cut - -sub allowed_routers { - my $self = shift; - map { $_->router } qsearch('part_svc_router', { svcpart => $self->svcpart }); -} - -=head1 BUGS - -The business with sb_field has been 'fixed', in a manner of speaking. - -=head1 SEE ALSO - -FS::svc_Common, FS::Record, FS::addr_block, -FS::part_svc, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/svc_domain.pm b/FS/FS/svc_domain.pm deleted file mode 100644 index 758b399be..000000000 --- a/FS/FS/svc_domain.pm +++ /dev/null @@ -1,478 +0,0 @@ -package FS::svc_domain; - -use strict; -use vars qw( @ISA $whois_hack $conf - @defaultrecords $soadefaultttl $soaemail $soaexpire $soamachine - $soarefresh $soaretry -); -use Carp; -use Date::Format; -#use Net::Whois::Raw; -use Net::Domain::TLD qw(tld_exists); -use FS::Record qw(fields qsearch qsearchs dbh); -use FS::Conf; -use FS::svc_Common; -use FS::svc_Parent_Mixin; -use FS::cust_svc; -use FS::svc_acct; -use FS::cust_pkg; -use FS::cust_main; -use FS::domain_record; -use FS::queue; - -@ISA = qw( FS::svc_Parent_Mixin FS::svc_Common ); - -#ask FS::UID to run this stuff for us later -$FS::UID::callback{'FS::domain'} = sub { - $conf = new FS::Conf; - - @defaultrecords = $conf->config('defaultrecords'); - $soadefaultttl = $conf->config('soadefaultttl'); - $soaemail = $conf->config('soaemail'); - $soaexpire = $conf->config('soaexpire'); - $soamachine = $conf->config('soamachine'); - $soarefresh = $conf->config('soarefresh'); - $soaretry = $conf->config('soaretry'); - -}; - -=head1 NAME - -FS::svc_domain - Object methods for svc_domain records - -=head1 SYNOPSIS - - use FS::svc_domain; - - $record = new FS::svc_domain \%hash; - $record = new FS::svc_domain { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->suspend; - - $error = $record->unsuspend; - - $error = $record->cancel; - -=head1 DESCRIPTION - -An FS::svc_domain object represents a domain. FS::svc_domain inherits from -FS::svc_Common. The following fields are currently supported: - -=over 4 - -=item svcnum - primary key (assigned automatically for new accounts) - -=item domain - -=item catchall - optional svcnum of an svc_acct record, designating an email catchall account. - -=item suffix - - -=item parent_svcnum - - -=item registrarnum - Registrar (see L<FS::registrar>) - -=item registrarkey - Registrar key or password for this domain - -=item setup_date - UNIX timestamp - -=item renewal_interval - Number of days before expiration date to start renewal - -=item expiration_date - UNIX timestamp - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new domain. To add the domain to the database, see L<"insert">. - -=cut - -sub table_info { - { - 'name' => 'Domain', - 'sorts' => 'domain', - 'display_weight' => 20, - 'cancel_weight' => 60, - 'fields' => { - 'domain' => 'Domain', - }, - }; -} - -sub table { 'svc_domain'; } - -sub search_sql { - my($class, $string) = @_; - $class->search_sql_field('domain', $string); -} - - -=item label - -Returns the domain. - -=cut - -sub label { - my $self = shift; - $self->domain; -} - -=item insert [ , OPTION => VALUE ... ] - -Adds this domain to the database. If there is an error, returns the error, -otherwise returns false. - -The additional fields I<pkgnum> and I<svcpart> (see L<FS::cust_svc>) should be -defined. An FS::cust_svc record will be created and inserted. - -The additional field I<action> should be set to I<N> for new domains or I<M> -for transfers. - -A registration or transfer email will be submitted unless -$FS::svc_domain::whois_hack is true. - -The additional field I<email> can be used to manually set the admin contact -email address on this email. Otherwise, the svc_acct records for this package -(see L<FS::cust_pkg>) are searched. If there is exactly one svc_acct record -in the same package, it is automatically used. Otherwise an error is returned. - -If any I<soamachine> configuration file exists, an SOA record is added to -the domain_record table (see <FS::domain_record>). - -If any records are defined in the I<defaultrecords> configuration file, -appropriate records are added to the domain_record table (see -L<FS::domain_record>). - -Currently available options are: I<depend_jobnum> - -If I<depend_jobnum> is set (to a scalar jobnum or an array reference of -jobnums), all provisioning jobs will have a dependancy on the supplied -jobnum(s) (they will not run until the specific job(s) complete(s)). - -=cut - -sub insert { - my $self = shift; - my $error; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - $error = $self->check; - return $error if $error; - - return "Domain in use (here)" - if qsearchs( 'svc_domain', { 'domain' => $self->domain } ); - - - $error = $self->SUPER::insert(@_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - if ( $soamachine ) { - my $soa = new FS::domain_record { - 'svcnum' => $self->svcnum, - 'reczone' => '@', - 'recaf' => 'IN', - 'rectype' => 'SOA', - 'recdata' => "$soamachine $soaemail ( ". time2str("%Y%m%d", time). "00 ". - "$soarefresh $soaretry $soaexpire $soadefaultttl )" - }; - $error = $soa->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "couldn't insert SOA record for new domain: $error"; - } - - foreach my $record ( @defaultrecords ) { - my($zone,$af,$type,$data) = split(/\s+/,$record,4); - my $domain_record = new FS::domain_record { - 'svcnum' => $self->svcnum, - 'reczone' => $zone, - 'recaf' => $af, - 'rectype' => $type, - 'recdata' => $data, - }; - my $error = $domain_record->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "couldn't insert record for new domain: $error"; - } - } - - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - - ''; #no error -} - -=item delete - -Deletes this domain from the database. If there is an error, returns the -error, otherwise returns false. - -The corresponding FS::cust_svc record will be deleted as well. - -=cut - -sub delete { - my $self = shift; - - return "Can't delete a domain which has accounts!" - if qsearch( 'svc_acct', { 'domsvc' => $self->svcnum } ); - - #return "Can't delete a domain with (domain_record) zone entries!" - # if qsearch('domain_record', { 'svcnum' => $self->svcnum } ); - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - foreach my $domain_record ( reverse $self->domain_record ) { - my $error = $domain_record->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "can't delete DNS entry: ". - join(' ', map $domain_record->$_(), - qw( reczone recaf rectype recdata ) - ). - ":$error"; - } - } - - my $error = $self->SUPER::delete(@_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; -} - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -sub replace { - my ( $new, $old ) = ( shift, shift ); - - # We absolutely have to have an old vs. new record to make this work. - $old = $new->replace_old unless defined($old); - - return "Can't change domain - reorder." - if $old->getfield('domain') ne $new->getfield('domain'); - - # Better to do it here than to force the caller to remember that svc_domain is weird. - $new->setfield(action => 'M'); - my $error = $new->SUPER::replace($old, @_); - return $error if $error; -} - -=item suspend - -Just returns false (no error) for now. - -Called by the suspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item unsuspend - -Just returns false (no error) for now. - -Called by the unsuspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item cancel - -Just returns false (no error) for now. - -Called by the cancel method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item check - -Checks all fields to make sure this is a valid domain. If there is an error, -returns the error, otherwise returns false. Called by the insert and replace -methods. - -Sets any fixed values; see L<FS::part_svc>. - -=cut - -sub check { - my $self = shift; - - my $x = $self->setfixed; - return $x unless ref($x); - #my $part_svc = $x; - - my $error = $self->ut_numbern('svcnum') - || $self->ut_numbern('catchall') - ; - return $error if $error; - - #hmm - my $pkgnum; - if ( $self->svcnum ) { - my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $self->svcnum } ); - $pkgnum = $cust_svc->pkgnum; - } else { - $pkgnum = $self->pkgnum; - } - - my($recref) = $self->hashref; - - #if ( $recref->{domain} =~ /^([\w\-\.]{1,22})\.(com|net|org|edu)$/ ) { - if ( $recref->{domain} =~ /^([\w\-]{1,63})\.(com|net|org|edu|tv|info|biz)$/ ) { - $recref->{domain} = "$1.$2"; - $recref->{suffix} ||= $2; - # hmmmmmmmm. - } elsif ( $whois_hack && $recref->{domain} =~ /^([\w\-\.]+)\.(\w+)$/ ) { - $recref->{domain} = "$1.$2"; - # need to match a list of suffixes - no guarantee they're top-level.. - # http://wiki.mozilla.org/TLD_List - # but this will have to do for now... - $recref->{suffix} ||= $2; - } else { - return "Illegal domain ". $recref->{domain}. - " (or unknown registry - try \$whois_hack)"; - } - - $self->suffix =~ /(^|\.)(\w+)$/ - or return "can't parse suffix for TLD: ". $self->suffix; - my $tld = $2; - return "No such TLD: .$tld" unless tld_exists($tld); - - if ( $recref->{catchall} ne '' ) { - my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $recref->{catchall} } ); - return "Unknown catchall" unless $svc_acct; - } - - $self->ut_alphan('suffix') - or $self->ut_foreign_keyn('registrarnum', 'registrar', 'registrarnum') - or $self->ut_textn('registrarkey') - or $self->ut_numbern('setup_date') - or $self->ut_numbern('renewal_interval') - or $self->ut_numbern('expiration_date') - or $self->ut_textn('purpose') - or $self->SUPER::check; - -} - -=item domain_record - -=cut - -sub domain_record { - my $self = shift; - - my %order = ( - 'SOA' => 1, - 'NS' => 2, - 'MX' => 3, - 'CNAME' => 4, - 'A' => 5, - 'TXT' => 6, - 'PTR' => 7, - ); - - my %sort = ( - #'SOA' => sub { $_[0]->recdata cmp $_[1]->recdata }, #sure hope not though -# 'SOA' => sub { 0; }, -# 'NS' => sub { 0; }, - 'MX' => sub { my( $a_weight, $a_name ) = split(/\s+/, $_[0]->recdata); - my( $b_weight, $b_name ) = split(/\s+/, $_[1]->recdata); - $a_weight <=> $b_weight or $a_name cmp $b_name; - }, - 'CNAME' => sub { $_[0]->reczone cmp $_[1]->reczone }, - 'A' => sub { $_[0]->reczone cmp $_[1]->reczone }, - -# 'TXT' => sub { 0; }, - 'PTR' => sub { $_[0]->reczone <=> $_[1]->reczone }, - ); - - sort { $order{$a->rectype} <=> $order{$b->rectype} - or &{ $sort{$a->rectype} || sub { 0; } }($a, $b) - } - qsearch('domain_record', { svcnum => $self->svcnum } ); - -} - -sub catchall_svc_acct { - my $self = shift; - if ( $self->catchall ) { - qsearchs( 'svc_acct', { 'svcnum' => $self->catchall } ); - } else { - ''; - } -} - -=item whois - -# Returns the Net::Whois::Domain object (see L<Net::Whois>) for this domain, or -# undef if the domain is not found in whois. - -(If $FS::svc_domain::whois_hack is true, returns that in all cases instead.) - -=cut - -sub whois { - #$whois_hack or new Net::Whois::Domain $_[0]->domain; - #$whois_hack or die "whois_hack not set...\n"; -} - -=back - -=head1 BUGS - -Delete doesn't send a registration template. - -All registries should be supported. - -Should change action to a real field. - -The $recref stuff in sub check should be cleaned up. - -=head1 SEE ALSO - -L<FS::svc_Common>, L<FS::Record>, L<FS::Conf>, L<FS::cust_svc>, -L<FS::part_svc>, L<FS::cust_pkg>, L<Net::Whois>, schema.html from the base -documentation, config.html from the base documentation. - -=cut - -1; - - diff --git a/FS/FS/svc_external.pm b/FS/FS/svc_external.pm deleted file mode 100644 index 0fb391fef..000000000 --- a/FS/FS/svc_external.pm +++ /dev/null @@ -1,204 +0,0 @@ -package FS::svc_external; - -use strict; -use vars qw(@ISA); -use FS::Conf; -use FS::svc_External_Common; - -@ISA = qw( FS::svc_External_Common ); - -=head1 NAME - -FS::svc_external - Object methods for svc_external records - -=head1 SYNOPSIS - - use FS::svc_external; - - $record = new FS::svc_external \%hash; - $record = new FS::svc_external { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->suspend; - - $error = $record->unsuspend; - - $error = $record->cancel; - -=head1 DESCRIPTION - -An FS::svc_external object represents a generic externally tracked service. -FS::svc_external inherits from FS::svc_External_Common (and FS::svc_Common). -The following fields are currently supported: - -=over 4 - -=item svcnum - primary key - -=item id - unique number of external record - -=item title - for invoice line items - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new external service. To add the external service to the database, -see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I<hash> method. - -=cut - -sub table_info { - { - 'name' => 'External service', - 'sorts' => 'id', - 'display_weight' => 90, - 'cancel_weight' => 10, - 'fields' => { - 'id' => { label => 'Unique number of external record', - type => 'text', - disable_default => 1, - disable_fixed => 1, - }, - 'title' => { label => 'Printed on invoice line items', - type => 'text', - disable_inventory => 1, - }, - }, - }; -} - -sub table { 'svc_external'; } - -# oh! this should be moved to svc_artera_turbo or something now -sub label { - my $self = shift; - my $conf = new FS::Conf; - if ( $conf->exists('svc_external-display_type') - && $conf->config('svc_external-display_type') eq 'artera_turbo' ) - { - sprintf('%010d', $self->id). '-'. - substr('0000000000'.uc($self->title), -10); - } else { - #$self->SUPER::label; - $self->id. ' - '. $self->title; - } -} - -=item insert [ , OPTION => VALUE ... ] - -Adds this external service to the database. If there is an error, returns the -error, otherwise returns false. - -The additional fields pkgnum and svcpart (see L<FS::cust_svc>) should be -defined. An FS::cust_svc record will be created and inserted. - -Currently available options are: I<depend_jobnum> - -If I<depend_jobnum> is set (to a scalar jobnum or an array reference of -jobnums), all provisioning jobs will have a dependancy on the supplied -jobnum(s) (they will not run until the specific job(s) complete(s)). - -=cut - -#sub insert { -# my $self = shift; -# my $error; -# -# $error = $self->SUPER::insert(@_); -# return $error if $error; -# -# ''; -#} - -=item delete - -Delete this record from the database. - -=cut - -#sub delete { -# my $self = shift; -# my $error; -# -# $error = $self->SUPER::delete; -# return $error if $error; -# -# ''; -#} - - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -#sub replace { -# my ( $new, $old ) = ( shift, shift ); -# my $error; -# -# $error = $new->SUPER::replace($old); -# return $error if $error; -# -# ''; -#} - -=item suspend - -Called by the suspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item unsuspend - -Called by the unsuspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item cancel - -Called by the cancel method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item check - -Checks all fields to make sure this is a valid external service. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -#sub check { -# my $self = shift; -# my $error; -# -# $error = $self->SUPER::delete; -# return $error if $error; -# -# ''; -#} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L<FS::svc_External_Common>, L<FS::svc_Common>, L<FS::Record>, L<FS::cust_svc>, -L<FS::part_svc>, L<FS::cust_pkg>, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/svc_forward.pm b/FS/FS/svc_forward.pm deleted file mode 100644 index 3250f8ac0..000000000 --- a/FS/FS/svc_forward.pm +++ /dev/null @@ -1,371 +0,0 @@ -package FS::svc_forward; - -use strict; -use vars qw( @ISA ); -use FS::Conf; -use FS::Record qw( fields qsearch qsearchs dbh ); -use FS::svc_Common; -use FS::cust_svc; -use FS::svc_acct; -use FS::svc_domain; - -@ISA = qw( FS::svc_Common ); - -=head1 NAME - -FS::svc_forward - Object methods for svc_forward records - -=head1 SYNOPSIS - - use FS::svc_forward; - - $record = new FS::svc_forward \%hash; - $record = new FS::svc_forward { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->suspend; - - $error = $record->unsuspend; - - $error = $record->cancel; - -=head1 DESCRIPTION - -An FS::svc_forward object represents a mail forwarding alias. FS::svc_forward -inherits from FS::Record. The following fields are currently supported: - -=over 4 - -=item svcnum - primary key (assigned automatcially for new accounts) - -=item srcsvc - svcnum of the source of the forward (see L<FS::svc_acct>) - -=item src - literal source (username or full email address) - -=item dstsvc - svcnum of the destination of the forward (see L<FS::svc_acct>) - -=item dst - literal destination (username or full email address) - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new mail forwarding alias. To add the mail forwarding alias to the -database, see L<"insert">. - -=cut - - -sub table_info { - { - 'name' => 'Forward', - 'name_plural' => 'Mail forwards', - 'display_weight' => 30, - 'cancel_weight' => 30, - 'fields' => { - 'srcsvc' => 'service from which mail is to be forwarded', - 'dstsvc' => 'service to which mail is to be forwarded', - 'dst' => 'someone@another.domain.com to use when dstsvc is 0', - }, - }; -} - -sub table { 'svc_forward'; } - -=item search_sql STRING - -Class method which returns an SQL fragment to search for the given string. - -=cut - -sub search_sql { - my( $class, $string ) = @_; - $class->search_sql_field('src', $string); -} - -=item label [ END_TIMESTAMP [ START_TIMESTAMP ] ] - -Returns a text string representing this forward. - -END_TIMESTAMP and START_TIMESTAMP can optionally be passed when dealing with -history records. - -=cut - -sub label { - my $self = shift; - my $tag = ''; - - if ( $self->srcsvc ) { - my $svc_acct = $self->srcsvc_acct(@_); - $tag = $svc_acct->email(@_); - } else { - $tag = $self->src; - } - - $tag .= ' -> '; - - if ( $self->dstsvc ) { - my $svc_acct = $self->dstsvc_acct(@_); - $tag .= $svc_acct->email(@_); - } else { - $tag .= $self->dst; - } - - $tag; -} - - -=item insert [ , OPTION => VALUE ... ] - -Adds this mail forwarding alias to the database. If there is an error, returns -the error, otherwise returns false. - -The additional fields pkgnum and svcpart (see L<FS::cust_svc>) should be -defined. An FS::cust_svc record will be created and inserted. - -Currently available options are: I<depend_jobnum> - -If I<depend_jobnum> is set (to a scalar jobnum or an array reference of -jobnums), all provisioning jobs will have a dependancy on the supplied -jobnum(s) (they will not run until the specific job(s) complete(s)). - -=cut - -sub insert { - my $self = shift; - my $error; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - $error = $self->check; - return $error if $error; - - $error = $self->SUPER::insert(@_); - if ($error) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; #no error - -} - -=item delete - -Deletes this mail forwarding alias from the database. If there is an error, -returns the error, otherwise returns false. - -The corresponding FS::cust_svc record will be deleted as well. - -=cut - -sub delete { - my $self = shift; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::Autocommit = 0; - my $dbh = dbh; - - my $error = $self->SUPER::delete(@_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; -} - - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -sub replace { - my ( $new, $old ) = ( shift, shift ); - - if ( $new->srcsvc != $old->srcsvc - && ( $new->dstsvc != $old->dstsvc - || ! $new->dstsvc && $new->dst ne $old->dst - ) - ) { - return "Can't change both source and destination of a mail forward!" - } - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - my $error = $new->SUPER::replace($old, @_); - if ($error) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; -} - -=item suspend - -Just returns false (no error) for now. - -Called by the suspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item unsuspend - -Just returns false (no error) for now. - -Called by the unsuspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item cancel - -Just returns false (no error) for now. - -Called by the cancel method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item check - -Checks all fields to make sure this is a valid mail forwarding alias. If there -is an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -Sets any fixed values; see L<FS::part_svc>. - -=cut - -sub check { - my $self = shift; - - my $x = $self->setfixed; - return $x unless ref($x); - #my $part_svc = $x; - - my $error = $self->ut_numbern('svcnum') - || $self->ut_numbern('srcsvc') - || $self->ut_numbern('dstsvc') - ; - return $error if $error; - - return "Both srcsvc and src were defined; only one can be specified" - if $self->srcsvc && $self->src; - - return "one of srcsvc or src is required" - unless $self->srcsvc || $self->src; - - return "Unknown srcsvc: ". $self->srcsvc - unless ! $self->srcsvc || $self->srcsvc_acct; - - return "Both dstsvc and dst were defined; only one can be specified" - if $self->dstsvc && $self->dst; - - return "one of dstsvc or dst is required" - unless $self->dstsvc || $self->dst; - - return "Unknown dstsvc: ". $self->dstsvc - unless ! $self->dstsvc || $self->dstsvc_acct; - #return "Unknown dstsvc" - # unless qsearchs('svc_acct', { 'svcnum' => $self->dstsvc } ) - # || ! $self->dstsvc; - - if ( $self->src ) { - $self->src =~ /^([\w\.\-\&]*)(\@([\w\-]+\.)+\w+)$/ - or return "Illegal src: ". $self->src; - $self->src("$1$2"); - } else { - $self->src(''); - } - - if ( $self->dst ) { - my $conf = new FS::Conf; - if ( $conf->exists('svc_forward-arbitrary_dst') ) { - my $error = $self->ut_textn('dst'); - return $error if $error; - } else { - $self->dst =~ /^([\w\.\-\&]*)(\@([\w\-]+\.)+\w+)$/ - or return "Illegal dst: ". $self->dst; - $self->dst("$1$2"); - } - } else { - $self->dst(''); - } - - $self->SUPER::check; -} - -=item srcsvc_acct - -Returns the FS::svc_acct object referenced by the srcsvc column, or false for -literally specified forwards. - -=cut - -sub srcsvc_acct { - my $self = shift; - qsearchs('svc_acct', { 'svcnum' => $self->srcsvc } ); -} - -=item dstsvc_acct - -Returns the FS::svc_acct object referenced by the srcsvc column, or false for -literally specified forwards. - -=cut - -sub dstsvc_acct { - my $self = shift; - qsearchs('svc_acct', { 'svcnum' => $self->dstsvc } ); -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L<FS::Record>, L<FS::Conf>, L<FS::cust_svc>, L<FS::part_svc>, L<FS::cust_pkg>, -L<FS::svc_acct>, L<FS::svc_domain>, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/svc_phone.pm b/FS/FS/svc_phone.pm deleted file mode 100644 index 00ccc1958..000000000 --- a/FS/FS/svc_phone.pm +++ /dev/null @@ -1,190 +0,0 @@ -package FS::svc_phone; - -use strict; -use vars qw( @ISA ); -#use FS::Record qw( qsearch qsearchs ); -use FS::svc_Common; - -@ISA = qw( FS::svc_Common ); - -=head1 NAME - -FS::svc_phone - Object methods for svc_phone records - -=head1 SYNOPSIS - - use FS::svc_phone; - - $record = new FS::svc_phone \%hash; - $record = new FS::svc_phone { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->suspend; - - $error = $record->unsuspend; - - $error = $record->cancel; - -=head1 DESCRIPTION - -An FS::svc_phone object represents a phone number. FS::svc_phone inherits -from FS::Record. The following fields are currently supported: - -=over 4 - -=item svcnum - primary key - -=item countrycode - - -=item phonenum - - -=item pin - - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new phone number. To add the number to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I<hash> method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined -# -sub table_info { - { - 'name' => 'Phone number', - 'sorts' => 'phonenum', - 'display_weight' => 60, - 'cancel_weight' => 80, - 'fields' => { - 'countrycode' => { label => 'Country code', - type => 'text', - disable_inventory => 1, - disable_select => 1, - }, - 'phonenum' => 'Phone number', - 'pin' => { label => 'Personal Identification Number', - type => 'text', - disable_inventory => 1, - disable_select => 1, - }, - }, - }; -} - -sub table { 'svc_phone'; } - -=item search_sql STRING - -Class method which returns an SQL fragment to search for the given string. - -=cut - -sub search_sql { - my( $class, $string ) = @_; - $class->search_sql_field('phonenum', $string ); -} - -=item label - -Returns the phone number. - -=cut - -sub label { - my $self = shift; - $self->phonenum; #XXX format it better -} - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item suspend - -Called by the suspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item unsuspend - -Called by the unsuspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item cancel - -Called by the cancel method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item check - -Checks all fields to make sure this is a valid phone number. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('svcnum') - || $self->ut_numbern('countrycode') - || $self->ut_number('phonenum') - || $self->ut_numbern('pin') - ; - return $error if $error; - - $self->countrycode(1) unless $self->countrycode; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L<FS::svc_Common>, L<FS::Record>, L<FS::cust_svc>, L<FS::part_svc>, -L<FS::cust_pkg>, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/svc_www.pm b/FS/FS/svc_www.pm deleted file mode 100644 index 53225bbc6..000000000 --- a/FS/FS/svc_www.pm +++ /dev/null @@ -1,312 +0,0 @@ -package FS::svc_www; - -use strict; -use vars qw(@ISA $conf $apacheip); -#use FS::Record qw( qsearch qsearchs ); -use FS::Record qw( qsearchs dbh ); -use FS::svc_Common; -use FS::cust_svc; -use FS::domain_record; -use FS::svc_acct; -use FS::svc_domain; - -@ISA = qw( FS::svc_Common ); - -#ask FS::UID to run this stuff for us later -$FS::UID::callback{'FS::svc_www'} = sub { - $conf = new FS::Conf; - $apacheip = $conf->config('apacheip'); -}; - -=head1 NAME - -FS::svc_www - Object methods for svc_www records - -=head1 SYNOPSIS - - use FS::svc_www; - - $record = new FS::svc_www \%hash; - $record = new FS::svc_www { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->suspend; - - $error = $record->unsuspend; - - $error = $record->cancel; - -=head1 DESCRIPTION - -An FS::svc_www object represents an web virtual host. FS::svc_www inherits -from FS::svc_Common. The following fields are currently supported: - -=over 4 - -=item svcnum - primary key - -=item recnum - DNS `A' record corresponding to this web virtual host. (see L<FS::domain_record>) - -=item usersvc - account (see L<FS::svc_acct>) corresponding to this web virtual host. - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new web virtual host. To add the record to the database, see -L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I<hash> method. - -=cut - -sub table_info { - { - 'name' => 'Hosting', - 'name_plural' => 'Virtual hosting services', - 'display_weight' => 40, - 'cancel_weight' => 20, - 'fields' => { - }, - }; -}; - -sub table { 'svc_www'; } - -=item label [ END_TIMESTAMP [ START_TIMESTAMP ] ] - -Returns the zone name for this virtual host. - -END_TIMESTAMP and START_TIMESTAMP can optionally be passed when dealing with -history records. - -=cut - -sub label { - my $self = shift; - $self->domain_record(@_)->zone; -} - -=item insert [ , OPTION => VALUE ... ] - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -The additional fields pkgnum and svcpart (see L<FS::cust_svc>) should be -defined. An FS::cust_svc record will be created and inserted. - -Currently available options are: I<depend_jobnum> - -If I<depend_jobnum> is set (to a scalar jobnum or an array reference of -jobnums), all provisioning jobs will have a dependancy on the supplied -jobnum(s) (they will not run until the specific job(s) complete(s)). - - -=cut - -sub insert { - my $self = shift; - - my $error = $self->check; - return $error if $error; - - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - local $SIG{PIPE} = 'IGNORE'; - - my $oldAutoCommit = $FS::UID::AutoCommit; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - - #if ( $self->recnum =~ /^([\w\-]+|\@)\.(([\w\.\-]+\.)+\w+)$/ ) { - if ( $self->recnum =~ /^([\w\-]+|\@)\.(\d+)$/ ) { - my( $reczone, $domain_svcnum ) = ( $1, $2 ); - unless ( $apacheip ) { - $dbh->rollback if $oldAutoCommit; - return "Configuration option apacheip not set; can't autocreate A record"; - #"for $reczone". $svc_domain->domain; - } - my $domain_record = new FS::domain_record { - 'svcnum' => $domain_svcnum, - 'reczone' => $reczone, - 'recaf' => 'IN', - 'rectype' => 'A', - 'recdata' => $apacheip, - }; - $error = $domain_record->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - $self->recnum($domain_record->recnum); - } - - $error = $self->SUPER::insert(@_); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - ''; -} - -=item delete - -Delete this record from the database. - -=cut - -sub delete { - my $self = shift; - my $error; - - $error = $self->SUPER::delete(@_); - return $error if $error; - - ''; -} - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -sub replace { - my ( $new, $old ) = ( shift, shift ); - my $error; - - $error = $new->SUPER::replace($old, @_); - return $error if $error; - - ''; -} - -=item suspend - -Called by the suspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item unsuspend - -Called by the unsuspend method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item cancel - -Called by the cancel method of FS::cust_pkg (see L<FS::cust_pkg>). - -=item check - -Checks all fields to make sure this is a valid web virtual host. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -sub check { - my $self = shift; - - my $x = $self->setfixed; - return $x unless ref($x); - #my $part_svc = $x; - - my $error = - $self->ut_numbern('svcnum') -# || $self->ut_number('recnum') - || $self->ut_numbern('usersvc') - || $self->ut_anything('config') - ; - return $error if $error; - - if ( $self->recnum =~ /^(\d+)$/ ) { - - $self->recnum($1); - return "Unknown recnum: ". $self->recnum - unless qsearchs('domain_record', { 'recnum' => $self->recnum } ); - - } elsif ( $self->recnum =~ /^([\w\-]+|\@)\.(([\w\.\-]+\.)+\w+)$/ ) { - - my( $reczone, $domain ) = ( $1, $2 ); - - my $svc_domain = qsearchs( 'svc_domain', { 'domain' => $domain } ) - or return "unknown domain $domain (recnum $1.$2)"; - - my $domain_record = qsearchs( 'domain_record', { - 'reczone' => $reczone, - 'svcnum' => $svc_domain->svcnum, - }); - - if ( $domain_record ) { - $self->recnum($domain_record->recnum); - } else { - #insert will create it - #$self->recnum("$reczone.$domain"); - $self->recnum("$reczone.". $svc_domain->svcnum); - } - - } else { - return "Illegal recnum: ". $self->recnum; - } - - if ( $self->usersvc ) { - return "Unknown usersvc0 (svc_acct.svcnum): ". $self->usersvc - unless qsearchs('svc_acct', { 'svcnum' => $self->usersvc } ); - } - - $self->SUPER::check; - -} - -=item domain_record - -Returns the FS::domain_record record for this web virtual host's zone (see -L<FS::domain_record>). - -=cut - -sub domain_record { - my $self = shift; - qsearchs('domain_record', { 'recnum' => $self->recnum } ); -} - -=item svc_acct - -Returns the FS::svc_acct record for this web virtual host's owner (see -L<FS::svc_acct>). - -=cut - -sub svc_acct { - my $self = shift; - qsearchs('svc_acct', { 'svcnum' => $self->usersvc } ); -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L<FS::svc_Common>, L<FS::Record>, L<FS::domain_record>, L<FS::cust_svc>, -L<FS::part_svc>, L<FS::cust_pkg>, schema.html from the base documentation. - -=cut - -1; - diff --git a/FS/FS/type_pkgs.pm b/FS/FS/type_pkgs.pm deleted file mode 100644 index bf34e7cda..000000000 --- a/FS/FS/type_pkgs.pm +++ /dev/null @@ -1,125 +0,0 @@ -package FS::type_pkgs; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearchs ); -use FS::agent_type; -use FS::part_pkg; - -@ISA = qw( FS::Record ); - -=head1 NAME - -FS::type_pkgs - Object methods for type_pkgs records - -=head1 SYNOPSIS - - use FS::type_pkgs; - - $record = new FS::type_pkgs \%hash; - $record = new FS::type_pkgs { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::type_pkgs record links an agent type (see L<FS::agent_type>) to a -billing item definition (see L<FS::part_pkg>). FS::type_pkgs inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item typepkgnum - primary key - -=item typenum - Agent type, see L<FS::agent_type> - -=item pkgpart - Billing item definition, see L<FS::part_pkg> - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Create a new record. To add the record to the database, see L<"insert">. - -=cut - -sub table { 'type_pkgs'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=item delete - -Deletes this record from the database. If there is an error, returns the -error, otherwise returns false. - -=item replace OLD_RECORD - -Replaces OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=item check - -Checks all fields to make sure this is a valid record. If there is an error, -returns the error, otherwise returns false. Called by the insert and replace -methods. - -=cut - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('typepkgnum') - || $self->ut_number('typenum') - || $self->ut_number('pkgpart') - ; - return $error if $error; - - return "Unknown typenum" - unless qsearchs( 'agent_type', { 'typenum' => $self->typenum } ); - - return "Unknown pkgpart" - unless qsearchs( 'part_pkg', { 'pkgpart' => $self->pkgpart } ); - - $self->SUPER::check; -} - -=item part_pkg - -Returns the FS::part_pkg object associated with this record. - -=cut - -sub part_pkg { - my $self = shift; - qsearchs( 'part_pkg', { 'pkgpart' => $self->pkgpart } ); -} - -=cut - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L<FS::Record>, L<FS::agent_type>, L<FS::part_pkgs>, schema.html from the base -documentation. - -=cut - -1; - diff --git a/FS/MANIFEST b/FS/MANIFEST deleted file mode 100644 index 635bc04c0..000000000 --- a/FS/MANIFEST +++ /dev/null @@ -1,396 +0,0 @@ -Changes -MANIFEST -MANIFEST.SKIP -Makefile.PL -bin/freeside-addoutsource -bin/freeside-addoutsourceuser -bin/freeside-addgroup -bin/freeside-adduser -bin/freeside-apply-credits -bin/freeside-count-active-customers -bin/freeside-daily -bin/freeside-deloutsource -bin/freeside-deloutsourceuser -bin/freeside-deluser -bin/freeside-email -bin/freeside-expiration-alerter -bin/freeside-queued -bin/freeside-radgroup -bin/freeside-reexport -bin/freeside-selfservice-server -bin/freeside-setinvoice -bin/freeside-setup -bin/freeside-sqlradius-radacctd -bin/freeside-sqlradius-reset -bin/freeside-sqlradius-seconds -FS.pm -FS/AccessRight.pm -FS/CGI.pm -FS/InitHandler.pm -FS/ClientAPI.pm -FS/ClientAPI_SessionCache.pm -FS/ClientAPI/passwd.pm -FS/ClientAPI/MyAccount.pm -FS/Conf.pm -FS/ConfItem.pm -FS/Cron/backup.pm -FS/Cron/bill.pm -FS/Cron/vacuum.pm -FS/Daemon.pm -FS/Misc.pm -FS/Record.pm -FS/Report.pm -FS/Report/Table.pm -FS/Report/Table/Monthly.pm -FS/SearchCache.pm -FS/UI/Web.pm -FS/UID.pm -FS/Msgcat.pm -FS/Pony.pm -FS/acct_snarf.pm -FS/agent.pm -FS/agent_type.pm -FS/cust_bill.pm -FS/cust_bill_pkg.pm -FS/cust_bill_pkg_detail.pm -FS/cust_credit.pm -FS/cust_credit_bill.pm -FS/cust_main.pm -FS/cust_main_Mixin.pm -FS/cust_main_county.pm -FS/cust_main_invoice.pm -FS/cust_pay.pm -FS/cust_bill_event.pm -FS/cust_bill_pay.pm -FS/cust_pay_batch.pm -FS/cust_pay_refund.pm -FS/cust_pkg.pm -FS/cust_refund.pm -FS/cust_credit_refund.pm -FS/cust_svc.pm -FS/h_Common.pm -FS/h_cust_bill.pm -FS/h_cust_svc.pm -FS/h_cust_tax_exempt.pm -FS/h_domain_record.pm -FS/h_svc_acct.pm -FS/h_svc_broadband.pm -FS/h_svc_domain.pm -FS/h_svc_external.pm -FS/h_svc_forward.pm -FS/h_svc_www.pm -FS/part_bill_event.pm -FS/payinfo_Mixin.pm -FS/export_svc.pm -FS/part_export.pm -FS/part_export_option.pm -FS/part_export/acct_sql.pm -FS/part_export/apache.pm -FS/part_export/bind.pm -FS/part_export/bind_slave.pm -FS/part_export/bsdshell.pm -FS/part_export/communigate_pro.pm -FS/part_export/communigate_pro_singledomain.pm -FS/part_export/cp.pm -FS/part_export/cyrus.pm -FS/part_export/domain_shellcommands.pm -FS/part_export/forward_shellcommands.pm -FS/part_export/http.pm -FS/part_export/infostreet.pm -FS/part_export/ldap.pm -FS/part_export/null.pm -FS/part_export/radiator.pm -FS/part_export/router.pm -FS/part_export/shellcommands.pm -FS/part_export/shellcommands_withdomain.pm -FS/part_export/sqlmail.pm -FS/part_export/sqlradius.pm -FS/part_export/sysvshell.pm -FS/part_export/textradius.pm -FS/part_export/vpopmail.pm -FS/part_export/www_shellcommands.pm -FS/part_pkg.pm -FS/part_pkg_option.pm -FS/part_pkg/flat.pm -FS/part_pkg/flat_comission.pm -FS/part_pkg/flat_comission_cust.pm -FS/part_pkg/flat_comission_pkg.pm -FS/part_pkg/flat_delayed.pm -FS/part_pkg/prorate.pm -FS/part_pkg/sesmon_hour.pm -FS/part_pkg/sesmon_minute.pm -FS/part_pkg/sql_external.pm -FS/part_pkg/sql_generic.pm -FS/part_pkg/sqlradacct_hour.pm -FS/part_pkg/subscription.pm -FS/part_pkg/voip_sqlradacct.pm -FS/part_pkg/voip_cdr.pm -FS/part_pkg/base_rate.pm -FS/part_pkg/base_delayed.pm -FS/part_pop_local.pm -FS/part_referral.pm -FS/part_svc.pm -FS/part_svc_column.pm -FS/part_svc_router.pm -FS/part_virtual_field.pm -FS/payby.pm -FS/pkg_class.pm -FS/pkg_svc.pm -FS/rate.pm -FS/rate_detail.pm -FS/rate_region.pm -FS/rate_prefix.pm -FS/reg_code.pm -FS/reg_code_pkg.pm -FS/svc_Common.pm -FS/svc_acct.pm -FS/svc_acct_pop.pm -FS/svc_broadband.pm -FS/svc_domain.pm -FS/svc_external.pm -FS/router.pm -FS/type_pkgs.pm -FS/nas.pm -FS/port.pm -FS/session.pm -FS/domain_record.pm -FS/prepay_credit.pm -FS/svc_www.pm -FS/svc_forward.pm -FS/raddb.pm -FS/radius_usergroup.pm -FS/queue.pm -FS/queue_arg.pm -FS/queue_depend.pm -FS/msgcat.pm -FS/cust_tax_exempt.pm -FS/cust_tax_exempt_pkg.pm -FS/clientapi_session.pm -FS/clientapi_session_field.pm -t/agent.t -t/agent_type.t -t/AccessRight.t -t/CGI.t -t/InitHandler.t -t/ClientAPI.t -t/ClientAPI_SessionCache.t -t/Conf.t -t/ConfItem.t -t/Cron-backup.t -t/Cron-bill.t -t/Cron-vacuum.t -t/Daemon.t -t/Misc.t -t/Record.t -t/Report.t -t/Report-Table.t -t/Report-Table-Monthly.t -t/UID.t -t/Msgcat.t -t/SearchCache.t -t/cust_bill.t -t/cust_bill_event.t -t/cust_bill_pay.t -t/cust_bill_pkg.t -t/cust_bill_pkg_detail.t -t/cust_credit.t -t/cust_credit_bill.t -t/cust_credit_refund.t -t/cust_main.t -t/cust_main_Mixin.t -t/cust_main_county.t -t/cust_main_invoice.t -t/cust_pay.t -t/cust_pay_batch.t -t/cust_pay_refund.t -t/cust_pkg.t -t/cust_refund.t -t/cust_svc.t -t/h_cust_bill.t -t/h_cust_svc.t -t/h_cust_tax_exempt.t -t/h_Common.t -t/h_cust_svc.t -t/h_domain_record.t -t/h_svc_acct.t -t/h_svc_broadband.t -t/h_svc_domain.t -t/h_svc_external.t -t/h_svc_forward.t -t/h_svc_www.t -t/cust_tax_exempt.t -t/cust_tax_exempt_pkg.t -t/domain_record.t -t/nas.t -t/part_bill_event.t -t/export_svc.t -t/part_export.t -t/part_export_option.t -t/part_export-acct_sql.t -t/part_export-apache.t -t/part_export-bind.t -t/part_export-bind_slave.t -t/part_export-bsdshell.t -t/part_export-communigate_pro.t -t/part_export-communigate_pro_singledomain.t -t/part_export-cp.t -t/part_export-cyrus.t -t/part_export-domain_shellcommands.t -t/part_export-forward_shellcommands.t -t/part_export-http.t -t/part_export-infostreet.t -t/part_export-ldap.t -t/part_export-null.t -t/part_export-passwdfile.t -t/part_export-postfix.t -t/part_export-radiator.t -t/part_export-router.t -t/part_export-shellcommands.t -t/part_export-shellcommands_withdomain.t -t/part_export-sqlmail.t -t/part_export-sqlradius.t -t/part_export-sysvshell.t -t/part_export-textradius.t -t/part_export-vpopmail.t -t/part_export-www_shellcommands.t -t/part_pkg.t -t/part_pkg_option.t -t/part_pkg-flat.t -t/part_pkg-flat_comission.t -t/part_pkg-flat_comission_cust.t -t/part_pkg-flat_comission_pkg.t -t/part_pkg-flat_delayed.t -t/part_pkg-prorate.t -t/part_pkg-sesmon_hour.t -t/part_pkg-sesmon_minute.t -t/part_pkg-sql_external.t -t/part_pkg-sql_generic.t -t/part_pkg-sqlradacct_hour.t -t/part_pkg-subscription.t -t/part_pkg-voip_sqlradacct.t -t/part_pkg-voip_cdr.t -t/part_pop_local.t -t/part_referral.t -t/part_svc.t -t/part_svc_column.t -t/payby.t -t/payinfo_Mixin.t -t/pkg_class.t -t/pkg_svc.t -t/port.t -t/prepay_credit.t -t/rate.t -t/rate_detail.t -t/rate_region.t -t/rate_prefix.t -t/radius_usergroup.t -t/reg_code.t -t/reg_code_pkg.t -t/session.t -t/svc_acct.t -t/svc_acct_pop.t -t/svc_broadband.t -t/svc_Common.t -t/svc_domain.t -t/svc_external.t -t/svc_forward.t -t/svc_www.t -t/type_pkgs.t -t/queue.t -t/queue_arg.t -t/queue_depend.t -t/msgcat.t -t/raddb.t -t/clientapi_session.t -t/clientapi_session_field.t -FS/payment_gateway.pm -t/payment_gateway.t -FS/payment_gateway_option.pm -t/payment_gateway_option.t -FS/option_Common.pm -t/option_Common.t -FS/agent_payment_gateway.pm -t/agent_payment_gateway.t -FS/banned_pay.pm -t/banned_pay.t -bin/freeside-prepaidd -FS/cdr.pm -t/cdr.t -FS/cdr_calltype.pm -t/cdr_calltype.t -FS/cdr_type.pm -t/cdr_type.t -FS/cdr_carrier.pm -t/cdr_carrier.t -FS/inventory_class.pm -t/inventory_class.t -FS/inventory_item.pm -t/inventory_item.t -FS/cdr_upstream_rate.pm -t/cdr_upstream_rate.t -FS/access_user.pm -t/access_user.t -FS/access_user_pref.pm -t/access_user_pref.t -FS/access_group.pm -t/access_group.t -FS/access_usergroup.pm -t/access_usergroup.t -FS/access_groupagent.pm -t/access_groupagent.t -FS/access_right.pm -t/access_right.t -FS/m2m_Common.pm -FS/pay_batch.pm -t/pay_batch.t -FS/ConfDefaults.pm -t/ConfDefaults.t -FS/m2name_Common.pm -FS/CurrentUser.pm -FS/svc_phone.pm -t/svc_phone.t -FS/h_svc_phone.pm -FS/cust_bill_pay_batch.pm -t/cust_bill_pay_batch.t -FS/cust_bill_pay_pkg.pm -t/cust_bill_pay_pkg.t -FS/cust_credit_bill_pkg.pm -t/cust_credit_bill_pkg.t -FS/registrar.pm -t/registrar.t -FS/svc_External_Common.pm -t/svc_External_Common.t -FS/svc_Parent_Mixin.pm -t/svc_Parent_Mixin.t -FS/cust_main_note.pm -t/cust_main_note.t -FS/cust_pkg_reason.pm -t/cust_pkg_reason.t -FS/reason.pm -t/reason.t -FS/reason_type.pm -t/reason_type.t -FS/pkg_referral.pm -t/pkg_referral.t -FS/part_event_option.pm -t/part_event_option.t -FS/part_event_condition.pm -t/part_event_condition.t -FS/part_event_condition_option.pm -t/part_event_condition_option.t -FS/part_event.pm -t/part_event.t -FS/cust_event.pm -t/cust_event.t -FS/part_event_condition_option_option.pm -t/part_event_condition_option_option.t -FS/cust_pkg_option.pm -t/cust_pkg_option.t -FS/conf.pm -t/conf.t -FS/acct_rt_transaction.pm -t/acct_rt_transaction.t -FS/cust_pay_pending.pm -t/cust_pay_pending.t -FS/part_pkg_taxclass.pm -t/part_pkg_taxclass.t diff --git a/FS/MANIFEST.SKIP b/FS/MANIFEST.SKIP deleted file mode 100644 index ae335e78a..000000000 --- a/FS/MANIFEST.SKIP +++ /dev/null @@ -1 +0,0 @@ -CVS/ diff --git a/FS/Makefile.PL b/FS/Makefile.PL deleted file mode 100644 index 1647f8eef..000000000 --- a/FS/Makefile.PL +++ /dev/null @@ -1,10 +0,0 @@ -use ExtUtils::MakeMaker; -# See lib/ExtUtils/MakeMaker.pm for details of how to influence -# the contents of the Makefile that is written. -WriteMakefile( - 'NAME' => 'FS', - 'VERSION_FROM' => 'FS.pm', # finds $VERSION - 'EXE_FILES' => [ glob 'bin/*' ], - 'INSTALLSCRIPT' => '/usr/local/bin', - 'INSTALLSITEBIN' => '/usr/local/bin', -); diff --git a/FS/bin/freeside-addgroup b/FS/bin/freeside-addgroup deleted file mode 100755 index 7b30f7d95..000000000 --- a/FS/bin/freeside-addgroup +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/perl - -use strict; -use vars qw($opt_s); -use Getopt::Std; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::CurrentUser; -use FS::AccessRight; -use FS::access_group; -use FS::access_right; -use FS::access_groupagent; - -getopts("s"); -my $user = shift or die &usage; #just for adminsuidsetup -my $group = shift or die &usage; - -$FS::CurrentUser::upgrade_hack = 1; -#adminsuidsetup $rootuser; -adminsuidsetup $user; - -my $access_group = new FS::access_group { 'groupname' => $group }; -my $error = $access_group->insert; -die $error if $error; - -if ( $opt_s ) { - foreach my $rightname ( FS::AccessRight->rights ) { - my $access_right = new FS::access_right { - 'righttype' => 'FS::access_group', - 'rightobjnum' => $access_group->groupnum, - 'rightname' => $rightname, - }; - my $ar_error = $access_right->insert; - die $ar_error if $ar_error; - } - - foreach my $agent ( qsearch('agent', {} ) ) { - my $access_groupagent = new FS::access_groupagent { - 'groupnum' => $access_group->groupnum, - 'agentnum' => $agent->agentnum, - }; - my $aga_error = $access_groupagent->insert; - die $aga_error if $aga_error; - } -} - -sub usage { - die "Usage:\n\n freeside-addgroup [ -s ] username groupname" -} - diff --git a/FS/bin/freeside-addoutsource b/FS/bin/freeside-addoutsource deleted file mode 100644 index 9cb12195a..000000000 --- a/FS/bin/freeside-addoutsource +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh - -domain=$1 - -FREESIDE_CONF=%%%FREESIDE_CONF%%% -FREESIDE_CACHE=%%%FREESIDE_CACHE%%% -FREESIDE_EXPORT=%%%FREESIDE_EXPORT%%% - -#without this, [a-z]* matches CVS/, the copy doesn't return a sucessful error -# status, and the rest of the commands aren't run -export LANG=C - -createdb $domain && \ -\ -mkdir $FREESIDE_CONF/conf.DBI:Pg:dbname=$domain && \ -\ -chown freeside $FREESIDE_CONF/conf.DBI:Pg:dbname=$domain && \ -\ -cp /home/ivan/freeside/conf/[a-z]* $FREESIDE_CONF/conf.DBI:Pg:dbname=$domain && \ -\ -touch $FREESIDE_CONF/conf.DBI:Pg:dbname=$domain/secrets && \ -\ -chown freeside $FREESIDE_CONF/conf.DBI:Pg:dbname=$domain/secrets && \ -\ -chmod 600 $FREESIDE_CONF/conf.DBI:Pg:dbname=$domain/secrets && \ -\ -echo -e "DBI:Pg:dbname=$domain\nfreeside\n" >$FREESIDE_CONF/conf.DBI:Pg:dbname=$domain/secrets && \ -\ -mkdir $FREESIDE_CACHE/counters.DBI:Pg:dbname=$domain && \ -mkdir $FREESIDE_CACHE/cache.DBI:Pg:dbname=$domain && \ -mkdir $FREESIDE_EXPORT/export.DBI:Pg:dbname=$domain - diff --git a/FS/bin/freeside-addoutsourceuser b/FS/bin/freeside-addoutsourceuser deleted file mode 100644 index cbe792acc..000000000 --- a/FS/bin/freeside-addoutsourceuser +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -username=$1 -domain=$2 -password=$3 -realdomain=$4 -FREESIDE_CONF=%%%FREESIDE_CONF%%% - -freeside-adduser -s conf.DBI:Pg:dbname=$domain/secrets \ - -n \ - $username #2>/dev/null - -[ -e $FREESIDE_CONF/dbdef.DBI:Pg:dbname=$domain ] \ - || ( freeside-setup -d $realdomain -u $username ) - -freeside-adduser -g 1 $username - -htpasswd -b $FREESIDE_CONF/htpasswd $username $password diff --git a/FS/bin/freeside-adduser b/FS/bin/freeside-adduser deleted file mode 100644 index 237e29ef8..000000000 --- a/FS/bin/freeside-adduser +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw($opt_s $opt_g $opt_n); -use Fcntl qw(:flock); -use Getopt::Std; - -my $FREESIDE_CONF = "%%%FREESIDE_CONF%%%"; - -getopts("s:g:n"); -my $user = shift or die &usage; - -if ( $opt_s ) { - - #if ( -e "$FREESIDE_CONF/mapsecrets" ) { - # open(MAPSECRETS,"<$FREESIDE_CONF/mapsecrets") - # or die "can't open $FREESIDE_CONF/mapsecrets: $!"; - # while (<MAPSECRETS>) { - # /^(\S+) / or die "unparsable line in mapsecrets: $_"; - # die "user $user already exists\n" if $user eq $1; - # } - # close MAPSECRETS; - #} - - #insert new entry before a wildcard... - open(MAPSECRETS,"<$FREESIDE_CONF/mapsecrets") - and flock(MAPSECRETS,LOCK_EX) - or die "can't open $FREESIDE_CONF/mapsecrets: $!"; - open(NEW,">$FREESIDE_CONF/mapsecrets.new") - or die "can't open $FREESIDE_CONF/mapsecrets.new: $!"; - while(<MAPSECRETS>) { - if ( /^\*\s/ ) { - print NEW "$user $opt_s\n"; - } - print NEW $_; - } - close MAPSECRETS or die "can't close $FREESIDE_CONF/mapsecrets: $!"; - close NEW or die "can't close $FREESIDE_CONF/mapsecrets.new: $!"; - rename("$FREESIDE_CONF/mapsecrets.new", "$FREESIDE_CONF/mapsecrets") - or die "can't move mapsecrets.new into place: $!"; - -} - -### - -exit if $opt_n; - -### - -use FS::UID qw(adminsuidsetup); -use FS::CurrentUser; -use FS::access_user; -use FS::access_usergroup; - -$FS::CurrentUser::upgrade_hack = 1; -#adminsuidsetup $rootuser; -adminsuidsetup $user; - -my $access_user = new FS::access_user { - 'username' => $user, - '_password' => 'notyet', - 'first' => 'Firstname', # $opt_f || - 'last' => 'Lastname', # $opt_l || -}; -my $au_error = $access_user->insert; -die $au_error if $au_error; - -if ( $opt_g ) { - - my $access_usergroup = new FS::access_usergroup { - 'usernum' => $access_user->usernum, - 'groupnum' => $opt_g, - }; - my $aug_error = $access_usergroup->insert; - die $aug_error if $aug_error; - -} - -### - -sub usage { - die "Usage:\n\n freeside-adduser [ -n ] [ -s ] [ -g groupnum ] username [ password ]" -} - -=head1 NAME - -freeside-adduser - Command line interface to add (freeside) users. - -=head1 SYNOPSIS - - freeside-adduser [ -n ] [ -s ] [ -g groupnum ] username [ password ] - -=head1 DESCRIPTION - -Adds a user to the Freeside billing system. This is for adding users (internal -sales/tech folks) to the web interface, not for adding customer accounts. - -This functionality is now available in the web interface as well, under -B<Configuration | Employees | View/Edit employees>. - - -g: initial groupnum - - Development/multi-DB options: - - -s: alternate secrets file - - -n: no ACL added, for bootstrapping - -=head1 NOTE - -No explicit htpasswd options are available in 1.7 - passwordsa are now -maintained automatically. - -=head1 SEE ALSO - -Base Freeside documentation - -=cut - diff --git a/FS/bin/freeside-apply-credits b/FS/bin/freeside-apply-credits deleted file mode 100755 index ea6a7bdd0..000000000 --- a/FS/bin/freeside-apply-credits +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw( $user $cust_main @customers ); -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::cust_main; - -$user = shift or die &usage; -&adminsuidsetup( $user ); - -my @customers = qsearch('cust_main', {} ); -die "No customers" unless (scalar(@customers) > 0); - -foreach $cust_main (@customers) { - print "Applying credits for customer #". $cust_main->custnum; - $cust_main->apply_credits; -} - - - diff --git a/FS/bin/freeside-count-active-customers b/FS/bin/freeside-count-active-customers deleted file mode 100755 index 759085a73..000000000 --- a/FS/bin/freeside-count-active-customers +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -domain=$1 - -echo "\t -select count(*) from cust_main where - 0 < ( SELECT COUNT(*) FROM cust_pkg - WHERE cust_pkg.custnum = cust_main.custnum - AND ( cust_pkg.cancel IS NULL - OR cust_pkg.cancel = 0 - ) - ) - OR 0 = ( SELECT COUNT(*) FROM cust_pkg - WHERE cust_pkg.custnum = cust_main.custnum - ); -" | psql -U freeside -q $domain | head -1 - diff --git a/FS/bin/freeside-daily b/FS/bin/freeside-daily deleted file mode 100755 index 13079b4f9..000000000 --- a/FS/bin/freeside-daily +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Getopt::Std; -use FS::UID qw(adminsuidsetup); - -&untaint_argv; #what it sounds like (eww) -use vars qw(%opt); -getopts("p:a:d:vl:sy:nm", \%opt); - -my $user = shift or die &usage; -adminsuidsetup $user; - -use FS::Cron::bill qw(bill); -bill(%opt); - -#what to do about the below when using -m? that is the question. - -use FS::Cron::notify qw(notify_flat_delay); -notify_flat_delay(%opt); - -use FS::Cron::expire_user_pref qw(expire_user_pref); -expire_user_pref(); - -use FS::Cron::vacuum qw(vacuum); -vacuum(); - -use FS::Cron::backup qw(backup_scp); -backup_scp(); - -### -# subroutines -### - -sub untaint_argv { - foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV - #$ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\""; - # Date::Parse - $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\""; - $ARGV[$_]=$1; - } -} - -sub usage { - die "Usage:\n\n freeside-daily [ -d 'date' ] user [ custnum custnum ... ]\n"; -} - -### -# documentation -### - -=head1 NAME - -freeside-daily - Run daily billing and invoice collection events. - -=head1 SYNOPSIS - - freeside-daily [ -d 'date' ] [ -y days ] [ -p 'payby' ] [ -a agentnum ] [ -s ] [ -v ] [ -l level ] [ -m ] user [ custnum custnum ... ] - -=head1 DESCRIPTION - -Bills customers and runs invoice collection events. Should be run from -crontab daily. - -Bills customers. Searches for customers who are due for billing and calls -the bill and collect methods of a cust_main object. See L<FS::cust_main>. - - -d: Pretend it's 'date'. Date is in any format Date::Parse is happy with, - but be careful. - - -y: In addition to -d, which specifies an absolute date, the -y switch - specifies an offset, in days. For example, "-y 15" would increment the - "pretend date" 15 days from whatever was specified by the -d switch - (or now, if no -d switch was given). - - -n: When used with "-d" and/or "-y", specifies that invoices should be dated - with today's date, irregardless of the pretend date used to pre-generate - the invoices. - - -p: Only process customers with the specified payby (I<CARD>, I<DCRD>, I<CHEK>, I<DCHK>, I<BILL>, I<COMP>, I<LECB>) - - -a: Only process customers with the specified agentnum - - -s: re-charge setup fees - - -v: enable debugging - - -l: debugging level - - -m: Experimental multi-process mode uses the job queue for multi-process and/or multi-machine billing. - -user: From the mapsecrets file - see config.html from the base documentation - -custnum: if one or more customer numbers are specified, only bills those -customers. Otherwise, bills all customers. - -=head1 BUGS - -=head1 SEE ALSO - -L<FS::cust_main>, config.html from the base documentation - -=cut - diff --git a/FS/bin/freeside-dbdef-create b/FS/bin/freeside-dbdef-create deleted file mode 100755 index a04f42521..000000000 --- a/FS/bin/freeside-dbdef-create +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use DBI; -use DBIx::DBSchema 0.26; -use FS::UID qw(adminsuidsetup datasrc driver_name); -use FS::Schema; - -my $user = shift or die &usage; - -$FS::Schema::setup_hack = 1; -$FS::CurrentUser::upgrade_hack = 1; -my($dbh)=adminsuidsetup $user; - -#needs to match FS::Record -my($dbdef_file) = "%%%FREESIDE_CONF%%%/dbdef.". datasrc; - -my $dbdef = new_native DBIx::DBSchema $dbh; - -#print $dbdef->pretty_print; - -#important -$dbdef->save($dbdef_file); - -sub usage { - die "Usage:\n dbdef-create user\n"; -} - -=head1 NAME - -freeside-dbdef-create - Recreate database schema cache - -=head1 SYNOPSIS - - freeside-dbdef-create user - -=head1 DESCRIPTION - -Reverse engineers the database schema and recreates the dbdef cache file. - -=head1 SEE ALSO - -L<DBIx::DBSchema> - -=cut - -1; diff --git a/FS/bin/freeside-delete-addr_blocks b/FS/bin/freeside-delete-addr_blocks deleted file mode 100755 index a7e99766a..000000000 --- a/FS/bin/freeside-delete-addr_blocks +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw( $user $block @blocks ); -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::addr_block; -use FS::svc_broadband; - -$user = shift or die &usage; -&adminsuidsetup( $user ); - -@blocks = qsearch('addr_block', {} ); -die "No address blocks" unless (scalar(@blocks) > 0); - -foreach $block (@blocks) { - my @devices = qsearch('svc_broadband', { 'blocknum' => $block->blocknum } ); - if (@devices) { - print "Skipping block " . $block->ip_gateway . " / " . $block->ip_netmask; - print "\n"; - }else{ - print "Deleting block " . $block->ip_gateway . " / " . $block->ip_netmask; - print "\n"; - $block->delete; - } -} - - -sub usage { - "Usage:\n freeside-delete-addr_blocks user \n"; -} diff --git a/FS/bin/freeside-deloutsource b/FS/bin/freeside-deloutsource deleted file mode 100644 index afc3a0118..000000000 --- a/FS/bin/freeside-deloutsource +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -domain=$1 -FREESIDE_CONF=%%%FREESIDE_CONF%%% -FREESIDE_CACHE=%%%FREESIDE_CACHE%%% -FREESIDE_EXPORT=%%%FREESIDE_EXPORT%%% - -dropdb $domain && \ -rm -rf $FREESIDE_CONF/conf.DBI:Pg:host=localhost\;dbname=$domain && \ -rm -rf $FREESIDE_CACHE/counters.DBI:Pg:host=localhost\;dbname=$domain && \ -rm -rf $FREESIDE_CACHE/cache.DBI:Pg:host=localhost\;dbname=$domain && \ -rm -rf $FREESIDE_EXPORT/export.DBI:Pg:host=localhost\;dbname=$domain && \ -rm $FREESIDE_CONF/dbdef.DBI:Pg:host=localhost\;dbname=$domain - diff --git a/FS/bin/freeside-deloutsourceuser b/FS/bin/freeside-deloutsourceuser deleted file mode 100644 index dc4ff9cdc..000000000 --- a/FS/bin/freeside-deloutsourceuser +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -username=$1 - -freeside-deluser -h %%%FREESIDE_CONF%%%/htpasswd $username 2>/dev/null - diff --git a/FS/bin/freeside-deluser b/FS/bin/freeside-deluser deleted file mode 100644 index a2a361a83..000000000 --- a/FS/bin/freeside-deluser +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw($opt_h); -use Fcntl qw(:flock); -use Getopt::Std; - -my $FREESIDE_CONF = "%%%FREESIDE_CONF%%%"; - -getopts("h:"); -my $user = shift or die &usage; - -if ( $opt_h ) { - open(HTPASSWD,"<$opt_h") - and flock(HTPASSWD,LOCK_EX) - or die "can't open $opt_h: $!"; - open(HTPASSWD_TMP,">$opt_h.tmp") or die "can't open $opt_h.tmp: $!"; - while (<HTPASSWD>) { - print HTPASSWD_TMP $_ unless /^$user:/; - } - close HTPASSWD_TMP; - rename "$opt_h.tmp", "$opt_h" or die $!; - flock(HTPASSWD,LOCK_UN); - close HTPASSWD; -} - -open(MAPSECRETS,"<$FREESIDE_CONF/mapsecrets") - and flock(MAPSECRETS,LOCK_EX) - or die "can't open $FREESIDE_CONF/mapsecrets: $!"; -open(MAPSECRETS_TMP,">>$FREESIDE_CONF/mapsecrets.tmp") - or die "can't open $FREESIDE_CONF/mapsecrets.tmp: $!"; -while (<MAPSECRETS>) { - print MAPSECRETS_TMP $_ unless /^$user\s/; -} -close MAPSECRETS_TMP; -rename "$FREESIDE_CONF/mapsecrets.tmp", "$FREESIDE_CONF/mapsecrets" or die $!; -flock(MAPSECRETS,LOCK_UN); -close MAPSECRETS; - -sub usage { - die "Usage:\n\n freeside-deluser [ -h htpasswd_file ] username" -} - -=head1 NAME - -freeside-deluser - Command line interface to add (freeside) users. - -=head1 SYNOPSIS - - freeside-deluser [ -h htpasswd_file ] username - -=head1 DESCRIPTION - -Adds a user to the Freeside billing system. This is for adding users (internal -sales/tech folks) to the web interface, not for adding customer accounts. - - -h: Also delete from the given htpasswd filename - -=head1 SEE ALSO - -L<freeside-adduser>, L<htpasswd>(1), base Freeside documentation - -=cut - diff --git a/FS/bin/freeside-disable-reasons b/FS/bin/freeside-disable-reasons deleted file mode 100755 index 0af460919..000000000 --- a/FS/bin/freeside-disable-reasons +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw($opt_t $opt_e); -use Getopt::Std; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs); -use FS::reason_type; -use FS::reason; - -getopts('t:e'); - -my $user = shift or die &usage; -adminsuidsetup $user; - -die &usage - unless ($opt_t); - -$FS::Record::nowarn_identical = 1; - -my @reason = (); -if ( $opt_t ) { - $opt_t =~ /^(\d+)$/ or die "invalid reason_type"; - @reason = qsearch('reason', { reason_type => $1 } ); - die "no reasons found\n" unless @reason; -} else { - die "no reason_type specified\n"; -} - -foreach my $reason ( @reason ) { - if ( $opt_e ) { - $reason->disabled(''); - }else{ - $reason->disabled('Y'); - } - my $error = $reason->replace - if $reason->modified; - die $error if $error; -} - - -sub usage { - die "Usage:\n\n freeside-disable-reasons -t reason_type [ -e ] user\n"; -} - -=head1 NAME - -freeside-disable-reasons - Command line tool to set the disabled column for reasons - -=head1 SYNOPSIS - - freeside-disable-reasons -t reason_type [ -e ] user - -=head1 DESCRIPTION - - Disables the reasons of the specified reason type. - Enables instead if -e is specified. - -=head1 SEE ALSO - -L<FS::reason>, L<FS::reason_type> - -=cut - diff --git a/FS/bin/freeside-email b/FS/bin/freeside-email deleted file mode 100755 index 7a93f78ee..000000000 --- a/FS/bin/freeside-email +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use FS::UID qw(adminsuidsetup); -use FS::Conf; -use FS::Record qw(qsearch); -use FS::svc_acct; - -&untaint_argv; #what it sounds like (eww) -my $user = shift or die &usage; - -adminsuidsetup $user; - -my $conf = new FS::Conf; - -my @svc_acct = qsearch('svc_acct', {}); -my @emails = map $_->email, @svc_acct; - -print join("\n", @emails), "\n"; - -# subroutines - -sub untaint_argv { - foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV - #$ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\""; - # Date::Parse - $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\""; - $ARGV[$_]=$1; - } -} - -sub usage { - die "Usage:\n\n freeside-email user\n"; -} - -=head1 NAME - -freeside-email - Prints email addresses of all users on STDOUT - -=head1 SYNOPSIS - - freeside-email user - -=head1 DESCRIPTION - -Prints the email addresses of all customers on STDOUT, separated by newlines. - -user: From the mapsecrets file - see config.html from the base documentation - -=head1 BUGS - -=head1 SEE ALSO - -=cut - diff --git a/FS/bin/freeside-expiration-alerter b/FS/bin/freeside-expiration-alerter deleted file mode 100755 index ffd75f9a5..000000000 --- a/FS/bin/freeside-expiration-alerter +++ /dev/null @@ -1,226 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use Date::Format; -use Time::Local; -use Text::Template; -use Getopt::Std; -use Net::SMTP; -use Mail::Header; -use Mail::Internet; -use FS::Conf; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::cust_main; - -use vars qw($smtpmachine @body); - -#hush, perl! -$FS::alerter::_template::first = ""; -$FS::alerter::_template::last = ""; -$FS::alerter::_template::company = ""; -$FS::alerter::_template::payby = ""; -$FS::alerter::_template::expdate = ""; - -# Set the mail program and other variables -my $mail_sender = "billing\@mydomain.tld"; # or invoice_from if available -my $failure_recipient = "postmaster"; # or invoice_from if available -my $warning_time = 30 * 24 * 60 * 60; -my $urgent_time = 15 * 24 * 60 * 60; -my $panic_time = 5 * 24 * 60 * 60; -my $window_time = 24 * 60 * 60; - -&untaint_argv; #what it sounds like (eww) - -#we're at now now (and later). -my($_date)= $^T; - -# Get the current month -my ($sec,$min,$hour,$mday,$mon,$year) = - (localtime($_date) )[0,1,2,3,4,5]; -$mon++; - -# Login to the database -my $user = shift or die &usage; -adminsuidsetup $user; - -# Get the needed configuration files -my $conf = new FS::Conf; -$smtpmachine = $conf->config('smtpmachine'); -$mail_sender = $conf->config('invoice_from') - if $conf->exists('invoice_from'); -$failure_recipient = $conf->config('invoice_from') - if $conf->exists('invoice_from'); - - -my(@customers)=qsearch('cust_main',{}); -if (scalar(@customers) == 0) -{ - exit 1; -} - -# Prepare for sending email - -$ENV{MAILADDRESS} = $mail_sender; -my $header = new Mail::Header ( [ - "From: Account Processor", - "To: $failure_recipient", - "Sender: $mail_sender", - "Reply-To: $mail_sender", - "Subject: Unnotified Billing Arrangement Expirations", -] ); - -my @alerter_template = $conf->config('alerter_template') - or die "cannot load config file alerter_template"; - -my $alerter = new Text::Template (TYPE => 'ARRAY', SOURCE => [ map "$_\n", @alerter_template ]) - or die "can't create new Text::Template object: Text::Template::ERROR"; -$alerter->compile() or die "can't compile template: Text::Template::ERROR"; - -# Now I can start looping -foreach my $customer (@customers) -{ - my $paydate = $customer->getfield('paydate'); - next if $paydate =~ /^\s*$/; #skip empty expiration dates - - my $custnum = $customer->getfield('custnum'); - my $first = $customer->getfield('first'); - my $last = $customer->getfield('last'); - my $company = $customer->getfield('company'); - my $payby = $customer->getfield('payby'); - my $payinfo = $customer->getfield('payinfo'); - my $daytime = $customer->getfield('daytime'); - my $night = $customer->getfield('night'); - - my ($payyear,$paymonth,$payday) = split (/-/,$paydate); - - my $expire_time = timelocal(0,0,0,$payday,--$paymonth,$payyear); - - #credit cards expire at the end of the month/year of their exp date - if ($payby eq 'CARD' || $payby eq 'DCRD') { - ($paymonth < 11) ? $paymonth++ : ($paymonth=0, $payyear++); - $expire_time = timelocal(0,0,0,$payday,$paymonth,$payyear); - $expire_time--; - } - - if (($expire_time < $_date + $warning_time && - $expire_time > $_date + $warning_time - $window_time) || - ($expire_time < $_date + $urgent_time && - $expire_time > $_date + $urgent_time - $window_time) || - ($expire_time < $_date + $panic_time && - $expire_time > $_date + $panic_time - $window_time)) { - - - - my @packages = $customer->ncancelled_pkgs; - if (scalar(@packages) != 0) { - my @invoicing_list = $customer->invoicing_list; - if ( grep { $_ ne 'POST' } @invoicing_list ) { - my $header = new Mail::Header ( [ - "From: $mail_sender", - "To: ". join(', ', grep { $_ ne 'POST' } @invoicing_list ), - "Sender: $mail_sender", - "Reply-To: $mail_sender", - "Date: ". time2str("%a, %d %b %Y %X %z", time), - "Subject: Billing Arrangement Expiration", - ] ); - $FS::alerter::_template::first = $first; - $FS::alerter::_template::last = $last; - $FS::alerter::_template::company = $company; - if ($payby eq 'CARD' || $payby eq 'DCRD') { - $FS::alerter::_template::payby = "credit card (" . - substr($payinfo, 0, 2) . "xxxxxxxxxx" . - substr($payinfo, -4) . ")"; - }elsif ($payby eq 'COMP') { - $FS::alerter::_template::payby = "complimentary account"; - }else{ - $FS::alerter::_template::payby = "current method"; - } - $FS::alerter::_template::expdate = $expire_time; - - $FS::alerter::_template::company_name = $conf->config('company_name'); - $FS::alerter::_template::company_address = - join("\n", $conf->config('company_address') ). "\n"; - - my $message = new Mail::Internet ( - 'Header' => $header, - 'Body' => [ $alerter->fill_in( PACKAGE => 'FS::alerter::_template' ) ], - ); - $!=0; - $message->smtpsend( Host => $smtpmachine ) - or $message->smtpsend( Host => $smtpmachine, Debug => 1 ) - or die "Can't send expiration email: $!"; - - } elsif ( ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list ) { - push @body, sprintf(qq{%5d %-32.32s %4s %10s %12s %12s}, - $custnum, - $first . " " . $last . " " . $company, - $payby, - $paydate, - $daytime, - $night); - } - } - } -} - -# Now I need to send EMAIL -if (scalar(@body)) { - my $message = new Mail::Internet ( - 'Header' => $header, - 'Body' => [ (@body) ], - ); - $!=0; - $message->smtpsend( Host => $smtpmachine ) - or $message->smtpsend( Host => $smtpmachine, Debug => 1 ) - or die "can't send alerter failure email to $failure_recipient". - " via server $smtpmachine with SMTP: $!"; -} - -# subroutines -sub untaint_argv { - foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV - $ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal argument \"$ARGV[$_]\""; - $ARGV[$_]=$1; - } -} - -sub usage { - die "Usage:\n\n freeside-expiration-alerter user\n"; -} - -=head1 NAME - -freeside-expiration-alerter - Emails notifications of credit card expirations. - -=head1 SYNOPSIS - - freeside-expiration-alerter user - -=head1 DESCRIPTION - -Emails customers notice that their credit card or other billing arrangement -is about to expire. Usually run as a cron job. - -user: From the mapsecrets file - see config.html from the base documentation - -=head1 BUGS - -Yes..... Use at your own risk. No guarantees or warrantees of any -kind apply to this program. Parts of this program are hacked from -other GNU licensed software created mainly by Ivan Kohler. - -This is released under the GNU Public License. See www.gnu.org -for more information regarding this license. - -=head1 SEE ALSO - -L<FS::cust_main>, config.html from the base documentation - -=head1 AUTHOR - -Jeff Finucane <jeff@cmh.net> - -=cut - - diff --git a/FS/bin/freeside-fetch b/FS/bin/freeside-fetch deleted file mode 100755 index 89a4f29af..000000000 --- a/FS/bin/freeside-fetch +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use LWP::UserAgent; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearchs); -use FS::Misc qw(send_email); - -my $user = shift or die &usage; -my $employeelist = shift or die &usage; -my $url = shift or die &usage; -adminsuidsetup $user; - -my @employees = split ',', $employeelist; - -foreach my $employee (@employees) { - - $employee =~ /^(\w+)$/; - - my $access_user = qsearchs( 'access_user', { 'username' => $1 } ); - unless ($access_user) { - warn "Can't find employee $employee... skipping"; - next; - } - - my $email_address = $access_user->option('email_address'); - unless ($email_address) { - warn "No email address for $employee... skipping"; - next; - } - - no warnings 'redefine'; - local *LWP::UserAgent::get_basic_credentials = sub { - return ($access_user->username, $access_user->_password); - }; - - my $ua = new LWP::UserAgent; - $ua->agent("FreesideFetcher/0.1 " . $ua->agent); - - my $req = new HTTP::Request GET => $url; - my $res = $ua->request($req); - - my %options = ( 'from' => $email_address, - 'to' => $email_address, - 'subject' => 'subject', - 'body' => $res->content, - ); - - $options{'content-type'} = $res->content_type - if $res->content_type; - $options{'content-encoding'} = $res->content_encoding - if $res->content_encoding; - - if ($res->is_success) { - send_email %options; - }else{ - warn "fetching $url failed for $employee: " . $res->status_line; - } -} - -sub usage { - die "Usage:\n\n freeside-fetch user employee[,employee ...] url\n\n"; -} - -=head1 NAME - -freeside-fetch - Send a freeside page to a list of employees. - -=head1 SYNOPSIS - - freeside-fetch user employee[,employee ...] url - -=head1 DESCRIPTION - - Fetches a web page specified by url as if employee and emails it to - employee. Useful when run out of cron to send freeside web pages. - - user: From the mapsecrets file - a user with access to the freeside database - - employee: the username of an employee to receive the emailed page. May be a comma separated list - - url: the web page to be received - -=head1 BUGS - - Can leak employee usernames and passwords if requested to access inappropriate urls. - -=cut - diff --git a/FS/bin/freeside-history-requeue b/FS/bin/freeside-history-requeue deleted file mode 100755 index 77a4332a3..000000000 --- a/FS/bin/freeside-history-requeue +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw($opt_j $opt_d); -use Getopt::Std; -use Date::Parse; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs); -use FS::queue; - -getopts('j:d'); - -my $user = shift or die &usage; -adminsuidsetup $user; - -my $start = shift or die &usage; -my $end = shift or die &usage; - -$start = str2time($start) unless $start =~ /^(\d+)$/; -$end = str2time($end) unless $end =~ /^(\d+)$/; - -my $extra_sql = "AND history_date >= $start AND history_date <= $end"; - -my $hashref = { 'history_action' => 'insert' }; - -$hashref->{'job'} = $opt_j if $opt_j; - -my @h_queue = qsearch({ - 'table' => 'h_queue', - 'hashref' => $hashref, - 'extra_sql' => $extra_sql, -}); - -my $num = 0; - -foreach my $h_queue (@h_queue) { - - my @queue_args = qsearch({ - 'table' => 'h_queue_arg', - 'hashref' => { 'history_action' => 'insert', - 'jobnum' => $h_queue->jobnum, - }, - 'order_by' => 'argnum', - }); - - my @args = map { - my $arg = $_->arg; - $arg =~ s/^db\.suicidegirls\.com$/sg-account/; - $arg; - } @queue_args; - - my $queue = new FS::queue { - map { $_ => $h_queue->$_() } - qw( job _date status statustext svcnum ) - }; - - if ( $opt_d ) { #dry run - print "requeueing job: ". join(' ', @args). "\n"; - my $error = $queue->check; - die "error requeueing job ". $h_queue->jobnum. ": $error" if $error; - } else { - print "requeueing job: ". join(' ', @args). "\n"; - my $error = $queue->insert(@args); - #warn "error requeueing job ". $h_queue->jobnum. ": $error\n" if $error; - print "error requeueing job ". $h_queue->jobnum. ": $error\n" if $error; - } - - $num++; - -} - -print "requeued $num jobs\n"; - -sub usage { - die "Usage:\n\n freeside-history-requeue user start_timestamp end_timestamp\n"; -} - -=head1 NAME - -freeside-history-requeue - Command line tool to re-trigger export jobs for existing services - -=head1 SYNOPSIS - - freeside-history-requeue [ -j job ] [ -d ] user start_timestamp end_timestamp - -=head1 DESCRIPTION - - Re-queues all queued jobs for the specified time period. - - -j: specifies that only jobs with this job string are re-queued. - - -d: dry run - -=head1 SEE ALSO - -L<freeside-reexport>, L<freeside-sqlradius-reset>, L<FS::part_export> - -=cut - -1; diff --git a/FS/bin/freeside-init-config b/FS/bin/freeside-init-config deleted file mode 100755 index fe4729c40..000000000 --- a/FS/bin/freeside-init-config +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw($opt_u $opt_f $opt_v); -use Getopt::Std; -use FS::UID qw(adminsuidsetup checkeuid dbh); -use FS::CurrentUser; -use FS::Record qw(qsearch); -use FS::Conf; - - -die "Not running uid freeside!" unless checkeuid(); - -getopts("u:vf"); -my $dir = shift or die &usage; - -$FS::CurrentUser::upgrade_hack = 1; -$FS::UID::AutoCommit = 0; -$FS::UID::callback_hack = 1; -adminsuidsetup $opt_u; #$user; - -$|=1; - -if (!scalar(qsearch('conf', {})) || $opt_f) { - my $error = FS::Conf::init_config($dir); - if ($error) { - warn "CONFIGURATION INITIALIZATION FAILED\n"; - dbh->rollback or die dbh->errstr; - die $error if $error; - } -} - -warn "Freeside database initialized - committing transaction\n" if $opt_v; - -dbh->commit or die dbh->errstr; -dbh->disconnect or die dbh->errstr; - -warn "Configuration initialization committed successfully\n" if $opt_v; - -sub usage { - die "Usage:\n freeside-init-config [ -v ] [ -f ] directory\n" - # [ -u user ] for devel/multi-db installs -} - -1; diff --git a/FS/bin/freeside-monthly b/FS/bin/freeside-monthly deleted file mode 100755 index 1e41b780e..000000000 --- a/FS/bin/freeside-monthly +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Getopt::Std; -use FS::UID qw(adminsuidsetup); - -&untaint_argv; #what it sounds like (eww) -#use vars qw($opt_d $opt_v $opt_p $opt_a $opt_s $opt_y); -use vars qw(%opt); -getopts("p:a:d:vsy:", \%opt); - -my $user = shift or die &usage; -adminsuidsetup $user; - -use FS::Cron::bill qw(bill); -bill(%opt, 'check_freq'=>'1m' ); - -### -# subroutines -### - -sub untaint_argv { - foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV - #$ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\""; - # Date::Parse - $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\""; - $ARGV[$_]=$1; - } -} - -sub usage { - die "Usage:\n\n freeside-monthly [ -d 'date' ] user [ custnum custnum ... ]\n"; -} - -### -# documentation -### - -=head1 NAME - -freeside-monthly - Run monthly billing and invoice collection events. - -=head1 SYNOPSIS - - freeside-monthly [ -d 'date' ] [ -y days ] [ -p 'payby' ] [ -a agentnum ] [ -s ] [ -v ] user [ custnum custnum ... ] - -=head1 DESCRIPTION - -Bills customers and runs invoice collection events, for the alternate monthly -event chain. If you have defined monthly event checks, should be run from -crontab monthly. - -Bills customers. Searches for customers who are due for billing and calls -the bill and collect methods of a cust_main object. See L<FS::cust_main>. - - -d: Pretend it's 'date'. Date is in any format Date::Parse is happy with, - but be careful. - - -y: In addition to -d, which specifies an absolute date, the -y switch - specifies an offset, in days. For example, "-y 15" would increment the - "pretend date" 15 days from whatever was specified by the -d switch - (or now, if no -d switch was given). - - -p: Only process customers with the specified payby (I<CARD>, I<DCRD>, I<CHEK>, I<DCHK>, I<BILL>, I<COMP>, I<LECB>) - - -a: Only process customers with the specified agentnum - - -s: re-charge setup fees - - -v: enable debugging - -user: From the mapsecrets file - see config.html from the base documentation - -custnum: if one or more customer numbers are specified, only bills those -customers. Otherwise, bills all customers. - -=head1 NOTE - -In most cases, you would use freeside-daily only and not freeside-monthly. -freeside-monthly would only be used in cases where you have events that can -only be run once each month, for example, batching invoices to a third-party -print/mail provider. - -=head1 BUGS - -=head1 SEE ALSO - -L<freeside-daily>, L<FS::cust_main>, config.html from the base documentation - -=cut - diff --git a/FS/bin/freeside-prepaidd b/FS/bin/freeside-prepaidd deleted file mode 100644 index a68db3913..000000000 --- a/FS/bin/freeside-prepaidd +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use FS::Daemon qw(daemonize1 drop_root logfile daemonize2 sigint sigterm); -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs); -use FS::cust_pkg; - -my $user = shift or die &usage; - -#daemonize1('freeside-sprepaidd', $user); #keep unique pid files w/multi installs -daemonize1('freeside-prepaidd'); - -drop_root(); - -adminsuidsetup($user); - -logfile( "/usr/local/etc/freeside/prepaidd-log.". $FS::UID::datasrc ); - -daemonize2(); - -#-- - -while (1) { - - foreach my $cust_pkg ( - qsearch( { - 'select' => 'cust_pkg.*, part_pkg.plan', - 'table' => 'cust_pkg', - 'addl_from' => 'LEFT JOIN part_pkg USING ( pkgpart )', - #'hashref' => { 'plan' => 'prepaid' },#should check part_pkg::is_prepaid - #'extra_sql' => "AND bill < ". time. - 'hashref' => {}, - 'extra_sql' => "WHERE plan = 'prepaid' AND bill < ". time. - " AND bill IS NOT NULL". - " AND ( susp IS NULL OR susp = 0)". - " AND ( cancel IS NULL OR cancel = 0)" - } ) - ) { - - my $work_cust_pkg = $cust_pkg; - - my $cust_main = $cust_pkg->cust_main; - if ( $cust_main->total_unapplied_payments > 0 - or $cust_main->total_credited > 0 - ) - { - #this needs a flag to say only do the prepaid packages... - # and only try em if the renewal price matches.. but this will do for now - my $b_error = $cust_main->bill; - if ( $b_error ) { - warn "Error billing customer #". $cust_main->custnum; - next; - } - $b_error = $cust_main->apply_payments_and_credits; - if ( $b_error ) { - warn "Error applying payments&credits, customer #". $cust_main->custnum; - next; - } - - $work_cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $work_cust_pkg->pkgnum } ); - - next - if $cust_main->balance <= 0 - and $work_cust_pkg->bill >= time; - } - - my $action = $work_cust_pkg->part_pkg->option('recur_action') || 'suspend'; - - my $error = $work_cust_pkg->$action(); - - warn "Error ${action}ing package ". $work_cust_pkg->pkgnum. - " for custnum ". $work_cust_pkg->custnum. - ": $error\n" - if $error; - } - - die "exiting" if sigterm() || sigint(); - sleep 5; - -} - -#-- - -sub usage { - die "Usage:\n\n freeside-prepaidd user\n"; -} - -=head1 NAME - -freeside-prepaidd - Real-time daemon for prepaid packages - -=head1 SYNOPSIS - - freeside-prepaidd - -=head1 DESCRIPTION - -Runs continuously and suspends or cancels any prepaid customer packages which -have passed their renewal date (next bill date). - -=head1 SEE ALSO - -=cut - -1; diff --git a/FS/bin/freeside-prune-applications b/FS/bin/freeside-prune-applications deleted file mode 100755 index d2b6efe0b..000000000 --- a/FS/bin/freeside-prune-applications +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw($opt_d $opt_q $opt_v); # $opt_n instead of $opt_d? -use vars qw($DEBUG $DRY_RUN); -use Getopt::Std; -use FS::UID qw(adminsuidsetup checkeuid); -use FS::Misc::prune qw(prune_applications); - -die "Not running uid freeside!" unless checkeuid(); - -getopts("dq"); - -$DEBUG = !$opt_q; -#$DEBUG = $opt_v; - -$DRY_RUN = $opt_d; - -my $user = shift or die &usage; -my $dbh = adminsuidsetup($user); - -my $hashref = {}; - -$hashref->{dry_run} = 1 if $DRY_RUN; -$hashref->{debug} = 1 if $DEBUG; - -print join "\n", prune_applications($hashref); -print "\n" if $DRY_RUN; - -$dbh->commit or die $dbh->errstr; - -### - -sub usage { - die "Usage:\n freeside-prune-applications [ -d ] [ -q | -v ] user\n"; -} - -=head1 NAME - -freeside-prune-applications - Removes stray applications of credit, payment to - bills, refunds, etc. - -=head1 SYNOPSIS - - freeside-prune-applications [ -d ] [ -q | -v ] - -=head1 DESCRIPTION - -Reads your existing database schema and updates it to match the current schema, -adding any columns or tables necessary. - - [ -d ]: Dry run; display affected records (to STDOUT) only, but do not - remove them. - - [ -q ]: Run quietly. This may become the default at some point. - - [ -v ]: Run verbosely, sending debugging information to STDERR. This is the - current default. - -=head1 SEE ALSO - -=cut - diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued deleted file mode 100644 index 93d735d1a..000000000 --- a/FS/bin/freeside-queued +++ /dev/null @@ -1,250 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw( $DEBUG $kids $max_kids %kids ); -use POSIX qw(:sys_wait_h); -use IO::File; -use FS::UID qw(adminsuidsetup forksuidsetup driver_name dbh myconnect); -use FS::Daemon qw(daemonize1 drop_root logfile daemonize2 sigint sigterm); -use FS::Record qw(qsearch qsearchs); -use FS::queue; -use FS::queue_depend; - -# no autoloading for non-FS classes... -use Net::SSH 0.07; - -$DEBUG = 0; - -$max_kids = '10'; #guess it should be a config file... -$kids = 0; - -my $user = shift or die &usage; - -warn "starting daemonization (forking)\n" if $DEBUG; -#daemonize1('freeside-queued',$user); #to keep pid files unique w/multi installs -daemonize1('freeside-queued'); - -warn "dropping privledges\n" if $DEBUG; -drop_root(); - - -$ENV{HOME} = (getpwuid($>))[7]; #for ssh - -warn "connecting to database\n" if $DEBUG; -$@ = 'not connected'; -while ( $@ ) { - eval { adminsuidsetup $user; }; - if ( $@ ) { - warn $@; - warn "sleeping for reconnect...\n"; - sleep 5; - } -} - -logfile( "%%%FREESIDE_LOG%%%/queuelog.". $FS::UID::datasrc ); - -warn "completing daemonization (detaching))\n" if $DEBUG; -daemonize2(); - -#-- - -my $warnkids=0; -while (1) { - - &reap_kids; - #prevent runaway forking - if ( $kids >= $max_kids ) { - warn "WARNING: maximum $kids children reached\n" unless $warnkids++; - &reap_kids; - sleep 1; #waiting for signals is cheap - next; - } - $warnkids=0; - - unless ( dbh && dbh->ping ) { - warn "WARNING: connection to database lost, reconnecting...\n"; - - eval { $FS::UID::dbh = myconnect; }; - - unless ( !$@ && dbh && dbh->ping ) { - warn "WARNING: still no connection to database, sleeping for retry...\n"; - sleep 10; - next; - } else { - warn "WARNING: reconnected to database\n"; - } - } - - #my($job, $ljob); - #{ - # my $oldAutoCommit = $FS::UID::AutoCommit; - # local $FS::UID::AutoCommit = 0; - $FS::UID::AutoCommit = 0; - - #assuming mysql 4.1 w/subqueries now - #my $nodepend = driver_name eq 'mysql' - # ? '' - # : 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'. - # ' WHERE queue_depend.jobnum = queue.jobnum ) '; - my $nodepend = 'AND 0 = ( SELECT COUNT(*) FROM queue_depend'. - ' WHERE queue_depend.jobnum = queue.jobnum ) '; - - my $job = qsearchs( - 'queue', - { 'status' => 'new' }, - '', - driver_name eq 'mysql' - ? "$nodepend ORDER BY jobnum LIMIT 1 FOR UPDATE" - : "$nodepend ORDER BY jobnum FOR UPDATE LIMIT 1" - ) or do { - # if $oldAutoCommit { - dbh->commit or do { - warn "WARNING: database error, closing connection: ". dbh->errstr; - undef $FS::UID::dbh; - next; - }; - # } - sleep 5; #connecting to db is expensive - next; - }; - - #assuming mysql 4.1 w/subqueries now - #if ( driver_name eq 'mysql' - # && qsearch('queue_depend', { 'jobnum' => $job->jobnum } ) ) { - # dbh->commit or die dbh->errstr; #if $oldAutoCommit; - # sleep 5; #would be better if mysql could do everything in query above - # next; - #} - - my %hash = $job->hash; - $hash{'status'} = 'locked'; - my $ljob = new FS::queue ( \%hash ); - my $error = $ljob->replace($job); - if ( $error ) { - warn "WARNING: database error locking job, closing connection: ". - dbh->errstr; - undef $FS::UID::dbh; - next; - } - - # if $oldAutoCommit { - dbh->commit or do { - warn "WARNING: database error, closing connection: ". dbh->errstr; - undef $FS::UID::dbh; - next; - }; - # } - - $FS::UID::AutoCommit = 1; - #} - - my @args = $ljob->args; - splice @args, 0, 1, $ljob if $args[0] eq '_JOB'; - - defined( my $pid = fork ) or do { - warn "WARNING: can't fork: $!\n"; - my %hash = $job->hash; - $hash{'status'} = 'failed'; - $hash{'statustext'} = "[freeside-queued] can't fork: $!"; - my $ljob = new FS::queue ( \%hash ); - my $error = $ljob->replace($job); - die $error if $error; - next; #don't increment the kid counter - }; - - if ( $pid ) { - $kids++; - $kids{$pid} = 1; - } else { #kid time - - #get new db handle - $FS::UID::dbh->{InactiveDestroy} = 1; - - forksuidsetup($user); - - #auto-use classes... - #if ( $ljob->job =~ /(FS::part_export::\w+)::/ ) { - if ( $ljob->job =~ /(FS::part_export::\w+)::/ - || $ljob->job =~ /(FS::\w+)::/ - ) - { - my $class = $1; - eval "use $class;"; - if ( $@ ) { - warn "job use $class failed"; - my %hash = $ljob->hash; - $hash{'status'} = 'failed'; - $hash{'statustext'} = $@; - my $fjob = new FS::queue( \%hash ); - my $error = $fjob->replace($ljob); - die $error if $error; - exit; #end-of-kid - }; - } - - my $eval = "&". $ljob->job. '(@args);'; - warn 'running "&'. $ljob->job. '('. join(', ', @args). ")\n" if $DEBUG; - eval $eval; #throw away return value? suppose so - if ( $@ ) { - warn "job $eval failed"; - my %hash = $ljob->hash; - $hash{'status'} = 'failed'; - $hash{'statustext'} = $@; - my $fjob = new FS::queue( \%hash ); - my $error = $fjob->replace($ljob); - die $error if $error; - } else { - $ljob->delete; - } - - exit; - #end-of-kid - } - -} continue { - if ( sigterm() ) { - warn "received TERM signal; exiting\n"; - exit; - } - if ( sigint() ) { - warn "received INT signal; exiting\n"; - exit; - } -} - -sub usage { - die "Usage:\n\n freeside-queued user\n"; -} - -sub reap_kids { - foreach my $pid ( keys %kids ) { - my $kid = waitpid($pid, WNOHANG); - if ( $kid > 0 ) { - $kids--; - delete $kids{$kid}; - } - } -} - -=head1 NAME - -freeside-queued - Job queue daemon - -=head1 SYNOPSIS - - freeside-queued user - -=head1 DESCRIPTION - -Job queue daemon. Should be running at all times. - -user: from the mapsecrets file - see config.html from the base documentation - -=head1 VERSION - -=head1 BUGS - -=head1 SEE ALSO - -=cut - diff --git a/FS/bin/freeside-radgroup b/FS/bin/freeside-radgroup deleted file mode 100644 index ed85626d2..000000000 --- a/FS/bin/freeside-radgroup +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::cust_svc; -use FS::svc_acct; - -&untaint_argv; #what it sounds like (eww) - -my($user, $action, $groupname, $svcpart) = @ARGV; - -adminsuidsetup $user; - -my @svc_acct = map { $_->svc_x } qsearch('cust_svc', { svcpart => $svcpart } ); - -if ( lc($action) eq 'add' ) { - foreach my $svc_acct ( @svc_acct ) { - my @groups = $svc_acct->radius_groups; - next if grep { $_ eq $groupname } @groups; - push @groups, $groupname; - my %hash = $svc_acct->hash; - $hash{usergroup} = \@groups; - my $new = new FS::svc_acct \%hash; - my $error = $new->replace($svc_acct); - die $error if $error; - } -} else { - die &usage; -} - -# subroutines - -sub untaint_argv { - foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV - $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\""; - $ARGV[$_]=$1; - } -} - -sub usage { - die "Usage:\n\n freeside-radgroup user action groupname svcpart\n"; -} - -=head1 NAME - -freeside-radgroup - Command line utility to manipulate radius groups - -=head1 SYNOPSIS - - freeside-addgroup user action groupname svcpart - -=head1 DESCRIPTION - - B<user> is a freeside user as added with freeside-adduser. - - B<command> is the action to take. Available actions are: I<add> - - B<groupname> is the group to add (or remove, etc.) - - B<svcpart> specifies which accounts will be updated. - -=head1 EXAMPLES - -freeside-radgroup freesideuser add groupname 3 - -Adds I<groupname> to all accounts with service definition 3. - -=head1 BUGS - -=head1 SEE ALSO - -L<freeside-adduser>, L<FS::svc_acct>, L<FS::part_svc> - -=cut - diff --git a/FS/bin/freeside-reexport b/FS/bin/freeside-reexport deleted file mode 100644 index 54af9dd80..000000000 --- a/FS/bin/freeside-reexport +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw($opt_s $opt_u $opt_p); -use Getopt::Std; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs); -use FS::part_export; -use FS::svc_acct; -use FS::cust_svc; - -my $user = shift or die &usage; -adminsuidsetup $user; - -my $export_x = shift or die &usage; -my @part_export; -if ( $export_x =~ /^(\d+)$/ ) { - @part_export = qsearchs('part_export', { exportnum=>$1 } ) - or die "exportnum $export_x not found\n"; -} else { - @part_export = qsearch('part_export', { exporttype=>$export_x } ) - or die "no exports of type $export_x found\n"; -} - -getopts('s:u:p:'); - -my @svc_x = (); -if ( $opt_s ) { - my $cust_svc = qsearchs('cust_svc', { svcnum=>$opt_s } ) - or die "svcnum $opt_s not found\n"; - push @svc_x, $cust_svc->svc_x; -} elsif ( $opt_u ) { - my $svc_x = qsearchs('svc_acct', { username=>$opt_u } ) - or die "username $opt_u not found\n"; - push @svc_x, $svc_x; -} elsif ( $opt_p ) { - push @svc_x, map { $_->svc_x } qsearch('cust_svc', { svcpart=>$opt_p } ); - die "no services with svcpart $opt_p found\n" unless @svc_x; -} - -foreach my $part_export ( @part_export ) { - foreach my $svc_x ( @svc_x ) { - my $error = $part_export->export_insert($svc_x); - die $error if $error; - } -} - - -sub usage { - die "Usage:\n\n freeside-reexport user exportnum|exporttype [ -s svcnum | -u username | -p svcpart ]\n"; -} - -=head1 NAME - -freeside-reexport - Command line tool to re-trigger export jobs for existing services - -=head1 SYNOPSIS - - freeside-reexport user exportnum|exporttype [ -s svcnum | -u username | -p svcpart ] - -=head1 DESCRIPTION - - Re-queues the export job for the specified exportnum or exporttype(s) and - specified service (selected by svcnum or username). - -=head1 SEE ALSO - -L<freeside-sqlradius-reset>, L<FS::part_export> - -=cut - diff --git a/FS/bin/freeside-reset-fixed b/FS/bin/freeside-reset-fixed deleted file mode 100755 index 5829d441b..000000000 --- a/FS/bin/freeside-reset-fixed +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw($opt_p $opt_s $opt_r); -use Getopt::Std; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs); -use FS::cust_svc; -use FS::svc_Common; - -getopts('p:s:r'); - -my $user = shift or die &usage; -adminsuidsetup $user; - -die &usage - if ($opt_p && $opt_s); - -$FS::Record::nowarn_identical = 1; -$FS::svc_Common::noexport_hack = 1 - unless $opt_r; - -my @svc_x = (); -if ( $opt_s ) { - $opt_s =~ /^(\d+)$/ or die "invalid svcnum"; - my $cust_svc = qsearchs('cust_svc', { svcnum => $1 } ) - or die "svcnum $opt_s not found\n"; - push @svc_x, $cust_svc->svc_x; -} elsif ( $opt_p ) { - $opt_p =~ /^(\d+)$/ or die "invalid svcpart"; - push @svc_x, map { $_->svc_x } qsearch('cust_svc', { svcpart => $1 } ); - die "no services with svcpart $opt_p found\n" unless @svc_x; -} else { - push @svc_x, map { $_->svc_x } qsearch('cust_svc', {} ); - die "no services found\n" unless @svc_x; -} - -foreach my $svc_x ( @svc_x ) { - my $result = $svc_x->setfixed; - die $result unless ref($result); - my $error = $svc_x->replace - if $svc_x->modified; - die $error if $error; -} - - -sub usage { - die "Usage:\n\n freeside-reset-fixed user [ -s svcnum | -p svcpart ] [ -r ]\n"; -} - -=head1 NAME - -freeside-reset-fixed - Command line tool to set the fixed columns for existing services - -=head1 SYNOPSIS - - freeside-reset-fixed user [ -s svcnum | -p svcpart ] [ -r ] - -=head1 DESCRIPTION - - Resets the fixed columns for the specified service part or service number. - Re-exports the service if -r is specified. - -=head1 SEE ALSO - -L<freeside-reexport>, L<FS::part_svc> - -=cut - diff --git a/FS/bin/freeside-selfservice-server b/FS/bin/freeside-selfservice-server deleted file mode 100644 index 2087e7130..000000000 --- a/FS/bin/freeside-selfservice-server +++ /dev/null @@ -1,240 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw( $FREESIDE_LOG $FREESIDE_LOCK ); -use vars qw( $Debug %kids $kids $max_kids $ssh_pid %old_ssh_pid $keepalives ); -use subs qw( lock_write unlock_write myshutdown usage ); -use Fcntl qw(:flock); -use POSIX qw(:sys_wait_h); -use IO::Handle; -use IO::Select; -use IO::File; -use Storable 2.09 qw(nstore_fd fd_retrieve); -use Net::SSH qw(sshopen2); -use FS::Daemon qw(daemonize1 drop_root logfile daemonize2 sigint sigterm); -use FS::UID qw(adminsuidsetup forksuidsetup); -use FS::ClientAPI; -use FS::ClientAPI_SessionCache; - -use FS::Conf; -use FS::cust_svc; - -$FREESIDE_LOG = "%%%FREESIDE_LOG%%%"; -$FREESIDE_LOCK = "%%%FREESIDE_LOCK%%%"; - -$Debug = 1; # 2 will turn on more logging - # 3 will log packet contents, including passwords - -$max_kids = '10'; #? -$keepalives = 0; #let clientd turn it on, so we don't barf on old ones -$kids = 0; - -my $user = shift or die &usage; -my $machine = shift or die &usage; -my $tag = scalar(@ARGV) ? shift : ''; - -my $lock_file = "$FREESIDE_LOCK/selfservice.$machine.writelock"; - -# to keep pid files unique w/multi machines (and installs!) -# $FS::UID::datasrc not posible -daemonize1("freeside-selfservice-server","$user.$machine"); - -#false laziness w/Daemon::drop_root -my $freeside_gid = scalar(getgrnam('freeside')) - or die "can't find freeside group\n"; - -open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!"; -chown $FS::UID::freeside_uid, $freeside_gid, $lock_file; - -drop_root(); - -$ENV{HOME} = (getpwuid($>))[7]; #for ssh - -adminsuidsetup $user; - -#logfile("/usr/local/etc/freeside/selfservice.". $FS::UID::datasrc); #MACHINE -logfile("$FREESIDE_LOG/selfservice.$machine.log"); - -daemonize2(); - -my $conf = new FS::Conf; -if ( $conf->exists('selfservice-ignore_quantity') ) { - $FS::cust_svc::ignore_quantity = 1; - $FS::cust_svc::ignore_quantity = 1; #now it is used twice. -} - -#clear the signup info cache so an "/etc/init.d/freeside restart" will pick -#up new info... (better as a callback in Signup.pm?) -my $cache = new FS::ClientAPI_SessionCache( { - 'namespace' => 'FS::ClientAPI::Signup', -} ); -$cache->remove('signup_info_cache'); - -my $clientd = "/usr/local/sbin/freeside-selfservice-clientd"; #better name? - -my $warnkids=0; -while (1) { - my($writer,$reader,$error) = (new IO::Handle, new IO::Handle, new IO::Handle); - warn "connecting to $machine\n" if $Debug; - - $ssh_pid = sshopen2($machine,$reader,$writer,$clientd,$tag); - -# nstore_fd(\*writer, {'hi'=>'there'}); - - warn "entering main loop\n" if $Debug; - my $undisp = 0; - my $keepalive_count = 0; - my $s = IO::Select->new( $reader ); - while (1) { - - &reap_kids; - - warn "waiting for packet from client\n" if $Debug && !$undisp; - $undisp = 1; - my @handles = $s->can_read(5); - unless ( @handles ) { - myshutdown() if sigint() || sigterm(); - if ( $keepalives && $keepalive_count++ > 10 ) { - $keepalive_count = 0; - lock_write; - nstore_fd( { _token => '_keepalive' }, $writer ); - unlock_write; - } - next; - } - - $undisp = 0; - - warn "receiving packet from client\n" if $Debug; - - my $packet = eval { fd_retrieve($reader); }; - if ( $@ ) { - warn "Storable error receiving packet from client". - " (assuming lost connection): $@\n" - if $Debug; - if ( $ssh_pid ) { - warn "sending TERM signal to ssh process $ssh_pid\n" if $Debug; - kill 'TERM', $ssh_pid; - $old_ssh_pid{$ssh_pid} = 1; - $ssh_pid = 0; - } - last; - } - warn "packet received\n". - join('', map { " $_=>$packet->{$_}\n" } keys %$packet ) - if $Debug > 2; - - if ( $packet->{_packet} eq '_enable_keepalive' ) { - warn "enabling keep alives\n" if $Debug; - $keepalives=1; - next; - } - - #prevent runaway forking - my $warnkids = 0; - while ( $kids >= $max_kids ) { - warn "WARNING: maximum $kids children reached\n" unless $warnkids++; - &reap_kids; - sleep 1; - } - - warn "forking child\n" if $Debug; - defined( my $pid = fork ) or die "can't fork: $!"; - if ( $pid ) { - $kids++; - $kids{$pid} = 1; - warn "child $pid spawned\n" if $Debug; - } else { #kid time - - ##get new db handle - $FS::UID::dbh->{InactiveDestroy} = 1; - forksuidsetup($user); - - #get db handle - #adminsuidsetup($user); - - my $type = $packet->{_packet}; - warn "calling $type handler\n" if $Debug; - my $rv = eval { FS::ClientAPI->dispatch($type, $packet); }; - if ( $@ ) { - warn my $error = "WARNING: error dispatching $type: $@"; - $rv = { _error => $error }; - } - $rv->{_token} = $packet->{_token}; #identifier - - open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!"; - lock_write; - warn "sending response\n" if $Debug; - nstore_fd($rv, $writer) or die "FATAL: can't send response: $!"; - $writer->flush or die "FATAL: can't flush: $!"; - unlock_write; - - warn "child exiting\n" if $Debug; - exit; #end-of-kid - } - - } - - myshutdown if sigint() || sigterm(); - warn "connection lost, reconnecting\n" if $Debug; - sleep 3; - -} - -### -# utility subroutines -### - -sub reap_kids { - #warn "reaping kids\n"; - foreach my $pid ( keys %kids ) { - my $kid = waitpid($pid, WNOHANG); - if ( $kid > 0 ) { - $kids--; - delete $kids{$kid}; - } - } - - foreach my $pid ( keys %old_ssh_pid ) { - waitpid($pid, WNOHANG) and delete $old_ssh_pid{$pid}; - } - #warn "done reaping\n"; -} - -sub myshutdown { - &reap_kids; - my $wait = 12; #wait up to 1 minute - while ( $kids > 0 && $wait-- ) { - warn "waiting for $kids children to terminate"; - sleep 5; - &reap_kids; - } - warn "abandoning $kids children" if $kids; - kill 'TERM', $ssh_pid if $ssh_pid; - die "exiting"; -} - -sub lock_write { - warn "locking $lock_file mutex for write to write stream\n" if $Debug > 1; - - #broken on freebsd? - #flock($writer, LOCK_EX) or die "FATAL: can't lock write stream: $!"; - - flock(LOCKFILE, LOCK_EX) or die "FATAL: can't lock $lock_file: $!"; - -} - -sub unlock_write { - warn "unlocking $lock_file mutex\n" if $Debug > 1; - - #broken on freebsd? - #flock($writer, LOCK_UN) or die "WARNING: can't release write lock: $!"; - - flock(LOCKFILE, LOCK_UN) or die "FATAL: can't unlock $lock_file: $!"; - -} - -sub usage { - die "Usage:\n\n freeside-selfservice-server user machine\n"; -} - diff --git a/FS/bin/freeside-setinvoice b/FS/bin/freeside-setinvoice deleted file mode 100644 index 708e2fa30..000000000 --- a/FS/bin/freeside-setinvoice +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/perl - -use strict; -use FS::UID qw(adminsuidsetup); -use FS::Conf; -use FS::Record qw(qsearch qsearchs); -use FS::cust_main; -use FS::svc_acct; - -&untaint_argv; #what it sounds like (eww) -my $user = shift or die &usage; - -adminsuidsetup $user; - -foreach my $cust_main ( - grep { ! scalar($_->invoicing_list) } - qsearch( 'cust_main', {} ) -) { - my @dest; - my @cust_pkg = $cust_main->ncancelled_pkgs; - foreach my $cust_pkg ( @cust_pkg ) { - foreach my $cust_svc ( $cust_pkg->cust_svc ) { - my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $cust_svc->svcnum } ); - push @dest, $svc_acct->svcnum if $svc_acct; - } - } - push @dest, 'POST' unless @dest; - $cust_main->invoicing_list(\@dest); -} - -sub untaint_argv { - foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV - $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\""; - $ARGV[$_]=$1; - } -} - -sub usage { - die "Usage:\n\n freeside-setinvoice user\n"; -} - - diff --git a/FS/bin/freeside-setup b/FS/bin/freeside-setup deleted file mode 100755 index 9b16d78cb..000000000 --- a/FS/bin/freeside-setup +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/perl -Tw - -#to delay loading dbdef until we're ready -BEGIN { $FS::Schema::setup_hack = 1; } - -use strict; -use vars qw($opt_u $opt_d $opt_v); -use Getopt::Std; -use FS::UID qw(adminsuidsetup datasrc checkeuid getsecrets); -use FS::CurrentUser; -use FS::Schema qw( dbdef_dist reload_dbdef ); -use FS::Record qw( qsearch ); -#use FS::raddb; -use FS::Setup qw(create_initial_data); -use FS::Conf; - -die "Not running uid freeside!" unless checkeuid(); - -#my %attrib2db = -# map { lc($FS::raddb::attrib{$_}) => $_ } keys %FS::raddb::attrib; - -getopts("u:vd:"); -my $config_dir = shift || 'conf' ; -$config_dir =~ /^([\w.:=]+)$/ - or die "unacceptable configuration directory name"; -$config_dir = $1; - -getsecrets($opt_u); - -#needs to match FS::Record -my($dbdef_file) = "%%%FREESIDE_CONF%%%/dbdef.". datasrc; - -### - -my $username_len = 32; - -#print "\n\n", <<END, ":"; -#Freeside tracks the RADIUS User-Name, check attribute Password and -#reply attribute Framed-IP-Address for each user. You can specify additional -#check and reply attributes (or you can add them later with the -#fs-radius-add-check and fs-radius-add-reply programs). -# -#First enter any additional RADIUS check attributes you need to track for each -#user, separated by whitespace. -#END -#my @check_attributes = map { $attrib2db{lc($_)} or die "unknown attribute $_"; } -# split(" ",&getvalue); -# -#print "\n\n", <<END, ":"; -#Now enter any additional reply attributes you need to track for each user, -#separated by whitespace. -#END -#my @attributes = map { $attrib2db{lc($_)} or die "unknown attribute $_"; } -# split(" ",&getvalue); -# -#print "\n\n", <<END, ":"; -#Do you wish to enable the tracking of a second, separate shipping/service -#address? -#END -#my $ship = &_yesno; -# -#sub getvalue { -# my($x)=scalar(<STDIN>); -# chop $x; -# $x; -#} -# -#sub _yesno { -# print " [y/N]:"; -# my $x = scalar(<STDIN>); -# $x =~ /^y/i; -#} - -#my @check_attributes = (); #add later -#my @attributes = (); #add later -#my $ship = $opt_s; - -### -# create a dbdef object from the old data structure -### - -my $dbdef = dbdef_dist(datasrc); - -#important -$dbdef->save($dbdef_file); -&FS::Schema::reload_dbdef($dbdef_file); - -### -# create 'em -### - -$FS::CurrentUser::upgrade_hack = 1; -$FS::UID::callback_hack = 1; -my $dbh = adminsuidsetup $opt_u; #$user; -$FS::UID::callback_hack = 0; - -#create tables -$|=1; - -foreach my $statement ( $dbdef->sql($dbh) ) { - $dbh->do( $statement ) - or die "CREATE error: ". $dbh->errstr. "\ndoing statement: $statement"; -} - -#now go back and reverse engineer the db -#so we pick up the correct column DEFAULTs for #oidless inserts -dbdef_create($dbh, $dbdef_file); -delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload -reload_dbdef($dbdef_file); - -warn "Freeside schema initialized - commiting transaction\n" if $opt_v; - -$dbh->commit or die $dbh->errstr; -$dbh->disconnect or die $dbh->errstr; - -warn "Database schema committed successfully\n" if $opt_v; - -warn "Initializing freeside configuration\n" if $opt_v; -$FS::UID::callback_hack = 1; -$dbh = adminsuidsetup $opt_u; -$FS::UID::callback_hack = 0; -if (!scalar(qsearch('conf', {}))) { - my $error = FS::Conf::init_config($config_dir); - if ($error) { - $dbh->rollback or die $dbh->errstr; - die $error; - } -} - -warn "Freeside configuration initialized - commiting transaction\n" if $opt_v; - -$dbh->commit or die $dbh->errstr; -$dbh->disconnect or die $dbh->errstr; - -warn "Freeside configuration committed successfully\n" if $opt_v; - -$dbh = adminsuidsetup $opt_u; -create_initial_data('domain' => $opt_d); - -warn "Freeside database initialized - commiting transaction\n" if $opt_v; - -$dbh->commit or die $dbh->errstr; -$dbh->disconnect or die $dbh->errstr; - -warn "Database initialization committed successfully\n" if $opt_v; - -sub dbdef_create { # reverse engineer the schema from the DB and save to file - my( $dbh, $file ) = @_; - my $dbdef = new_native DBIx::DBSchema $dbh; - $dbdef->save($file); -} - -sub usage { - die "Usage:\n freeside-setup -d domain.name [ -v ] [ config/dir ]\n" - # [ -u user ] for devel/multi-db installs -} - -1; - - diff --git a/FS/bin/freeside-sqlradius-dedup-group b/FS/bin/freeside-sqlradius-dedup-group deleted file mode 100755 index 441d50f62..000000000 --- a/FS/bin/freeside-sqlradius-dedup-group +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw( %seen @dups ); -use Getopt::Std; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs); -use FS::part_export; - -my %allowed_types = map { $_ => 1 } qw ( sqlradius sqlradius_withdomain ); - -my $user = shift or die &usage; -adminsuidsetup $user; - -my $export_x = shift; -my @part_export; -if ( !defined($export_x) ) { - @part_export = qsearch('part_export', {} ); -} elsif ( $export_x =~ /^(\d+)$/ ) { - @part_export = qsearchs('part_export', { exportnum=>$1 } ) - or die "exportnum $export_x not found\n"; -} else { - @part_export = qsearch('part_export', { exporttype=>$export_x } ) - or die "no exports of type $export_x found\n"; -} - -@part_export = grep { $allowed_types{$_->exporttype} } @part_export - or die "No sqlradius exports specified."; - -foreach my $part_export ( @part_export ) { - my $dbh = DBI->connect( map $part_export->option($_), - qw ( datasrc username password ) ); - - my $sth = $dbh->prepare("SELECT id,username,groupname - FROM usergroup ORDER By username,groupname,id") - or die $dbh->errstr; - $sth->execute() or die $sth->errstr; - - @dups = (); %seen = (); - while (my $row = $sth->fetchrow_arrayref ) { - my ($userid, $username, $groupname) = @$row; - unless ( exists($seen{$username}{$groupname}) ) { - $seen{$username}{$groupname} = $userid; - next; - } - push @dups, $userid; - } - - $sth = $dbh->prepare("DELETE FROM usergroup WHERE id = ?") - or die $dbh->errstr; - - foreach (@dups) { - $sth->execute($_) or die $sth->errstr; - } - -} - - -sub usage { - die "Usage:\n\n freeside-sqlradius-dedup-group user [ exportnum|exporttype ]\n"; -} - -=head1 NAME - -freeside-sqlradius-dedup-group - Command line tool to eliminate duplicate usergroup entries from radius tables - -=head1 SYNOPSIS - - freeside-sqlradius-dedup-group user [ exportnum|exporttype ] - -=head1 DESCRIPTION - - Removes all but one username groupname pair when duplicate entries exist - for the specified export (selected by exportnum or exporttype) or all - exports if none are specified. - -=head1 SEE ALSO - -L<freeside-reexport>, L<freeside-sqlradius-reset>, L<FS::part_export> - -=cut - diff --git a/FS/bin/freeside-sqlradius-radacctd b/FS/bin/freeside-sqlradius-radacctd deleted file mode 100644 index 83fd4bfd1..000000000 --- a/FS/bin/freeside-sqlradius-radacctd +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw( @part_export ); -use subs qw(myshutdown); -use POSIX qw(:sys_wait_h); -#use IO::File; -use FS::Daemon qw(daemonize1 drop_root logfile daemonize2 sigint sigterm); -use FS::UID qw(adminsuidsetup); #forksuidsetup driver_name dbh myconnect); -use FS::Record qw(qsearch); # qsearchs); -use FS::part_export; -#use FS::svc_acct; -#use FS::cust_svc; - -my $user = shift or die &usage; - -#daemonize1('freeside-sqlradius-radacctd', $user); #keep unique pid files w/multi installs -daemonize1('freeside-sqlradius-radacctd'); - -drop_root(); - -#$ENV{HOME} = (getpwuid($>))[7]; #for ssh - -adminsuidsetup $user; - -logfile( "%%%FREESIDE_LOG%%%/sqlradius-radacctd-log.". $FS::UID::datasrc ); - -daemonize2(); - -#-- - -#don't just look for ->can('usage_sessions'), we're sqlradius-specific -# (radiator is supposed to be setup with a radacct table) - -@part_export = - qsearch('part_export', { 'exporttype' => 'sqlradius' } ); -push @part_export, - qsearch('part_export', { 'exporttype' => 'sqlradius_withdomain' } ); -push @part_export, - qsearch('part_export', { 'exporttype' => 'radiator' } ); - -@part_export = grep { ! $_->option('ignore_accounting') } @part_export; - -die "no sqlradius, sqlradius_withdomain or radiator exports without". - " ignore_accounting" - unless @part_export; - -while (1) { - - #fork off one kid per export (machine) - # _>{'_radacct_kid'} is an evil kludge - foreach my $part_export ( grep ! $_->{'_radacct_kid'}, @part_export ) { - - defined( my $pid = fork ) or do { - warn "WARNING: can't fork to spawn child for ". $part_export->machine; - next; - }; - - if ( $pid ) { - $part_export->{'_radacct_kid'} = $pid; - warn "child $pid spawned for ". $part_export->machine; - } else { #kid time - - adminsuidsetup($user); #get our own db handle - - until ( sigint || sigterm ) { - $part_export->update_svc_acct(); - sleep 1; - } - - warn "child for ". $part_export->machine. " done"; - exit; - - } #eo kid - - } - - #reap up any kids that died... - &reap_kids; - - myshutdown() if sigterm() || sigint(); - - sleep 5; -} - -#-- - -sub myshutdown { - &reap_kids; - - #kill all the kids - kill 'TERM', $_ foreach grep $_, map $_->{'_radacct_kid'}, @part_export; - - my $wait = 12; #wait up to 1 minute - while ( ( grep $_->{'_radacct_kid'}, @part_export ) && $wait-- ) { - warn "waiting for children to terminate"; - sleep 5; - &reap_kids; - } - warn "abandoning children" if grep $_->{'_radacct_kid'}, @part_export; - die "exiting"; -} - -sub reap_kids { - #warn "reaping kids\n"; - foreach my $part_export ( grep $_->{'_radacct_kid'}, @part_export ) { - my $pid = $part_export->{'_radacct_kid'}; - my $kid = waitpid($pid, WNOHANG); - if ( $kid > 0 ) { - $part_export->{'_radacct_kid'} = ''; - } - } - #warn "done reaping\n"; -} - -sub usage { - die "Usage:\n\n freeside-sqlradius-radacctd user\n"; -} - -=head1 NAME - -freeside-sqlradius-radacctd - Real-time radacct import daemon - -=head1 SYNOPSIS - - freeside-sqlradius-radacctd username - -=head1 DESCRIPTION - -Imports records from an the SQL radacct tables of all sqlradius, -sqlradius_withdomain and radiator exports (except those with the -ignore_accounting flag) and updates the svc_acct.seconds for each account. -Runs as a daemon and updates the database in real-time. - -B<username> is a username added by freeside-adduser. - -=head1 RADIUS DATABASE CHANGES - -ALTER TABLE radacct ADD COLUMN FreesideStatus varchar(32) NULL; - -If you want to ignore the existing accountg records, also do: - -UPDATE radacct SET FreesideStatus = 'done' WHERE FreesideStatus IS NULL; - -=head1 SEE ALSO - -=cut - -1; - diff --git a/FS/bin/freeside-sqlradius-reset b/FS/bin/freeside-sqlradius-reset deleted file mode 100755 index 94fa68a06..000000000 --- a/FS/bin/freeside-sqlradius-reset +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw( $opt_n ); -use Getopt::Std; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs); -use FS::part_export; -use FS::svc_acct; -use FS::cust_svc; - -getopts("n"); - -my $user = shift or die &usage; -adminsuidsetup $user; - -#my $machine = shift or die &usage; - -my @exports = (); -if ( @ARGV ) { - foreach my $exportnum ( @ARGV ) { - foreach my $exporttype (qw( sqlradius sqlradius_withdomain )) { - push @exports, qsearch('part_export', { exportnum => $exportnum, - exporttype => $exporttype, } ); - } - } - } else { - @exports = qsearch('part_export', { exporttype=>'sqlradius' } ); - push @exports, qsearch('part_export', { exporttype=>'sqlradius_withdomain' } ); -} - -unless ( $opt_n ) { - foreach my $export ( @exports ) { - my $icradius_dbh = DBI->connect( - map { $export->option($_) } qw( datasrc username password ) - ) or die $DBI::errstr; - for my $table (qw( radcheck radreply usergroup )) { - my $sth = $icradius_dbh->prepare("DELETE FROM $table"); - $sth->execute or die "Can't reset $table table: ". $sth->errstr; - } - $icradius_dbh->disconnect; - } -} - -foreach my $export ( @exports ) { - - #my @svcparts = map { $_->svcpart } $export->export_svc; - my $overlimit_groups = $export->option('overlimit_groups'); - - my @svc_acct = - map { qsearchs('svc_acct', { 'svcnum' => $_->svcnum } ) } - map { qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) } - grep { qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) } - $export->export_svc; - - foreach my $svc_acct ( @svc_acct ) { - - $svc_acct->check; #set any fixed usergroup so it'll export even if all - #svc_acct records don't have the group yet - - if ($overlimit_groups && $svc_acct->overlimit) { - $svc_acct->usergroup( &{ $svc_acct->_fieldhandlers->{'usergroup'} } - ($svc_acct, $overlimit_groups) - ); - } - - #false laziness with FS::svc_acct::insert (like it matters) - my $error = $export->export_insert($svc_acct); - die $error if $error; - - } -} - -sub usage { - die "Usage:\n\n freeside-sqlradius-reset user [ exportnum, ... ]\n"; -} - -=head1 NAME - -freeside-sqlradius-reset - Command line interface to reset and recreate RADIUS SQL tables - -=head1 SYNOPSIS - - freeside-sqlradius-reset [ -n ] username [ EXPORTNUM, ... ] - -=head1 DESCRIPTION - -Deletes the radcheck, radreply and usergroup tables and repopulates them from -the Freeside database, for the specified exports, or, if no exports are -specified, for all sqlradius and sqlradius_withdomain exports. - -B<username> is a username added by freeside-adduser. - -The B<-n> option, if supplied, supresses the deletion of the existing data in -the tables. - -=head1 SEE ALSO - -L<freeside-reexport>, L<FS::part_export>, L<FS::part_export::sqlradius> - -=cut - - - diff --git a/FS/bin/freeside-sqlradius-seconds b/FS/bin/freeside-sqlradius-seconds deleted file mode 100644 index 9999cbbf3..000000000 --- a/FS/bin/freeside-sqlradius-seconds +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use Date::Parse; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearchs); -use FS::svc_acct; - -my $fs_user = shift or die &usage; -adminsuidsetup( $fs_user ); - -my $target_user = shift or die &usage; -my $start = shift or die &usage; -$start = str2time($start); -my $stop = scalar(@ARGV) ? str2time(shift) : time; - -my $svc_acct = qsearchs( 'svc_acct', { 'username' => $target_user } ); -die "username $target_user not found\n" unless $svc_acct; - -print $svc_acct->seconds_since_sqlradacct( $start, $stop ). "\n"; - -sub usage { - die "Usage:\n\n freeside-sqlradius-seconds freeside_username target_username start_date stop_date\n"; -} - - -=head1 NAME - -freeside-sqlradius-seconds - Command line time-online tool - -=head1 SYNOPSIS - - freeside-sqlradius-seconds freeside_username target_username start_date [ stop_date ] - -=head1 DESCRIPTION - -Returns the number of seconds the specified username has been online between -start_date (inclusive) and stop_date (exclusive). -See L<FS::svc_acct/seconds_since_sqlradacct> - -B<freeside_username> is a username added by freeside-adduser. -B<target_username> is the username of the user account to query. -B<start_date> and B<stop_date> are in any format Date::Parse is happy with. -B<stop_date> defaults to now if not specified. - -=head1 BUGS - -Selection of the account in question is rather simplistic in that -B<target_username> doesn't necessarily identify a unique account (and wouldn't -even if a domain was specified), and no sqlradius export is checked for. - -=head1 SEE ALSO - -L<FS::svc_acct/seconds_since_sqlradacct> - -=cut - -1; diff --git a/FS/bin/freeside-sqlradius-set-lastlog b/FS/bin/freeside-sqlradius-set-lastlog deleted file mode 100755 index ad8563076..000000000 --- a/FS/bin/freeside-sqlradius-set-lastlog +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Getopt::Std; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs str2time_sql); -use FS::Conf; -use FS::part_export; -use FS::svc_acct; - -my %allowed_types = map { $_ => 1 } qw ( sqlradius sqlradius_withdomain ); -my $conf = new FS::Conf; - -my $user = shift or die &usage; -adminsuidsetup $user; - -my $export_x = shift; -my @part_export; -if ( !defined($export_x) ) { - @part_export = qsearch('part_export', {} ); -} elsif ( $export_x =~ /^(\d+)$/ ) { - @part_export = qsearchs('part_export', { exportnum=>$1 } ) - or die "exportnum $export_x not found\n"; -} else { - @part_export = qsearch('part_export', { exporttype=>$export_x } ) - or die "no exports of type $export_x found\n"; -} - -# gross almost false laziness with FS::part_export::sqlradius::update_svc_acct -@part_export = grep { ! $_->option('ignore_accounting') } - grep { $allowed_types{$_->exporttype} } - @part_export - or die "No sqlradius exports specified."; - - -foreach my $part_export ( @part_export ) { - my $dbh = DBI->connect( map $part_export->option($_), - qw ( datasrc username password ) ); - - my $str2time = str2time_sql( $dbh->{Driver}->{Name} ); - my $group = "UserName"; - $group .= ",Realm" - if ( ref($part_export) =~ /withdomain/ ); - - my $sth = $dbh->prepare("SELECT UserName, Realm, - $str2time max(AcctStartTime)), - $str2time max(AcctStopTime)) - FROM radacct - WHERE AcctStartTime != 0 AND AcctStopTime != 0 - GROUP BY $group") - or die $dbh->errstr; - $sth->execute() or die $sth->errstr; - - while (my $row = $sth->fetchrow_arrayref ) { - my ($username, $realm, $start, $stop) = @$row; - - $username = lc($username) unless $conf->exists('username-uppercase'); - my $extra_sql = ''; - if ( ref($part_export) =~ /withdomain/ ) { - $extra_sql = " And '$realm' = ( SELECT domain FROM svc_domain - WHERE svc_domain.svcnum = svc_acct.domsvc ) "; - } - - my $svc_acct = qsearchs( 'svc_acct', - { 'username' => $username }, - '', - $extra_sql, - ); - if ($svc_acct) { - $svc_acct->last_login($start) - if $start && (!$svc_acct->last_login || $start > $svc_acct->last_login); - $svc_acct->last_logout($stop) - if $stop && (!$svc_acct->last_logout || $stop > $svc_acct->last_logout); - } - } -} - - -sub usage { - die "Usage:\n\n freeside-sqlradius-set_lastlog user [ exportnum|exporttype ]\n"; -} - -=head1 NAME - -freeside-sqlradius-set-lastlog - Command line tool to set last_login and last_logout values from radius tables - -=head1 SYNOPSIS - - freeside-sqlradius-set-lastlog user [ exportnum|exporttype ] - -=head1 DESCRIPTION - - Sets the last_login and last_logout columns of each svc_acct based on - data in the radacct table for the specified export (selected by exportnum - or exporttype) or all exports if none are specified. - -=head1 SEE ALSO - -L<freeside-sqlradius-radacctd>, L<FS::part_export> - -=cut - diff --git a/FS/bin/freeside-upgrade b/FS/bin/freeside-upgrade deleted file mode 100755 index d143d9206..000000000 --- a/FS/bin/freeside-upgrade +++ /dev/null @@ -1,175 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw($opt_d $opt_q $opt_v); -use vars qw($DEBUG $DRY_RUN); -use Getopt::Std; -use DBIx::DBSchema 0.31; -use FS::UID qw(adminsuidsetup checkeuid datasrc ); #getsecrets); -use FS::CurrentUser; -use FS::Schema qw( dbdef dbdef_dist reload_dbdef ); -use FS::Misc::prune qw(prune_applications); -use FS::Conf; -use FS::Record qw(qsearch); -use FS::Upgrade qw(upgrade); - -die "Not running uid freeside!" unless checkeuid(); - -getopts("dq"); - -$DEBUG = !$opt_q; -#$DEBUG = $opt_v; - -$DRY_RUN = $opt_d; - -my $user = shift or die &usage; -$FS::CurrentUser::upgrade_hack = 1; -$FS::UID::callback_hack = 1; -my $dbh = adminsuidsetup($user); -$FS::UID::callback_hack = 0; - -#needs to match FS::Schema... -my $dbdef_file = "%%%FREESIDE_CONF%%%/dbdef.". datasrc; - -dbdef_create($dbh, $dbdef_file); - -delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload -reload_dbdef($dbdef_file); - -$DBIx::DBSchema::DEBUG = $DEBUG; -$DBIx::DBSchema::Table::DEBUG = $DEBUG; -$DBIx::DBSchema::Index::DEBUG = $DEBUG; - -my @bugfix = (); - -if (dbdef->table('cust_main')->column('agent_custid')) { - push @bugfix, - "UPDATE cust_main SET agent_custid = NULL where agent_custid = ''"; - - push @bugfix, - "UPDATE h_cust_main SET agent_custid = NULL where agent_custid = ''" - if (dbdef->table('h_cust_main')); -} - -#you should have run fs-migrate-part_svc ages ago, when you upgraded -#from 1.3 to 1.4... if not, it needs to be hooked into -upgrade here or -#you'll lose all the part_svc settings it migrates to part_svc_column - -if ( $DRY_RUN ) { - print - join(";\n", @bugfix, dbdef->sql_update_schema( dbdef_dist(datasrc), $dbh ) ). ";\n"; - exit; -} else { - foreach my $statement ( @bugfix ) { - $dbh->do( $statement ) - or die "Error: ". $dbh->errstr. "\n executing: $statement"; - } - - dbdef->update_schema( dbdef_dist(datasrc), $dbh ); -} - -my $hashref = {}; -$hashref->{dry_run} = 1 if $DRY_RUN; -$hashref->{debug} = 1 if $DEBUG; -print join "\n", prune_applications($hashref); -print "\n" if $DRY_RUN; - -if ( $dbh->{Driver}->{Name} =~ /^mysql/i ) { - - my $sth = $dbh->prepare( - "SELECT COUNT(*) FROM duplicate_lock WHERE lockname = 'svc_acct'" - ) or die $dbh->errstr; - - $sth->execute or die $sth->errstr; - - unless ( $sth->fetchrow_arrayref->[0] ) { - - $sth = $dbh->prepare( - "INSERT INTO duplicate_lock ( lockname ) VALUES ( 'svc_acct' )" - ) or die $dbh->errstr; - - $sth->execute or die $sth->errstr; - - } -} - -$dbh->commit or die $dbh->errstr; - -dbdef_create($dbh, $dbdef_file); - -$dbh->disconnect or die $dbh->errstr; - -delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload -$FS::UID::AutoCommit = 0; -$FS::UID::callback_hack = 1; -$dbh = adminsuidsetup($user); -$FS::UID::callback_hack = 0; -unless ( $DRY_RUN ) { - my $dir = "%%%FREESIDE_CONF%%%/conf.". datasrc; - if (!scalar(qsearch('conf', {}))) { - my $error = FS::Conf::init_config($dir); - if ($error) { - warn "CONFIGURATION UPGRADE FAILED\n"; - $dbh->rollback or die $dbh->errstr; - die $error; - } - } -} -$dbh->commit or die $dbh->errstr; -$dbh->disconnect or die $dbh->errstr; - -$dbh = adminsuidsetup($user); - -upgrade() - unless $DRY_RUN; - -$dbh->commit or die $dbh->errstr; -$dbh->disconnect or die $dbh->errstr; - -### - -sub dbdef_create { # reverse engineer the schema from the DB and save to file - my( $dbh, $file ) = @_; - my $dbdef = new_native DBIx::DBSchema $dbh; - $dbdef->save($file); -} - -sub usage { - die "Usage:\n freeside-upgrade [ -d ] [ -q | -v ] user\n"; -} - -=head1 NAME - -freeside-upgrade - Upgrades database schema for new freeside verisons. - -=head1 SYNOPSIS - - freeside-upgrade [ -d ] [ -q | -v ] - -=head1 DESCRIPTION - -Reads your existing database schema and updates it to match the current schema, -adding any columns or tables necessary. - -Also performs other upgrade functions: - -=over 4 - -=item Calls FS:: Misc::prune::prune_applications (probably unnecessary every upgrade, but simply won't find any records to change) - -=item If necessary, moves your configuration information from the filesystem in /usr/local/etc/freeside/conf.<datasrc> to the database. - -=back - - [ -d ]: Dry run; output SQL statements (to STDOUT) only, but do not execute - them. - - [ -q ]: Run quietly. This may become the default at some point. - - [ -v ]: Run verbosely, sending debugging information to STDERR. This is the - current default. - -=head1 SEE ALSO - -=cut - diff --git a/FS/t/AccessRight.t b/FS/t/AccessRight.t deleted file mode 100644 index a96684224..000000000 --- a/FS/t/AccessRight.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::AccessRight; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/CGI.t b/FS/t/CGI.t deleted file mode 100644 index 1b4e238b6..000000000 --- a/FS/t/CGI.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::CGI; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/ClientAPI.t b/FS/t/ClientAPI.t deleted file mode 100644 index 973d8dada..000000000 --- a/FS/t/ClientAPI.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::ClientAPI; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/ClientAPI_SessionCache.t b/FS/t/ClientAPI_SessionCache.t deleted file mode 100644 index 605803eef..000000000 --- a/FS/t/ClientAPI_SessionCache.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::ClientAPI_SessionCache; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Conf.t b/FS/t/Conf.t deleted file mode 100644 index a9f7653b3..000000000 --- a/FS/t/Conf.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Conf; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/ConfDefaults.t b/FS/t/ConfDefaults.t deleted file mode 100644 index 433555adb..000000000 --- a/FS/t/ConfDefaults.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::ConfDefaults; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/ConfItem.t b/FS/t/ConfItem.t deleted file mode 100644 index c7932d7e3..000000000 --- a/FS/t/ConfItem.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::ConfItem; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Cron-backup.t b/FS/t/Cron-backup.t deleted file mode 100644 index 847d41aed..000000000 --- a/FS/t/Cron-backup.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Cron::backup; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Cron-bill.t b/FS/t/Cron-bill.t deleted file mode 100644 index 42c7b4f9e..000000000 --- a/FS/t/Cron-bill.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Cron::bill; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Cron-vacuum.t b/FS/t/Cron-vacuum.t deleted file mode 100644 index eaa6b762a..000000000 --- a/FS/t/Cron-vacuum.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Cron::vacuum; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Daemon.t b/FS/t/Daemon.t deleted file mode 100644 index 24893fd94..000000000 --- a/FS/t/Daemon.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Daemon; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/InitHandler.t b/FS/t/InitHandler.t deleted file mode 100644 index 0ce60c833..000000000 --- a/FS/t/InitHandler.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::InitHandler; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Misc.t b/FS/t/Misc.t deleted file mode 100644 index cc7751ab6..000000000 --- a/FS/t/Misc.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Misc; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Msgcat.t b/FS/t/Msgcat.t deleted file mode 100644 index 29e71b33c..000000000 --- a/FS/t/Msgcat.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Msgcat; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Record.t b/FS/t/Record.t deleted file mode 100644 index 00de1eda3..000000000 --- a/FS/t/Record.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Record; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Report-Table-Monthly.t b/FS/t/Report-Table-Monthly.t deleted file mode 100644 index 6ff365d1c..000000000 --- a/FS/t/Report-Table-Monthly.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Report::Table::Monthly; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Report-Table.t b/FS/t/Report-Table.t deleted file mode 100644 index 866d4981e..000000000 --- a/FS/t/Report-Table.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Report::Table; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/Report.t b/FS/t/Report.t deleted file mode 100644 index 76d6ea489..000000000 --- a/FS/t/Report.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::Report; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/SearchCache.t b/FS/t/SearchCache.t deleted file mode 100644 index 3c26f3528..000000000 --- a/FS/t/SearchCache.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::SearchCache; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/UID.t b/FS/t/UID.t deleted file mode 100644 index 9f7da4e89..000000000 --- a/FS/t/UID.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::UID; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/access_group.t b/FS/t/access_group.t deleted file mode 100644 index be141099b..000000000 --- a/FS/t/access_group.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::access_group; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/access_groupagent.t b/FS/t/access_groupagent.t deleted file mode 100644 index aff1f2524..000000000 --- a/FS/t/access_groupagent.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::access_groupagent; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/access_right.t b/FS/t/access_right.t deleted file mode 100644 index 66cd362e8..000000000 --- a/FS/t/access_right.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::access_right; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/access_user.t b/FS/t/access_user.t deleted file mode 100644 index cab679d8d..000000000 --- a/FS/t/access_user.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::access_user; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/access_user_pref.t b/FS/t/access_user_pref.t deleted file mode 100644 index 282209830..000000000 --- a/FS/t/access_user_pref.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::access_user_pref; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/access_usergroup.t b/FS/t/access_usergroup.t deleted file mode 100644 index 383a7cf9c..000000000 --- a/FS/t/access_usergroup.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::access_usergroup; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/acct_rt_transaction.t b/FS/t/acct_rt_transaction.t deleted file mode 100644 index 552bdc84a..000000000 --- a/FS/t/acct_rt_transaction.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::acct_rt_transaction; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/acct_snarf.t b/FS/t/acct_snarf.t deleted file mode 100644 index 642760f20..000000000 --- a/FS/t/acct_snarf.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::acct_snarf; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/agent.t b/FS/t/agent.t deleted file mode 100644 index 769cce254..000000000 --- a/FS/t/agent.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::agent; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/agent_payment_gateway.t b/FS/t/agent_payment_gateway.t deleted file mode 100644 index af78a9a27..000000000 --- a/FS/t/agent_payment_gateway.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::agent_payment_gateway; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/agent_type.t b/FS/t/agent_type.t deleted file mode 100644 index 99c66a151..000000000 --- a/FS/t/agent_type.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::agent_type; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/banned_pay.t b/FS/t/banned_pay.t deleted file mode 100644 index bef1ff25f..000000000 --- a/FS/t/banned_pay.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::banned_pay; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cdr.t b/FS/t/cdr.t deleted file mode 100644 index 1d1f3eb4e..000000000 --- a/FS/t/cdr.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cdr; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cdr_calltype.t b/FS/t/cdr_calltype.t deleted file mode 100644 index d4e13943e..000000000 --- a/FS/t/cdr_calltype.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cdr_calltype; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cdr_carrier.t b/FS/t/cdr_carrier.t deleted file mode 100644 index 1e2161558..000000000 --- a/FS/t/cdr_carrier.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cdr_carrier; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cdr_type.t b/FS/t/cdr_type.t deleted file mode 100644 index 9dff15a32..000000000 --- a/FS/t/cdr_type.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cdr_type; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cdr_upstream_rate.t b/FS/t/cdr_upstream_rate.t deleted file mode 100644 index f9458c527..000000000 --- a/FS/t/cdr_upstream_rate.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cdr_upstream_rate; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/clientapi_session.t b/FS/t/clientapi_session.t deleted file mode 100644 index a6414c3d8..000000000 --- a/FS/t/clientapi_session.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::clientapi_session; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/clientapi_session_field.t b/FS/t/clientapi_session_field.t deleted file mode 100644 index a9d4fa91a..000000000 --- a/FS/t/clientapi_session_field.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::clientapi_session_field; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/conf.t b/FS/t/conf.t deleted file mode 100644 index 5e52079f6..000000000 --- a/FS/t/conf.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::conf; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_bill.t b/FS/t/cust_bill.t deleted file mode 100644 index b43f08ee2..000000000 --- a/FS/t/cust_bill.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_bill; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_bill_ApplicationCommon.t b/FS/t/cust_bill_ApplicationCommon.t deleted file mode 100644 index fa03d3420..000000000 --- a/FS/t/cust_bill_ApplicationCommon.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_bill_ApplicationCommon; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_bill_event.t b/FS/t/cust_bill_event.t deleted file mode 100644 index 0e2ca3e24..000000000 --- a/FS/t/cust_bill_event.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_bill_event; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_bill_pay.t b/FS/t/cust_bill_pay.t deleted file mode 100644 index 001eed01e..000000000 --- a/FS/t/cust_bill_pay.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_bill_pay; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_bill_pay_batch.t b/FS/t/cust_bill_pay_batch.t deleted file mode 100644 index bc3a8277c..000000000 --- a/FS/t/cust_bill_pay_batch.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_bill_pay_batch; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_bill_pay_pkg.t b/FS/t/cust_bill_pay_pkg.t deleted file mode 100644 index b8fcddb41..000000000 --- a/FS/t/cust_bill_pay_pkg.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_bill_pay_pkg; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_bill_pkg.t b/FS/t/cust_bill_pkg.t deleted file mode 100644 index 0e45bdb0c..000000000 --- a/FS/t/cust_bill_pkg.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_bill_pkg; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_bill_pkg_detail.t b/FS/t/cust_bill_pkg_detail.t deleted file mode 100644 index ea6e3d125..000000000 --- a/FS/t/cust_bill_pkg_detail.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_bill_pkg_detail; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_credit.t b/FS/t/cust_credit.t deleted file mode 100644 index cddf75cff..000000000 --- a/FS/t/cust_credit.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_credit; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_credit_bill.t b/FS/t/cust_credit_bill.t deleted file mode 100644 index 0ef54c3f1..000000000 --- a/FS/t/cust_credit_bill.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_credit_bill; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_credit_bill_pkg.t b/FS/t/cust_credit_bill_pkg.t deleted file mode 100644 index 4eb84c327..000000000 --- a/FS/t/cust_credit_bill_pkg.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_credit_bill_pkg; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_credit_refund.t b/FS/t/cust_credit_refund.t deleted file mode 100644 index 6b2b599f3..000000000 --- a/FS/t/cust_credit_refund.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_credit_refund; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_event.t b/FS/t/cust_event.t deleted file mode 100644 index 7812c5b6c..000000000 --- a/FS/t/cust_event.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_event; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_main.t b/FS/t/cust_main.t deleted file mode 100644 index b0ffbdb32..000000000 --- a/FS/t/cust_main.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_main; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_main_Mixin.t b/FS/t/cust_main_Mixin.t deleted file mode 100644 index c8b929117..000000000 --- a/FS/t/cust_main_Mixin.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_main_Mixin; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_main_county.t b/FS/t/cust_main_county.t deleted file mode 100644 index dd6119911..000000000 --- a/FS/t/cust_main_county.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_main_county; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_main_invoice.t b/FS/t/cust_main_invoice.t deleted file mode 100644 index 9661620e0..000000000 --- a/FS/t/cust_main_invoice.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_main_invoice; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_main_note.t b/FS/t/cust_main_note.t deleted file mode 100644 index 41a7bac0b..000000000 --- a/FS/t/cust_main_note.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_main_note; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_pay.t b/FS/t/cust_pay.t deleted file mode 100644 index f6d0b7571..000000000 --- a/FS/t/cust_pay.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_pay; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_pay_batch.t b/FS/t/cust_pay_batch.t deleted file mode 100644 index 02b572c15..000000000 --- a/FS/t/cust_pay_batch.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_pay_batch; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_pay_pending.t b/FS/t/cust_pay_pending.t deleted file mode 100644 index 9ab2b5e1a..000000000 --- a/FS/t/cust_pay_pending.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_pay_pending; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_pay_refund.t b/FS/t/cust_pay_refund.t deleted file mode 100644 index 85d6c2316..000000000 --- a/FS/t/cust_pay_refund.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_pay_refund; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_pay_void.t b/FS/t/cust_pay_void.t deleted file mode 100644 index dca9becd1..000000000 --- a/FS/t/cust_pay_void.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_pay_void; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_pkg.t b/FS/t/cust_pkg.t deleted file mode 100644 index c6a686061..000000000 --- a/FS/t/cust_pkg.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_pkg; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_pkg_option.t b/FS/t/cust_pkg_option.t deleted file mode 100644 index 12314bf80..000000000 --- a/FS/t/cust_pkg_option.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_pkg_option; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_pkg_reason.t b/FS/t/cust_pkg_reason.t deleted file mode 100644 index 2f0a4fa4f..000000000 --- a/FS/t/cust_pkg_reason.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_pkg_reason; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_refund.t b/FS/t/cust_refund.t deleted file mode 100644 index 91583da28..000000000 --- a/FS/t/cust_refund.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_refund; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_svc.t b/FS/t/cust_svc.t deleted file mode 100644 index 267d731db..000000000 --- a/FS/t/cust_svc.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_svc; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_tax_exempt.t b/FS/t/cust_tax_exempt.t deleted file mode 100644 index 8af13e3aa..000000000 --- a/FS/t/cust_tax_exempt.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_tax_exempt; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/cust_tax_exempt_pkg.t b/FS/t/cust_tax_exempt_pkg.t deleted file mode 100644 index 099a0ce8a..000000000 --- a/FS/t/cust_tax_exempt_pkg.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::cust_tax_exempt_pkg; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/domain_record.t b/FS/t/domain_record.t deleted file mode 100644 index 794518ccf..000000000 --- a/FS/t/domain_record.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::domain_record; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/export_svc.t b/FS/t/export_svc.t deleted file mode 100644 index 773c5dea7..000000000 --- a/FS/t/export_svc.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::export_svc; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_Common.t b/FS/t/h_Common.t deleted file mode 100644 index 174bb99e6..000000000 --- a/FS/t/h_Common.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_Common; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_cust_bill.t b/FS/t/h_cust_bill.t deleted file mode 100644 index ceccb2a3d..000000000 --- a/FS/t/h_cust_bill.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_cust_bill; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_cust_credit.t b/FS/t/h_cust_credit.t deleted file mode 100644 index e20f4765a..000000000 --- a/FS/t/h_cust_credit.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_cust_credit; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_cust_pay.t b/FS/t/h_cust_pay.t deleted file mode 100644 index 6a3fe95ab..000000000 --- a/FS/t/h_cust_pay.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_cust_pay; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_cust_svc.t b/FS/t/h_cust_svc.t deleted file mode 100644 index a7dabbea0..000000000 --- a/FS/t/h_cust_svc.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_cust_svc; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_cust_tax_exempt.t b/FS/t/h_cust_tax_exempt.t deleted file mode 100644 index 432238aa5..000000000 --- a/FS/t/h_cust_tax_exempt.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_cust_tax_exempt; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_domain_record.t b/FS/t/h_domain_record.t deleted file mode 100644 index f48e72e9b..000000000 --- a/FS/t/h_domain_record.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_domain_record; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_svc_acct.t b/FS/t/h_svc_acct.t deleted file mode 100644 index 9c94d0894..000000000 --- a/FS/t/h_svc_acct.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_svc_acct; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_svc_broadband.t b/FS/t/h_svc_broadband.t deleted file mode 100644 index b8e5c7c82..000000000 --- a/FS/t/h_svc_broadband.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_svc_broadband; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_svc_domain.t b/FS/t/h_svc_domain.t deleted file mode 100644 index 87d2a09bd..000000000 --- a/FS/t/h_svc_domain.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_svc_domain; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_svc_external.t b/FS/t/h_svc_external.t deleted file mode 100644 index 5248f876d..000000000 --- a/FS/t/h_svc_external.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_svc_external; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_svc_forward.t b/FS/t/h_svc_forward.t deleted file mode 100644 index 64731d562..000000000 --- a/FS/t/h_svc_forward.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_svc_forward; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/h_svc_www.t b/FS/t/h_svc_www.t deleted file mode 100644 index 07558ce65..000000000 --- a/FS/t/h_svc_www.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::h_svc_www; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/inventory_class.t b/FS/t/inventory_class.t deleted file mode 100644 index 80b2fa210..000000000 --- a/FS/t/inventory_class.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::inventory_class; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/inventory_item.t b/FS/t/inventory_item.t deleted file mode 100644 index 8ce9d677c..000000000 --- a/FS/t/inventory_item.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::inventory_item; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/msgcat.t b/FS/t/msgcat.t deleted file mode 100644 index c38c63935..000000000 --- a/FS/t/msgcat.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::msgcat; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/nas.t b/FS/t/nas.t deleted file mode 100644 index 6f8ae36d2..000000000 --- a/FS/t/nas.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::nas; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/option_Common.t b/FS/t/option_Common.t deleted file mode 100644 index ad261415c..000000000 --- a/FS/t/option_Common.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::option_Common; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_bill_event.t b/FS/t/part_bill_event.t deleted file mode 100644 index 5626a9f97..000000000 --- a/FS/t/part_bill_event.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_bill_event; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_event-Action.t b/FS/t/part_event-Action.t deleted file mode 100644 index a6652776c..000000000 --- a/FS/t/part_event-Action.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_event::Action; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_event-Condition.t b/FS/t/part_event-Condition.t deleted file mode 100644 index c44a438fd..000000000 --- a/FS/t/part_event-Condition.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_event::Condition; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_event.t b/FS/t/part_event.t deleted file mode 100644 index 027b20cfc..000000000 --- a/FS/t/part_event.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_event; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_event_condition.t b/FS/t/part_event_condition.t deleted file mode 100644 index fa5a05cf3..000000000 --- a/FS/t/part_event_condition.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_event_condition; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_event_condition_option.t b/FS/t/part_event_condition_option.t deleted file mode 100644 index 492fc82ef..000000000 --- a/FS/t/part_event_condition_option.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_event_condition_option; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_event_condition_option_option.t b/FS/t/part_event_condition_option_option.t deleted file mode 100644 index f714011ad..000000000 --- a/FS/t/part_event_condition_option_option.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_event_condition_option_option; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_event_option.t b/FS/t/part_event_option.t deleted file mode 100644 index 546a78fd8..000000000 --- a/FS/t/part_event_option.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_event_option; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-acct_sql.t b/FS/t/part_export-acct_sql.t deleted file mode 100644 index 9eed47259..000000000 --- a/FS/t/part_export-acct_sql.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::acct_sql; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-apache.t b/FS/t/part_export-apache.t deleted file mode 100644 index b9995080f..000000000 --- a/FS/t/part_export-apache.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::apache; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-bind.t b/FS/t/part_export-bind.t deleted file mode 100644 index d0c96be40..000000000 --- a/FS/t/part_export-bind.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::bind; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-bind_slave.t b/FS/t/part_export-bind_slave.t deleted file mode 100644 index c6a038610..000000000 --- a/FS/t/part_export-bind_slave.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::bind_slave; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-bsdshell.t b/FS/t/part_export-bsdshell.t deleted file mode 100644 index eaf417a70..000000000 --- a/FS/t/part_export-bsdshell.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::bsdshell; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-communigate_pro.t b/FS/t/part_export-communigate_pro.t deleted file mode 100644 index 88b8b64e0..000000000 --- a/FS/t/part_export-communigate_pro.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::communigate_pro; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-communigate_pro_singledomain.t b/FS/t/part_export-communigate_pro_singledomain.t deleted file mode 100644 index 6f8a64e0f..000000000 --- a/FS/t/part_export-communigate_pro_singledomain.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::communigate_pro_singledomain; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-cp.t b/FS/t/part_export-cp.t deleted file mode 100644 index bbefa6c1b..000000000 --- a/FS/t/part_export-cp.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::cp; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-cyrus.t b/FS/t/part_export-cyrus.t deleted file mode 100644 index e0b3f350e..000000000 --- a/FS/t/part_export-cyrus.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::cyrus; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-domain_shellcommands.t b/FS/t/part_export-domain_shellcommands.t deleted file mode 100644 index a2a44fbfb..000000000 --- a/FS/t/part_export-domain_shellcommands.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::domain_shellcommands; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-forward_shellcommands.t b/FS/t/part_export-forward_shellcommands.t deleted file mode 100644 index 78ca68d10..000000000 --- a/FS/t/part_export-forward_shellcommands.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::forward_shellcommands; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-http.t b/FS/t/part_export-http.t deleted file mode 100644 index ea41b939f..000000000 --- a/FS/t/part_export-http.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::http; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-infostreet.t b/FS/t/part_export-infostreet.t deleted file mode 100644 index 1b3341825..000000000 --- a/FS/t/part_export-infostreet.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::infostreet; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-ldap.t b/FS/t/part_export-ldap.t deleted file mode 100644 index 826c3418d..000000000 --- a/FS/t/part_export-ldap.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::ldap; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-null.t b/FS/t/part_export-null.t deleted file mode 100644 index 055cdcee6..000000000 --- a/FS/t/part_export-null.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::null; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-passwdfile.t b/FS/t/part_export-passwdfile.t deleted file mode 100644 index 0f18f3044..000000000 --- a/FS/t/part_export-passwdfile.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::passwdfile; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-postfix.t b/FS/t/part_export-postfix.t deleted file mode 100644 index 9518caad6..000000000 --- a/FS/t/part_export-postfix.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::postfix; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-radiator.t b/FS/t/part_export-radiator.t deleted file mode 100644 index 546e9de30..000000000 --- a/FS/t/part_export-radiator.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::radiator; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-router.t b/FS/t/part_export-router.t deleted file mode 100644 index 54e4b63de..000000000 --- a/FS/t/part_export-router.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::router; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-shellcommands.t b/FS/t/part_export-shellcommands.t deleted file mode 100644 index 7bb47d3f8..000000000 --- a/FS/t/part_export-shellcommands.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::shellcommands; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-shellcommands_withdomain.t b/FS/t/part_export-shellcommands_withdomain.t deleted file mode 100644 index c0bd1bbb0..000000000 --- a/FS/t/part_export-shellcommands_withdomain.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::shellcommands_withdomain; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-sqlmail.t b/FS/t/part_export-sqlmail.t deleted file mode 100644 index b048a75a5..000000000 --- a/FS/t/part_export-sqlmail.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::sqlmail; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-sqlradius.t b/FS/t/part_export-sqlradius.t deleted file mode 100644 index 5fb23a5a6..000000000 --- a/FS/t/part_export-sqlradius.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::sqlradius; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-sqlradius_withdomain.t b/FS/t/part_export-sqlradius_withdomain.t deleted file mode 100644 index 504bf679f..000000000 --- a/FS/t/part_export-sqlradius_withdomain.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::sqlradius_withdomain; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-sysvshell.t b/FS/t/part_export-sysvshell.t deleted file mode 100644 index 7fc24acb1..000000000 --- a/FS/t/part_export-sysvshell.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::sysvshell; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-textradius.t b/FS/t/part_export-textradius.t deleted file mode 100644 index d8a48a0c8..000000000 --- a/FS/t/part_export-textradius.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::textradius; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-vpopmail.t b/FS/t/part_export-vpopmail.t deleted file mode 100644 index 2e37114a2..000000000 --- a/FS/t/part_export-vpopmail.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::vpopmail; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export-www_shellcommands.t b/FS/t/part_export-www_shellcommands.t deleted file mode 100644 index 2ea79cf97..000000000 --- a/FS/t/part_export-www_shellcommands.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export::www_shellcommands; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export.t b/FS/t/part_export.t deleted file mode 100644 index 26b398791..000000000 --- a/FS/t/part_export.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_export_option.t b/FS/t/part_export_option.t deleted file mode 100644 index 13200c213..000000000 --- a/FS/t/part_export_option.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_export_option; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-flat.t b/FS/t/part_pkg-flat.t deleted file mode 100644 index 3eee7a7c7..000000000 --- a/FS/t/part_pkg-flat.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::flat; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-flat_comission.t b/FS/t/part_pkg-flat_comission.t deleted file mode 100644 index fefa57eb4..000000000 --- a/FS/t/part_pkg-flat_comission.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::flat_comission; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-flat_comission_cust.t b/FS/t/part_pkg-flat_comission_cust.t deleted file mode 100644 index 05d3ac417..000000000 --- a/FS/t/part_pkg-flat_comission_cust.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::flat_comission_cust; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-flat_comission_pkg.t b/FS/t/part_pkg-flat_comission_pkg.t deleted file mode 100644 index 851b58db1..000000000 --- a/FS/t/part_pkg-flat_comission_pkg.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::flat_comission_pkg; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-flat_delayed.t b/FS/t/part_pkg-flat_delayed.t deleted file mode 100644 index ed638462b..000000000 --- a/FS/t/part_pkg-flat_delayed.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::flat_delayed; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-prorate.t b/FS/t/part_pkg-prorate.t deleted file mode 100644 index d32b1c095..000000000 --- a/FS/t/part_pkg-prorate.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::prorate; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-sesmon_hour.t b/FS/t/part_pkg-sesmon_hour.t deleted file mode 100644 index 4f02cfcf4..000000000 --- a/FS/t/part_pkg-sesmon_hour.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::sesmon_hour; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-sesmon_minute.t b/FS/t/part_pkg-sesmon_minute.t deleted file mode 100644 index 6ceaa3ce2..000000000 --- a/FS/t/part_pkg-sesmon_minute.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::sesmon_minute; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-sql_external.t b/FS/t/part_pkg-sql_external.t deleted file mode 100644 index 366ed01ef..000000000 --- a/FS/t/part_pkg-sql_external.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::sql_external; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-sql_generic.t b/FS/t/part_pkg-sql_generic.t deleted file mode 100644 index 299a7c67c..000000000 --- a/FS/t/part_pkg-sql_generic.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::sql_generic; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-sqlradacct_hour.t b/FS/t/part_pkg-sqlradacct_hour.t deleted file mode 100644 index 2a4ed7954..000000000 --- a/FS/t/part_pkg-sqlradacct_hour.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::sqlradacct_hour; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-subscription.t b/FS/t/part_pkg-subscription.t deleted file mode 100644 index 10b44790f..000000000 --- a/FS/t/part_pkg-subscription.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::subscription; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-voip_cdr.t b/FS/t/part_pkg-voip_cdr.t deleted file mode 100644 index 2d988a34f..000000000 --- a/FS/t/part_pkg-voip_cdr.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::voip_cdr; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg-voip_sqlradacct.t b/FS/t/part_pkg-voip_sqlradacct.t deleted file mode 100644 index 8d542044d..000000000 --- a/FS/t/part_pkg-voip_sqlradacct.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg::voip_sqlradacct; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg.t b/FS/t/part_pkg.t deleted file mode 100644 index fd96073f9..000000000 --- a/FS/t/part_pkg.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg_option.t b/FS/t/part_pkg_option.t deleted file mode 100644 index 6239b2d7b..000000000 --- a/FS/t/part_pkg_option.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg_option; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pkg_taxclass.t b/FS/t/part_pkg_taxclass.t deleted file mode 100644 index bbe407314..000000000 --- a/FS/t/part_pkg_taxclass.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pkg_taxclass; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_pop_local.t b/FS/t/part_pop_local.t deleted file mode 100644 index 4e4ad17f5..000000000 --- a/FS/t/part_pop_local.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_pop_local; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_referral.t b/FS/t/part_referral.t deleted file mode 100644 index d20b97930..000000000 --- a/FS/t/part_referral.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_referral; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_svc.t b/FS/t/part_svc.t deleted file mode 100644 index bdb2a7aca..000000000 --- a/FS/t/part_svc.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_svc; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/part_svc_column.t b/FS/t/part_svc_column.t deleted file mode 100644 index 467025c1e..000000000 --- a/FS/t/part_svc_column.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::part_svc_column; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/pay_batch.t b/FS/t/pay_batch.t deleted file mode 100644 index c43133dc2..000000000 --- a/FS/t/pay_batch.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::pay_batch; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/payby.t b/FS/t/payby.t deleted file mode 100644 index 7430bc8e5..000000000 --- a/FS/t/payby.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::payby; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/payinfo_Mixin.t b/FS/t/payinfo_Mixin.t deleted file mode 100644 index 3567c8e08..000000000 --- a/FS/t/payinfo_Mixin.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::payinfo_Mixin; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/payment_gateway.t b/FS/t/payment_gateway.t deleted file mode 100644 index 4bcc78153..000000000 --- a/FS/t/payment_gateway.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::payment_gateway; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/payment_gateway_option.t b/FS/t/payment_gateway_option.t deleted file mode 100644 index 19e645121..000000000 --- a/FS/t/payment_gateway_option.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::payment_gateway_option; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/pkg_class.t b/FS/t/pkg_class.t deleted file mode 100644 index fb3774f8c..000000000 --- a/FS/t/pkg_class.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::pkg_class; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/pkg_referral.t b/FS/t/pkg_referral.t deleted file mode 100644 index ff047baa3..000000000 --- a/FS/t/pkg_referral.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::pkg_referral; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/pkg_svc.t b/FS/t/pkg_svc.t deleted file mode 100644 index 77d34295a..000000000 --- a/FS/t/pkg_svc.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::pkg_svc; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/port.t b/FS/t/port.t deleted file mode 100644 index 46377aaf9..000000000 --- a/FS/t/port.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::port; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/prepay_credit.t b/FS/t/prepay_credit.t deleted file mode 100644 index e7626bdf1..000000000 --- a/FS/t/prepay_credit.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::prepay_credit; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/queue.t b/FS/t/queue.t deleted file mode 100644 index 43e33730e..000000000 --- a/FS/t/queue.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::queue; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/queue_arg.t b/FS/t/queue_arg.t deleted file mode 100644 index cf3f91dfe..000000000 --- a/FS/t/queue_arg.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::queue_arg; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/queue_depend.t b/FS/t/queue_depend.t deleted file mode 100644 index 8eaa2cdb3..000000000 --- a/FS/t/queue_depend.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::queue_depend; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/raddb.t b/FS/t/raddb.t deleted file mode 100644 index ac28d0798..000000000 --- a/FS/t/raddb.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::raddb; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/radius_usergroup.t b/FS/t/radius_usergroup.t deleted file mode 100644 index 325742cf5..000000000 --- a/FS/t/radius_usergroup.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::radius_usergroup; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/rate.t b/FS/t/rate.t deleted file mode 100644 index ae9c8bb31..000000000 --- a/FS/t/rate.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::rate; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/rate_detail.t b/FS/t/rate_detail.t deleted file mode 100644 index 163972e81..000000000 --- a/FS/t/rate_detail.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::rate_detail; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/rate_prefix.t b/FS/t/rate_prefix.t deleted file mode 100644 index d4bd51363..000000000 --- a/FS/t/rate_prefix.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::rate_prefix; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/rate_region.t b/FS/t/rate_region.t deleted file mode 100644 index 6e0db8f27..000000000 --- a/FS/t/rate_region.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::rate_region; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/reason.t b/FS/t/reason.t deleted file mode 100644 index d5e4dc9e7..000000000 --- a/FS/t/reason.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::reason; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/reason_type.t b/FS/t/reason_type.t deleted file mode 100644 index 279d5b950..000000000 --- a/FS/t/reason_type.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::reason_type; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/reg_code.t b/FS/t/reg_code.t deleted file mode 100644 index 4b9599078..000000000 --- a/FS/t/reg_code.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::reg_code; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/reg_code_pkg.t b/FS/t/reg_code_pkg.t deleted file mode 100644 index 7f89ffaee..000000000 --- a/FS/t/reg_code_pkg.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::reg_code_pkg; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/registrar.t b/FS/t/registrar.t deleted file mode 100644 index a6ba13437..000000000 --- a/FS/t/registrar.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::registrar; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/session.t b/FS/t/session.t deleted file mode 100644 index c4b714ea4..000000000 --- a/FS/t/session.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::session; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_Common.t b/FS/t/svc_Common.t deleted file mode 100644 index ed49e1e49..000000000 --- a/FS/t/svc_Common.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_Common; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_External_Common.t b/FS/t/svc_External_Common.t deleted file mode 100644 index a0b2ea2fd..000000000 --- a/FS/t/svc_External_Common.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_External_Common; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_Parent_Mixin.t b/FS/t/svc_Parent_Mixin.t deleted file mode 100644 index ed9923fc0..000000000 --- a/FS/t/svc_Parent_Mixin.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_Parent_Mixin; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_acct.t b/FS/t/svc_acct.t deleted file mode 100644 index 9ca78c9d1..000000000 --- a/FS/t/svc_acct.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_acct; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_acct_pop.t b/FS/t/svc_acct_pop.t deleted file mode 100644 index e612c40af..000000000 --- a/FS/t/svc_acct_pop.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_acct_pop; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_broadband.t b/FS/t/svc_broadband.t deleted file mode 100644 index 02dc1124a..000000000 --- a/FS/t/svc_broadband.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_broadband; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_domain.t b/FS/t/svc_domain.t deleted file mode 100644 index 4d91898ac..000000000 --- a/FS/t/svc_domain.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_domain; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_external.t b/FS/t/svc_external.t deleted file mode 100644 index 20a676784..000000000 --- a/FS/t/svc_external.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_external; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_forward.t b/FS/t/svc_forward.t deleted file mode 100644 index d653d34ef..000000000 --- a/FS/t/svc_forward.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_forward; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_phone.t b/FS/t/svc_phone.t deleted file mode 100644 index 15b9ca275..000000000 --- a/FS/t/svc_phone.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_phone; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/svc_www.t b/FS/t/svc_www.t deleted file mode 100644 index eb4e83fbc..000000000 --- a/FS/t/svc_www.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::svc_www; -$loaded=1; -print "ok 1\n"; diff --git a/FS/t/type_pkgs.t b/FS/t/type_pkgs.t deleted file mode 100644 index 98401805c..000000000 --- a/FS/t/type_pkgs.t +++ /dev/null @@ -1,5 +0,0 @@ -BEGIN { $| = 1; print "1..1\n" } -END {print "not ok 1\n" unless $loaded;} -use FS::type_pkgs; -$loaded=1; -print "ok 1\n"; diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 4b9b0853c..000000000 --- a/INSTALL +++ /dev/null @@ -1 +0,0 @@ -See httemplate/docs/index.html diff --git a/Makefile b/Makefile deleted file mode 100644 index a820cb1e6..000000000 --- a/Makefile +++ /dev/null @@ -1,363 +0,0 @@ -#!/usr/bin/make - -#solaris and perhaps other very weirdass /bin/sh -#SHELL="/bin/ksh" - -DB_TYPE = Pg -#DB_TYPE = mysql - -DB_USER = freeside -DB_PASSWORD= - -DATASOURCE = DBI:${DB_TYPE}:dbname=freeside - -#changable now (some things which should go to the others still go to CONF) -FREESIDE_CONF = /usr/local/etc/freeside -FREESIDE_LOG = /usr/local/etc/freeside -FREESIDE_LOCK = /usr/local/etc/freeside -FREESIDE_CACHE = /usr/local/etc/freeside -FREESIDE_EXPORT = /usr/local/etc/freeside - -MASON_HANDLER = ${FREESIDE_CONF}/handler.pl -MASONDATA = ${FREESIDE_CACHE}/masondata - -#mod_perl v1 -#APACHE_VERSION = 1 -#mod_perl v2 prereleases up to and including 1.999_21 -#APACHE_VERSON = 1.99 -#mod_perl v2 proper and prereleases 1.999_22 and after -APACHE_VERSION = 2 - -#deb -FREESIDE_DOCUMENT_ROOT = /var/www/freeside -#redhat, fedora, mandrake -#FREESIDE_DOCUMENT_ROOT = /var/www/html/freeside -#freebsd -#FREESIDE_DOCUMENT_ROOT = /usr/local/www/data/freeside -#openbsd -#FREESIDE_DOCUMENT_ROOT = /var/www/htdocs/freeside -#suse -#FREESIDE_DOCUMENT_ROOT = /srv/www/htdocs/freeside -#apache -#FREESIDE_DOCUMENT_ROOT = /usr/local/apache/htdocs/freeside - -#deb, redhat, fedora, mandrake, suse, others? -INIT_FILE = /etc/init.d/freeside -#freebsd -#INIT_FILE = /usr/local/etc/rc.d/011.freeside.sh - -#deb -INIT_INSTALL = /usr/sbin/update-rc.d freeside defaults 21 20 -#redhat, fedora -#INIT_INSTALL = /sbin/chkconfig freeside on -#not necessary (freebsd) -#INIT_INSTALL = /usr/bin/true - -#deb, suse -#HTTPD_RESTART = /etc/init.d/apache restart -#deb w/apache2 -HTTPD_RESTART = /etc/init.d/apache2 restart -#redhat, fedora, mandrake -#HTTPD_RESTART = /etc/init.d/httpd restart -#freebsd -#HTTPD_RESTART = /usr/local/etc/rc.d/apache.sh stop || true; sleep 10; /usr/local/etc/rc.d/apache.sh start -#openbsd -#HTTPD_RESTART = kill -TERM `cat /var/www/logs/httpd.pid`; sleep 10; /usr/sbin/httpd -u -DSSL -#apache -#HTTPD_RESTART = /usr/local/apache/bin/apachectl stop; sleep 10; /usr/local/apache/bin/apachectl startssl - -#(an include directory, not a file, "Include /etc/apachew/conf.d" in httpd.conf) -#deb (3.1+), -APACHE_CONF = /etc/apache2/conf.d - -FREESIDE_RESTART = ${INIT_FILE} restart - -#deb, redhat, fedora, mandrake, suse, others? -INSTALLGROUP = root -#freebsd, openbsd -#INSTALLGROUP = wheel - -#edit the stuff below to have the daemons start - -QUEUED_USER=fs_queue - -SELFSERVICE_USER = fs_selfservice -#never run on the same machine in production!!! -SELFSERVICE_MACHINES = localhost -# SELFSERVICE_MACHINES = www.example.com -# SELFSERVICE_MACHINES = web1.example.com web2.example.com - -#user with sudo access on SELFSERVICE_MACHINES for automated self-service -#installation. -SELFSERVICE_INSTALL_USER = ivan -SELFSERVICE_INSTALL_USERADD = /usr/sbin/useradd -#SELFSERVICE_INSTALL_USERADD = "/usr/sbin/pw useradd" - -#RT_ENABLED = 0 -RT_ENABLED = 1 -RT_DOMAIN = example.com -RT_TIMEZONE = US/Pacific -#RT_TIMEZONE = US/Eastern -FREESIDE_URL = "http://localhost/freeside/" - -#for now, same db as specified in DATASOURCE... eventually, otherwise? -RT_DB_DATABASE = freeside - -#--- - - -#rt/config.layout.in -RT_PATH = /opt/rt3 - -#only used for dev kludge now, not a big deal -FREESIDE_PATH = `pwd` -PERL_INC_DEV_KLUDGE = /usr/local/share/perl/5.8.8/ - -VERSION=1.9.0cvs -TAG=freeside_1_9_0 - -help: - @echo "supported targets:" - @echo " create-database create-config" - @echo " install deploy" - @echo " configure-rt create-rt" - @echo " clean help" - @echo - @echo " install-docs install-perl-modules" - @echo " install-init install-apache" - @echo " install-rt" - @echo " install-selfservice update-selfservice" - @echo - @echo " dev dev-docs dev-perl-modules" - @echo - @echo " masondocs alldocs docs" - @echo " wikiman" - @echo " perl-modules" - #@echo - #@echo " upload-docs release update-webdemo" - - -masondocs: httemplate/* httemplate/*/* httemplate/*/*/* httemplate/*/*/*/* - rm -rf masondocs - cp -pr httemplate masondocs - touch masondocs - -alldocs: masondocs - -docs: - make masondocs - -wikiman: - chmod a+rx ./bin/pod2x - ./bin/pod2x - -install-docs: docs - [ -e ${FREESIDE_DOCUMENT_ROOT} ] && mv ${FREESIDE_DOCUMENT_ROOT} ${FREESIDE_DOCUMENT_ROOT}.`date +%Y%m%d%H%M%S` || true - cp -r masondocs ${FREESIDE_DOCUMENT_ROOT} - chown -R freeside:freeside ${FREESIDE_DOCUMENT_ROOT} - cp htetc/handler.pl ${MASON_HANDLER} - perl -p -i -e "\ - s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g; \ - s'%%%RT_ENABLED%%%'${RT_ENABLED}'g; \ - s'%%%MASONDATA%%%'${MASONDATA}'g;\ - " ${MASON_HANDLER} - [ ! -e ${MASONDATA} ] && mkdir ${MASONDATA} || true - chown -R freeside ${MASONDATA} - -dev-docs: - [ -e ${FREESIDE_DOCUMENT_ROOT} ] && mv ${FREESIDE_DOCUMENT_ROOT} ${FREESIDE_DOCUMENT_ROOT}.`date +%Y%m%d%H%M%S` || true - ln -s ${FREESIDE_PATH}/httemplate ${FREESIDE_DOCUMENT_ROOT} - cp htetc/handler.pl ${MASON_HANDLER} - perl -p -i -e "\ - s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g; \ - s'%%%RT_ENABLED%%%'${RT_ENABLED}'g; \ - s'%%%MASONDATA%%%'${MASONDATA}'g;\ - s'###use Module::Refresh;###'use Module::Refresh;'; \ - s'###Module::Refresh->refresh;###'Module::Refresh->refresh;'; \ - " ${MASON_HANDLER} || true - - -perl-modules: - cd FS; \ - [ -e Makefile ] || perl Makefile.PL; \ - make; \ - perl -p -i -e "\ - s/%%%VERSION%%%/${VERSION}/g;\ - " blib/lib/FS.pm;\ - perl -p -i -e "\ - s|%%%FREESIDE_CONF%%%|${FREESIDE_CONF}|g;\ - s|%%%FREESIDE_CACHE%%%|${FREESIDE_CACHE}|g;\ - " blib/lib/FS/*.pm;\ - perl -p -i -e "\ - s|%%%FREESIDE_EXPORT%%%|${FREESIDE_EXPORT}|g;\ - " blib/lib/FS/part_export/*.pm;\ - perl -p -i -e "\ - s|%%%FREESIDE_CONF%%%|${FREESIDE_CONF}|g;\ - s|%%%FREESIDE_LOG%%%|${FREESIDE_LOG}|g;\ - s|%%%FREESIDE_LOCK%%%|${FREESIDE_LOCK}|g;\ - s|%%%FREESIDE_CACHE%%%|${FREESIDE_CACHE}|g;\ - s|%%%FREESIDE_EXPORT%%%|${FREESIDE_EXPORT}|g;\ - " blib/script/* - -install-perl-modules: perl-modules - [ -L ${PERL_INC_DEV_KLUDGE}/FS ] \ - && rm ${PERL_INC_DEV_KLUDGE}/FS \ - && mv ${PERL_INC_DEV_KLUDGE}/FS.old ${PERL_INC_DEV_KLUDGE}/FS \ - || true - cd FS; \ - make install UNINST=1 - -dev-perl-modules: perl-modules - [ -d ${PERL_INC_DEV_KLUDGE}/FS -a ! -L ${PERL_INC_DEV_KLUDGE}/FS ] \ - && mv ${PERL_INC_DEV_KLUDGE}/FS ${PERL_INC_DEV_KLUDGE}/FS.old \ - || true - - rm -rf ${PERL_INC_DEV_KLUDGE}/FS - ln -sf ${FREESIDE_PATH}/FS/blib/lib/FS ${PERL_INC_DEV_KLUDGE}/FS - -install-init: - #[ -e ${INIT_FILE} ] || install -o root -g ${INSTALLGROUP} -m 711 init.d/freeside-init ${INIT_FILE} - install -o root -g ${INSTALLGROUP} -m 711 init.d/freeside-init ${INIT_FILE} - perl -p -i -e "\ - s/%%%QUEUED_USER%%%/${QUEUED_USER}/g;\ - s/%%%SELFSERVICE_USER%%%/${SELFSERVICE_USER}/g;\ - s/%%%SELFSERVICE_MACHINES%%%/${SELFSERVICE_MACHINES}/g;\ - " ${INIT_FILE} - ${INIT_INSTALL} - -install-apache: - [ -e ${APACHE_CONF}/freeside-base.conf ] && rm ${APACHE_CONF}/freeside-base.conf || true - [ -d ${APACHE_CONF} ] && \ - ( install -o root -m 755 htetc/freeside-base${APACHE_VERSION}.conf ${APACHE_CONF} && \ - ( [ ${RT_ENABLED} -eq 1 ] && install -o root -m 755 htetc/freeside-rt.conf ${APACHE_CONF} || true ) && \ - perl -p -i -e "\ - s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g; \ - s'%%%MASON_HANDLER%%%'${MASON_HANDLER}'g; \ - " ${APACHE_CONF}/freeside-*.conf \ - ) || true - -install-selfservice: - [ -e ~freeside ] || cp -pr /etc/skel ~freeside && chown -R freeside ~freeside - [ -e ~freeside/.ssh/id_dsa.pub ] || su - freeside -c 'ssh-keygen -t dsa' - for MACHINE in ${SELFSERVICE_MACHINES}; do \ - scp -r fs_selfservice/FS-SelfService ${SELFSERVICE_INSTALL_USER}@$$MACHINE:. ;\ - ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; perl Makefile.PL && make" ;\ - ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; sudo make install" ;\ - scp ~freeside/.ssh/id_dsa.pub ${SELFSERVICE_INSTALL_USER}@$$MACHINE:. ;\ - ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "sudo ${SELFSERVICE_INSTALL_USERADD} freeside; sudo install -d -o freeside -m 600 ~freeside/.ssh/; sudo install -o freeside -m 600 ./id_dsa.pub ~freeside/.ssh/authorized_keys" ;\ - ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "sudo install -o freeside -d /usr/local/freeside" ;\ - done - -update-selfservice: - for MACHINE in ${SELFSERVICE_MACHINES}; do \ - RSYNC_RSH=ssh rsync -rlptz fs_selfservice/FS-SelfService/ ${SELFSERVICE_INSTALL_USER}@$$MACHINE:FS-SelfService ;\ - ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; perl Makefile.PL && make" ;\ - ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; sudo make install" ;\ - done - -install: install-perl-modules install-docs install-init install-apache install-rt - -deploy: install - ${HTTPD_RESTART} - ${FREESIDE_RESTART} - -dev: dev-perl-modules dev-docs - -create-database: - perl -e 'use DBIx::DataSource qw( create_database ); create_database( "${DATASOURCE}", "${DB_USER}", "${DB_PASSWORD}" ) or die $$DBIx::DataSource::errstr;' - -create-config: install-perl-modules - [ -e ${FREESIDE_CONF} ] && mv ${FREESIDE_CONF} ${FREESIDE_CONF}.`date +%Y%m%d%H%M%S` || true - install -d -o freeside ${FREESIDE_CONF} - - touch ${FREESIDE_CONF}/secrets - chown freeside ${FREESIDE_CONF}/secrets - chmod 600 ${FREESIDE_CONF}/secrets - - echo -e "${DATASOURCE}\n${DB_USER}\n${DB_PASSWORD}" >${FREESIDE_CONF}/secrets - chmod 600 ${FREESIDE_CONF}/secrets - chown freeside ${FREESIDE_CONF}/secrets - - mkdir "${FREESIDE_CONF}/conf.${DATASOURCE}" - rm -rf conf/registries #old dirs just won't go away - #cp conf/[a-z]* "${FREESIDE_CONF}/conf.${DATASOURCE}" - cp `ls -d conf/[a-z]* | grep -v CVS` "${FREESIDE_CONF}/conf.${DATASOURCE}" - chown -R freeside "${FREESIDE_CONF}/conf.${DATASOURCE}" - - mkdir "${FREESIDE_CACHE}/counters.${DATASOURCE}" - chown freeside "${FREESIDE_CACHE}/counters.${DATASOURCE}" - - mkdir "${FREESIDE_CACHE}/cache.${DATASOURCE}" - chown freeside "${FREESIDE_CACHE}/cache.${DATASOURCE}" - - mkdir "${FREESIDE_EXPORT}/export.${DATASOURCE}" - chown freeside "${FREESIDE_EXPORT}/export.${DATASOURCE}" - -configure-rt: - cd rt; \ - cp config.layout.in config.layout; \ - perl -p -i -e "\ - s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g;\ - s'%%%MASONDATA%%%'${MASONDATA}'g;\ - " config.layout; \ - ./configure --enable-layout=Freeside\ - --with-db-type=${DB_TYPE} \ - --with-db-dba=${DB_USER} \ - --with-db-database=${RT_DB_DATABASE} \ - --with-db-rt-user=${DB_USER} \ - --with-db-rt-pass=${DB_PASSWORD} \ - --with-web-user=freeside \ - --with-web-group=freeside \ - --with-rt-group=freeside - -create-rt: configure-rt - [ -d /opt ] || mkdir /opt #doh - [ -d /opt/rt3 ] || mkdir /opt/rt3 # - [ -d /opt/rt3/share ] || mkdir /opt/rt3/share # - cd rt; make install - rt/sbin/rt-setup-database --dba '${DB_USER}' \ - -dba-password '${DB_PASSWORD}' \ - -action schema \ - || true - rt/sbin/rt-setup-database --action insert_initial \ - && rt/sbin/rt-setup-database --action insert --datafile ${RT_PATH}/etc/initialdata \ - || true - -install-rt: - perl -p -i -e "\ - s'%%%RT_DOMAIN%%%'${RT_DOMAIN}'g;\ - s'%%%RT_TIMEZONE%%%'${RT_TIMEZONE}'g;\ - s'%%%FREESIDE_URL%%%'${FREESIDE_URL}'g;\ - " ${RT_PATH}/etc/RT_SiteConfig.pm - [ ${RT_ENABLED} -eq 1 ] && ( cd rt; make install ) || true - -clean: - rm -rf masondocs - rm -rf httemplate/docs/man - rm -rf pod2htmi.tmp - rm -rf pod2htmd.tmp - -cd FS; \ - make clean - -cd fs_selfservice/FS-SelfService; \ - make clean - -#these are probably only useful if you're me... - -#release: upload-docs -release: - cd /home/ivan/freeside - #cvs tag ${TAG} - cvs tag -F ${TAG} - - #cd /home/ivan - cvs export -r ${TAG} -d freeside-${VERSION} freeside - tar czvf freeside-${VERSION}.tar.gz freeside-${VERSION} - - scp freeside-${VERSION}.tar.gz ivan@420.am:/var/www/www.sisd.com/freeside/ - mv freeside-${VERSION} freeside-${VERSION}.tar.gz .. - -update-webdemo: - ssh ivan@420.am '( cd freeside; cvs update -d -P )' - #ssh root@420.am '( cd /home/ivan/freeside; make clean; make deploy )' - ssh root@420.am '( cd /home/ivan/freeside; make deploy )' - diff --git a/README b/README deleted file mode 100644 index 09484d26a..000000000 --- a/README +++ /dev/null @@ -1,54 +0,0 @@ -Freeside - -Copyright (C) 2005-2008 Freeside Internet Services, Inc. -Copyright (C) 2000-2005 Ivan Kohler -Copyright (C) 1999 Silicon Interactive Software Design -Additional copyright holders may be found in the CREDITS file. -All rights reserved - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or (at - your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with this program, in the file `AGPL'; if not, - see <http://www.fsf.org/licensing/licenses/agpl-3.0.html>. - - At your option, you may also redistribute and/or modify the files in the - fs_selfservice/ directory (but not the rest of the software) under the - terms of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. - - At your option, you may also redistribute and/or modify the - fs_selfservice/php/freeside.class.php file (but not the rest of the - software) under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation, either version 3 of the License, - or (at your option) any later version. - -Freeside is a billing and administration package for Internet Service -Providers. - -The Freeside home page is at `http://www.freeside.biz/freeside'. - -The documentation is at `http://www.freeside.biz/mediawiki'. - -A mailing list for users is available. Send a blank message to -<freeside-users-subscribe@sisd.com> to subscribe. - -A mailing list for developers is available. It is intended to be lower volume -and higher SNR than the users list. Send a blank message to -<freeside-devel-subscribe@sisd.com> to subscribe. - -Commercial installation, customization and support services as well as -preconfigured appliances are available from Freeside Internet Services, Inc. -Contact us at: http://www.freeside.biz/freeside/contact.html - -Ivan Kohler <ivan-freeside_readme@420.am> - diff --git a/SCHEMA_CHANGE b/SCHEMA_CHANGE deleted file mode 100644 index b3d77aaf8..000000000 --- a/SCHEMA_CHANGE +++ /dev/null @@ -1,17 +0,0 @@ -primarily: -- edit FS/FS/Schema.pm - -if the changes are something other than table and/or column additions: -- httemplate/docs/upgrade10.html -- README.1.7.X - -for new tables: -- make sure the new tables are added to FS/FS/Schema.pm and run make install-perl-modules -- run bin/generate-table-module tablename -- edit the resulting FS/FS/table.pm - -docs: -- sorta neglected: FS/FS.pm -- somehwat neglected: httemplate/docs/schema.html -- really neglected: httemplate/docs/schema.dia - diff --git a/TODO b/TODO deleted file mode 100644 index c90fa165a..000000000 --- a/TODO +++ /dev/null @@ -1,7 +0,0 @@ - -The TODO list / bug-tracking is temporarily unavailable. - -If you are interested in helping with development, please join the -*development* mailing list (send a blank message to -freeside-devel-subscribe@sisd.com) to avoid duplication of effort. - diff --git a/bin/add-history-records.pl b/bin/add-history-records.pl deleted file mode 100755 index fbf9d09d9..000000000 --- a/bin/add-history-records.pl +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/perl - -die "This is broken. Don't use it!\n"; - -use strict; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearchs qsearch); - -use Data::Dumper; - -my @tables = qw(svc_acct svc_broadband svc_domain svc_external svc_forward svc_www cust_svc domain_record); -#my @tables = qw(svc_www); - -my $user = shift or die &usage; -my $dbh = adminsuidsetup($user); - -my $dbdef = FS::Record::dbdef; - -foreach my $table (@tables) { - - my $h_table = 'h_' . $table; - my $cnt = 0; - my $t_cnt = 0; - - eval "use FS::${table}"; - die $@ if $@; - eval "use FS::${h_table}"; - die $@ if $@; - - print "Adding history records for ${table}...\n"; - - my $dbdef_table = $dbdef->table($table); - my $pkey = $dbdef_table->primary_key; - - foreach my $rec (qsearch($table, {})) { - - #my $h_rec = qsearchs( - # $h_table, - # { $pkey => $rec->getfield($pkey) }, - # eval "FS::${h_table}->sql_h_searchs(time)", - #); - - my $h_rec = qsearchs( - $h_table, - { $pkey => $rec->getfield($pkey) }, - "DISTINCT ON ( $pkey ) *", - "AND history_action = 'insert' ORDER BY $pkey ASC, history_date DESC", - '', - 'AS maintable', - ); - - unless ($h_rec) { - my $h_insert_rec = $rec->_h_statement('insert', 1); - #print $h_insert_rec . "\n"; - $dbh->do($h_insert_rec); - die $dbh->errstr if $dbh->err; - $dbh->commit or die $dbh->errstr; - $cnt++; - } - - - $t_cnt++; - - } - - print "History records inserted into $h_table: $cnt\n"; - print " Total records in $table: $t_cnt\n"; - - print "\n"; - -} - -foreach my $table (@tables) { - - my $h_table = 'h_' . $table; - my $cnt = 0; - - eval "use FS::${table}"; - die $@ if $@; - eval "use FS::${h_table}"; - die $@ if $@; - - print "Adding insert records for unmatched delete records on ${table}...\n"; - - my $dbdef_table = $dbdef->table($table); - my $pkey = $dbdef_table->primary_key; - - #SELECT * FROM h_svc_www - #DISTINCT ON ( $pkey ) ? - my $where = " - WHERE ${pkey} in ( - SELECT ${h_table}1.${pkey} - FROM ${h_table} as ${h_table}1 - WHERE ( - SELECT count(${h_table}2.${pkey}) - FROM ${h_table} as ${h_table}2 - WHERE ${h_table}2.${pkey} = ${h_table}1.${pkey} - AND ${h_table}2.history_action = 'delete' - ) > 0 - AND ( - SELECT count(${h_table}3.${pkey}) - FROM ${h_table} as ${h_table}3 - WHERE ${h_table}3.${pkey} = ${h_table}1.${pkey} - AND ( ${h_table}3.history_action = 'insert' - OR ${h_table}3.history_action = 'replace_new' ) - ) = 0 - GROUP BY ${h_table}1.${pkey})"; - - - my @h_recs = qsearch( - $h_table, { }, - "DISTINCT ON ( $pkey ) *", - $where, - '', - '' - ); - - foreach my $h_rec (@h_recs) { - #print "Adding insert record for deleted record with pkey='" . $h_rec->getfield($pkey) . "'...\n"; - my $class = 'FS::' . $table; - my $rec = $class->new({ $h_rec->hash }); - my $h_insert_rec = $rec->_h_statement('insert', 1); - #print $h_insert_rec . "\n"; - $dbh->do($h_insert_rec); - die $dbh->errstr if $dbh->err; - $dbh->commit or die $dbh->errstr; - $cnt++; - } - - print "History records inserted into $h_table: $cnt\n"; - -} - - - -sub usage { - die "Usage:\n add-history-records.pl user\n"; -} - diff --git a/bin/all-postal-no-email b/bin/all-postal-no-email deleted file mode 100755 index ef5dff66b..000000000 --- a/bin/all-postal-no-email +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::cust_main; - -my $user = shift or die &usage; -adminsuidsetup $user; - -foreach my $cust_main ( qsearch( 'cust_main', {} ) ) { - - print $cust_main->custnum. "\n"; - - $cust_main->invoicing_list( [ 'POST' ] ); - -} - -sub usage { - die "Usage:\n\n all-postal-no-email user\n"; -} - diff --git a/bin/apache.export b/bin/apache.export deleted file mode 100755 index da2d73c1c..000000000 --- a/bin/apache.export +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Getopt::Std; -#use File::Path; -use File::Rsync; -use Net::SSH qw(ssh); -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(qsearch qsearchs); -use FS::part_export; -use FS::cust_svc; -use FS::svc_www; - -use vars qw(%opt); -getopts("d", \%opt); - -my $user = shift or die &usage; -adminsuidsetup $user; - -#needs the export number in there somewhere too...? -my $spooldir = "/usr/local/etc/freeside/export.". datasrc. "/apache"; -mkdir $spooldir, 0700 unless -d $spooldir; - -my @exports = qsearch('part_export', { 'exporttype' => 'apache' } ); - -my $rsync = File::Rsync->new({ - rsh => 'ssh', -# dry_run => 1, -}); - -foreach my $export ( @exports ) { - - my $machine = $export->machine; - my $file = "$spooldir/$machine.conf"; - - warn "exporting apache configuration for $machine to $file\n" - if $opt{d}; - - open(HTTPD_CONF,">$file") or die "can't open $file: $!"; - - my $template = $export->option('template'); - - my @svc_www = $export->svc_x; - - foreach my $svc_www ( @svc_www ) { - use vars qw($zone $username $dir $email $config); - $zone = $svc_www->domain_record->zone; - $config = $svc_www->config; - if ( $svc_www->svc_acct ) { - $username = $svc_www->svc_acct->username; - $dir = $svc_www->svc_acct->dir; - $email = $svc_www->svc_acct->email; - } else { - $username = ''; - $dir = ''; - $email = ''; - } - - warn " adding configuration section for $zone\n" - if $opt{d}; - - print HTTPD_CONF eval(qq("$template")). "\n\n"; - } - - my $user = $export->option('user'); - my $httpd_conf = $export->option('httpd_conf'); - - warn "syncing $file to $httpd_conf on $machine\n" - if $opt{d}; - - $rsync->exec( { - src => $file, - dest => "$user\@$machine:$httpd_conf", - } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); - # warn $rsync->out; - - my $restart = $export->option('restart') || 'apachectl graceful'; - - warn "running restart command $restart on $machine\n" - if $opt{d}; - - ssh("root\@$machine", $restart); - -} - -close HTTPD_CONF; - -# ----- - -sub usage { - die "Usage:\n apache.export [ -d ] user\n"; -} - diff --git a/bin/artera.import b/bin/artera.import deleted file mode 100644 index 716dddad0..000000000 --- a/bin/artera.import +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/perl -w - -use strict; - -use Text::CSV_XS; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearchs); -use FS::svc_external; -use FS::svc_domain; -use FS::svc_acct; - -$FS::svc_Common::noexport_hack = 1; - -my $svcpart = 30; - -my $user = shift - or die 'Usage:\n\n artera.import user <artera_active_orders.csv'; -adminsuidsetup $user; - -## - -my $csv = new Text::CSV_XS; - -my $header = scalar(<>); - -my( $num, $linked ) = ( 0, 0 ); - -while (<>) { - my $status = $csv->parse($_) - or die $csv->error_input; - my($serial, $keycode, $name, $ordernum, $email) = $csv->fields(); - #warn join(" - ", $serial, $keycode, $name, $ordernum, $email ). "\n"; - - $email =~ /^([^@]+)\@([^@]+)$/ - or die $email; - my($username, $domain) = ( $1, $2 ); - my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ); - my $cust_svc = ''; - if ( $svc_domain ) { - my $svc_acct = qsearchs('svc_acct', { - 'username' => $username, - 'domsvc' => $svc_domain->svcnum, - } ); - $cust_svc = $svc_acct->cust_svc - if $svc_acct; - #} else { - # warn "can't find domain $domain\n"; - } - - my $exist = qsearchs('svc_external', { 'id' => $serial } ); - next if $exist; - - my $svc_external = new FS::svc_external { - 'svcpart' => $svcpart, - 'pkgnum' => ( $cust_svc ? $cust_svc->pkgnum : '' ), - 'id' => $serial, - 'title' => $keycode, - }; - #my $error = $svc_external->check; - my $error = $svc_external->insert; - if ( $cust_svc && $error =~ /^Already/ ) { - warn $error; - $svc_external->pkgnum(''); - $error = $svc_external->insert; - } - warn $error if $error; - - $num++; - $linked++ if $cust_svc; - #print "$num imported, $linked linked\n"; - -} - -print "$num imported, $linked linked\n"; - diff --git a/bin/backup-dvd b/bin/backup-dvd deleted file mode 100644 index d0314b469..000000000 --- a/bin/backup-dvd +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -database="freeside" -DEVICE="/dev/hda" - -su freeside -c "pg_dump $database" >/var/backups/$database.sql - -DATE=$(date +%Y-%m-%d) - -#NOTE: These two paths must end in a / in -#order to correctly build up the other paths -#BACKUP_DIR="/backup/directory/" -BACKUP_DIR="/backup/" - #TEMP_BACKUP_FILES_DIR="/backup/temp/" - -BACKUP_FILE=$BACKUP_DIR"backup-"$DATE".tar.bz2" - #DATABASE_FILE=$TEMP_BACKUP_FILES_DIR"foo-"$DATE".sql" - - #These directories shouldn't end in a / although - #I don't think it will cause any problems if - #they do. There should be a space at the end though - #to ensure the database file gets concatenated correctly. - #SOURCE="/a/location /other/locations " $DATABASE_FILE - -#echo Removing old backup directories -rm -rf $BACKUP_DIR - #rm -rf $TEMP_BACKUP_FILES_DIR - -#echo Creating new backup directories -mkdir $BACKUP_DIR - #mkdir $TEMP_BACKUP_FILES_DIR - - #echo Creating database backup - #pg_dump -U username -f $DATABASE_FILE databaseName - -#echo Backing up $SOURCE to file $BACKUP_FILE -#tar -cvpl -f $BACKUP_FILE --anchored --exclude /backup / -tar -cjpl -f $BACKUP_FILE --anchored --exclude /backup / - - ##This is not necessary and possibly harmful for DVD+RW media - #echo Quick blanking media - #dvd+rw-format -blank /dev/hdc - -#echo Burning backup -growisofs -dvd-compat -Z $DEVICE -quiet -r -J $BACKUP_FILE diff --git a/bin/bill-as-nextmonth b/bin/bill-as-nextmonth deleted file mode 100755 index 813e84193..000000000 --- a/bin/bill-as-nextmonth +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -month=`date +%m` -nextmonth=`expr $month + 1` -/usr/local/bin/freeside-daily -d $nextmonth/1/`date +%Y` fs_daily diff --git a/bin/bill-as-nextmonth-BILL b/bin/bill-as-nextmonth-BILL deleted file mode 100755 index 91e943110..000000000 --- a/bin/bill-as-nextmonth-BILL +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -month=`date +%m` -nextmonth=`expr $month + 1` -/usr/local/bin/freeside-daily -d $nextmonth/1/`date +%Y` -p BILL fs_daily diff --git a/bin/bill-as-nextyear b/bin/bill-as-nextyear deleted file mode 100755 index 63c4ad2be..000000000 --- a/bin/bill-as-nextyear +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -year=`date +%Y` -nextyear=`expr $year + 1` -/usr/local/bin/freeside-daily -d 1/1/$nextyear fs_daily diff --git a/bin/bill-as-nextyear-BILL b/bin/bill-as-nextyear-BILL deleted file mode 100755 index 0d77dd0d6..000000000 --- a/bin/bill-as-nextyear-BILL +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -year=`date +%Y` -nextyear=`expr $year + 1` -/usr/local/bin/freeside-daily -d 1/1/$nextyear -p BILL fs_daily diff --git a/bin/bill-for-nextmonth b/bin/bill-for-nextmonth deleted file mode 100755 index e1a33764e..000000000 --- a/bin/bill-for-nextmonth +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -month=`date +%m` -nextmonth=`expr $month + 1` -/usr/local/bin/freeside-daily -d $nextmonth/1/`date +%Y` -n fs_daily diff --git a/bin/bill-for-nextyear b/bin/bill-for-nextyear deleted file mode 100755 index 1430a5898..000000000 --- a/bin/bill-for-nextyear +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -year=`date +%Y` -nextyear=`expr $year + 1` -/usr/local/bin/freeside-daily -d 1/1/$nextyear -n fs_daily diff --git a/bin/bill-nextmonth b/bin/bill-nextmonth deleted file mode 100755 index 813e84193..000000000 --- a/bin/bill-nextmonth +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -month=`date +%m` -nextmonth=`expr $month + 1` -/usr/local/bin/freeside-daily -d $nextmonth/1/`date +%Y` fs_daily diff --git a/bin/bill-nextyear b/bin/bill-nextyear deleted file mode 100755 index 63c4ad2be..000000000 --- a/bin/bill-nextyear +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -year=`date +%Y` -nextyear=`expr $year + 1` -/usr/local/bin/freeside-daily -d 1/1/$nextyear fs_daily diff --git a/bin/billco-upload b/bin/billco-upload deleted file mode 100644 index ce4a43d5f..000000000 --- a/bin/billco-upload +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -AGENTNUMS="1 2 3" - -date=`date +"%Y%m%d"` -dir="/usr/local/etc/freeside/export.DBI:Pg:dbname=freeside/cust_bill" -cd "$dir" - -for AGENTNUM in $AGENTNUMS; do - - for a in header detail; do - mv agentnum$AGENTNUM-$a.csv agentnum$AGENTNUM-$date-$a.csv - done - - zip agentnum$AGENTNUM-$date.zip agentnum$AGENTNUM-$date-header.csv agentnum$AGENTNUM-$date-detail.csv - - echo $dir/agentnum$AGENTNUM-$date.zip - -done - diff --git a/bin/bind.export b/bin/bind.export deleted file mode 100755 index 286e43a2d..000000000 --- a/bin/bind.export +++ /dev/null @@ -1,195 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use File::Path; -use File::Rsync; -use Net::SSH qw(ssh); -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(qsearch qsearchs); -use FS::part_export; -use FS::cust_pkg; -use FS::cust_svc; -use FS::svc_domain; - -my $user = shift or die &usage; -adminsuidsetup $user; - -my $spooldir = "/usr/local/etc/freeside/export.". datasrc. "/bind"; -mkdir $spooldir, 0700 unless -d $spooldir; - -my @exports = qsearch('part_export', { 'exporttype' => 'bind' } ); -my @sexports = qsearch('part_export', { 'exporttype' => 'bind_slave' } ); - -my $rsync = File::Rsync->new({ - rsh => 'ssh', -# dry_run => 1, -}); - -foreach my $export ( @exports ) { - - my $machine = $export->machine; - my $prefix = "$spooldir/$machine"; - - my $bind_rel = $export->option('bind_release'); - my $ndc_cmd = $export->option('reload') - || ( ($bind_rel eq 'BIND9') ? 'rndc' : 'ndc' ); - my $minttl = $export->option('bind9_minttl'); - - #prevent old domain files from piling up - #rmtree "$prefix" or die "can't rmtree $prefix.db: $!"; - - mkdir $prefix, 0700 unless -d $prefix; - - open(NAMED_CONF,">$prefix/named.conf") - or die "can't open $prefix/named.conf: $!"; - - if ( -e "$prefix/named.conf.HEADER" ) { - open(CONF_HEADER,"<$prefix/named.conf.HEADER") - or die "can't open $prefix/named.conf.HEADER: $!"; - while (<CONF_HEADER>) { print NAMED_CONF $_; } - close CONF_HEADER; - } - - my $zonepath = $export->option('zonepath'); - $zonepath =~ s/\/$//; - - my @svc_domain = $export->svc_x; - - foreach my $svc_domain ( @svc_domain ) { - my $domain = $svc_domain->domain; - my @masters = qsearch('domain_record', { - 'svcnum' => $svc_domain->svcnum, - 'rectype' => '_mstr', - } ); - if ( @masters ) { - my $masters = join('; ', map { $_->recdata } @masters ); - - print NAMED_CONF <<END; -zone "$domain" { - type slave; - file "db.$domain"; - masters { $masters; }; -}; - -END - - } else { - - print NAMED_CONF <<END; -zone "$domain" { - type master; - file "$zonepath/db.$domain"; -}; - -END - - open (DB_MASTER,">$prefix/db.$domain") - or die "can't open $prefix/db.$domain: $!"; - - if ($bind_rel eq 'BIND9') { - print DB_MASTER "\$TTL $minttl\n\$ORIGIN $domain.\n"; - } - - my @domain_records = - qsearch('domain_record', { 'svcnum' => $svc_domain->svcnum } ); - foreach my $domain_record ( - sort { $b->rectype cmp $a->rectype } @domain_records - ) { - #if ( $domain_record->rectype eq 'SOA' ) { - # print DB_MASTER join("\t", $domain_record-> reczone - #} else { - print DB_MASTER join("\t", - map { $domain_record->getfield($_) } - qw( reczone recaf rectype recdata ) - ), "\n"; - #} - } - - close DB_MASTER; - - } - - } - - $rsync->exec( { - src => "$prefix/", - recursive => 1, - dest => "root\@$machine:$zonepath/", - exclude => [qw( *.import named.conf.HEADER named.conf )], - } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); - # warn $rsync->out; - - $rsync->exec( { - src => "$prefix/named.conf", - dest => "root\@$machine:". $export->option('named_conf'), - } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); -# warn $rsync->out; - - ssh("root\@$machine", "$ndc_cmd reload"); - -} - -close NAMED_CONF; - -foreach my $sexport ( @sexports ) { #false laziness with above - - my $machine = $sexport->machine; - my $prefix = "$spooldir/$machine"; - - my $bind_rel = $sexport->option('bind_release'); - my $ndc_cmd = ($bind_rel eq 'BIND9') ? 'rndc' : 'ndc'; - - #prevent old domain files from piling up - #rmtree "$prefix" or die "can't rmtree $prefix.db: $!"; - - mkdir $prefix, 0700 unless -d $prefix; - - open(NAMED_CONF,">$prefix/named.conf") - or die "can't open $prefix/named.conf: $!"; - - if ( -e "$prefix/named.conf.HEADER" ) { - open(CONF_HEADER,"<$prefix/named.conf.HEADER") - or die "can't open $prefix/named.conf.HEADER: $!"; - while (<CONF_HEADER>) { print NAMED_CONF $_; } - close CONF_HEADER; - } - - my $masters = $sexport->option('master'); - - #false laziness with freeside-sqlradius-reset - my @svc_domain = - map { qsearchs('svc_domain', { 'svcnum' => $_->svcnum } ) } - map { qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) } - grep { qsearch('cust_svc', { 'svcpart' => $_->svcpart } ) } - $sexport->export_svc; - - foreach my $svc_domain ( @svc_domain ) { - my $domain = $svc_domain->domain; - print NAMED_CONF <<END; -zone "$domain" { - type slave; - file "db.$domain"; - masters { $masters; }; -}; - -END - - } - - $rsync->exec( { - src => "$prefix/named.conf", - dest => "root\@$machine:". $sexport->option('named_conf'), - } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); -# warn $rsync->out; - - ssh("root\@$machine", "$ndc_cmd reload"); - -} -close NAMED_CONF; - -# ----- - -sub usage { - die "Usage:\n bind.export user\n"; -} - diff --git a/bin/bind.import b/bin/bind.import deleted file mode 100755 index 1cdf5672c..000000000 --- a/bin/bind.import +++ /dev/null @@ -1,234 +0,0 @@ -#!/usr/bin/perl -w -# -# REQUIRED: -# -p: part number for domains -# -# -n: named.conf file (or an include file with zones you want to import), -# for example root@ns.isp.com:/var/named/named.conf -# -# OPTIONAL: -# -d: dry-run, debug: don't insert any records, just dump debugging output -# -s: import slave zones as master. useful if you need to recreate your -# primary nameserver from a secondary -# -c dir: override patch for downloading zone files (for example, when -# downloading zone files from chrooted bind) -# -# need to manually put header in -# /usr/local/etc/freeside/export.<datasrc./bind/<machine>/named.conf.HEADER -# (or, nowadays, better just to include the file freeside exports) - -use strict; - -use vars qw($domain_svcpart); - -use Getopt::Std; -use Data::Dumper; -#use BIND::Conf_Parser; -#use DNS::ZoneParse 0.81; - -use Net::SCP qw(scp iscp); - -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(qsearch); #qsearchs); -#use FS::svc_acct_sm; -use FS::svc_domain; -use FS::domain_record; -#use FS::svc_acct; -#use FS::part_svc; - -use vars qw($opt_p $opt_n $opt_s $opt_c $opt_d); -getopts("p:n:sc:d"); - -my $user = shift or die &usage; -adminsuidsetup $user; - -$FS::svc_Common::noexport_hack = 1; -$FS::domain_record::noserial_hack = 1; - -use vars qw($spooldir); -$spooldir = "/usr/local/etc/freeside/export.". datasrc. "/bind"; -mkdir $spooldir unless -d $spooldir; - -$domain_svcpart = $opt_p; - -my $named_conf = $opt_n; - -use vars qw($named_machine $prefix); -$named_machine = (split(/:/, $named_conf))[0]; -my $pnamed_machine = $named_machine; -$pnamed_machine =~ s/^[\w\-]+\@//; -$prefix = "$spooldir/$pnamed_machine"; -mkdir $prefix unless -d $prefix; - -#iscp("$named_conf","$prefix/named.conf.import"); -scp("$named_conf","$prefix/named.conf.import"); - -## - -$FS::svc_domain::whois_hack=1; - -my $p = Parser->new; -$p->parse_file("$prefix/named.conf.import"); - -print "\nBIND import completed.\n"; - -## - -sub usage { - die "Usage:\n\n bind.import -p partnum -n \"user\@machine:/path/to/named.conf\" [ -s ] [ -c chroot_dir ] [ -f ] user\n"; -} - -######## -BEGIN { - - package Parser; - use BIND::Conf_Parser; - use vars qw(@ISA $named_dir); - @ISA = qw(BIND::Conf_Parser); - - $named_dir = 'COULD_NOT_FIND_NAMED_DIRECTORY_TRY_SETTING_-C_OPTION'; - sub handle_option { - my($self, $option, $argument) = @_; - return unless $option eq "directory"; - $named_dir = $argument; - #warn "found named dir: $named_dir\n"; - } - - sub handle_zone { - my($self, $name, $class, $type, $options) = @_; - return unless $class eq 'in'; - return if grep { $name eq $_ } (qw( - . localhost 127.in-addr.arpa 0.in-addr.arpa 255.in-addr.arpa - 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa - 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int - )); - - use FS::Record qw(qsearchs); - use FS::svc_domain; - - my $domain = - qsearchs('svc_domain', { 'domain' => $name } ) - || new FS::svc_domain( { - svcpart => $main::domain_svcpart, - domain => $name, - action => 'N', - } ); - unless ( $domain->svcnum ) { - my $error = $domain->insert; - die $error if $error; - } - - if ( $type eq 'slave' && !$main::opt_s ) { - - if ( $main::opt_d ) { - - use Data::Dumper; - print "$name: ". Dumper($options); - - } else { - - foreach my $master ( @{ $options->{masters} } ) { - my $domain_record = new FS::domain_record( { - 'svcnum' => $domain->svcnum, - 'reczone' => '@', - 'recaf' => 'IN', - 'rectype' => '_mstr', - 'recdata' => $master, - } ); - my $error = $domain_record->insert; - die $error if $error; - } - - } - - } elsif ( $type eq 'master' || ( $type eq 'slave' && $main::opt_s ) ) { - - my $file = $options->{file}; - - use File::Basename; - my $basefile = basename($file); - my $sourcefile = $file; - if ( $main::opt_c ) { - $sourcefile = "$main::opt_c/$sourcefile" if $main::opt_c; - } else { - $sourcefile = "$named_dir/$sourcefile" unless $file =~ /^\//; - } - - use Net::SCP qw(iscp scp); - #iscp("$main::named_machine:$sourcefile", - # "$main::prefix/$basefile.import"); - scp("$main::named_machine:$sourcefile", - "$main::prefix/$basefile.import"); - - use DNS::ZoneParse 0.84; - my $zone = DNS::ZoneParse->new("$main::prefix/$basefile.import"); - - my $dump = $zone->dump; - - if ( $main::opt_d ) { - - use Data::Dumper; - print "$name: ". Dumper($dump); - - } else { - - foreach my $rectype ( keys %$dump ) { - if ( $rectype =~ /^SOA$/i ) { - my $rec = $dump->{$rectype}; - $rec->{email} =~ s/\@/\./; - my $domain_record = new FS::domain_record( { - 'svcnum' => $domain->svcnum, - 'reczone' => $rec->{origin}, - 'recaf' => 'IN', - 'rectype' => $rectype, - 'recdata' => - $rec->{primary}. ' '. $rec->{email}. ' ( '. - join(' ', map $rec->{$_}, - qw( serial refresh retry expire minimumTTL ) ). - ' )', - } ); - my $error = $domain_record->insert; - die $error if $error; - } else { - #die $dump->{$rectype}; - - my $datasub; - if ( $rectype =~ /^MX$/i ) { - $datasub = sub { $_[0]->{priority}. ' '. $_[0]->{host}; }; - } elsif ( $rectype =~ /^TXT$/i ) { - $datasub = sub { $_[0]->{text}; }; - } else { - $datasub = sub { $_[0]->{host}; }; - } - - foreach my $rec ( @{ $dump->{$rectype} } ) { - my $domain_record = new FS::domain_record( { - 'svcnum' => $domain->svcnum, - 'reczone' => $rec->{name}, - 'recaf' => $rec->{class} || 'IN', - 'rectype' => $rectype, - 'recdata' => &{$datasub}($rec), - } ); - my $error = $domain_record->insert; - if ( $error ) { - warn "$error inserting ". - $rec->{name}. ' . '. $domain->domain. "\n"; - warn Dumper($rec); - #system('cat',"$main::prefix/$basefile.import"); - die; - } - } - } - } - - } - - #} else { - # die "unrecognized type $type\n"; - } - - } - -} -######### - diff --git a/bin/breakdown-bill-applications b/bin/breakdown-bill-applications deleted file mode 100644 index 44c3e36b0..000000000 --- a/bin/breakdown-bill-applications +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use FS::UID qw(adminsuidsetup dbh); -use FS::Record qw( qsearch ); -use FS::cust_bill_pay; -use FS::cust_credit_bill; - -$FS::CurrentUser::upgrade_hack = 1; -adminsuidsetup(shift) or die "Usage: breakdown-bill-applications username\n"; - -#quick and dirty conversion script if you have enough memory to throw at it - -my @tables = qw( cust_bill_pay cust_credit_bill ); - -my @apps = (); -foreach my $table { - push @apps, qsearch($table, - - -) { - -} - -foreach my $cust_bill_ diff --git a/bin/bsdshell.export b/bin/bsdshell.export deleted file mode 100755 index 6e0d1037e..000000000 --- a/bin/bsdshell.export +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/perl -w - -# bsdshell export - -use strict; -use File::Rsync; -use Net::SSH qw(ssh); -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(qsearch qsearchs); -use FS::part_export; -use FS::cust_svc; -use FS::svc_acct; - -my @saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' ); - -my $user = shift or die &usage; -adminsuidsetup $user; - -my $spooldir = "/usr/local/etc/freeside/export.". datasrc; -#my $spooldir = "/usr/local/etc/freeside/export.". datasrc. "/shell"; - -my @bsd_exports = qsearch('part_export', { 'exporttype' => 'bsdshell' } ); - -my $rsync = File::Rsync->new({ - rsh => 'ssh', -# dry_run => 1, -}); - -foreach my $export ( @bsd_exports ) { - my $machine = $export->machine; - my $prefix = "$spooldir/$machine"; - mkdir $prefix, 0700 unless -d $prefix; - - #LOCKING!!! - - ( open(MASTER,">$prefix/master.passwd") - #!!! and flock(MASTER,LOCK_EX|LOCK_NB) - ) or die "Can't open $prefix/master.passwd: $!"; - ( open(PASSWD,">$prefix/passwd") - #!!! and flock(PASSWD,LOCK_EX|LOCK_NB) - ) or die "Can't open $prefix/passwd: $!"; - - chmod 0644, "$prefix/passwd"; - chmod 0600, "$prefix/master.passwd"; - - my @svc_acct = $export->svc_x; - - next unless @svc_acct; - - foreach my $svc_acct ( sort { $a->uid <=> $b->uid } @svc_acct ) { - - my $password = $svc_acct->_password; - my $cpassword; - #if ( ( length($password) <= 8 ) - if ( ( length($password) <= 12 ) - && ( $password ne '*' ) - && ( $password ne '!!' ) - && ( $password ne '' ) - ) { - $cpassword=crypt($password, - $saltset[int(rand(64))].$saltset[int(rand(64))] - ); - # MD5 !!!! - } else { - $cpassword=$password; - } - - ### - # FORMAT OF THE PASSWD FILE HERE - print PASSWD join(":", - $svc_acct->username, - 'x', # "##". $username, - $svc_acct->uid, - $svc_acct->gid, - $svc_acct->finger, - $svc_acct->dir, - $svc_acct->shell, - ), "\n"; - - ### - # FORMAT OF FreeBSD MASTER PASSWD FILE HERE - print MASTER join(":", - $svc_acct->username, # User name - $cpassword, # Encrypted password - $svc_acct->uid, # User ID - $svc_acct->gid, # Group ID - "", # Login Class - "0", # Password Change Time - "0", # Password Expiration Time - $svc_acct->finger, # Users name - $svc_acct->dir, # Users home directory - $svc_acct->shell, # shell - ), "\n" ; - - } - - #!!! flock(MASTER,LOCK_UN); - #!!! flock(PASSWD,LOCK_UN); - close MASTER; - close PASSWD; - - $rsync->exec( { - src => "$prefix/passwd", - dest => "root\@$machine:/etc/passwd" - } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); - - $rsync->exec( { - src => "$prefix/master.passwd", - dest => "root\@$machine:/etc/master.passwd.new" - } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); - ssh("root\@$machine", "pwd_mkdb /etc/master.passwd.new"); - - # UNLOCK!! -} diff --git a/bin/cdr_calltype.import b/bin/cdr_calltype.import deleted file mode 100755 index a998284f6..000000000 --- a/bin/cdr_calltype.import +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/perl -w -# -# bin/cdr_calltype.import ivan ~ivan/convergent/newspecs/fixed_inbound/calltypes.csv - -use strict; -use FS::UID qw(dbh adminsuidsetup); -use FS::cdr_calltype; - -my $user = shift or die &usage; -adminsuidsetup $user; - -while (<>) { - - chomp; - my $line = $_; - - #$line =~ /^(\d+),"([^"]+)"$/ or do { - $line =~ /^(\d+),"([^"]+)"/ or do { - warn "unparsable line: $line\n"; - next; - }; - - my $cdr_calltype = new FS::cdr_calltype { - 'calltypenum' => $1, - 'calltypename' => $2, - }; - - #my $error = $cdr_calltype->check; - my $error = $cdr_calltype->insert; - if ( $error ) { - warn "********** $error FOR LINE: $line\n"; - dbh->commit; - #my $wait = scalar(<STDIN>); - } - -} - -sub usage { - "Usage:\n\ncdr_calltype.import username filename ...\n"; -} - diff --git a/bin/cdr_upstream_rate.import b/bin/cdr_upstream_rate.import deleted file mode 100755 index fda3883b5..000000000 --- a/bin/cdr_upstream_rate.import +++ /dev/null @@ -1,142 +0,0 @@ -#!/usr/bin/perl -w -# -# Usage: bin/cdr_upstream_rate.import username ratenum filename -# -# records will be imported into cdr_upstream_rate, rate_detail and rate_region -# -# Example: bin/cdr_upstream_rate.import ivan 1 ~ivan/convergent/sample_rate_table.csv -# -# username: a freeside login (from /usr/local/etc/freeside/mapsecrets) -# ratenum: rate plan (FS::rate) created with the web UI -# filename: CSV file -# -# the following fields are currently used: -# - Class Code => cdr_upstream_rate.rateid -# - Description => rate_region.regionname -# (rate_detail->dest_region) -# - 1_rate => ( * 60 / 1_rate_seconds ) => rate_detail.min_charge -# - 1_rate_seconds => (used above) -# - 1_second_increment => rate_detail.sec_granularity -# -# the following fields are not (yet) used: -# - Flagfall => what's this for? -# -# - 1_cap_time => freeside doesn't have voip time caps yet... -# - 1_cap_cost => freeside doesn't have voip cost caps yet... -# - 1_repeat => not sure what this is for, sample data is all 0 -# -# - 2_rate => \ -# - 2_rate_seconds => | -# - 2_second_increment => | not sure what the second set of rate data -# - 2_cap_time => | is supposed to be for... -# - 2_cap_cost => | -# - 2_repeat => / -# -# - Carrier => probably not needed? -# - Start Date => not necessary? - -use strict; -use vars qw( $DEBUG ); -use Text::CSV_XS; -use FS::UID qw(dbh adminsuidsetup); -use FS::Record qw(qsearchs); -use FS::rate; -use FS::cdr_upstream_rate; -use FS::rate_detail; -use FS::rate_region; - -$DEBUG = 1; - -my $user = shift or die &usage; -adminsuidsetup $user; - -my $ratenum = shift or die &usage; - -my $rate = qsearchs( 'rate', { 'ratenum' => $ratenum } ); -die "rate plan $ratenum not found in rate table\n" - unless $rate; - -my $csv = new Text::CSV_XS; -my $hline = scalar(<>); -chomp($hline); -$csv->parse($hline) or die "can't parse header: $hline\n"; -my @header = $csv->fields(); - -$FS::UID::AutoCommit = 0; - -while (<>) { - - chomp; - my $line = $_; - -# #$line =~ /^(\d+),"([^"]+)"$/ or do { -# #} -# $line =~ /^(\d+),"([^"]+)"/ or do { -# warn "unparsable line: $line\n"; -# next; -# }; - - $csv->parse($line) or die "can't parse line: $line\n"; - my @line = $csv->fields(); - - my %hash = map { $_ => shift(@line) } @header; - - warn join('', map { "$_ => $hash{$_}\n" } keys %hash ) - if $DEBUG > 1; - - my $rate_region = new FS::rate_region { - 'regionname' => $hash{'Description'} - }; - - my $error = $rate_region->insert; - if ( $error ) { - dbh->rollback; - die "error inserting into rate_region: $error\n"; - } - my $dest_regionnum = $rate_region->regionnum; - warn "rate_region $dest_regionnum inserted\n" - if $DEBUG; - - my $rate_detail = new FS::rate_detail { - 'ratenum' => $ratenum, - 'dest_regionnum' => $dest_regionnum, - 'min_included' => 0, - #'min_charge', => sprintf('%.5f', 60 * $hash{'1_rate'} / $hash{'1_rate_seconds'} ), - 'min_charge', => sprintf('%.5f', $hash{'1_rate'} / - ( $hash{'1_rate_seconds'} / 60 ) - ), - 'sec_granularity' => $hash{'1_second_increment'}, - }; - $error = $rate_detail->insert; - if ( $error ) { - dbh->rollback; - die "error inserting into rate_detail: $error\n"; - } - my $ratedetailnum = $rate_detail->ratedetailnum; - warn "rate_detail $ratedetailnum inserted\n" - if $DEBUG; - - my $cdr_upstream_rate = new FS::cdr_upstream_rate { - 'upstream_rateid' => $hash{'Class Code'}, - 'ratedetailnum' => $rate_detail->ratedetailnum, - }; - $error = $cdr_upstream_rate->insert; - if ( $error ) { - dbh->rollback; - die "error inserting into cdr_upstream_rate: $error\n"; - } - warn "cdr_upstream_rate ". $cdr_upstream_rate->upstreamratenum. " inserted\n" - if $DEBUG; - - dbh->commit or die "can't commit: ". dbh->errstr; - - warn "\n" if $DEBUG; - -} - -dbh->commit or die "can't commit: ". dbh->errstr; - -sub usage { - "Usage:\n\ncdr_upstream_rate.import username ratenum filename\n"; -} - diff --git a/bin/create-fetchmailrc b/bin/create-fetchmailrc deleted file mode 100644 index 11bde0ce3..000000000 --- a/bin/create-fetchmailrc +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/perl -w -# this quick hack helps you generate/maintain .fetchmailrc files from -# FS::acct_snarf data. it is run from a shellcommands export as: -# create-fetchmailrc $username $dir $snarf_machine1 $snarf_username1 $snarf__password1 $snarf_machine2 $snarf_username2 $snarf__password2 ... - -use strict; -use POSIX qw( setuid setgid ); - -my $header = <<END; -# Configuration created by create-fetchmailrc -set postmaster "postmaster" -set bouncemail -set no spambounce -set properties "" -set daemon 240 -END - -my $username = shift @ARGV or die "no username specified\n"; -my $homedir = shift @ARGV or die "no homedir specified\n"; -my $filename = "$homedir/.fetchmailrc"; - -my $gid = scalar(getgrnam($username)) or die "can't find $username's gid\n"; -my $uid = scalar(getpwnam($username)) or die "can't find $username's uid\n"; - -exit unless $ARGV[0]; - -open(FETCHMAILRC, ">$filename") or die "can't open $filename: $!\n"; -chown $uid, $gid, $filename or die "can't chown $uid.$gid $filename: $!\n"; -chmod 0600, $filename or die "can't chmod 600 $filename: $!\n"; -print FETCHMAILRC $header; - -while ($ARGV[0]) { - my( $s_machine, $s_username, $s_password ) = splice( @ARGV, 0, 3 ); - print FETCHMAILRC <<END; -poll $s_machine - user '$s_username' there with password '$s_password' is '$username' here -END -} - -close FETCHMAILRC; - -setgid($gid) or die "can't setgid $gid\n"; -setuid($uid) or die "can't setuid $uid\n"; -$ENV{HOME} = $homedir; - -system(qq(fetchmail -a -K --antispam "550,451" -d 180 -f $filename)); - diff --git a/bin/customer-faker b/bin/customer-faker deleted file mode 100755 index d57e5e1de..000000000 --- a/bin/customer-faker +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Getopt::Std; -use Data::Faker; -use Business::CreditCard; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::cust_main; -use FS::cust_pkg; -use FS::svc_acct; - -my $agentnum = 1; -my $refnum = 1; - -my @pkgs = ( 2, 3, 4 ); -#my @pkgs = ( 4, 5, 6 ); -my $svcpart = 2; - -use vars qw( $opt_p ); -getopts('p:'); - -my $user = shift or die &usage; -my $num = shift or die &usage; -adminsuidsetup($user); - -my $onum = $num; -my $start = time; - -my @states = qw( AL AK AS AZ AR CA CO CT DE DC FL GA GU HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND MP OH OK OR PA PR RI SC SD TN TX UT VT VI VA WA WV WI WY ); -#FM MH - -until ( $num-- <= 0 ) { - - my $faker = new Data::Faker; - - my $cust_main = new FS::cust_main { - 'agentnum' => $agentnum, - 'refnum' => $refnum, - 'first' => $faker->first_name, - 'last' => $faker->last_name, - 'company' => ( $num % 2 ? $faker->company. ', '. $faker->company_suffix : '' ), #half with companies.. - 'address1' => $faker->street_address, - 'city' => 'Tofutown', #missing, so everyone is from tofutown# $faker->city, - #'state' => $faker->us_state_abbr, - 'state' => $states[ int(rand($#states)) ], - 'zip' => $faker->us_zip_code, - 'country' => 'US', - 'daytime' => $faker->phone_number, - 'night' => $faker->phone_number, - #forget it, these can have extensions# 'fax' => ( $num % 2 ? $faker->phone_number : '' ), #ditto - #bah, forget shipping addresses - 'payby' => 'BILL', - 'payip' => $faker->ip_address, - }; - - if ( $opt_p eq 'CARD' || ( !$opt_p && rand() > .33 ) ) { - $cust_main->payby('CARD'); - my $cardnum = '4123'. sprintf('%011u', int(rand(100000000000)) ); - $cust_main->payinfo( $cardnum. generate_last_digit($cardnum) ); - $cust_main->paydate( '2009-05-01' ); - } elsif ( $opt_p eq 'CHEK' || ( !$opt_p && rand() > .66 ) ) { - $cust_main->payby('CHEK'); - my $payinfo = sprintf('%7u@%09u', int(rand(10000000)), int(rand(1000000000)) ); - $cust_main->payinfo($payinfo); - $cust_main->payname( 'First International Bank of Testing' ); - } - - # could insert invoicing_list and other stuff too.. hell, could insert - # packages, services, more - # but i just wanted 10k customers to test the pager and this was good enough - # not anymore, here's some services and packages - - my $now = time; - my $year = 31556736; #60*60*24*365.24 - my $setup = $now - int(rand($year)); - - my $cust_pkg = new FS::cust_pkg { - 'pkgpart' => $pkgs[ int(rand(scalar(@pkgs))) ], - - #some dates in here would be nice - 'setup' => $setup, - #'last_bill' - #'bill' - #'susp' - #'expire' - #'cancel' - }; - - my $svc_acct = new FS::svc_acct { - 'svcpart' => $svcpart, - 'username' => $faker->username, - }; - - while ( qsearch( 'svc_acct', { 'username' => $svc_acct->username } ) ) { - my $username = $svc_acct->username; - $username++; - $svc_acct->username($username); - } - - use Tie::RefHash; - tie my %hash, 'Tie::RefHash', - $cust_pkg => [ $svc_acct ], - ; - - my $error = $cust_main->insert( \%hash ); - die $error if $error; - -} - -my $end = time; - -my $sec = $end-$start; -$sec=1 if $sec==0; -my $persec = $onum / $sec; -print "$onum customers inserted in $sec seconds ($persec customers/sec)\n"; - -#--- - -sub usage { - die "Usage:\n\n customer-faker [ -p payby ] user num_fakes\n"; -} diff --git a/bin/expand-country b/bin/expand-country deleted file mode 100755 index c6f2a1f09..000000000 --- a/bin/expand-country +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Locale::SubCountry; -use FS::UID qw(adminsuidsetup); -use FS::Setup; -use FS::Record qw(qsearch); -use FS::cust_main_county; - -my $user = shift or die &usage; -my $country = shift or die &usage; - -adminsuidsetup($user); - -my @country = qsearch('cust_main_county', { 'country' => $country } ); -die "unknown country $country" unless (@country); -#die "$country already expanded" if scalar(@country) > 1; - -foreach my $cust_main_county ( @country ) { - my $error = $cust_main_county->delete; - die $error if $error; -} - -FS::Setup::_add_country($country); - -sub usage { - die "Usage:\n\n expand-country user countrycode\n"; -} - diff --git a/bin/explain-ar-total.sql b/bin/explain-ar-total.sql deleted file mode 100644 index f1544303b..000000000 --- a/bin/explain-ar-total.sql +++ /dev/null @@ -1,976 +0,0 @@ -EXPLAIN SELECT ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill LEFT JOIN cust_main USING ( custnum ) WHERE cust_bill._date > ( EXTRACT( EPOCH FROM now() ) - 2592000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund LEFT JOIN cust_main USING ( custnum ) WHERE cust_refund._date > ( EXTRACT( EPOCH FROM now() ) - 2592000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit LEFT JOIN cust_main USING ( custnum ) WHERE cust_credit._date > ( EXTRACT( EPOCH FROM now() ) - 2592000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay LEFT JOIN cust_main USING ( custnum ) WHERE cust_pay._date > ( EXTRACT( EPOCH FROM now() ) - 2592000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - AS balance_0_30, ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill LEFT JOIN cust_main USING ( custnum ) WHERE cust_bill._date <= ( EXTRACT( EPOCH FROM now() ) - 2592000 ) AND cust_bill._date > ( EXTRACT( EPOCH FROM now() ) - 5184000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund LEFT JOIN cust_main USING ( custnum ) WHERE cust_refund._date <= ( EXTRACT( EPOCH FROM now() ) - 2592000 ) AND cust_refund._date > ( EXTRACT( EPOCH FROM now() ) - 5184000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit LEFT JOIN cust_main USING ( custnum ) WHERE cust_credit._date <= ( EXTRACT( EPOCH FROM now() ) - 2592000 ) AND cust_credit._date > ( EXTRACT( EPOCH FROM now() ) - 5184000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay LEFT JOIN cust_main USING ( custnum ) WHERE cust_pay._date <= ( EXTRACT( EPOCH FROM now() ) - 2592000 ) AND cust_pay._date > ( EXTRACT( EPOCH FROM now() ) - 5184000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - AS balance_30_60, ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill LEFT JOIN cust_main USING ( custnum ) WHERE cust_bill._date <= ( EXTRACT( EPOCH FROM now() ) - 5184000 ) AND cust_bill._date > ( EXTRACT( EPOCH FROM now() ) - 7776000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund LEFT JOIN cust_main USING ( custnum ) WHERE cust_refund._date <= ( EXTRACT( EPOCH FROM now() ) - 5184000 ) AND cust_refund._date > ( EXTRACT( EPOCH FROM now() ) - 7776000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit LEFT JOIN cust_main USING ( custnum ) WHERE cust_credit._date <= ( EXTRACT( EPOCH FROM now() ) - 5184000 ) AND cust_credit._date > ( EXTRACT( EPOCH FROM now() ) - 7776000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay LEFT JOIN cust_main USING ( custnum ) WHERE cust_pay._date <= ( EXTRACT( EPOCH FROM now() ) - 5184000 ) AND cust_pay._date > ( EXTRACT( EPOCH FROM now() ) - 7776000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - AS balance_60_90, ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill LEFT JOIN cust_main USING ( custnum ) WHERE cust_bill._date <= ( EXTRACT( EPOCH FROM now() ) - 7776000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund LEFT JOIN cust_main USING ( custnum ) WHERE cust_refund._date <= ( EXTRACT( EPOCH FROM now() ) - 7776000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit LEFT JOIN cust_main USING ( custnum ) WHERE cust_credit._date <= ( EXTRACT( EPOCH FROM now() ) - 7776000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay LEFT JOIN cust_main USING ( custnum ) WHERE cust_pay._date <= ( EXTRACT( EPOCH FROM now() ) - 7776000 ) AND ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - AS balance_90_0, ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill LEFT JOIN cust_main USING ( custnum ) WHERE ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund LEFT JOIN cust_main USING ( custnum ) WHERE ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit LEFT JOIN cust_main USING ( custnum ) WHERE ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay LEFT JOIN cust_main USING ( custnum ) WHERE ( SELECT COALESCE(SUM(charged - ( SELECT COALESCE(SUM(amount),0) FROM cust_bill_pay - WHERE cust_bill.invnum = cust_bill_pay.invnum ) - ( SELECT COALESCE(SUM(amount),0) FROM cust_credit_bill - WHERE cust_bill.invnum = cust_credit_bill.invnum )), 0) FROM cust_bill WHERE cust_main.custnum = cust_bill.custnum ) - + ( SELECT COALESCE(SUM(refund - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_refund.refundnum = cust_credit_refund.refundnum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_refund.refundnum = cust_pay_refund.refundnum ) - ,0 - ) - ), 0) FROM cust_refund WHERE cust_main.custnum = cust_refund.custnum ) - - ( SELECT COALESCE(SUM(amount - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_refund - WHERE cust_credit.crednum = cust_credit_refund.crednum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_credit_bill - WHERE cust_credit.crednum = cust_credit_bill.crednum ) - ,0 - ) - ), 0) FROM cust_credit WHERE cust_main.custnum = cust_credit.custnum ) - - ( SELECT COALESCE(SUM(paid - - COALESCE( - ( SELECT SUM(amount) FROM cust_bill_pay - WHERE cust_pay.paynum = cust_bill_pay.paynum ) - ,0 - ) - - COALESCE( - ( SELECT SUM(amount) FROM cust_pay_refund - WHERE cust_pay.paynum = cust_pay_refund.paynum ) - ,0 - ) - ), 0) FROM cust_pay WHERE cust_main.custnum = cust_pay.custnum ) - > 0 AND ( agentnum = 1 OR agentnum = 2 OR agentnum = 3 OR agentnum = 4 OR agentnum IS NULL ) ) - AS balance_0_0 diff --git a/bin/find-overapplied b/bin/find-overapplied deleted file mode 100644 index 7973cef5b..000000000 --- a/bin/find-overapplied +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Data::Dumper; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::cust_credit; -use FS::cust_pay; - -my $user = shift or die &usage; -adminsuidsetup $user; - -my @credits = grep { $_->credited < 0 } qsearch('cust_credit', {}); -my @payments = grep { $_->unapplied < 0 } qsearch('cust_pay', {}); - -if ( @credits ) { - print scalar(@credits). " overapplied credits:\n". Dumper(@credits). "\n"; -} - -if ( @payments ) { - print scalar(@payments). " overapplied payments:\n". Dumper(@payments). "\n"; -} - -sub usage { - die "Usage:\n\n find-overapplied user\n"; -} - diff --git a/bin/fix-sequences b/bin/fix-sequences deleted file mode 100755 index dc4abd751..000000000 --- a/bin/fix-sequences +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/perl -Tw - -# run dbdef-create first! - -use strict; -use DBI; -use DBIx::DBSchema 0.26; -use DBIx::DBSchema::Table; -use DBIx::DBSchema::Column; -use DBIx::DBSchema::ColGroup::Unique; -use DBIx::DBSchema::ColGroup::Index; -use FS::UID qw(adminsuidsetup driver_name); -use FS::Record qw(dbdef); - -my $user = shift or die &usage; -my $dbh = adminsuidsetup $user; - -my $schema = dbdef(); - -#false laziness w/fs-setup -my @tables = scalar(@ARGV) - ? @ARGV - : grep { ! /^h_/ } $schema->tables; -foreach my $table ( @tables ) { - my $tableobj = $schema->table($table) - or die "unknown table $table (did you run dbdef-create?)\n"; - - my $primary_key = $tableobj->primary_key; - next unless $primary_key; - - my $col = $tableobj->column($primary_key); - - - next unless uc($col->type) eq 'SERIAL' - || ( driver_name eq 'Pg' - && defined($col->default) - && $col->default =~ /^nextval\(/i - ) - || ( driver_name eq 'mysql' - && defined($col->local) - && $col->local =~ /AUTO_INCREMENT/i - ); - - my $seq = "${table}_${primary_key}_seq"; - if ( driver_name eq 'Pg' - && defined($col->default) - && $col->default =~ /^nextval\('"(public\.)?(\w+_seq)"'::text\)$/ - ) { - $seq = $2; - } - - warn "fixing sequence for $table\n"; - - - my $sql = "SELECT setval( '$seq', - ( SELECT max($primary_key) FROM $table ) );"; - - #warn $col->default. " $seq\n$sql\n"; - $dbh->do( $sql ) or die $dbh->errstr; - -} - -$dbh->commit or die $dbh->errstr; -$dbh->disconnect or die $dbh->errstr; - -sub usage { - die "Usage:\n fix-sequences user [ table table ... ] \n"; -} - diff --git a/bin/freeside-init b/bin/freeside-init deleted file mode 100755 index fe12931fc..000000000 --- a/bin/freeside-init +++ /dev/null @@ -1,60 +0,0 @@ -#! /bin/sh -# -# start the freeside job queue daemon - -#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin -DAEMON=/usr/local/bin/freeside-queued -NAME=freeside-queued -DESC="freeside job queue daemon" -USER="ivan" - -test -f $DAEMON || exit 0 - -set -e - -case "$1" in - start) - echo -n "Starting $DESC: " -# start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid -b -m\ -# --exec $DAEMON - $DAEMON $USER & - echo "$NAME." - ;; - stop) - echo -n "Stopping $DESC: " - start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ - --exec $DAEMON - echo "$NAME." - rm /var/run/$NAME.pid - ;; - #reload) - # - # If the daemon can reload its config files on the fly - # for example by sending it SIGHUP, do it here. - # - # If the daemon responds to changes in its config file - # directly anyway, make this a do-nothing entry. - # - # echo "Reloading $DESC configuration files." - # start-stop-daemon --stop --signal 1 --quiet --pidfile \ - # /var/run/$NAME.pid --exec $DAEMON - #;; - restart|force-reload) - # - # If the "reload" option is implemented, move the "force-reload" - # option to the "reload" entry above. If not, "force-reload" is - # just the same as "restart". - # - $0 stop - sleep 1 - $0 start - ;; - *) - N=/etc/init.d/$NAME - # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 - echo "Usage: $N {start|stop|restart|force-reload}" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/bin/freeside-migrate-events b/bin/freeside-migrate-events deleted file mode 100644 index 76643b886..000000000 --- a/bin/freeside-migrate-events +++ /dev/null @@ -1,229 +0,0 @@ -#!/usr/bin/perl -w - -use strict; - -use FS::UID qw(adminsuidsetup); -use FS::Record qw( qsearch ); -use FS::part_bill_event; -use FS::part_event; -use FS::cust_bill_event; -use FS::cust_event; - -my $user = shift or die &usage; -adminsuidsetup($user); - -my %plan2action = ( - 'fee' => 'fee', - 'fee_percent' => 'NOTYET', #XXX need fee_percent action - 'suspend' => 'suspend', - 'suspend-if-balance' => 'NOTYET', #XXX "if balance" becomes a balance condition - 'suspend-if-pkgpart' => 'suspend_if_pkgpart', - 'suspend-unless-pkgpart' => 'suspend_unless_pkgpart', - 'cancel' => 'cancel', - 'addpost' => 'addpost', - 'comp' => 'NOTYET', #XXX or N/A or something - 'credit' => 'NOTYET', - 'realtime-card' => 'cust_bill_realtime_card', - 'realtime-check' => 'cust_bill_realtime_check', - 'realtime-lec' => 'cust_bill_realtime_lec', - 'batch-card' => 'cust_bill_batch', - #?'retriable' => - 'send' => 'cust_bill_send', - 'send_email' => 'NOTYET', - 'send_alternate' => 'cust_bill_send_alternate', - 'send_if_newest' => 'cust_bill_send_if_newest', - 'send_agent' => 'cust_bill_send_agent', - 'send_csv_ftp' => 'cust_bill_send_csv_ftp', - 'spool_csv', => 'cust_bill_spool_csv', - 'bill' => 'bill', - 'apply' => 'apply', - 'collect' => 'collect', -); - - -foreach my $part_bill_event ( - qsearch({ - 'table' => 'part_bill_event', - }) -) { - - print $part_bill_event->event; - - my $action = $plan2action{ $part_bill_event->plan }; - - if ( $action eq 'NOTYET' ) { - warn "not migrating part_bill_event.eventpart ".$part_bill_event->eventpart. - "; ". $part_bill_event->plan. " plan not (yet) handled"; - next; - } elsif ( ! $action ) { - warn "not migrating part_bill_event.eventpart ".$part_bill_event->eventpart. - "; unknown plan ". $part_bill_event->plan; - next; - } - - my %plandata = map { /^(\w+) (.*)$/; ($1, $2); } - split(/\n/, $part_bill_event->plandata); - - #XXX may need to fudge some plandata2option names!!! - - my $part_event = new FS::part_event { - 'event' => $part_bill_event->event, - 'eventtable' => 'cust_bill', - 'check_freq' => $part_bill_event->freq || '1d', - 'weight' => $part_bill_event->weight, - 'action' => $action, - 'disabled' => $part_bill_event->disabled, - }; - - my $error = $part_event->insert(\%plandata); - die "error inserting part_event: $error\n" if $error; - - print ' '. $part_event->eventpart; - - my $once = new FS::part_event_condition { - 'eventpart' => $part_event->eventpart, - 'conditionname' => 'once' - }; - $error = $once->insert; - die $error if $error; - - my $balance = new FS::part_event_condition { - 'eventpart' => $part_event->eventpart, - 'conditionname' => 'balance' - }; - $error = $balance->insert( 'balance' => 0 ); - die $error if $error; - - my $cust_bill_owed = new FS::part_event_condition { - 'eventpart' => $part_event->eventpart, - 'conditionname' => 'cust_bill_owed' - }; - $error = $cust_bill_owed->insert( 'owed' => 0 ); - die $error if $error; - - my $payby = new FS::part_event_condition { - 'eventpart' => $part_event->eventpart, - 'conditionname' => 'payby' - }; - $error = $payby->insert( 'payby' => { $part_bill_event->payby => 1 } ); - die $error if $error; - - if ( $part_bill_event->seconds ) { - - my $age = new FS::part_event_condition { - 'eventpart' => $part_event->eventpart, - 'conditionname' => 'cust_bill_age' - }; - $error = $age->insert( 'age' => ($part_bill_event->seconds/86400 ).'d' ); - die $error if $error; - - } - - #my $derror = $part_bill_event->delete; - #die "error removing part_bill_event: $derror\n" if $derror; - - foreach my $cust_bill_event ( - qsearch({ - 'table' => 'cust_bill_event', - 'hashref' => { 'eventpart' => $part_bill_event->eventpart, }, - }) - ) { - - my $cust_event = new FS::cust_event { - 'eventpart' => $part_event->eventpart, - 'tablenum' => $cust_bill_event->invnum, - '_date' => $cust_bill_event->_date, - 'status' => $cust_bill_event->status, - 'statustext' => $cust_bill_event->statustext, - }; - - my $cerror = $cust_event->insert; - #die "error inserting cust_event: $cerror\n" if $cerror; - warn "error inserting cust_event: $cerror\n" if $cerror; - - #my $dcerror = $cust_bill_event->delete; - #die "error removing cust_bill_event: $dcerror\n" if $dcerror; - - print "."; - - } - - print "\n"; - -} - -sub usage { - die "Usage:\n freeside-migrate-events user\n"; -} - -=head1 NAME - -freeside-migrate-events - Migrates 1.7/1.8-style invoice events to - 1.9/2.0-style billing events - -=head1 SYNOPSIS - - freeside-migrate-events - -=head1 DESCRIPTION - -Migrates events from L<FS::part_bill_event> to L<FS::part_event> and friends, -and from L<FS::cust_bill_event> records to L<FS::cust_event> - -=head1 BUGS - -Doesn't migrate any action options yet. - -Doesn't translate option names that changed. - -Doesn't migrate reasons. - -Doesn't delete the old events (which is not a big deal, since the new code -won't run them...) - -=head1 SEE ALSO - -=cut - -1; - -__END__ - -#part_bill_event part_event -# -#eventpart n/a -#event event -#freq check_freq -#payby part_event_condition.conditionname = payby -#eventcode PARSE_WITH_REGEX (probably can just get from plandata) -#seconds part_event_condition.conditionname = cust_bill_age -#plandata PARSE_WITH_REGEX (along with eventcode, yuck) -#reason part_event_option.optionname = reason -#disabled disabled -# - - #these might help parse existing eventcode - - $c =~ /^\s*\$cust_main\->(suspend|cancel|invoicing_list_addpost|bill|collect)\(\);\s*("";)?\s*$/ - - or $c =~ /^\s*\$cust_bill\->(comp|realtime_(card|ach|lec)|batch_card|send)\((%options)*\);\s*$/ - - or $c =~ /^\s*\$cust_bill\->send(_if_newest)?\(\'[\w\-\s]+\'\s*(,\s*(\d+|\[\s*\d+(,\s*\d+)*\s*\])\s*,\s*'[\w\@\.\-\+]*'\s*)?\);\s*$/ - -# or $c =~ /^\s*\$cust_main\->apply_payments; \$cust_main->apply_credits; "";\s*$/ - or $c =~ /^\s*\$cust_main\->apply_payments_and_credits; "";\s*$/ - - or $c =~ /^\s*\$cust_main\->charge\( \s*\d*\.?\d*\s*,\s*\'[\w \!\@\#\$\%\&\(\)\-\+\;\:\"\,\.\?\/]*\'\s*\);\s*$/ - - or $c =~ /^\s*\$cust_main\->suspend_(if|unless)_pkgpart\([\d\,\s]*\);\s*$/ - - or $c =~ /^\s*\$cust_bill\->cust_suspend_if_balance_over\([\d\.\s]*\);\s*$/ - - or do { - #log - return "illegal eventcode: $c"; - }; - - } - - diff --git a/bin/freeside-session-kill b/bin/freeside-session-kill deleted file mode 100755 index d5fd703f6..000000000 --- a/bin/freeside-session-kill +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw($conf); -use Fcntl qw(:flock); -use FS::UID qw(adminsuidsetup datasrc dbh); -use FS::Record qw(dbdef qsearch fields); -use FS::session; -use FS::svc_acct; - -my $user = shift or die &usage; -adminsuidsetup $user; - -my $sessionlock = "/usr/local/etc/freeside/session-kill.lock.". datasrc; - -open(LOCK,"+>>$sessionlock") or die "Can't open $sessionlock: $!"; -select(LOCK); $|=1; select(STDOUT); -unless ( flock(LOCK,LOCK_EX|LOCK_NB) ) { - seek(LOCK,0,0); - my($pid)=<LOCK>; - chop($pid); - #no reason to start loct of blocking processes - die "Is another session kill process running under pid $pid?\n"; -} -seek(LOCK,0,0); -print LOCK $$,"\n"; - -$FS::UID::AutoCommit = 0; - -my $now = time; - -#uhhhhh - -use DBIx::DBSchema; -use DBIx::DBSchema::Table; #down this path lies madness -use DBIx::DBSchema::Column; - -my $dbdef = dbdef or die; -#warn $dbdef; -#warn $dbdef->{'tables'}; -#warn keys %{$dbdef->{'tables'}}; -my $session_table = $dbdef->table('session') or die; -my $svc_acct_table = $dbdef->table('svc_acct') or die; - -my $session_svc_acct = new DBIx::DBSchema::Table ( 'session,svc_acct', '', '', '', - map( DBIx::DBSchema::Column->new( "session.$_", - $session_table->column($_)->type, - $session_table->column($_)->null, - $session_table->column($_)->length, - ), $session_table->columns() ), - map( DBIx::DBSchema::Column->new( "svc_acct.$_", - $svc_acct_table->column($_)->type, - $svc_acct_table->column($_)->null, - $svc_acct_table->column($_)->length, - ), $svc_acct_table->columns ), -# map("svc_acct.$_", $svc_acct_table->columns), -); - -$dbdef->addtable($session_svc_acct); #madness, i tell you - -$FS::Record::DEBUG = 1; -my @session = qsearch('session,svc_acct', {}, '', ' WHERE '. join(' AND ', - 'svc_acct.svcnum = session.svcnum', - '( session.logout IS NULL OR session.logout = 0 )', - "( $now - session.login ) >= svc_acct.seconds" -). " FOR UPDATE" ); - -my $dbh = dbh; - -foreach my $join ( @session ) { - - my $session = new FS::session ( { - map { $_ => $join->{'Hash'}{"session.$_"} } fields('session') - } ); #see no evil - - my $svc_acct = new FS::svc_acct ( { - map { $_ => $join->{'Hash'}{"svc_acct.$_"} } fields('svc_acct') - } ); - - #false laziness w/ fs_session_server - my $nsession = new FS::session ( { $session->hash } ); - my $error = $nsession->replace($session); - if ( $error ) { - $dbh->rollback; - die $error; - } - my $time = $nsession->logout - $nsession->login; - my $new_svc_acct = new FS::svc_acct ( { $svc_acct->hash } ); - my $seconds = $new_svc_acct->seconds; - $seconds -= $time; - $seconds = 0 if $seconds < 0; - $new_svc_acct->seconds( $seconds ); - $error = $new_svc_acct->replace( $svc_acct ); - warn "can't debit time from ". $svc_acct->username. ": $error\n"; #don't want to rollback, though - #ssenizal eslaf - -} - -$dbh->commit or die $dbh->errstr; - -sub usage { - die "Usage:\n\n freeside-session-kill user\n"; -} diff --git a/bin/freeside-upgrade-unicode b/bin/freeside-upgrade-unicode deleted file mode 100755 index c60336567..000000000 --- a/bin/freeside-upgrade-unicode +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash - -# based on example code from -# http://blog.larik.nl:80/articles/2006/03/13/upgrade-your-postgresql-databases-to-unicode -# by frodo larik / blog.larik.nl - -db=freeside - -# This script updates all dbs to use unicode - -dbhost='localhost' -username='freeside' -#odir=${HOME}/freeside_unicode_upgrade -odir=/home/ivan/FREESIDE_unicode_upgrade - -if [ "${db}X" == "X" ] -then - echo "I need a db for host ${dbhost} and username ${username} $db" - exit -fi - -if [ ! -d $odir ] -then - mkdir $odir || exit "Exit at mkdir" -fi - -#echo -n "Enter a comma-separated list of country codes to keep [US,CA]:" -#countries=`line` -#if [ "${countries}X" == "X" ] -#then -# countries='US,CA' -#fi - -echo "delete from cust_main_county where 0 = ( select count(*) from cust_main where cust_main_county.country = cust_main.country );" | su freeside -c 'psql freeside' - -dump_sql=${odir}/${db}_out.sql -conv_sql=${odir}/${db}_conv.sql -result_sql=${odir}/${db}_result.txt -sql_diff=${odir}/${db}.diff - -# 0. stop - -/etc/init.d/freeside stop || die "can't stop freeside" -/etc/init.d/apache stop || die "can't stop apache" -/etc/init.d/apache2 stop || die "can't stop apache" - -echo "Dumping $db database to $dump_sql" - -su $username -c "pg_dump --host=$dbhost --username=$username -D --format=p $db" >$dump_sql || exit "exit at pg_dump" - -echo "Removing invalid characters from the dump" - -iconv -c -f UTF-8 -t UTF-8 ${dump_sql} > ${conv_sql} || exit "exit at iconv" - -echo "*** Making a diff from the dump: check $sql_diff ***" - -diff $dump_sql $conv_sql > $sql_diff - -echo "Removing current database" - -su $freeside -c "dropdb --host=$dbhost --username=$username $db" || exit "exit at dropdb" - -echo "Creating a new databse" - -su freeside -c "createdb --encoding='unicode' --host=$dbhost --username=$username $db" || exit "exit at createdb" - -echo "Loading data into new database" -su freeside -c "psql -f $conv_sql -o $result_sql -h $dbhost -U $username $db" || exit "exit at psql ${extra_string}" - -# 99. -/etc/init.d/freeside start || die "oh no, can't start freeside" -/etc/init.d/apache start || die "oh no, can't start apache" diff --git a/bin/freeside.import b/bin/freeside.import deleted file mode 100644 index fdfcc083e..000000000 --- a/bin/freeside.import +++ /dev/null @@ -1,146 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use DBI; - -my $s_datasrc = 'DBI:mysql:host=ns1.enetonline.net;port=3307;user=ivan;dbname=freeside'; -my $s_dbuser = 'ivan'; -my $s_dbpass = ''; - -my $d_datasrc = 'DBI:Pg:dbname=freeside'; -my $d_dbuser = 'freeside'; -my $d_dbpass = ''; - -#my @tables = qw( -#addr_block -#agent -#agent_type -#cust_bill -#cust_bill_event -#cust_bill_pay -#cust_bill_pkg -#cust_bill_pkg_detail -#cust_credit -#cust_credit_bill -#cust_credit_refund -#cust_main -#cust_main_county -#cust_main_invoice -#cust_pay -#cust_pay_batch -#cust_pkg -#cust_refund -#cust_svc -#cust_tax_exempt -#domain_record -#export_svc -#h_addr_block -#h_agent -#h_agent_type -#h_cust_bill -#h_cust_bill_event -#h_cust_bill_pay -#h_cust_bill_pkg -#h_cust_bill_pkg_detail -#h_cust_credit -#h_cust_credit_bill -#h_cust_credit_refund -#h_cust_main -#h_cust_main_county -#h_cust_main_invoice -#h_cust_pay -#h_cust_pay_batch -#h_cust_pkg -#h_cust_refund -#h_cust_svc -#h_cust_tax_exempt -#h_domain_record -#h_export_svc -#h_msgcat -#h_nas -#h_part_bill_event -#h_part_export -#h_part_export_option -#h_part_pkg -#h_part_pop_local -#h_part_referral -#h_part_svc -#h_part_svc_column -#h_part_svc_router -#h_pkg_svc -#h_port -#h_prepay_credit -#h_queue -#h_queue_arg -#h_queue_depend -#h_radius_usergroup -#h_router -#h_router_field -#h_sb_field -#h_session -#h_svc_acct -#h_svc_acct_pop -#h_svc_broadband -#h_svc_domain -#h_svc_forward -#h_svc_www -#h_type_pkgs -#msgcat -#nas -#part_bill_event -#part_export -#part_export_option -#part_pkg - -my @tables = qw( -part_pop_local -part_referral -part_router_field -part_sb_field -part_svc -part_svc_column -part_svc_router -pkg_svc -port -prepay_credit -queue -queue_arg -queue_depend -radius_usergroup -router -router_field -sb_field -session -svc_acct -svc_acct_pop -svc_broadband -svc_domain -svc_forward -svc_www -type_pkgs -); - -my $s_dbh = DBI->connect($s_datasrc, $s_dbuser, $s_dbpass) or die $DBI::errstr; -my $d_dbh = DBI->connect($d_datasrc, $d_dbuser, $d_dbpass) or die $DBI::errstr; - -foreach my $table ( @tables ) { - $d_dbh->do("delete from $table"); - - my $s_sth = $s_dbh->prepare("select * from $table"); - $s_sth->execute or die $s_sth->errstr; - - my $row; - while ( $row = $s_sth->fetchrow_arrayref ) { - my $d_sth = $d_dbh->prepare( - "insert into $table ( ". - join(', ', @{$s_sth->{NAME}} ). - ' ) VALUES ( '. - join(', ', map { '?' } @{$s_sth->{NAME}} ). - ' )' - ) or die $d_dbh->errstr; - - $d_sth->execute(@$row) or die $d_sth->errstr; - - } -} - diff --git a/bin/fs-migrate-cust_tax_exempt b/bin/fs-migrate-cust_tax_exempt deleted file mode 100755 index ede80b08e..000000000 --- a/bin/fs-migrate-cust_tax_exempt +++ /dev/null @@ -1,323 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Time::Local; -use Date::Format; -use Time::Duration; -use FS::UID qw(adminsuidsetup); -use FS::Record qw( qsearch dbh ); -use FS::cust_tax_exempt; -#use FS::cust_bill; -use FS::h_cust_bill; -use FS::h_cust_tax_exempt; -use FS::cust_bill_pkg; -use FS::cust_tax_exempt_pkg; -#use Data::Dumper; - -my $start = time; - -adminsuidsetup shift; - -my $fuz = 7; #seconds - - #site-specific rewrites -my %rewrite = ( - #cust_tax_exempt.exemptnum => { 'field' => 'newvalue', ... }, - '23' => { month=>10, year=>2005, invnum=>1640 }, - - #etc. -); - -my @cust_tax_exempt = qsearch('cust_tax_exempt', {} ); -my $num_cust_tax_exempt = scalar(@cust_tax_exempt); -my $num_cust_tax_exempt_migrated = 0; -my $total_cust_tax_exempt_migrated = 0; -my $num_cust_tax_exempt_pkg_migrated = 0; -my $total_cust_tax_exempt_pkg_migrated = 0; - -$FS::UID::AutoCommit = 0; - -foreach my $cust_tax_exempt ( @cust_tax_exempt ) { - - if ( exists $rewrite{ $cust_tax_exempt->exemptnum } ) { - my $hashref = $rewrite{ $cust_tax_exempt->exemptnum }; - $cust_tax_exempt->setfield($_, $hashref->{$_}) - foreach keys %$hashref; - } - - if ( $cust_tax_exempt->year < 1990 ) { - warn "exemption year is ". $cust_tax_exempt->year. - "; not migrating exemption ". $cust_tax_exempt->exemptnum. - ' for custnum '. $cust_tax_exempt->custnum. "\n\n"; - next; - } - - # also make sure cust_bill_pkg record dates contain the month/year -# my $mon = $cust_tax_exempt->month; -# my $year = $cust_tax_exempt->year; -# $mon--; -# my $edate_after = timelocal(0,0,0,1,$mon,$year); -# $mon++; -# if ( $mon >= 12 ) { $mon-=12; $year++ }; -# my $sdate_before = timelocal(0,0,0,1,$mon,$year); - - my $mon = $cust_tax_exempt->month; - my $year = $cust_tax_exempt->year; - if ( $mon >= 12 ) { $mon-=12; $year++ }; - my $sdate_before = timelocal(0,0,0,1,$mon,$year); - #$mon++; - #if ( $mon >= 12 ) { $mon-=12; $year++ }; - my $edate_after = timelocal(0,0,0,1,$mon,$year); - - # !! start a transaction? (yes, its started) - - my @h_cust_tax_exempt = qsearch({ - 'table' => 'h_cust_tax_exempt', - 'hashref' => { 'exemptnum' => $cust_tax_exempt->exemptnum }, - 'extra_sql' => " AND ( history_action = 'insert' - OR history_action = 'replace_new' ) - ORDER BY history_date ASC - ", - }); - - my $amount_so_far = 0; - my $num_cust_tax_exempt_pkg = 0; - my $total_cust_tax_exempt_pkg = 0; - H_CUST_TAX_EXEMPT: foreach my $h_cust_tax_exempt ( @h_cust_tax_exempt ) { - - my $amount = sprintf('%.2f', $h_cust_tax_exempt->amount - $amount_so_far ); - $amount_so_far += $amount; - -# print Dumper($h_cust_tax_exempt), "\n"; - - #find a matching cust_bill record - # (print time differences and choose a meaningful threshold, should work) - - my @h_cust_bill = (); - if ( $cust_tax_exempt->invnum ) { - #warn "following invnum ". $cust_tax_exempt->invnum. - # " kludge for cust_tax_exempt ". $cust_tax_exempt->exemptnum. "\n"; - - @h_cust_bill = qsearch({ - #'table' => 'cust_bill', - 'table' => 'h_cust_bill', - 'hashref' => { 'custnum' => $h_cust_tax_exempt->custnum, - 'invnum' => $cust_tax_exempt->invnum, - 'history_action' => 'insert', - }, - #'extra_sql' => - # ' AND history_date <= '. ( $h_cust_tax_exempt->history_date + $fuz ). - # ' AND history_date > '. ( $h_cust_tax_exempt->history_date - $fuz ), - }); - - } else { - - @h_cust_bill = qsearch({ - #'table' => 'cust_bill', - 'table' => 'h_cust_bill', - 'hashref' => { 'custnum' => $h_cust_tax_exempt->custnum, - 'history_action' => 'insert', - }, - 'extra_sql' => - ' AND history_date <= '. ( $h_cust_tax_exempt->history_date + $fuz ). - ' AND history_date > '. ( $h_cust_tax_exempt->history_date - $fuz ), - }); - - } - - if ( scalar(@h_cust_bill) != 1 ) { - warn ' '. scalar(@h_cust_bill). ' h_cust_bill records matching '. - 'h_cust_tax_exempt.historynum '. $h_cust_tax_exempt->historynum. - "; not migrating (adjust fuz factor?)\n"; - next; - } - - my $h_cust_bill = $h_cust_bill[0]; - -# print Dumper(@cust_bill), "\n\n"; - - # then find a matching cust_bill_pkg record with part_pkg.taxclass record - # that matches the one pointed to by cust_tax_exempt.taxnum - # (hopefully just one, see how many we can match automatically) - - my $cust_main_county = $cust_tax_exempt->cust_main_county; - my $taxclass = $cust_main_county->taxclass; - - my $hashref = { - 'custnum' => $cust_tax_exempt->custnum, - 'invnum' => $h_cust_bill->invnum, - 'pkgnum' => { op=>'>', value=>0, }, - }; - unless ( $cust_tax_exempt->invnum ) { - # also make sure cust_bill_pkg record dates contain the month/year - - #$hashref->{'sdate'} = { op=>'<', value=>$sdate_before }; - $hashref->{'sdate'} = { op=>'<=', value=>$sdate_before }; - - #$hashref->{'edate'} = { op=>'>', value=>$edate_after }; - $hashref->{'edate'} = { op=>'>=', value=>$edate_after }; - } - - if ( $cust_tax_exempt->billpkgnum ) { - $hashref->{'billpkgnum'} = $cust_tax_exempt->billpkgnum; - } - - my $extra_sql = 'ORDER BY billpkgnum'; - - $extra_sql = "AND taxclass = '$taxclass' $extra_sql" - unless $cust_tax_exempt->ignore_current_taxclass; - - my @cust_bill_pkg = qsearch({ - 'select' => 'cust_bill_pkg.*, part_pkg.freq', - 'table' => 'cust_bill_pkg', - 'addl_from' => 'LEFT JOIN cust_pkg using ( pkgnum ) '. - 'LEFT JOIN part_pkg using ( pkgpart ) ', - 'hashref' => $hashref, - 'extra_sql' => $extra_sql, - }); - - foreach my $cust_bill_pkg ( @cust_bill_pkg ) { - $cust_bill_pkg->exemptable_per_month( - sprintf('%.2f', - ( $cust_bill_pkg->setup + $cust_bill_pkg->recur ) - / - ( $cust_bill_pkg[0]->freq || 1 ) - ) - ); - } - - my(@cust_tax_exempt_pkg) = (); - if ( scalar(@cust_bill_pkg) == 1 - && $cust_bill_pkg[0]->exemptable_per_month >= $amount - ) - { - - my $cust_bill_pkg = $cust_bill_pkg[0]; - - # finally, create an appropriate cust_tax_exempt_pkg record - - push @cust_tax_exempt_pkg, new FS::cust_tax_exempt_pkg { - 'billpkgnum' => $cust_bill_pkg->billpkgnum, - 'taxnum' => $cust_tax_exempt->taxnum, - 'year' => $cust_tax_exempt->year, - 'month' => $cust_tax_exempt->month, - 'amount' => $amount, - }; - - } else { - -# warn ' '. scalar(@cust_bill_pkg). ' cust_bill_pkg records for invoice '. -# $h_cust_bill->invnum. -# "; not migrating h_cust_tax_exempt historynum ". -# $h_cust_tax_exempt->historynum. " for \$$amount\n"; -# warn " *** DIFFERENT DATES ***\n" -# if grep { $_->sdate != $cust_bill_pkg[0]->sdate -# || $_->edate != $cust_bill_pkg[0]->edate -# } @cust_bill_pkg; -# foreach ( @cust_bill_pkg ) { -# warn ' '. $_->billpkgnum. ': '. $_->setup. 's/'. $_->recur.'r'. -# ' '. time2str('%D', $_->sdate). '-'. time2str('%D', $_->edate). -# "\n"; -# } -# -# next; - - my $remaining = $amount; - foreach my $cust_bill_pkg ( @cust_bill_pkg ) { - last unless $remaining; - my $this_amount =sprintf('%.2f', - $remaining <= $cust_bill_pkg->exemptable_per_month - ? $remaining - : $cust_bill_pkg->exemptable_per_month - );; - - push @cust_tax_exempt_pkg, new FS::cust_tax_exempt_pkg { - 'billpkgnum' => $cust_bill_pkg->billpkgnum, - 'taxnum' => $cust_tax_exempt->taxnum, - 'year' => $cust_tax_exempt->year, - 'month' => $cust_tax_exempt->month, - 'amount' => $this_amount, - }; - - $remaining -= $this_amount; - - } - - } - - foreach my $cust_tax_exempt_pkg ( @cust_tax_exempt_pkg ) { - my $error = $cust_tax_exempt_pkg->insert; - #my $error = $cust_tax_exempt_pkg->check; - if ( $error ) { - warn "*** error inserting cust_tax_exempt_pkg record: $error\n"; - next; #not necessary.. H_CUST_TAX_EXEMPT; - - #not necessary, incorrect $total_cust_tax_exempt_pkg will error it out - # roll back at least the entire cust_tax_exempt transaction - # next CUST_TAX_EXEMPT; - } - - $num_cust_tax_exempt_pkg++; - - $total_cust_tax_exempt_pkg += $cust_tax_exempt_pkg->amount; - - } - - } - - $total_cust_tax_exempt_pkg = sprintf('%.2f', $total_cust_tax_exempt_pkg ); - - unless ( $total_cust_tax_exempt_pkg == $cust_tax_exempt->amount ) { - warn "total h_ amount $total_cust_tax_exempt_pkg != cust_tax_exempt.amount ". - $cust_tax_exempt->amount. - ";\n not migrating exemption ". $cust_tax_exempt->exemptnum. " for ". - $cust_tax_exempt->month. '/'. $cust_tax_exempt->year. - ' (custnum '. $cust_tax_exempt->custnum. ") ". - #"\n (sdate < ". time2str('%D', $sdate_before ). - "\n (sdate <= ". time2str('%D', $sdate_before ). " [$sdate_before]". - #' / edate > '. time2str('%D', $edate_after ). ')'. - ' / edate >= '. time2str('%D', $edate_after ). " [$edate_after])". - "\n\n"; - - # roll back at least the entire cust_tax_exempt transaction - dbh->rollback; - - # next CUST_TAX_EXEMPT; - next; - } - - # remove the cust_tax_exempt record - my $error = $cust_tax_exempt->delete; - if ( $error ) { - #roll back at least the entire cust_tax_exempt transaction - dbh->rollback; - - #next CUST_TAX_EXEMPT; - next; - } - - $num_cust_tax_exempt_migrated++; - $total_cust_tax_exempt_migrated += $cust_tax_exempt->amount; - - $num_cust_tax_exempt_pkg_migrated += $num_cust_tax_exempt_pkg; - $total_cust_tax_exempt_pkg_migrated += $total_cust_tax_exempt_pkg; - - # commit the transaction - dbh->commit; - -} - -$total_cust_tax_exempt_migrated = - sprintf('%.2f', $total_cust_tax_exempt_migrated ); -$total_cust_tax_exempt_pkg_migrated = - sprintf('%.2f', $total_cust_tax_exempt_pkg_migrated ); - -warn - "$num_cust_tax_exempt_migrated / $num_cust_tax_exempt (". - sprintf('%.2f', 100 * $num_cust_tax_exempt_migrated / $num_cust_tax_exempt). - '%) cust_tax_exempt records migrated ($'. $total_cust_tax_exempt_migrated. - ")\n to $num_cust_tax_exempt_pkg_migrated cust_tax_exempt_pkg records". - ' ($'. $total_cust_tax_exempt_pkg_migrated. ')'. - "\n in ". duration(time-$start). "\n" -; - diff --git a/bin/fs-migrate-part_svc b/bin/fs-migrate-part_svc deleted file mode 100755 index b0f3ac57e..000000000 --- a/bin/fs-migrate-part_svc +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/perl - -use strict; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch fields); -use FS::part_svc; - -my $user = shift or die &usage; -my $dbh = adminsuidsetup $user; - -my $oldAutoCommit = $FS::UID::AutoCommit; -local $FS::UID::AutoCommit = 0; - -foreach my $part_svc ( qsearch('part_svc', {} ) ) { - foreach my $field ( - grep { defined($part_svc->getfield($part_svc->svcdb.'__'.$_.'_flag') ) } - fields($part_svc->svcdb) - ) { - my $flag = $part_svc->getfield($part_svc->svcdb.'__'.$field.'_flag'); - if ( uc($flag) =~ /^([DF])$/ ) { - my $part_svc_column = new FS::part_svc_column { - 'svcpart' => $part_svc->svcpart, - 'columnname' => $field, - 'columnflag' => $1, - 'columnvalue' => $part_svc->getfield($part_svc->svcdb.'__'.$field), - }; - my $error = $part_svc_column->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - die $error; - } - } - } -} - -$dbh->commit or die $dbh->errstr; - -sub usage { - die "Usage:\n fs-migrate-part_svc user\n"; -} - diff --git a/bin/fs-migrate-payref b/bin/fs-migrate-payref deleted file mode 100755 index 158419706..000000000 --- a/bin/fs-migrate-payref +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/perl - -use strict; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::cust_pay; -use FS::cust_refund; - -my $user = shift or die &usage; -my $dbh = adminsuidsetup $user; - -# apply payments to invoices - -foreach my $cust_pay ( qsearch('cust_pay', {} ) ) { - my $error = $cust_pay->upgrade_replace; - warn $error if $error; -} - -# apply refunds to credits - -foreach my $cust_refund ( qsearch('cust_refund') ) { - my $error = $cust_refund->upgrade_replace; - warn $error if $error; -} - -# ? apply credits to invoices - -sub usage { - die "Usage:\n fs-migrate-payref user\n"; -} - diff --git a/bin/fs-migrate-svc_acct_sm b/bin/fs-migrate-svc_acct_sm deleted file mode 100755 index 07f7b611c..000000000 --- a/bin/fs-migrate-svc_acct_sm +++ /dev/null @@ -1,227 +0,0 @@ -#!/usr/bin/perl -Tw -# -# jeff@cmh.net 01-Jul-20 - -#to delay loading dbdef until we're ready -#BEGIN { $FS::Record::setup_hack = 1; } - -use strict; -use Term::Query qw(query); -#use DBI; -#use DBIx::DBSchema; -#use DBIx::DBSchema::Table; -#use DBIx::DBSchema::Column; -#use DBIx::DBSchema::ColGroup::Unique; -#use DBIx::DBSchema::ColGroup::Index; -use FS::Conf; -use FS::UID qw(adminsuidsetup datasrc checkeuid getsecrets); -use FS::Record qw(qsearch qsearchs); -use FS::svc_domain; -use FS::svc_forward; -use vars qw( $conf $old_default_domain %part_domain_svc %part_acct_svc %part_forward_svc $svc_acct $svc_acct_sm $error); - -die "Not running uid freeside!" unless checkeuid(); - -my $user = shift or die &usage; -getsecrets($user); - -$conf = new FS::Conf; -$old_default_domain = $conf->config('domain'); - -#needs to match FS::Record -#my($dbdef_file) = "/usr/local/etc/freeside/dbdef.". datasrc; - -### -# This section would be the appropriate place to manipulate -# the schema & tables. -### - -## we need to add the domsvc to svc_acct -## we must add a svc_forward record.... -## I am thinking that the fields svcnum (int), destsvc (int), and -## dest (varchar (80)) are appropriate, with destsvc/dest an either/or -## much in the spirit of cust_main_invoice - -### -# massage the data -### - -my($dbh)=adminsuidsetup $user; - -$|=1; - -$FS::svc_Common::noexport_hack = 1; -$FS::svc_domain::whois_hack = 1; - -%part_domain_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_domain'}); -%part_acct_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); -%part_forward_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_forward'}); - -die "No services with svcdb svc_domain!\n" unless %part_domain_svc; -die "No services with svcdb svc_acct!\n" unless %part_acct_svc; -die "No services with svcdb svc_forward!\n" unless %part_forward_svc; - -my($svc_domain) = qsearchs('svc_domain', { 'domain' => $old_default_domain }); -if (! $svc_domain || $svc_domain->domain != $old_default_domain) { - print <<EOF; - -Your database currently does not contain a svc_domain record for the -domain $old_default_domain. Would you like me to add one for you? -EOF - - my($response)=scalar(<STDIN>); - chop $response; - if ($response =~ /^[yY]/) { - print "\n\n", &menu_domain_svc, "\n", <<END; -I need to create new domain accounts. Which service shall I use for that? -END - my($domain_svcpart)=&getdomainpart; - - $svc_domain = new FS::svc_domain { - 'domain' => $old_default_domain, - 'svcpart' => $domain_svcpart, - 'action' => 'M', - }; -# $error=$svc_domain->insert && die "Error adding domain $old_default_domain: $error"; - $error=$svc_domain->insert; - die "Error adding domain $old_default_domain: $error" if $error; - }else{ - print <<EOF; - - This program cannot function properly until a svc_domain record matching -your conf_dir/domain file exists. -EOF - - exit 1; - } -} - -print "\n\n", &menu_acct_svc, "\n", <<END; -I may need to create some new pop accounts and set up forwarding to them -for some users. Which service shall I use for that? -END -my($pop_svcpart)=&getacctpart; - -print "\n\n", &menu_forward_svc, "\n", <<END; -I may need to create some new forwarding for some users. Which service -shall I use for that? -END -my($forward_svcpart)=&getforwardpart; - -sub menu_domain_svc { - ( join "\n", map "$_: ".$part_domain_svc{$_}->svc, sort keys %part_domain_svc ). "\n"; -} -sub menu_acct_svc { - ( join "\n", map "$_: ".$part_acct_svc{$_}->svc, sort keys %part_acct_svc ). "\n"; -} -sub menu_forward_svc { - ( join "\n", map "$_: ".$part_forward_svc{$_}->svc, sort keys %part_forward_svc ). "\n"; -} -sub getdomainpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %part_domain_svc ]; - $^W=1; - $return; -} -sub getacctpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %part_acct_svc ]; - $^W=1; - $return; -} -sub getforwardpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %part_forward_svc ]; - $^W=1; - $return; -} - - -#migrate data - -my(@svc_accts) = qsearch('svc_acct', {}); -foreach $svc_acct (@svc_accts) { - my(@svc_acct_sms) = qsearch('svc_acct_sm', { - domuid => $svc_acct->getfield('uid'), - } - ); - - # Ok.. we've got the svc_acct record, and an array of svc_acct_sm's - # What do we do from here? - - # The intuitive: - # plop the svc_acct into the 'default domain' - # and then represent the svc_acct_sm's with svc_forwards - # they can be gussied up manually, later - # - # Perhaps better: - # when no svc_acct_sm exists, place svc_acct in 'default domain' - # when one svc_acct_sm exists, place svc_acct in corresponding - # domain & possibly create a svc_forward in 'default domain' - # when multiple svc_acct_sm's exists (in different domains) we'd - # better use the 'intuitive' approach. - # - # Specific way: - # as 'perhaps better,' but we may be able to guess which domain - # is correct by comparing the svcnum of domains to the username - # of the svc_acct - # - - # The intuitive way: - - my $def_acct = new FS::svc_acct ( { $svc_acct->hash } ); - $def_acct->setfield('domsvc' => $svc_domain->getfield('svcnum')); - $error = $def_acct->replace($svc_acct); - die "Error replacing svc_acct for " . $def_acct->username . " : $error" if $error; - - foreach $svc_acct_sm (@svc_acct_sms) { - - my($domrec)=qsearchs('svc_domain', { - svcnum => $svc_acct_sm->getfield('domsvc'), - }) || die "svc_acct_sm references invalid domsvc $svc_acct_sm->getfield('domsvc')\n"; - - if ($svc_acct_sm->getfield('domuser') =~ /^\*$/) { - - my($newdom) = new FS::svc_domain ( { $domrec->hash } ); - $newdom->setfield('catchall', $svc_acct->svcnum); - $newdom->setfield('action', "M"); - $error = $newdom->replace($domrec); - die "Error replacing svc_domain for (anything)@" . $domrec->domain . " : $error" if $error; - - } else { - - my($newacct) = new FS::svc_acct { - 'svcpart' => $pop_svcpart, - 'username' => $svc_acct_sm->getfield('domuser'), - 'domsvc' => $svc_acct_sm->getfield('domsvc'), - 'dir' => '/dev/null', - }; - $error = $newacct->insert; - die "Error adding svc_acct for " . $newacct->username . " : $error" if $error; - - my($newforward) = new FS::svc_forward { - 'svcpart' => $forward_svcpart, - 'srcsvc' => $newacct->getfield('svcnum'), - 'dstsvc' => $def_acct->getfield('svcnum'), - }; - $error = $newforward->insert; - die "Error adding svc_forward for " . $newacct->username ." : $error" if $error; - } - - $error = $svc_acct_sm->delete; - die "Error deleting svc_acct_sm for " . $svc_acct_sm->domuser ." : $error" if $error; - - }; - -}; - - -$dbh->commit or die $dbh->errstr; -$dbh->disconnect or die $dbh->errstr; - -print "svc_acct_sm records sucessfully migrated\n"; - -sub usage { - die "Usage:\n fs-migrate-svc_acct_sm user\n"; -} - diff --git a/bin/fs-radius-add-check b/bin/fs-radius-add-check deleted file mode 100755 index 4e4769e58..000000000 --- a/bin/fs-radius-add-check +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/perl -Tw - -# quick'n'dirty hack of fs-setup to add radius attributes - -use strict; -use DBI; -use FS::UID qw(adminsuidsetup checkeuid getsecrets); -use FS::raddb; - -die "Not running uid freeside!" unless checkeuid(); - -my %attrib2db = - map { lc($FS::raddb::attrib{$_}) => $_ } keys %FS::raddb::attrib; - -my $user = shift or die &usage; -getsecrets($user); - -my $dbh = adminsuidsetup $user; - -### - -print "\n\n", <<END, ":"; -Enter the additional RADIUS check attributes you need to track for -each user, separated by whitespace. -END -my @attributes = map { $attrib2db{lc($_)} or die "unknown attribute $_"; } - split(" ",&getvalue); - -sub getvalue { - my($x)=scalar(<STDIN>); - chop $x; - $x; -} - -### - -my($char_d) = 80; #default maxlength for text fields - -### - -foreach my $attribute ( @attributes ) { - - my $statement = - "ALTER TABLE svc_acct ADD COLUMN rc_$attribute varchar($char_d) NULL"; - my $sth = $dbh->prepare( $statement ) - or warn "Error preparing $statement: ". $dbh->errstr; - my $rc = $sth->execute - or warn "Error executing $statement: ". $sth->errstr; - - $statement = - "ALTER TABLE h_svc_acct ADD COLUMN rc_$attribute varchar($char_d) NULL"; - $sth = $dbh->prepare( $statement ) - or warn "Error preparing $statement: ". $dbh->errstr; - $rc = $sth->execute - or warn "Error executing $statement: ". $sth->errstr; - -} - -$dbh->commit or die $dbh->errstr; - -$dbh->disconnect or die $dbh->errstr; - -print "\n\n", "Now you must run dbdef-create.\n\n"; - -sub usage { - die "Usage:\n fs-radius-add-check user\n"; -} - diff --git a/bin/fs-radius-add-reply b/bin/fs-radius-add-reply deleted file mode 100755 index 3de01374f..000000000 --- a/bin/fs-radius-add-reply +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/perl -Tw - -# quick'n'dirty hack of fs-setup to add radius attributes - -use strict; -use DBI; -use FS::UID qw(adminsuidsetup checkeuid getsecrets); -use FS::raddb; - -die "Not running uid freeside!" unless checkeuid(); - -my %attrib2db = - map { lc($FS::raddb::attrib{$_}) => $_ } keys %FS::raddb::attrib; - -my $user = shift or die &usage; -getsecrets($user); - -my $dbh = adminsuidsetup $user; - -### - -print "\n\n", <<END, ":"; -Enter the additional RADIUS reply attributes you need to track for -each user, separated by whitespace. -END -my @attributes = map { $attrib2db{lc($_)} or die "unknown attribute $_"; } - split(" ",&getvalue); - -sub getvalue { - my($x)=scalar(<STDIN>); - chop $x; - $x; -} - -### - -my($char_d) = 80; #default maxlength for text fields - -### - -foreach my $attribute ( @attributes ) { - - my $statement = - "ALTER TABLE svc_acct ADD COLUMN radius_$attribute varchar($char_d) NULL"; - my $sth = $dbh->prepare( $statement ) - or warn "Error preparing $statement: ". $dbh->errstr; - my $rc = $sth->execute - or warn "Error executing $statement: ". $sth->errstr; - - $statement = - "ALTER TABLE h_svc_acct ADD COLUMN radius_$attribute varchar($char_d) NULL"; - $sth = $dbh->prepare( $statement ) - or warn "Error preparing $statement: ". $dbh->errstr; - $rc = $sth->execute - or warn "Error executing $statement: ". $sth->errstr; - -} - -$dbh->commit or die $dbh->errstr; - -$dbh->disconnect or die $dbh->errstr; - -print "\n\n", "Now you must run dbdef-create.\n\n"; - -sub usage { - die "Usage:\n fs-radius-add-reply user\n"; -} - - diff --git a/bin/generate-prepay b/bin/generate-prepay deleted file mode 100755 index cb4ba7fc6..000000000 --- a/bin/generate-prepay +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use FS::UID qw(adminsuidsetup); -use FS::prepay_credit; - -require 5.004; #srand(time|$$); - -my $user = shift or die &usage; -&adminsuidsetup( $user ); - -my $amount = shift or die &usage; - -my $seconds = shift or die &usage; - -my $num_digits = shift or die &usage; - -my $num_entries = shift or die &usage; - -for ( 1 .. $num_entries ) { - my $identifier = join( '', map int(rand(10)), ( 1 .. $num_digits ) ); - my $prepay_credit = new FS::prepay_credit { - 'identifier' => $identifier, - 'amount' => $amount, - 'seconds' => $seconds, - }; - my $error = $prepay_credit->insert; - die $error if $error; - print "$identifier\n"; -} - -sub usage { - die "Usage:\n\n generate-prepay user amount seconds num_digits num_entries"; -} - diff --git a/bin/generate-raddb b/bin/generate-raddb deleted file mode 100755 index af21c05a8..000000000 --- a/bin/generate-raddb +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/perl - -# usage: generate-raddb radius-server/raddb/dictionary* >raddb.pm -# i.e.: generate-raddb ~/freeradius/freeradius-1.0.5/share/dictionary* ~/wirelessoceans/dictionary.ip3networks ~/wtxs/dictionary.mot.canopy >raddb.pm.new -print <<END; -package FS::raddb; -use vars qw(%attrib); - -%attrib = ( -END - -while (<>) { - next if /^(#|\s*$|\$INCLUDE\s+)/; - next if /^(VALUE|VENDOR|BEGIN\-VENDOR|END\-VENDOR)\s+/; - /^(ATTRIBUTE|ATTRIB_NMC)\s+([\w\-\/]+)\s+/ or die $_; - $attrib = $2; - $dbname = lc($2); - $dbname =~ s/[\-\/]/_/g; - $dbname = substr($dbname,0,24); - while ( exists $hash{$dbname} ) { - #warn $dbname; - $dbname =~ s/(.)$//; - my $w = $1; - $w =~ tr/_a-z0-9/a-z0-9_/; - $dbname = "$dbname$w"; - } - $hash{$dbname} = $attrib; - #print "$2\n"; -} - -foreach ( sort keys %hash ) { -# print "$_\n" if length($_)>24; -# print substr($_,0,24),"\n" if length($_)>24; -# $max = length($_) if length($_)>$max; -# have to fudge things since everything >24 is *not* unique - - #print " '". substr($_,0,24). "' => '$hash{$_}',\n"; - print " '$_' ". ( " " x (24-length($_) ) ). "=> '$hash{$_}',\n"; -} - -print <<END; - - #NETC.NET.AU (RADIATOR?) - 'authentication_type' => 'Authentication-Type', - - #wtxs (dunno) - #'radius_operator' => 'Radius-Operator', - -); - -1; -END - diff --git a/bin/generate-table-module b/bin/generate-table-module deleted file mode 100755 index 509feeded..000000000 --- a/bin/generate-table-module +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/perl - -use FS::Schema qw( dbdef_dist ); - -my $table = shift; - -### -# add a new FS/FS/table.pm -### - -my %ut = ( #just guesses - 'int' => 'number', - 'number' => 'float', - 'varchar' => 'text', - 'text' => 'text', - 'serial' => 'number', -); - -my $dbdef_table = dbdef_dist->table($table) - or die "define table in Schema.pm first"; -my $primary_key = $dbdef_table->primary_key; - -open(SRC,"<eg/table_template.pm") or die $!; --e "FS/FS/$table.pm" and die "FS/FS/$table.pm already exists!"; -open(DEST,">FS/FS/$table.pm") or die $!; - -while (my $line = <SRC>) { - - $line =~ s/table_name/$table/g; - - if ( $line =~ /^=item\s+field\s+-\s+description\s*$/ ) { - - foreach my $column ( $dbdef_table->columns ) { - print DEST "=item $column\n\n"; - if ( $column eq $primary_key ) { - print DEST "primary key\n\n"; - } else { - print DEST "$column\n\n"; - } - } - next; - - } elsif ( $line=~ /^(\s*)\$self->ut_numbern\('primary_key'\)\s*/ ) { - - print DEST "$1\$self->ut_numbern('$primary_key')\n" - if $primary_key; - next; - - } elsif ( - $line =~ /^(\s*)\|\|\s+\$self->ut_number\('validate_other_fields'\)\s*/ - ) { - - foreach my $column ( grep { $_ ne $primary_key } $dbdef_table->columns ) { - my $ut = $ut{$dbdef_table->column($column)->type}; - $ut .= 'n' if $dbdef_table->column($column)->null; - print DEST "$1|| \$self->ut_$ut('$column')\n"; - } - next; - - } - - print DEST $line; -} - -close SRC; -close DEST; - -### -# add FS/t/table.t -### - -open(TEST,">FS/t/$table.t") or die $!; -print TEST <<ENDTEST; -BEGIN { \$| = 1; print "1..1\\n" } -END {print "not ok 1\\n" unless \$loaded;} -use FS::$table; -\$loaded=1; -print "ok 1\\n"; -ENDTEST -close TEST; - -### -# add them to MANIFEST -### - -system('cvs edit FS/MANIFEST'); - -open(MANIFEST,">>FS/MANIFEST") or die $!; -print MANIFEST "FS/$table.pm\n", - "t/$table.t\n"; -close MANIFEST; - diff --git a/bin/generate-tests b/bin/generate-tests deleted file mode 100755 index 73fd29ecb..000000000 --- a/bin/generate-tests +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/perl -@files = glob('FS/*.pm'); -foreach (@files) { -# warn $_; - chomp; - s/^FS\///; - $f=$_; - $f=~s/pm$/t/; - $m=$_; - $m=~s/\.pm$//; - open(TEST,">t/$f"); - print "t/$f\n"; - print TEST - 'BEGIN { $| = 1; print "1..1\n" }'. "\n". - 'END {print "not ok 1\n" unless $loaded;}'. "\n". - "use FS::$m;\n". - '$loaded=1;'. "\n". - 'print "ok 1\n";'. "\n" - ; - close TEST; -} diff --git a/bin/import-county-tax-rates b/bin/import-county-tax-rates deleted file mode 100755 index 05798c9a2..000000000 --- a/bin/import-county-tax-rates +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/perl -# -# import-county-tax-rates username state country <filename.csv -# example: import-county-tax-rates ivan CA US <taxes.csv -# -# rates.csv: taxrate,county - -use FS::UID qw(adminsuidsetup); -use FS::cust_main_county; - -my $user = shift; -adminsuidsetup $user; - -my($state, $country) = (shift, shift); - -while (<>) { - my($tax, $county) = split(','); #half-ass CSV parser - - my $cust_main_county = new FS::cust_main_county { - 'county' => $county, - 'state' => $state, - 'country' => $country, - 'tax' => $tax, - }; - - my $error = $cust_main_county->insert; - #my $error = $cust_main_county->check; - die $error if $error; - -} diff --git a/bin/ispman.ldap.import b/bin/ispman.ldap.import deleted file mode 100755 index 7495f47f8..000000000 --- a/bin/ispman.ldap.import +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Net::LDAP::LDIF; - -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearchs); -use FS::svc_domain; -use FS::svc_acct; - -my $user = shift or die; -adminsuidsetup($user); - -$FS::svc_Common::noexport_hack = 1; -$FS::svc_domain::whois_hack = 1; - -my $domain_svcpart = 1; -my $account_svcpart = 2; -my $mailbox_svcpart = 3; -my $fedweeknet_svcpart = 4; - -#my $ldif = -# Net::LDAP::LDIF->new( "ispman-06-23-04.ldif", "r", onerror => 'undef' ); -my $ldif = - Net::LDAP::LDIF->new( "ispman-06-23-04.ldif", "r", onerror => 'warn' ); - -#my %objectclass; - -my $acct = 0; -my $imported = 0; - -my $entry; -while ( $entry = $ldif->read_entry ) { - #warn "$entry\n"; - my %attributes = map { $_ => [ $entry->get_value( $_ ) ] } $entry->attributes; - - my $objectclass = join('/', @{$attributes{'objectclass'}} ); - - next unless $objectclass eq 'posixAccount/ispmanDomainUser/radiusprofile'; - - foreach my $attr ( keys %attributes ) { - print join( " => ", substr($attr.' 'x30,0,30), @{$attributes{ $attr }} ), "\n"; - #if ( $attr eq 'objectclass' ) { - # $objectclass{ join('/', @{$attributes{$attr}} ) }++; - #} - } - print "\n"; - - $acct++; - - my $email = $attributes{'maillocaladdress'}->[0]; - $email =~ /^(\w+)\@([\w\.\-]+)$/ or die $email; - die "$1 ne ". $attributes{'ispmanuserid'}->[0]. "\n" - unless lc($1) eq $attributes{'ispmanuserid'}->[0]; - my $username = lc($1); - my $domain = lc($2); - - my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) - || new FS::svc_domain { 'svcpart' => $domain_svcpart, - 'domain' => $domain, - 'action' => 'N', - }; - - unless ( $svc_domain->svcnum ) { - my $error = $svc_domain->insert; - if ( $error ) { - die "inserting domain: $error\n"; - } - } - - ( my $password = $attributes{'userpassword'}->[0] ) =~ s/^\{crypt\}//; - - # pick svcpart - my $svcpart = $account_svcpart; - if ( $domain eq 'fedweeknet.com' ) { - $svcpart = $fedweeknet_svcpart; - } elsif ( $attributes{'dialupaccess'}->[0] =~ /(false|no)/i ) { - $svcpart = $mailbox_svcpart; - } - - my $dir = $attributes{'homedirectory'}->[0]; - $dir =~ s/\s+//g; - $dir =~ s/\@/_/; - - my $svc_acct = new FS::svc_acct { - 'svcpart' => $svcpart, - 'username' => $username, - '_password' => $password, - 'finger' => $attributes{'cn'}->[0], - 'domsvc' => $svc_domain->svcnum, - 'shell' => $attributes{'loginshell'}->[0], - 'uid' => $attributes{'uidnumber'}->[0], - 'gid' => $attributes{'gidnumber'}->[0], - 'dir' => $dir, - 'quota' => $attributes{'mailquota'}->[0], - }; - my $error = $svc_acct->insert; - #my $error = $svc_acct->check; - - if ( $error ) { - warn "$error\n"; - } else { - $imported++; - } - -} - -print "$imported of $acct imported\n"; - -#print "\n\n"; - -#foreach ( sort { $objectclass{$b} <=> $objectclass{$a} } keys %objectclass ) { -# print "$objectclass{$_}: $_\n"; -#} diff --git a/bin/mapsecrets2access_user b/bin/mapsecrets2access_user deleted file mode 100755 index 945f130ef..000000000 --- a/bin/mapsecrets2access_user +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use File::Copy "cp"; -use FS::UID qw(adminsuidsetup); -use FS::CurrentUser; -use FS::AccessRight; -use FS::Record qw(qsearchs qsearch); -use FS::access_group; -use FS::access_user; -use FS::access_usergroup; -use FS::access_right; -use FS::access_groupagent; -use FS::agent; - -$FS::CurrentUser::upgrade_hack = 1; -my $user = shift or die &usage; -adminsuidsetup $user; - -my $supergroup = qsearchs('access_group', { 'groupname' => 'Superuser' } ); -unless ( $supergroup ) { - - $supergroup = new FS::access_group { 'groupname' => 'Superuser' }; - my $error = $supergroup->insert; - die $error if $error; - - foreach my $rightname ( FS::AccessRight->rights ) { - my $access_right = new FS::access_right { - 'righttype' => 'FS::access_group', - 'rightobjnum' => $supergroup->groupnum, - 'rightname' => $rightname, - }; - my $ar_error = $access_right->insert; - die $ar_error if $ar_error; - } - - foreach my $agent ( qsearch('agent', {} ) ) { - my $access_groupagent = new FS::access_groupagent { - 'groupnum' => $supergroup->groupnum, - 'agentnum' => $agent->agentnum, - }; - my $aga_error = $access_groupagent->insert; - die $aga_error if $aga_error; - } - -} -my $supergroupnum = $supergroup->groupnum; - -my $conf = new FS::Conf; -my $dir = $conf->base_dir; -my $mapsecrets = "$dir/mapsecrets"; -open(MAPSECRETS, "<$mapsecrets") or die "Can't open $mapsecrets: $!"; -while (<MAPSECRETS>) { - /([\w]+)\s+secrets\s*$/ or die "unparsable line in mapsecrets: $_"; - my $username = $1; - - next if qsearchs('access_user', { 'username' => $username } ); - - my $access_user = new FS::access_user { - 'username' => $username, - '_password' => 'notyet', - 'first' => 'Legacy', - 'last' => 'User', - }; - my $au_error = $access_user->insert; - die $au_error if $au_error; - - my $access_usergroup = new FS::access_usergroup { - 'usernum' => $access_user->usernum, - 'groupnum' => $supergroupnum, - }; - my $aug_error = $access_usergroup->insert; - die $aug_error if $aug_error; - -} -close MAPSECRETS; - -# okay to clobber mapsecrets now i guess -cp $mapsecrets, "$mapsecrets.bak$$"; -open(MAPSECRETS, ">$mapsecrets") or die $!; -print MAPSECRETS '* secrets'. "\n"; -close MAPSECRETS or die $!; - -sub usage { - die "Usage:\n mapsecrets2access_user user\n"; -} - diff --git a/bin/masonize b/bin/masonize deleted file mode 100755 index 509ef3ec8..000000000 --- a/bin/masonize +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/perl - -foreach $file ( split(/\n/, `find . -depth -print`) ) { - next unless $file =~ /(cgi|html)$/; - open(F,$file) or die "can't open $file for reading: $!"; - @file = <F>; - #print "$file ". scalar(@file). "\n"; - close $file; - $newline = ''; #avoid prepending extraneous newlines - $all = join('',@file); - - $w = ''; - - $mode = 'html'; - while ( length($all) ) { - - if ( $mode eq 'html' ) { - - if ( $all =~ /^(.+?)(<%=?.*)$/s && $1 !~ /<%/s ) { - $w .= $1; - $all = $2; - next; - } elsif ( $all =~ /^<%=(.*)$/s ) { - $w .= '<%'; - $all = $1; - $mode = 'perlv'; - #die; - next; - } elsif ( $all =~ /^<%(.*)$/s ) { - $w .= $newline; $newline = "\n"; - $all = $1; - $mode = 'perlc'; - - #avoid newline prepend fix from borking indented first <% - $w =~ s/\n\s+\z/\n/; - $w .= "\n" if $w =~ /.+\z/; - - next; - } elsif ( $all !~ /<%/s ) { - $w .= $all; - last; - } else { - warn length($all); die; - } - die; - - } elsif ( $mode eq 'perlv' ) { - - if ( $all =~ /^(.*?%>)(.*)$/s ) { - $w .= $1; - $all=$2; - $mode = 'html'; - next; - } - die "unterminated <%= ??? (in $file):"; - - } elsif ( $mode eq 'perlc' ) { - - if ( $all =~ /^([^\n]*?)%>(.*)$/s ) { - $w .= "%$1\n"; - $all=$2; - $mode='html'; - next; - } - if ( $all =~ /^([^\n]*)\n(.*)$/s ) { - $w .= "%$1\n"; - $all=$2; - next; - } - - } else { die }; - - } - - system("chmod u+w $file"); - select W; $| = 1; select STDOUT; - open(W,">$file") or die "can't open $file for writing: $!"; - print W $w; - close W; -} diff --git a/bin/passwd.import b/bin/passwd.import deleted file mode 100755 index 8ab9e2ae3..000000000 --- a/bin/passwd.import +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw(%part_svc); -use Date::Parse; -use Term::Query qw(query); -use Net::SCP qw(iscp); -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(qsearch qsearchs); -use FS::svc_acct; -use FS::part_svc; - -my $user = shift or die &usage; -adminsuidsetup $user; - -push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? - -my($spooldir)="/usr/local/etc/freeside/export.". datasrc; - -#$FS::svc_acct::nossh_hack = 1; -$FS::svc_Common::noexport_hack = 1; - -### - -%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); - -die "No services with svcdb svc_acct!\n" unless %part_svc; - -print "\n\n", &menu_svc, "\n", <<END; -Enter part number to import. -END -my($shell_svcpart)=&getpart; - -print "\n\n", <<END; -Enter the location and name of your _user_ passwd file, for example -"mail.isp.com:/etc/passwd" or "nis.isp.com:/etc/global/passwd" -END -my($loc_passwd)=&getvalue(":"); -iscp("root\@$loc_passwd", "$spooldir/passwd.import"); - -print "\n\n", <<END; -Enter the location and name of your _user_ shadow file, for example -"mail.isp.com:/etc/shadow" or "bsd.isp.com:/etc/master.passwd" -END -my($loc_shadow)=&getvalue(":"); -iscp("root\@$loc_shadow", "$spooldir/shadow.import"); - -sub menu_svc { - ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; -} -sub getpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; - $^W=1; - $return; -} -sub getvalue { - my $prompt = shift; - $^W=0; # Term::Query isn't -w-safe - my $return = query $prompt, ''; - $^W=1; - $return; -} - -print "\n\n"; - -### - -open(PASSWD,"<$spooldir/passwd.import"); -open(SHADOW,"<$spooldir/shadow.import"); - -my(%password); -while (<SHADOW>) { - chop; - my($username,$password)=split(/:/); - #$password =~ s/^\!$/\*/; - #$password =~ s/\!+/\*SUSPENDED\* /; - $password =~ s/^NP$/\*/; - $password =~ s/^\*LK\*$/\*/; - $password{$username}=$password; -} - -while (<PASSWD>) { - chop; - my($username,$x,$uid,$gid,$finger,$dir,$shell) = split(/:/); - my $password = $password{$username}; - - my $svcpart = $shell_svcpart; - - #if ( qsearchs('svc_acct', { 'username' => $username } ) ) { - # warn "warning: $username already exists; skipping\n"; - # next; - #} - - my($svc_acct) = new FS::svc_acct ({ - 'svcpart' => $svcpart, - 'username' => $username, - '_password' => $password, - 'uid' => $uid, - 'gid' => $gid, - 'finger' => $finger, - 'dir' => $dir, - 'shell' => $shell, - #%{$allparam{$username}}, - }); - my($error); - $error=$svc_acct->insert; - if ( $error ) { - if ( $error =~ /duplicate/i ) { - warn "$username: $error"; - } else { - die "$username: $error"; - } - } - -} - -sub usage { - die "Usage:\n\n passwd.import user\n"; -} - diff --git a/bin/payment-faker b/bin/payment-faker deleted file mode 100755 index 03316e1c0..000000000 --- a/bin/payment-faker +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/perl - -use Date::Parse; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); -use FS::cust_pay; -use FS::cust_credit; - -my $user; -$user = shift or die "usage: payment-faker $user"; -adminsuidsetup($user); - -for $month ( 1 .. 11 ) { - - print "month $month\n"; - - system(qq!freeside-daily -d "$month/1/2006" $user!); - - foreach my $cust_main ( qsearch('cust_main', {} ) ) { - next unless $cust_main->balance > 0; - my $item = ''; - if ( rand() > .95 ) { - $item = new FS::cust_credit { - 'amount' => $cust_main->balance, - '_date' => str2time("$month/1/2006"), - 'reason' => 'testing', - }; - } else { - - if ( rand() > .5 ) { - $payby = 'BILL'; - $payinfo = int(rand(10000)); - } else { - $payby = 'CARD'; - $payinfo = '4111111111111111'; - } - - $item = new FS::cust_pay { - 'paid' => $cust_main->balance, - '_date' => str2time("$month/1/2006"), - 'payby' => $payby, - 'payinfo' => $payinfo, - }; - } - - $item->custnum($cust_main->custnum); - my $error = $item->insert; - die $error if $error; - $cust_main->apply_payments; - $cust_main->apply_credits; - - } - -} diff --git a/bin/pg-readonly b/bin/pg-readonly deleted file mode 100644 index ad69fbde2..000000000 --- a/bin/pg-readonly +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/perl -# -# hack to update/add read-only permissions for a user on the db -# -# usage: pg-readonly freesideuser readonlyuser - -use strict; -use DBI; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(dbdef); - -my $user = shift or die &usage; -my $rouser = shift or die &usage; - -my $dbh = adminsuidsetup $user; - -foreach my $table ( dbdef->tables ) { - $dbh->do("GRANT SELECT ON $table TO $rouser"); - $dbh->commit(); - if ( my $pkey = dbdef->table($table)->primary_key ) { - $dbh->do("GRANT SELECT ON ${table}_${pkey}_seq TO $rouser"); - $dbh->commit(); - } -} diff --git a/bin/pg-version b/bin/pg-version deleted file mode 100755 index b6cddb612..000000000 --- a/bin/pg-version +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use FS::UID qw(adminsuidsetup dbh); - -my $user = shift or die &usage; -adminsuidsetup($user); - -print "pg_server_version: ". dbh->{'pg_server_version'}. "\n"; - -sub usage { - "\n\nUsage: pg-version username\n"; -}; diff --git a/bin/pod2x b/bin/pod2x deleted file mode 100755 index 6b7153f96..000000000 --- a/bin/pod2x +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use WWW::Mediawiki::Client; -#sub WWW::Mediawiki::Client::pagename_to_url { -# my ($self, $name, $action) = @_; -# WWW::Mediawiki::Client::URLConstructionException->throw( -# error => 'No action supplied.', -# ) unless $action; -# WWW::Mediawiki::Client::URLConstructionException->throw( -# error => "Page name $name ends with '.wiki'.", -# ) if $name =~ /.wiki$/; -# my $char = $self->space_substitute; -# $name =~ s/ /$char/; -# my $lang = $self->language_code; -# my $host = $self->host; -# $host =~ s/__LANG__/$lang/g; -# my $wiki_path = $self->wiki_path; -# $wiki_path =~ s/__LANG__/$lang/g; -# my $protocol = $self->protocol; -# return "$protocol://$host/$wiki_path?" . ACTION . "=$action&" . TITLE . "=$name" . '&wpRecreate=1'; -#} - -my $mw_username = 'ivan'; -chomp( my $mw_password = `cat .mw-password` ); - -my $site_perl = "./FS"; -#my $html = "Freeside:1.7:Documentation:Developer"; -my $html = "Freeside:1.9:Documentation:Developer"; - -foreach my $dir ( - $html, - map "$html/$_", qw( bin FS FS/UI FS/part_export FS/part_pkg - FS/part_event FS/part_event/Condition FS/part_event/Action - FS/ClientAPI FS/Cron FS/Misc FS/Report FS/Report/Table - FS/TicketSystem FS/UI - FS/SelfService - ) -) { - -d $dir or mkdir $dir; -} - -$|=1; - -die "Can't find $site_perl" unless -d $site_perl; -#die "Can't find $catman" unless -d $catman; --d $html or mkdir $html; - -my $count = 0; - -#make some useless links -foreach my $file ( - glob("$site_perl/bin/freeside-*"), -) { - next if $file =~ /\.pod$/; - #symlink $file, "$file.pod"; # or die "link $file to $file.pod: $!"; - #system("cp $file $file.pod"); - -e "$file.pod" or system("cp $file $file.pod"); -} - -my $mvs = WWW::Mediawiki::Client->new( - 'host' => 'www.freeside.biz', - 'wiki_path' => 'mediawiki/index.php', - 'username' => $mw_username, - 'password' => $mw_password, - #'commit_message' => 'import from POD' - ); - -$mvs->do_login; - -my @files; -if ( @ARGV ) { - @files = @ARGV; -} else { - @files = ( - glob("$site_perl/*.pm"), - glob("$site_perl/*/*.pm"), - glob("$site_perl/*/*/*.pm"), - glob("$site_perl/*/*/*/*.pm"), - glob("$site_perl/bin/*.pod"), - glob("./fs_selfservice/FS-SelfService/*.pm"), - glob("./fs_selfservice/FS-SelfService/*/*.pm"), - ); - -} - -foreach my $file (@files) { - next if $file =~ /(^|\/)blib\//; - next if $file =~ /(^|\/)CVS\//; - #$file =~ /\/([\w\-]+)\.pm$/ or die "oops file $file"; - my $name; - if ( $file =~ /fs_\w+\/FS\-\w+\/(.*)\.pm$/ ) { - $name = "FS/$1"; - } elsif ( $file =~ /$site_perl\/(.*)\.(pm|pod)$/ ) { - $name = $1; - } else { - die "oops file $file"; - } - - #exit if $count++ == 10; - - my $htmlroot = join('/', map '..',1..(scalar($file =~ tr/\///)-2)) || '.'; - - system "pod2wiki --style mediawiki $file >$html/$name.rawwiki"; - - if ( -e "$html/$name.rawwiki" ) { - print "processing $name\n"; - } else { - print "skipping $name\n"; - next; - }; - - $mvs->do_update("$html/$name.wiki"); - - open(RAW, "<$html/$name.rawwiki") or die $!; - open(WIKI,">$html/$name.wiki" ) or die $!; - while (<RAW>) { - s/\[\[([^#p][^\]]*)\]\]/"[[$html\/". w_e($1). "|$1]]"/ge; - print WIKI $_; - } - close RAW; - close WIKI; - - print " uploading to ". $mvs->filename_to_pagename("$html/$name.wiki"). "\n"; - $mvs->commit_message( 'import from POD' ); - $mvs->do_commit("$html/$name.wiki"); - -} - -sub w_e { - my $s = shift; - $s =~ s/_/ /g; - $s =~ s/::/\//g; - $s =~ s/^freeside-/bin\/freeside-/g; - $s; -} - - -## system "pod2text $file >$catman/$name.txt"; -## -# system "pod2html --podroot=$site_perl --podpath=./FS:./FS/UI:.:./bin --norecurse --htmlroot=$htmlroot $file >$html/$name.html"; -# #system "pod2html --podroot=$site_perl --htmlroot=$htmlroot $file >$html/$name.html"; -## system "pod2html $file >$html/$name.html"; -## - -#remove the useless links -unlink glob("$site_perl/bin/*.pod"); - diff --git a/bin/postfix.export b/bin/postfix.export deleted file mode 100755 index 61380da59..000000000 --- a/bin/postfix.export +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -#use File::Path; -use File::Rsync; -use Net::SSH qw(ssh); -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(qsearch); # qsearchs); -use FS::part_export; -#use FS::cust_pkg; -use FS::cust_svc; -#use FS::svc_domain; - -my $user = shift or die &usage; -adminsuidsetup $user; - -my $spooldir = "/usr/local/etc/freeside/export.". datasrc. "/postfix"; -mkdir $spooldir, 0700 unless -d $spooldir; - -my @exports = qsearch('part_export', { 'exporttype' => 'postfix' } ); - -my $rsync = File::Rsync->new({ - rsh => 'ssh', -# dry_run => 1, -}); - -foreach my $export ( @exports ) { - - my $machine = $export->machine; - my $prefix = "$spooldir/$machine"; - mkdir $prefix, 0700 unless -d $prefix; - - #construct %domain hash - - my $mydomain = $export->option('mydomain'); - my %domain; - foreach my $svc_forward ( $export->svc_x ) { - - my( $username, $domain ); - my $srcsvc_acct = $svc_forward->srcsvc_acct; - if ( $srcsvc_acct ) { - ( $username, $domain ) = ( $srcsvc_acct->username, $srcsvc_acct->domain ); - } elsif ( $svc_forward->src =~ /^([^@]*)\@([^@]+)$/ ) { - ( $username, $domain ) = ( $1, $2 ); - } else { - die "bad svc_forward record? svcnum ". $svc_forward->svcnum. "\n"; - } - - my( $dusername, $ddomain ); - my $dstsvc_acct = $svc_forward->dstsvc_acct; - if ( $dstsvc_acct ) { - $dusername = $dstsvc_acct->username; - $ddomain = $dstsvc_acct->domain; - } elsif ( $svc_forward->dst =~ /([^@]+)\@([^@]+)$/ ) { - ( $dusername, $ddomain ) = ( $1, $2 ); - } else { - die "bad svc_forward record? svcnum ". $svc_forward->svcnum. "\n"; - } - my $dest; - if ( $ddomain eq $mydomain ) { - $dest = $dusername; - } else { - $dest = "$dusername\@$ddomain"; - } - - push @{$domain{$domain}{$username}}, $dest; - - } - - #write aliases - - my $aliases = delete $domain{$mydomain}; - open(ALIASES, ">$prefix/aliases") or die "can't open $prefix/aliases: $!"; - foreach my $alias ( keys %$aliases ) { - print ALIASES "$alias: ". join(',', @{ $aliases->{$alias} } ). "\n"; - } - close ALIASES; - - #write virtual - - open(VIRTUAL, ">$prefix/virtual") or die "can't open $prefix/virtual: $!"; - foreach my $domain ( keys %domain ) { - print VIRTUAL "$domain DOMAIN\n"; - #foreach my $virtual ( sort { $a ne '' <=> $b ne '' } keys %{$domain{$domain}} ) { - foreach my $virtual ( sort { ( ($b ne '') <=> ($a ne '') ) || $a cmp $b } keys %{$domain{$domain}} ) { - print VIRTUAL "$virtual\@$domain ". - join(',', @{ $domain{$domain}{$virtual} } ). "\n"; - } - print VIRTUAL "\n"; - } - close VIRTUAL; - - #rsync - - my $user = $export->option('user'); - $rsync->exec( { - src => "$prefix/aliases", - dest => "$user\@$machine:". $export->option('aliases'), - } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); -# warn $rsync->out; - - ssh("$user\@$machine", $export->option('newaliases') || 'newaliases'); -# ssh("$user\@$machine", "postfix reload"); - - $rsync->exec( { - src => "$prefix/virtual", - dest => "$user\@$machine:". $export->option('virtual'), - } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); -# warn $rsync->out; - ssh("$user\@$machine", $export->option('postmap') - || 'postmap hash:/etc/postfix/virtual'); - ssh("$user\@$machine", $export->option('reload') || 'postfix reload'); - -} - -# ----- - -sub usage { - die "Usage:\n postfix.export user\n"; -} - - diff --git a/bin/postfix_courierimap.import b/bin/postfix_courierimap.import deleted file mode 100755 index 12c138b49..000000000 --- a/bin/postfix_courierimap.import +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw(%part_svc %domain_part_svc); -#use Date::Parse; -use DBI; -use Term::Query qw(query); -use FS::UID qw(adminsuidsetup); #datasrc -use FS::Record qw(qsearch qsearchs); -use FS::svc_acct; -use FS::part_svc; -use FS::svc_domain; - -my $user = shift or die &usage; -adminsuidsetup $user; - -#push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? - -$FS::svc_Common::noexport_hack = 1; -$FS::svc_domain::whois_hack = 1; - -### - -%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); - -die "No services with svcdb svc_acct!\n" unless %part_svc; - -print "\n\n", &menu_svc, "\n", <<END; -Enter part number to import. -END -my $mailbox_svcpart = &getpart; - -%domain_part_svc = map { $_->svcpart, $_ } - qsearch('part_svc', { 'svcdb' => 'svc_domain'} ); - -die "No services with svcdb svc_domain!\n" unless %domain_part_svc; - -print "\n\n", &menu_domain_svc, "\n", <<END; -Enter part number for domains. -END -my $domain_svcpart = &getdomainpart; - -my $datasrc = &getvalue("\n\nEnter the DBI datasource:"); -my $db_user = &getvalue("\n\nEnter the database user:"); -my $db_pass = &getvalue("\n\nEnter the database password:"); - -sub menu_svc { - ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; -} -sub menu_domain_svc { - ( join "\n", map "$_: ".$domain_part_svc{$_}->svc, sort keys %domain_part_svc ). "\n"; -} -sub getpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; - $^W=1; - $return; -} -sub getdomainpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %domain_part_svc ]; - $^W=1; - $return; -} -sub getvalue { - my $prompt = shift; - $^W=0; # Term::Query isn't -w-safe - my $return = query $prompt, ''; - $^W=1; - $return; -} - -print "\n\n"; - -### - -my $dbh = DBI->connect( $datasrc, $db_user, $db_pass ) - or die $DBI::errstr; - -my $sth = $dbh->prepare('SELECT username, password, crypt, name, domain FROM mailbox') - or die $dbh->errstr; -$sth->execute or die $sth->errstr; - -my $row; -while ( defined ( $row = $sth->fetchrow_arrayref ) ) { - my( $r_username, $password, $crypt, $finger, $r_domain ) = @$row; - - my( $username, $domain ); - if ( $r_username =~ /^([^@]+)\@([^@]+)$/ ) { - $username = $1; - $domain = $2; - } else { - $username = $r_username; - $domain = $r_domain; - } - my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) - || new FS::svc_domain { - 'domain' => $domain, - 'svcpart' => $domain_svcpart, - 'action' => 'N', - }; - unless ( $svc_domain->svcnum ) { - my $error = $svc_domain->insert; - if ( $error ) { - die "can't insert domain $domain: $error\n"; - } - } - - $password = $crypt if $password eq '*CRYPTED*'; - - $finger =~ s/Outdoor Power.*$/Outdoor Power/; - - my $svc_acct = new FS::svc_acct { - 'svcpart' => $mailbox_svcpart, - 'username' => $username, - 'domsvc' => $svc_domain->svcnum, - '_password' => $password, - 'finger' => $finger, - }; - - my $error = $svc_acct->insert; - #my $error = $svc_acct->check; - if ( $error ) { - if ( $error =~ /duplicate/i ) { - warn "$r_username / $r_domain: $error"; - } else { - die "$r_username / $r_domain: $error"; - } - } - -} - -sub usage { - die "Usage:\n\n postfix_courierimap.import user\n"; -} - - diff --git a/bin/print-schema b/bin/print-schema deleted file mode 100755 index 886e3250b..000000000 --- a/bin/print-schema +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/perl - -use DBIx::DBSchema; - -$l = load DBIx::DBSchema "/usr/local/etc/freeside/dbdef.DBI:Pg:dbname=freeside"; - -print $l->pretty_print, "\n"; diff --git a/bin/rate-us.import b/bin/rate-us.import deleted file mode 100755 index 66ac5de94..000000000 --- a/bin/rate-us.import +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -#use Spreadsheet::ParseExcel; -use DBI; -use FS::UID qw(adminsuidsetup); -use FS::rate_region; -use FS::rate_prefix; -use FS::rate_region; - -my $ratenum = 1; - -my $user = shift or usage(); -adminsuidsetup $user; - -sub usage { - #die "Usage:\n\n rate.import user rates.xls worksheet_name"; - die "Usage:\n\n rate.import user"; -} - -my %rate_region; - -foreach my $file ( 'areas and rates US.xls', - 'areas and rates US2.xls', - 'areas and rates US3.xls', - ) -{ - - my $dbh = DBI->connect("DBI:Excel:file=$file") - or die "can't connect: $DBI::errstr"; - - #my $table = shift or usage(); - my $table = 'Sheet1'; - my $sth = $dbh->prepare("select * from $table") - or die "can't prepare: ". $dbh->errstr; - $sth->execute - or die "can't execute: ". $sth->errstr; - - while ( my $row = $sth->fetchrow_hashref ) { - - #print join(' - ', map $row->{$_}, qw( rate_center Code Area_Prefix Rate ) ). "\n"; - - my $regionname = $row->{'rate_center'}; - $regionname =~ s/\xA0//g; - #$regionname =~ s/\xE9/e/g; #e with accent aigu - $regionname =~ s/(^\s+|\s+$)//; - $regionname .= ', USA'; - - my $prefix = $row->{'area_prefix'}; - $prefix =~ s/\xA0//g; - $prefix =~ s/\s$//; - #my $prefixprefix = ''; - #if ( $prefix =~ /^\s*(\d+)\s*\((.*)\)\s*$/ ) { - # $prefixprefix = $1; - # $prefix = $2; - #} elsif ( $prefix =~ /^\s*\((\d{3})\)\s*(.*)$/ ) { - # $prefixprefix = $1; - # $prefix = $2; - #} - - my @rate_prefix = map { - #warn $row->{'rate_center'}. ": $prefixprefix$_\n"; - new FS::rate_prefix { - 'countrycode' => '1', # $row->{'Country'} - #'npa' => $prefixprefix.$_, - 'npa' => $_, - }; - } - split(/\s*[;,]\s*/, $prefix); - - - my $dest_detail = new FS::rate_detail { - 'ratenum' => $ratenum, - 'min_included' => 0, - 'min_charge' => - sprintf('%.2f', $row->{'rate'} ), - 'sec_granularity' => 60, - }; - - unless ( exists $rate_region{$regionname} ) { - - my $rate_region = new FS::rate_region { - 'regionname' => $regionname, - }; - - my $error = $rate_region->insert( 'rate_prefix' => \@rate_prefix, - 'dest_detail' => [ $dest_detail ], - ); - die $error if $error; - - $rate_region{$regionname} = $rate_region->regionnum; - - } else { - - foreach my $rate_prefix ( @rate_prefix ) { - $rate_prefix->regionnum($rate_region{$regionname}); - my $error = $rate_prefix->insert; - die $error if $error; - } - - #$rate_detail->dest_regionnum($rate_region{$regionname}); - #$error = $rate_detail->insert; - #die $error if $error; - - } - - } - -} diff --git a/bin/rate.import b/bin/rate.import deleted file mode 100755 index fdd756d72..000000000 --- a/bin/rate.import +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/perl - -use strict; -#use Spreadsheet::ParseExcel; -use DBI; -use FS::UID qw(adminsuidsetup); -use FS::rate_region; -use FS::rate_prefix; -use FS::rate_region; - -my $ratenum = 1; - -my $user = shift or usage(); -adminsuidsetup $user; - -#my $file = shift or usage(); -my $file = 'areas and rates.xls'; -my $dbh = DBI->connect("DBI:Excel:file=$file") - or die "can't connect: $DBI::errstr"; - -#my $table = shift or usage(); -my $table = 'areas_and_rates'; -my $sth = $dbh->prepare("select * from $table") - or die "can't prepare: ". $dbh->errstr; -$sth->execute - or die "can't execute: ". $sth->errstr; - -sub usage { - #die "Usage:\n\n rate.import user rates.xls worksheet_name"; - die "Usage:\n\n rate.import user"; -} - -## - -while ( my $row = $sth->fetchrow_hashref ) { - - #print join(' - ', map $row->{$_}, qw( Country Code Area_Prefix Rate ) ). "\n"; - - my $regionname = $row->{'Country'}; - $regionname =~ s/\xA0//g; - $regionname =~ s/\xE9/e/g; #e with accent aigu - $regionname =~ s/(^\s+|\s+$)//; - - #next if $regionname =~ /Sweden Telia Mobile/; - - my $rate_region = new FS::rate_region { - 'regionname' => $regionname, - }; - - my $prefix = $row->{'Area_Prefix'}; - $prefix =~ s/\xA0//g; - $prefix =~ s/\s$//; - my $prefixprefix = ''; - if ( $prefix =~ /^\s*(\d+)\s*\((.*)\)\s*$/ ) { - $prefixprefix = $1; - $prefix = $2; - } elsif ( $prefix =~ /^\s*\((\d{3})\)\s*(.*)$/ ) { - $prefixprefix = $1; - $prefix = $2; - } - - my @rate_prefix = (); - if ( $prefix =~ /\d/ ) { - - @rate_prefix = map { - #warn $row->{'Country'}. ": $prefixprefix$_\n"; - new FS::rate_prefix { - 'countrycode' => $row->{'Code'}, - 'npa' => $prefixprefix.$_, - }; - } - split(/\s*[;,]\s*/, $prefix); - - } else { - @rate_prefix = ( new FS::rate_prefix { - 'countycode' => $row->{'Code'}, - 'npa' => '', - }; - ); - } - - my $dest_detail = new FS::rate_detail { - 'ratenum' => $ratenum, - 'min_included' => 0, - 'min_charge' => - sprintf('%.2f', $row->{'Rate'} ), - 'sec_granularity' => 60, - }; - - my $error = $rate_region->insert( 'rate_prefix' => \@rate_prefix, - 'dest_detail' => [ $dest_detail ], - ); - die $error if $error; - -} diff --git a/bin/reset-cust_credit-otaker b/bin/reset-cust_credit-otaker deleted file mode 100755 index 93002d05a..000000000 --- a/bin/reset-cust_credit-otaker +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use vars qw($opt_d); -use Getopt::Std; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs); -use FS::cust_credit; -use FS::h_cust_credit; - -getopts('d:'); - -my $user = shift or die &usage; -adminsuidsetup $user; - -die &usage - unless ($opt_d); - -$FS::Record::nowarn_identical = 1; - -if ( $opt_d ) { - $opt_d =~ /^(\d+)$/ or die "invalid date"; -} else { - die "no date specified\n"; -} - -my @cust_credit = qsearch('cust_credit', { otaker => $user } ); -die "no credits found\n" unless @cust_credit; - -my $cust_credit = new FS::cust_credit; -my @fields = grep { $_ !~ /^otaker|reason|reasonnum$/ } $cust_credit->fields; - -foreach my $cust_credit ( @cust_credit ) { - my %hash = $cust_credit->hash; - foreach (qw(otaker reason reasonnum)) { - delete $hash{$_}; - } - $hash{'history_action'} = 'replace_old'; - my $h_cust_credit = - qsearchs({ 'table' => 'h_cust_credit', - 'hashref' => \%hash, - 'select' => '*', - 'extra_sql' => " AND history_date <= $opt_d", - 'order_by' => 'ORDER BY history_date DESC LIMIT 1', - }); - if ($h_cust_credit) { - $cust_credit->otaker($h_cust_credit->otaker); - my $reason = $h_cust_credit->getfield('reason'); - if ($reason =~ /^\s*$/) { - $reason = '(none)'; - } - $cust_credit->otaker($h_cust_credit->otaker); - $cust_credit->reason($reason); - my $error = $cust_credit->replace - if $cust_credit->modified; - die "error replacing cust_credit: $error\n" - if $error; - }else{ - warn "Skipping credit.crednum ". $cust_credit->crednum; - } -} - -sub usage { - die "Usage:\n\n reset-cust_credit-otaker -d epoch_date user\n"; -} - -=head1 NAME - -reset-cust_credit-otaker - Command line tool to reset the otaker column for cust_credits to a previous value - -=head1 SYNOPSIS - - reset-cust_credit-otaker -d epoch_date user - -=head1 DESCRIPTION - - Sets the otaker column of the cust_credit records specified by user and - datespec to the value just prior to datespec. - - The reasonnum of the cust_credit record is also set to reason record - which matches the reason specified in the history. - -=head1 SEE ALSO - -L<FS::cust_credit>, L<FS::h_cust_credit>; - -=cut - diff --git a/bin/rollback b/bin/rollback deleted file mode 100755 index 7f83ef41a..000000000 --- a/bin/rollback +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/perl - -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs fields); - -use FS::svc_acct; - -#cust_pkg pkgnum 240133 241206 replace_old -#cust_svc svcnum 31102 32083 delete -#svc_acct svcnum 37162 37652 delete -my($user, $table, $pkey, $start, $end, $action) = @ARGV; - -adminsuidsetup $user or die; - -#eval "use FS::h_$table;"; -#die $@ if $@; -eval "use FS::$table;"; -die $@ if $@; - -my @history = grep { $_->historynum <= $end } qsearch("h_$table", { 'historynum' => { op=>'>=', value=>$start }, history_action => $action } ); - -my %seen; -foreach my $h (@history) { - my $error; - if ( $action eq 'replace_old' ) { - my $old = qsearchs($table, { $pkey => $h->get($pkey) } ); - unless ( $old ) { die "can't find $table $pkey ". $h->get($pkey). "\n"; } - my $new = "FS::$table"->new( { map { $_ => $h->get($_) } fields($table) } ); - $error = $new->replace($old); - } elsif ( $action eq 'delete' ) { - next if $seen{$h->get($pkey)}++; - my $new = "FS::$table"->new( { map { $_ => $h->get($_) } fields($table) } ); - $error = $new->insert; - } else { - die "unknown action $action\n"; - } - die $error if $error; -} diff --git a/bin/rotate-cdrs b/bin/rotate-cdrs deleted file mode 100755 index 7bef0bbb0..000000000 --- a/bin/rotate-cdrs +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Fcntl qw(:flock); -use IO::File; - -my $dir = '/usr/local/etc/freeside/export/cdr'; -#chdir $dir; - -#XXX glob might not handle lots of args at some point... -foreach my $file ( glob("$dir/*/CDR*-spool.CSV") ) { - - $file =~ m{(\d+)/CDR(\d+)-spool.CSV$} - or die "guru meditation #54: can't parse filename: $file\n"; - my($custnum, $date) = ($1, $2); - - - my $alpha = 'A'; - while ( -e "$dir/$custnum/CDR$date$alpha.CSV" ) { - $alpha++; # A -> Z -> AA etc. - } - my $newfile = "$dir/$custnum/CDR$date$alpha.CSV"; - - rename $file, $newfile - or die "$! moving $file to $newfile\n"; - - use IO::File; - my $lock = new IO::File ">>$newfile" - or die "can't open $newfile: $!\n"; - sleep 1; #just in case. i guess there's still a *remotely* possible - #race condition, but i'm not losing any sleep over it... (rimshot) - flock($lock, LOCK_EX) - or die "can't lock $newfile: $!\n"; - #okay we've got the lock, any pending write should be done... - - print "$custnum: $newfile\n"; - -} diff --git a/bin/rt-drop-tables b/bin/rt-drop-tables deleted file mode 100755 index b027542b3..000000000 --- a/bin/rt-drop-tables +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/perl - -my @tables = qw( -Attachments -Queues -Links -Principals -Groups -ScripConditions -Transactions -Scrips -ACL -GroupMembers -CachedGroupMembers -Users -Tickets -ScripActions -Templates -TicketCustomFieldValues -CustomFields -CustomFieldValues -sessions -); - -foreach my $table ( @tables ) { - print "drop table $table;\n"; - print "drop sequence ${table}_id_seq;\n"; -} - diff --git a/bin/rt-update-links b/bin/rt-update-links deleted file mode 100644 index 75d554f48..000000000 --- a/bin/rt-update-links +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/perl - -use FS::UID qw(adminsuidsetup); - -my( $olddb, $newdb ) = ( shift, shift ); - -$FS::CurrentUser::upgrade_hack = 1; -my $dbh = adminsuidsetup; - -my $statement = "select * from links where base like 'fsck.com-rt://$olddb/%' OR target like 'fsck.com-rt://$olddb/%'"; - -my $sth = $dbh->prepare($statement) or die $dbh->errstr; -$sth->execute or die $sth->errstr; - -while ( my $row = $sth->fetchrow_hashref ) { - - ( my $base = $row->{'base'} ) - =~ s(^fsck\.com-rt://$olddb/)(fsck.com-rt://$newdb/); - - ( my $target = $row->{'target'} ) - =~ s(^fsck\.com-rt://$olddb/)(fsck.com-rt://$newdb/); - - if ( $row->{'base'} ne $base || $row->{'target'} ne $target ) { - - my $update = 'UPDATE links SET base = ?, target = ? where id = ?'; - my @param = ( $base, $target, $row->{'id'} ); - - warn "$update : ". join(', ', @param). "\n"; - $dbh->do($update, {}, @param ); - - } - -} - -$dbh->commit; - diff --git a/bin/sendmail.import b/bin/sendmail.import deleted file mode 100644 index ef745fc46..000000000 --- a/bin/sendmail.import +++ /dev/null @@ -1,178 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Term::Query qw(query); -use Net::SCP qw(iscp); -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(qsearch qsearchs); -##use FS::svc_acct_sm; -#use FS::svc_domain; -#use FS::domain_record; -use FS::svc_acct; -##use FS::part_svc; -use FS::svc_forward; -use FS::svc_domain; - -my $user = shift or die &usage; -adminsuidsetup $user; - -#$FS::svc_Common::noexport_hack = 1; -#$FS::domain_record::noserial_hack = 1; - -use vars qw($defaultdomain); -$defaultdomain = '295.ca'; - -use vars qw(@svcpart $forward_svcpart); -@svcpart = qw( 2 4 ); -$forward_svcpart = 7; - -use vars qw($spooldir); -$spooldir = "/usr/local/etc/freeside/export.". datasrc. "/sendmail"; -mkdir($spooldir, 0755) unless -d $spooldir; - -print "\n\n", <<END; -Enter the location and name of your Sendmail aliases file, for example -"mail.isp.com:/etc/mail/aliases" -END -my($aliases)=&getvalue(":"); - -use vars qw($aliases_machine $aliases_prefix); -$aliases_machine = (split(/:/, $aliases))[0]; -$aliases_prefix = "$spooldir/$aliases_machine"; -mkdir($aliases_prefix, 0755) unless -d $aliases_prefix; - -#iscp("root\@$aliases","$aliases_prefix/aliases.import"); -iscp("ivan\@$aliases","$aliases_prefix/aliases.import"); - -print "\n\n", <<END; -Enter the location and name of your Sendmail virtusertable directory, for example -"mail.isp.com:/etc/mail/virtusertable" -END -my($virtusertable)=&getvalue(":"); - -use vars qw($virtusertable_machine $virtusertable_prefix); -$virtusertable_machine = (split(/:/, $virtusertable))[0]; -$virtusertable_prefix = "$spooldir/$virtusertable_machine"; -mkdir($virtusertable_prefix, 0755) unless -d $virtusertable_prefix; -mkdir("$virtusertable_prefix/virtusertable.import", 0755) - unless -d "$virtusertable_prefix/virtusertable.import"; - -#iscp("root\@$virtusertable/*","$aliases_prefix/virtusertable.import/"); -iscp("ivan\@$virtusertable/*","$aliases_prefix/virtusertable.import/"); - -sub getvalue { - my $prompt = shift; - $^W=0; # Term::Query isn't -w-safe - my $return = query $prompt, ''; - $^W=1; - $return; -} - -print "\n\n"; - -## - -foreach my $file ( - "$aliases_prefix/aliases.import", - glob("$aliases_prefix/virtusertable.import/*"), -) { - - warn "importing $file\n"; - - open(FILE,"<$file") or die $!; - while (<FILE>) { - next if /^\s*#/ || /^\s*$/; #skip comments & blank lines - - unless ( /^([\w\@\.\-]+)[:\s]\s*(.*\S)\s*$/ ) { - warn "Unparsable line: $_"; - next; - } - my($rawusername, $rawdest) = ($1, $2); - - my($username, $domain); - if ( $rawusername =~ /^([\w\-\.\&]*)\@([\w\.\-]+)$/ ) { - $username = $1; - $domain = $2; - } elsif ( $rawusername =~ /\@/ ) { - die "Unparsable username: $rawusername\n"; - } else { - $username = $rawusername; - $domain = $defaultdomain; - } - - #find svc_acct record or set $src - my($srcsvc, $src) = &svcnum_or_literal($username, $domain); - - foreach my $dest ( split(/,/, $rawdest) ) { - - my($dusername, $ddomain); - if ( $dest =~ /^([\w\-\.\&]+)\@([\w\.\-]+)$/ ) { - $dusername = $1; - $ddomain = $2; - } elsif ( $dest =~ /\@/ ) { - die "Unparsable username: $dest\n"; - } else { - $dusername = $dest; - $ddomain = $defaultdomain; - } - my($dstsvc, $dst) = &svcnum_or_literal($dusername, $ddomain); - - my $svc_forward = new FS::svc_forward ({ - svcpart => $forward_svcpart, - srcsvc => $srcsvc, - src => $src, - dstsvc => $dstsvc, - dst => $dst, - }); - my $error = $svc_forward->insert; - #my $error = $svc_forward->check; - if ( $error ) { - die "$rawusername: $rawdest: $error\n"; - } - } - - - } #next entry - -} #next file - -## - -sub svcnum_or_literal { - my($username, $domain) = @_; - - my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ); - my $domsvc = $svc_domain ? $svc_domain->svcnum : ''; - - my @svc_acct = grep { my $svc_acct = $_; - grep { $svc_acct->cust_svc->svcpart == $_ } @svcpart - } - qsearch('svc_acct', { - 'username' => $username, - 'domsvc' => $domsvc, - }); - - if ( scalar(@svc_acct) > 1 ) { - die "multiple sources found for $username\@$domain !\n"; - } - - my( $svcnum, $literal ) = ('', ''); - if ( @svc_acct ) { - my $svc_acct = $svc_acct[0]; - $svcnum = $svc_acct->svcnum; - } else { - $literal = "$username\@$domain"; - } - - return( $svcnum, $literal ); - -} - -sub usage { - die "Usage:\n\n sendmail.import user\n"; -} - - - - - diff --git a/bin/sequences.reset b/bin/sequences.reset deleted file mode 100644 index 2dc1d3bb2..000000000 --- a/bin/sequences.reset +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/perl - -use FS::UID qw(adminsuidsetup); -use FS::Record qw(dbdef dbh); - -my $user = shift; -adminsuidsetup $user or die; - -foreach my $table ( dbdef->tables ) { - my $primary_key = dbdef->table($table)->primary_key; - next unless $primary_key; - #my $local = dbdef->table($table)->column($primary_key)->local; - ##next unless $default =~ /nextval/; - #print "$local\n"; - - my $statement = "select setval('${table}_${primary_key}_seq', ( select max($primary_key) from $table ) )"; - - print "$statement;\n"; - next; - - my $sth = dbh->prepare($statement) or do { - warn dbh->errstr. " preparing $statement\n"; - next; - }; - $sth->execute or do { - warn dbh->errstr. " executing $statement\n"; - dbh->commit; - next; - } - -} - diff --git a/bin/shadow.reimport b/bin/shadow.reimport deleted file mode 100755 index 7957011eb..000000000 --- a/bin/shadow.reimport +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/perl -w -# -# -d: dry-run: make no changes -# -r: replace: overwrite existing passwords (otherwise only "*" passwords will -# be changed) -# -b: blowfish replace: overwrite existing passwords only if they are -# blowfish-encrypted - -use strict; -use vars qw(%part_svc); -use Getopt::Std; -use Term::Query qw(query); -use Net::SCP qw(iscp); -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(qsearch qsearchs); -use FS::svc_acct; -use FS::part_svc; - -use vars qw($opt_d $opt_r $opt_b); -getopts("drb"); - -my $user = shift or die &usage; -adminsuidsetup $user; - -push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? - -my($spooldir)="/usr/local/etc/freeside/export.". datasrc; - -#$FS::svc_acct::nossh_hack = 1; -$FS::svc_Common::noexport_hack = 1; - -### - -%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); - -die "No services with svcdb svc_acct!\n" unless %part_svc; - -print "\n\n", &menu_svc, "\n", <<END; -Enter part number or part numbers to import. -END -my($shell_svcpart)=&getvalue; -my @shell_svcpart = split(/[,\s]+/, $shell_svcpart); - -print "\n\n", <<END; -Enter the location and name of your _user_ shadow file, for example -"mail.isp.com:/etc/shadow" or "bsd.isp.com:/etc/master.passwd" -END -my($loc_shadow)=&getvalue(":"); -iscp("root\@$loc_shadow", "$spooldir/shadow.import"); - -sub menu_svc { - ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; -} -sub getpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; - $^W=1; - $return; -} -sub getvalue { - my $prompt = shift; - $^W=0; # Term::Query isn't -w-safe - my $return = query $prompt, ''; - $^W=1; - $return; -} - -print "\n\n"; - -### - -open(SHADOW,"<$spooldir/shadow.import"); - -my($line, $updated); -while (<SHADOW>) { - $line++; - chop; - my($username,$password)=split(/:/); - -# my @svc_acct = grep { $_->cust_svc->svcpart == $shell_svcpart } -# qsearch('svc_acct', { 'username' => $username } ); - my @svc_acct = grep { - my $svcpart = $_->cust_svc->svcpart; - grep { $_ == $svcpart } @shell_svcpart; - } qsearch('svc_acct', { 'username' => $username } ); - - next unless @svc_acct; - - if ( scalar(@svc_acct) > 1 ) { - die "more than one $username found!\n"; - next; - } - - my $svc_acct = shift @svc_acct; - - next unless $svc_acct->_password eq '*' - || $opt_r - || ( $opt_b && $svc_acct->_password =~ /^\$2a?\$/ ); - - next if $svc_acct->username eq 'root'; - - next if $password eq 'NP' || $password eq '*LK*'; - - next if $svc_acct->_password eq $password; - next if $svc_acct->_password =~ /^\*SUSPENDED\*/; - - my $new_svc_acct = new FS::svc_acct( { $svc_acct->hash } ); - $new_svc_acct->_password($password); - #warn "$username: ". $svc_acct->_password. " -> $password\n"; - warn "changing password for $username\n"; - unless ( $opt_d ) { - my $error = $new_svc_acct->replace($svc_acct); - die "$username: $error" if $error; - } - - $updated++; - -} - -warn "$updated of $line passwords changed\n"; - -sub usage { - die "Usage:\n\n shadow.reimport [ -d ] [ -r ] user\n"; -} - diff --git a/bin/slony-setup b/bin/slony-setup deleted file mode 100755 index 0798c1a03..000000000 --- a/bin/slony-setup +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/perl -# -# slony replication setup -# -# usage: slony-setup freesideuser - -use strict; -use DBI; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(dbdef); - -my $user = shift or die "usage: slony-setup username\n"; -adminsuidsetup($user); - -#--- - -my $MASTERHOST = '192.168.20.10'; -my $SLAVEHOST = '192.168.20.50'; -#my $REPLICATIONUSER='pgsql'; -my $REPLICATIONUSER='postgres'; - -#-------- - -print <<END; - -#on slave: -useradd freeside -cp -pr /etc/skel /home/freeside -chown -R freeside /home/freeside - -su postgres -c 'createuser freeside' #n y n -su freeside -c 'createdb freeside' - -#on master: -su postgres -c 'createlang plpgsql freeside' - -pg_dump -s -U $REPLICATIONUSER -h $MASTERHOST freeside | psql -U $REPLICATIONUSER -h $SLAVEHOST freeside - -END - -#-------- - -#drop set ( id = 1, origin = 1); - -print <<END; -#on master: -slonik <<_EOF_ - -cluster name = freeside; -node 1 admin conninfo = 'dbname=freeside host=$MASTERHOST user=$REPLICATIONUSER'; -node 2 admin conninfo = 'dbname=freeside host=$SLAVEHOST user=$REPLICATIONUSER'; -init cluster ( id=1, comment = 'Master Node'); - -create set (id=1, origin=1, comment='All freeside tables'); - -END - -my $id = 1; - -foreach my $table ( dbdef->tables ) { - #next if $table =~ /^sql_/i; - print "set add table (set id=1, origin=1, id=". $id++. ", fully qualified name = 'public.$table' );\n"; - -} - -print <<END; - -store node (id=2, comment = 'Slave node'); -store path (server = 1, client = 2, conninfo='dbname=freeside host=$MASTERHOST user=$REPLICATIONUSER'); -store path (server = 2, client = 1, conninfo='dbname=freeside host=$SLAVEHOST user=$REPLICATIONUSER'); -store listen (origin=1, provider = 1, receiver =2); -store listen (origin=2, provider = 2, receiver =1); - -_EOF_ -END - -print <<END; - -### start slon processes (both machines) (this is debian-specific) -mkdir /etc/slony1/freeside - -cat >/etc/slony1/freeside/slon.conf <<_EOF_ -# Set the cluster name that this instance of slon is running against -# default is to read it off the command line -cluster_name='freeside' - -# Set slon's connection info, default is to read it off the command line -conn_info='host=localhost port=5432 dbname=freeside user=postgres' -_EOF_ - -/etc/init.d/slony1 start - -END - - -print <<END; -#on master: -slonik <<_EOF_ - -cluster name = freeside; - -node 1 admin conninfo = 'dbname=freeside host=$MASTERHOST user=$REPLICATIONUSER'; -node 2 admin conninfo = 'dbname=freeside host=$SLAVEHOST user=$REPLICATIONUSER'; - -subscribe set ( id = 1, provider = 1, receiver = 2, forward = no); - -_EOF_ -END - diff --git a/bin/sqlradius-norealm.reimport b/bin/sqlradius-norealm.reimport deleted file mode 100755 index b7d016609..000000000 --- a/bin/sqlradius-norealm.reimport +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw(%part_svc); -#use Date::Parse; -use DBI; -use Term::Query qw(query); -use FS::UID qw(adminsuidsetup); #datasrc -use FS::Record qw(qsearch qsearchs); -use FS::svc_acct; -use FS::part_svc; - -my $user = shift or die &usage; -adminsuidsetup $user; - -#push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? - -$FS::svc_Common::noexport_hack = 1; - -### - -%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); - -die "No services with svcdb svc_acct!\n" unless %part_svc; - -print "\n\n", &menu_svc, "\n", <<END; -Enter part number to import. -END -my $sqlradius_svcpart = &getpart; - -my $datasrc = &getvalue("\n\nEnter the DBI datasource:"); -my $db_user = &getvalue("\n\nEnter the database user:"); -my $db_pass = &getvalue("\n\nEnter the database password:"); - -sub menu_svc { - ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; -} -sub getpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; - $^W=1; - $return; -} -sub getvalue { - my $prompt = shift; - $^W=0; # Term::Query isn't -w-safe - my $return = query $prompt, ''; - $^W=1; - $return; -} - -print "\n\n"; - -### - -my $dbh = DBI->connect( $datasrc, $db_user, $db_pass ) - or die $DBI::errstr; - -my $sth = $dbh->prepare('SELECT DISTINCT UserName FROM radcheck') - or die $dbh->errstr; -$sth->execute or die $sth->errstr; - -my $row; -while ( defined ( $row = $sth->fetchrow_arrayref ) ) { - my( $username ) = @$row; - - my( $password, $group ) = ( '', '', '' ); - - my $rc_sth = $dbh->prepare( - 'SELECT Attribute, Value'. - ' FROM radcheck'. - ' WHERE UserName = ?' - ) or die $dbh->errstr; - $rc_sth->execute($username) or die $rc_sth->errstr; - - foreach my $rc_row ( @{$rc_sth->fetchall_arrayref} ) { - my($attribute, $value) = @$rc_row; - if ( $attribute =~ /^((Crypt|User)-)?Password$/ ) { - $password = $value unless $password && !$1; - } else { - #handle other params! - } - } - - my @svc_acct = grep { $_->cust_svc->svcpart == $sqlradius_svcpart } - qsearch('svc_acct', { 'username' => $username, } ); - - #print "$r_username / $realm: $password / $finger: "; - print "$username: $password: "; - if ( scalar(@svc_acct) == 0 ) { - print "not found\n"; - next; - } elsif ( scalar(@svc_acct) > 1 ) { - print "multiple matches found?!?!\n"; - next; - } else { - #print "correcting password and name\n"; - print "correcting password\n"; - } - - my $svc_acct = $svc_acct[0]; - #my $new = new FS::svc_acct { $svc_acct->hash, '_password' => $password, 'finger' => $finger }; - my $new = new FS::svc_acct { $svc_acct->hash, '_password' => $password }; - my $error = $new->replace($svc_acct); - #my $error = $new->check; - die "$username: $error" if $error; - -} - -sub usage { - die "Usage:\n\n sqlradius-norealm.reimport user\n"; -} - diff --git a/bin/sqlradius.import b/bin/sqlradius.import deleted file mode 100644 index e75f65b17..000000000 --- a/bin/sqlradius.import +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw(%part_svc %domain_part_svc); -#use Date::Parse; -use DBI; -use Term::Query qw(query); -use FS::UID qw(adminsuidsetup); #datasrc -use FS::Record qw(qsearch qsearchs); -use FS::svc_acct; -use FS::part_svc; -use FS::svc_domain; - -my $user = shift or die &usage; -adminsuidsetup $user; - -#push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? - -$FS::svc_Common::noexport_hack = 1; -$FS::svc_domain::whois_hack = 1; - -### - -%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); - -die "No services with svcdb svc_acct!\n" unless %part_svc; - -print "\n\n", &menu_svc, "\n", <<END; -Enter part number to import. -END -my $sqlradius_svcpart = &getpart; - -%domain_part_svc = map { $_->svcpart, $_ } - qsearch('part_svc', { 'svcdb' => 'svc_domain'} ); - -die "No services with svcdb svc_domain!\n" unless %domain_part_svc; - -print "\n\n", &menu_domain_svc, "\n", <<END; -Enter part number for domains. -END -my $domain_svcpart = &getdomainpart; - -my $datasrc = &getvalue("\n\nEnter the DBI datasource:"); -my $db_user = &getvalue("\n\nEnter the database user:"); -my $db_pass = &getvalue("\n\nEnter the database password:"); - -sub menu_svc { - ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; -} -sub menu_domain_svc { - ( join "\n", map "$_: ".$domain_part_svc{$_}->svc, sort keys %domain_part_svc ). "\n"; -} -sub getpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; - $^W=1; - $return; -} -sub getdomainpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %domain_part_svc ]; - $^W=1; - $return; -} -sub getvalue { - my $prompt = shift; - $^W=0; # Term::Query isn't -w-safe - my $return = query $prompt, ''; - $^W=1; - $return; -} - -print "\n\n"; - -### - -my $dbh = DBI->connect( $datasrc, $db_user, $db_pass ) - or die $DBI::errstr; - -my $sth = $dbh->prepare('SELECT DISTINCT UserName, Realm FROM radcheck') - or die $dbh->errstr; -$sth->execute or die $sth->errstr; - -my $row; -while ( defined ( $row = $sth->fetchrow_arrayref ) ) { - my( $r_username, $realm ) = @$row; - - my( $username, $domain ); - if ( $r_username =~ /^([^@]+)\@([^@]+)$/ ) { - $username = $1; - $domain = $2; - } else { - $username = $r_username; - $domain = $realm; - } - my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) - || new FS::svc_domain { - 'domain' => $domain, - 'svcpart' => $domain_svcpart, - 'action' => 'N', - }; - unless ( $svc_domain->svcnum ) { - my $error = $svc_domain->insert; - if ( $error ) { - die "can't insert domain $domain: $error\n"; - } - } - - my( $password, $finger, $group ) = ( '', '', '' ); - - my $rc_sth = $dbh->prepare( - 'SELECT Attribute, Value, Name, GroupName'. - ' FROM radcheck'. - ' WHERE UserName = ? and Realm = ?' - ) or die $dbh->errstr; - $rc_sth->execute($r_username, $realm) or die $rc_sth->errstr; - - foreach my $rc_row ( @{$rc_sth->fetchall_arrayref} ) { - my($attribute, $value, $name, $groupname) = @$rc_row; - if ( $attribute =~ /^((User|Crypt)-)?Password$/ ) { - $password = $value; - $finger = $name; - $group = $groupname; - } else { - #handle other params! - } - } - - my $svc_acct = new FS::svc_acct { - 'svcpart' => $sqlradius_svcpart, - 'username' => $username, - 'domsvc' => $svc_domain->svcnum, - '_password' => $password, - 'finger' => $finger, - }; - - my $error = $svc_acct->insert; - #my $error = $svc_acct->check; - if ( $error ) { - if ( $error =~ /duplicate/i ) { - warn "$r_username / $realm: $error"; - } else { - die "$r_username / $realm: $error"; - } - } - -} - -sub usage { - die "Usage:\n\n sqlradius.import user\n"; -} - diff --git a/bin/sqlradius.reimport b/bin/sqlradius.reimport deleted file mode 100755 index 2218a3f13..000000000 --- a/bin/sqlradius.reimport +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw(%part_svc %domain_part_svc); -#use Date::Parse; -use DBI; -use Term::Query qw(query); -use FS::UID qw(adminsuidsetup); #datasrc -use FS::Record qw(qsearch qsearchs); -use FS::svc_acct; -use FS::part_svc; -use FS::svc_domain; - -my $user = shift or die &usage; -adminsuidsetup $user; - -#push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? - -$FS::svc_Common::noexport_hack = 1; -$FS::svc_domain::whois_hack = 1; - -### - -%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); - -die "No services with svcdb svc_acct!\n" unless %part_svc; - -print "\n\n", &menu_svc, "\n", <<END; -Enter part number to import. -END -my $sqlradius_svcpart = &getpart; - -%domain_part_svc = map { $_->svcpart, $_ } - qsearch('part_svc', { 'svcdb' => 'svc_domain'} ); - -die "No services with svcdb svc_domain!\n" unless %domain_part_svc; - -print "\n\n", &menu_domain_svc, "\n", <<END; -Enter part number for domains. -END -my $domain_svcpart = &getdomainpart; - -my $datasrc = &getvalue("\n\nEnter the DBI datasource:"); -my $db_user = &getvalue("\n\nEnter the database user:"); -my $db_pass = &getvalue("\n\nEnter the database password:"); - -sub menu_svc { - ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; -} -sub menu_domain_svc { - ( join "\n", map "$_: ".$domain_part_svc{$_}->svc, sort keys %domain_part_svc ). "\n"; -} -sub getpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; - $^W=1; - $return; -} -sub getdomainpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %domain_part_svc ]; - $^W=1; - $return; -} -sub getvalue { - my $prompt = shift; - $^W=0; # Term::Query isn't -w-safe - my $return = query $prompt, ''; - $^W=1; - $return; -} - -print "\n\n"; - -### - -my $dbh = DBI->connect( $datasrc, $db_user, $db_pass ) - or die $DBI::errstr; - -my $sth = $dbh->prepare('SELECT DISTINCT UserName, Realm FROM radcheck') - or die $dbh->errstr; -$sth->execute or die $sth->errstr; - -my $row; -while ( defined ( $row = $sth->fetchrow_arrayref ) ) { - my( $r_username, $realm ) = @$row; - - my( $username, $domain ); - if ( $r_username =~ /^([^@]+)\@([^@]+)$/ ) { - $username = $1; - $domain = $2; - } else { - $username = $r_username; - $domain = $realm; - } - my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) - || new FS::svc_domain { - 'domain' => $domain, - 'svcpart' => $domain_svcpart, - 'action' => 'N', - }; - unless ( $svc_domain->svcnum ) { - die "new domain? wtf"; - my $error = $svc_domain->insert; - if ( $error ) { - die "can't insert domain $domain: $error\n"; - } - } - - #my( $password, $finger, $group ) = ( '', '', '' ); - my( $password, $group ) = ( '', '', '' ); - - my $rc_sth = $dbh->prepare( - 'SELECT Attribute, Value, Name, GroupName'. - ' FROM radcheck'. - ' WHERE UserName = ? and Realm = ?' - ) or die $dbh->errstr; - $rc_sth->execute($r_username, $realm) or die $rc_sth->errstr; - - foreach my $rc_row ( @{$rc_sth->fetchall_arrayref} ) { - my($attribute, $value, $name, $groupname) = @$rc_row; - if ( $attribute =~ /^((Crypt|User)-)?Password$/ ) { - $password = $value; - #$finger = $name; - $group = $groupname; - } else { - #handle other params! - } - } - - my @svc_acct = grep { $_->cust_svc->svcpart == $sqlradius_svcpart } - qsearch('svc_acct', { 'username' => $username, - 'domsvc' => $svc_domain->svcnum, } ); - - #print "$r_username / $realm: $password / $finger: "; - print "$r_username / $realm: $password: "; - if ( scalar(@svc_acct) == 0 ) { - print "not found\n"; - next; - } elsif ( scalar(@svc_acct) > 1 ) { - print "multiple matches found?!?!\n"; - next; - } else { - #print "correcting password and name\n"; - print "correcting password\n"; - } - - my $svc_acct = $svc_acct[0]; - #my $new = new FS::svc_acct { $svc_acct->hash, '_password' => $password, 'finger' => $finger }; - my $new = new FS::svc_acct { $svc_acct->hash, '_password' => $password }; - my $error = $new->replace($svc_acct); - #my $error = $new->check; - die "$r_username / $realm: $error" if $error; - -} - -sub usage { - die "Usage:\n\n sqlradius.reimport user\n"; -} - diff --git a/bin/strip-eps b/bin/strip-eps deleted file mode 100755 index 2c2d124d7..000000000 --- a/bin/strip-eps +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/perl -w - -# Author: Andy Turner <andrew.turner@acadia.net> - -use strict; - -# The first line has some binary magic for file identification -# purposes. GhostScript doesn't like it. Strip it. -scalar <>; - -# Add a header so that we can use magic to determine the file type. -print "%!PS-Adobe-3.0 EPSF-3.0\n"; - -while (<>) { - print; - - # Illustrator Version 7 format EPS files have a bunch of binary gook - # after the "%%EOF" line. (% is a comment in PostScript, right?) - last if /^%%EOF/; -} diff --git a/bin/svc_acct.import b/bin/svc_acct.import deleted file mode 100755 index aff26b943..000000000 --- a/bin/svc_acct.import +++ /dev/null @@ -1,237 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw(%part_svc); -use Date::Parse; -use Term::Query qw(query); -use Net::SCP qw(iscp); -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(qsearch); -use FS::svc_acct; -use FS::part_svc; - -my $user = shift or die &usage; -adminsuidsetup $user; - -push @FS::svc_acct::shells, qw(/bin/sync /sbin/shuddown /bin/halt); #others? - -my($spooldir)="/usr/local/etc/freeside/export.". datasrc; - -$FS::svc_acct::nossh_hack = 1; - -### - -%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); - -die "No services with svcdb svc_acct!\n" unless %part_svc; - -print "\n\n", &menu_svc, "\n", <<END; -Most accounts probably have entries in passwd and users (with Port-Limit -nonexistant or 1). -END -my($ppp_svcpart)=&getpart; - -print "\n\n", &menu_svc, "\n", <<END; -Some accounts have entries in passwd and users, but with Port-Limit 2 (or -more). -END -my($isdn_svcpart)=&getpart; - -print "\n\n", &menu_svc, "\n", <<END; -Some accounts might have entries in users only (Port-Limit 1) -END -my($oppp_svcpart)=&getpart; - -print "\n\n", &menu_svc, "\n", <<END; -Some accounts might have entries in users only (Port-Limit >= 2) -END -my($oisdn_svcpart)=&getpart; - -print "\n\n", &menu_svc, "\n", <<END; -POP mail accounts have entries in passwd only, and have a particular shell. -END -my($pop_shell)=&getvalue("Enter that shell:"); -my($popmail_svcpart)=&getpart; - -print "\n\n", &menu_svc, "\n", <<END; -Everything else in passwd is a shell account. -END -my($shell_svcpart)=&getpart; - -print "\n\n", <<END; -Enter the location and name of your _user_ passwd file, for example -"mail.isp.com:/etc/passwd" or "nis.isp.com:/etc/global/passwd" -END -my($loc_passwd)=&getvalue(":"); -iscp("root\@$loc_passwd", "$spooldir/passwd.import"); - -print "\n\n", <<END; -Enter the location and name of your _user_ shadow file, for example -"mail.isp.com:/etc/shadow" or "bsd.isp.com:/etc/master.passwd" -END -my($loc_shadow)=&getvalue(":"); -iscp("root\@$loc_shadow", "$spooldir/shadow.import"); - -print "\n\n", <<END; -Enter the location and name of your radius "users" file, for example -"radius.isp.com:/etc/raddb/users" -END -my($loc_users)=&getvalue(":"); -iscp("root\@$loc_users", "$spooldir/users.import"); - -sub menu_svc { - ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; -} -sub getpart { - $^W=0; # Term::Query isn't -w-safe - my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; - $^W=1; - $return; -} -sub getvalue { - my $prompt = shift; - $^W=0; # Term::Query isn't -w-safe - my $return = query $prompt, ''; - $^W=1; - $return; -} - -print "\n\n"; - -### - -open(PASSWD,"<$spooldir/passwd.import"); -open(SHADOW,"<$spooldir/shadow.import"); -open(USERS,"<$spooldir/users.import"); - -my(%upassword,%ip,%allparam); -my(%param,$username); -while (<USERS>) { - chop; - next if /^\s*$/; - next if /^\s*#/; - if ( /^\S/ ) { - /^(\w+)\s+(Auth-Type\s+=\s+Local,\s+)?Password\s+=\s+"([^"]+)"(,\s+Expiration\s+=\s+"([^"]*")\s*)?$/ - or die "1Unexpected line in users.import: $_"; - my($password,$expiration); - ($username,$password,$expiration)=(lc($1),$3,$5); - $password = '' if $password eq 'UNIX'; - $upassword{$username}=$password; - undef %param; - } else { - die "2Unexpected line in users.import: $_"; - } - while (<USERS>) { - chop; - if ( /^\s*$/ ) { - if ( defined $param{'radius_Framed_IP_Address'} ) { - $ip{$username} = $param{'radius_Framed_IP_Address'}; - delete $param{'radius_Framed_IP_Address'}; - } else { - $ip{$username} = '0e0'; - } - $allparam{$username}={ %param }; - last; - } elsif ( /^\s+([\w\-]+)\s=\s"?([\w\.\-\s]+)"?,?\s*$/ ) { - my($attribute,$value)=($1,$2); - $attribute =~ s/\-/_/g; - $param{'radius_'.$attribute}=$value; - } else { - die "3Unexpected line in users.import: $_"; - } - } -} -#? incase there isn't a terminating blank line ? -if ( defined $param{'radius_Framed_IP_Address'} ) { - $ip{$username} = $param{'radius_Framed_IP_Address'}; - delete $param{'radius_Framed_IP_Address'}; -} else { - $ip{$username} = '0e0'; -} -$allparam{$username}={ %param }; - -my(%password); -while (<SHADOW>) { - chop; - my($username,$password)=split(/:/); - #$password =~ s/^\!$/\*/; - #$password =~ s/\!+/\*SUSPENDED\* /; - $password{$username}=$password; -} - -while (<PASSWD>) { - chop; - my($username,$x,$uid,$gid,$finger,$dir,$shell)=split(/:/); - my($password)=$upassword{$username} || $password{$username}; - - my($maxb)=${$allparam{$username}}{'radius_Port_Limit'}; - my($svcpart); - if ( exists $upassword{$username} ) { - if ( $maxb >= 2 ) { - $svcpart = $isdn_svcpart - } elsif ( ! $maxb || $maxb == 1 ) { - $svcpart = $ppp_svcpart - } else { - die "Illegal Port-Limit in users ($username)!\n"; - } - } elsif ( $shell eq $pop_shell ) { - $svcpart = $popmail_svcpart; - } else { - $svcpart = $shell_svcpart; - } - - my($svc_acct) = new FS::svc_acct ({ - 'svcpart' => $svcpart, - 'username' => $username, - '_password' => $password, - 'uid' => $uid, - 'gid' => $gid, - 'finger' => $finger, - 'dir' => $dir, - 'shell' => $shell, - 'slipip' => $ip{$username}, - %{$allparam{$username}}, - }); - my($error); - $error=$svc_acct->insert; - die $error if $error; - - delete $allparam{$username}; - delete $upassword{$username}; -} - -#my($username); -foreach $username ( keys %upassword ) { - my($password)=$upassword{$username}; - - my($maxb)=${$allparam{$username}}{'radius_Port_Limit'} || 0; - my($svcpart); - if ( $maxb == 2 ) { - $svcpart = $oisdn_svcpart - } elsif ( ! $maxb || $maxb == 1 ) { - $svcpart = $oppp_svcpart - } else { - die "Illegal Port-Limit in users!\n"; - } - - my($svc_acct) = new FS::svc_acct ({ - 'svcpart' => $svcpart, - 'username' => $username, - '_password' => $password, - 'slipip' => $ip{$username}, - %{$allparam{$username}}, - }); - my($error); - $error=$svc_acct->insert; - die $error, if $error; - - delete $allparam{$username}; - delete $upassword{$username}; -} - -# - -sub usage { - die "Usage:\n\n svc_acct.import user\n"; -} - diff --git a/bin/svc_acct_pop.import b/bin/svc_acct_pop.import deleted file mode 100755 index 9e3d38bfe..000000000 --- a/bin/svc_acct_pop.import +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Text::CSV_XS; -use FS::UID qw(adminsuidsetup); -use FS::svc_acct_pop; - -my @fields = qw( ac loc state city exch ); -my $fixup = sub { - my $hash = shift; - $hash->{ac} =~ /^\s*(\d{3})\s*$/; - $hash->{ac} = $1; - $hash->{loc} =~ /^\s*(\d{3})(\d{4})\s*$/; - $hash->{exch} = $1; - $hash->{loc} = $2; - $hash->{state} =~ /^\s*(\S{0,2})\s*$/; - $hash->{state} = $1; - $hash->{city} =~ /^\s*(.*?)\s*$/; - $hash->{city} = $1; - - }; - -my $user = shift or usage(); -adminsuidsetup $user; - -my $file = shift or usage(); -my $csv = new Text::CSV_XS; - -open(FH, $file) or die "cannot open $file: $!"; - -sub usage { - die "Usage:\n\n svc_acct_pop.import user popfile.csv\n\n"; -} - -### - -my $line; -while ( defined($line=<FH>) ) { - chomp $line; - - $line &= "\177" x length($line); # i hope this isn't really necessary - $csv->parse($line) - or die "cannot parse: " . $csv->error_input(); - - my @values = $csv->fields(); - my %hash; - foreach my $field (@fields) { - $hash{$field} = shift @values; - } - - &{$fixup}(\%hash); - - my $svc_acct_pop = new FS::svc_acct_pop { %hash }; - - #my $error = $svc_acct_pop->check; - my $error = $svc_acct_pop->insert; - die $error if $error; - -} diff --git a/bin/svc_broadband.renumber b/bin/svc_broadband.renumber deleted file mode 100755 index 980fa0099..000000000 --- a/bin/svc_broadband.renumber +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/perl - -use strict; - -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch qsearchs); -use FS::svc_Common; -use FS::part_svc_router; -use FS::svc_broadband; -use FS::router; -use FS::addr_block; - -$FS::svc_Common::noexport_hack = 1; #Disable exports! - -my $user = shift if $ARGV[0] or die &usage; -adminsuidsetup($user); - -my $remapfile = shift if $ARGV[0] or die &usage; -my $old_blocknum = shift if $ARGV[0] or die &usage; -my $new_blocknum = shift if $ARGV[0] or die &usage; -my $old_svcnum = shift if $ARGV[0]; - -my %ipmap; - -open(REMAP, "<$remapfile") or die $!; -while (<REMAP>) { - next unless (/^([0-9\.]+)\s+([0-9\.]+)$/); - my ($old_ip, $new_ip) = ($1, $2); - $ipmap{$old_ip} = $new_ip; -} -close(REMAP); - -my @svcs; -if ($old_svcnum) { - @svcs = ( qsearchs('svc_broadband', { svcnum => $old_svcnum, - blocknum => $old_blocknum }) ); -} else { - @svcs = qsearch('svc_broadband', { blocknum => $old_blocknum }); -} - -foreach my $old_sb (@svcs) { - - my $old_ip = $old_sb->ip_addr; - my $new_ip = $ipmap{$old_ip}; - print "Renumbering ${old_ip} (${old_blocknum}) => ${new_ip} (${new_blocknum})...\n"; - - - my $new_sb = new FS::svc_broadband - { $old_sb->hash, - ip_addr => $new_ip, - blocknum => $new_blocknum, - svcpart => $old_sb->cust_svc->svcpart, - }; - - my $error = $new_sb->replace($old_sb); - die $error if $error; - -} - - - -exit(0); - -sub usage { - - my $usage = <<EOT; -Usage: - svc_broadband.renumber user remapfile old_blocknum new_blocknum [ svcnum ] - -remapfile format: -old_ip_address new_ip_address -... - -Example remapfile: -10.0.0.5 192.168.0.5 -10.0.0.20 192.168.0.20 -10.0.0.32 192.168.0.3 - -Warning: This assumes your routers have already been reconfigured with the - new addresses. Exports will not be run! - -EOT - -} diff --git a/bin/svc_domain.erase b/bin/svc_domain.erase deleted file mode 100755 index 435dd5fdd..000000000 --- a/bin/svc_domain.erase +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use FS::UID qw(adminsuidsetup); -use FS::Record qw(qsearch); - -use FS::domain_record; -use FS::svc_domain; - -adminsuidsetup(shift @ARGV) or die "Usage: svc_domain.erase user\n"; - -foreach my $record ( qsearch('domain_record',{}), qsearch('svc_domain', {} ) ) { - my $error = $record->delete; - die $error if $error; -} diff --git a/bin/sysvshell.export b/bin/sysvshell.export deleted file mode 100755 index c13912c3f..000000000 --- a/bin/sysvshell.export +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/perl -w - -# sysvshell export - -use strict; -use File::Rsync; -use Net::SSH qw(ssh); -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(qsearch qsearchs); -use FS::part_export; -use FS::cust_svc; -use FS::svc_acct; - -my @saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' ); - -my $user = shift or die &usage; -adminsuidsetup $user; - -my $spooldir = "/usr/local/etc/freeside/export.". datasrc; -#my $spooldir = "/usr/local/etc/freeside/export.". datasrc. "/shell"; - -my @sysv_exports = qsearch('part_export', { 'exporttype' => 'sysvshell' } ); - -my $rsync = File::Rsync->new({ - rsh => 'ssh', -# dry_run => 1, -}); - -foreach my $export ( @sysv_exports ) { - my $machine = $export->machine; - my $prefix = "$spooldir/$machine"; - mkdir $prefix, 0700 unless -d $prefix; - - #LOCKING!!! - - ( open(SHADOW,">$prefix/shadow") - #!!! and flock(SHADOW,LOCK_EX|LOCK_NB) - ) or die "Can't open $prefix/shadow: $!"; - ( open(PASSWD,">$prefix/passwd") - #!!! and flock(PASSWD,LOCK_EX|LOCK_NB) - ) or die "Can't open $prefix/passwd: $!"; - - chmod 0644, "$prefix/passwd"; - chmod 0600, "$prefix/shadow"; - - my @svc_acct = $export->svc_x; - - next unless @svc_acct; - - foreach my $svc_acct ( sort { $a->uid <=> $b->uid } @svc_acct ) { - - my $password = $svc_acct->_password; - my $cpassword; - #if ( ( length($password) <= 8 ) - if ( ( length($password) <= 12 ) - && ( $password ne '*' ) - && ( $password ne '!!' ) - && ( $password ne '' ) - ) { - $cpassword=crypt($password, - $saltset[int(rand(64))].$saltset[int(rand(64))] - ); - # MD5 !!!! - } else { - $cpassword=$password; - } - - ### - # FORMAT OF THE PASSWD FILE HERE - print PASSWD join(":", - $svc_acct->username, - 'x', # "##". $username, - $svc_acct->uid, - $svc_acct->gid, - $svc_acct->finger, - $svc_acct->dir, - $svc_acct->shell, - ), "\n"; - - ### - # FORMAT OF THE SHADOW FILE HERE - print SHADOW join(":", - $svc_acct->username, - $cpassword, - '', - '', - '', - '', - '', - '', - '', - ), "\n"; - - } - - #!!! flock(SHADOW,LOCK_UN); - #!!! flock(PASSWD,LOCK_UN); - close SHADOW; - close PASSWD; - - $rsync->exec( { - src => "$prefix/shadow", - dest => "root\@$machine:/etc/shadow" - } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); - - $rsync->exec( { - src => "$prefix/passwd", - dest => "root\@$machine:/etc/passwd" - } ) or die "rsync to $machine failed: ". join(" / ", $rsync->err); - - # UNLOCK!! -} diff --git a/conf/agent_defaultpkg b/conf/agent_defaultpkg deleted file mode 100644 index e69de29bb..000000000 diff --git a/conf/alerter_template b/conf/alerter_template deleted file mode 100644 index 6fb66b77d..000000000 --- a/conf/alerter_template +++ /dev/null @@ -1,18 +0,0 @@ - - -{ $company_name; } -{ $company_address; } - - -{ $first; } { $last; }: - - We thank you for your continuing patronage. This notice is to remind you -that your { $payby } used to pay { $company_name; } for Internet -service will expire on { use Date::Format; time2str("%B %o, %Y", $expdate); }. Please provide us with new -billing information so that we may continue your service uninterrupted. - -Very Truly Yours, - - { $company_name; } Service Team - - diff --git a/conf/blank_logo.eps b/conf/blank_logo.eps deleted file mode 100644 index e7e3bab51..000000000 --- a/conf/blank_logo.eps +++ /dev/null @@ -1,22 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%BoundingBox: 0 0 1 1 -%%HiResBoundingBox: 0 0 0 0 -%%Creator: Karbon14 EPS Exportfilter 0.5 -%%CreationDate: (01/03/2007 11:23:26 PM) -%%For: (ivan) () -%%Title: () - -/N {newpath} def -/C {closepath} def -/m {moveto} def -/c {curveto} def -/l {lineto} def -/s {stroke} def -/f {fill} def -/w {setlinewidth} def -/d {setdash} def -/r {setrgbcolor} def -/S {gsave} def -/R {grestore} def - -%%EOF diff --git a/conf/company_address b/conf/company_address deleted file mode 100644 index 38248622a..000000000 --- a/conf/company_address +++ /dev/null @@ -1,2 +0,0 @@ -1234 Example Lane -Exampleton, CA 54321 diff --git a/conf/company_name b/conf/company_name deleted file mode 100644 index 2cd53232c..000000000 --- a/conf/company_name +++ /dev/null @@ -1 +0,0 @@ -ExampleCo diff --git a/conf/cust_pkg-change_svcpart b/conf/cust_pkg-change_svcpart deleted file mode 100644 index e69de29bb..000000000 diff --git a/conf/declinetemplate b/conf/declinetemplate deleted file mode 100644 index 14b8c60ec..000000000 --- a/conf/declinetemplate +++ /dev/null @@ -1,10 +0,0 @@ -Hi, - -Your credit card could not be processed for the following reason: - { $error } - -Please provide us with new billing information so that we may continue your -service uninterrupted. - -Thanks. - diff --git a/conf/home b/conf/home deleted file mode 100644 index 05280cb02..000000000 --- a/conf/home +++ /dev/null @@ -1 +0,0 @@ -/home diff --git a/conf/impending_recur_template b/conf/impending_recur_template deleted file mode 100644 index deb396ac3..000000000 --- a/conf/impending_recur_template +++ /dev/null @@ -1,20 +0,0 @@ - - -{ $company_name; } -{ $company_address; } - - -{ $first; } { $last; }: - - We thank you for your continuing patronage. This notice is to remind you -that your { $packages->[0] } Internet service -will expire on { use Date::Format; time2str("%B %o, %Y", $recurdates->[0]); }. -At that time we will begin charging you on a recurring basis so that we may -continue your service uninterrupted. - -Very Truly Yours, - - { $company_name; } Service Team - - - diff --git a/conf/invoice_from b/conf/invoice_from deleted file mode 100644 index 110ec8f41..000000000 --- a/conf/invoice_from +++ /dev/null @@ -1 +0,0 @@ -ivan-unconfigured-freeside-installation@420.am diff --git a/conf/invoice_html b/conf/invoice_html deleted file mode 100644 index 9d97243e4..000000000 --- a/conf/invoice_html +++ /dev/null @@ -1,166 +0,0 @@ -<STYLE TYPE="text/css"> -.invoice { font-family: sans-serif; font-size: 10pt } -.invoice_header { font-size: 10pt } -.invoice_headerright TH { border-top: 2px solid #000000; border-bottom: 2px solid #000000 } -.invoice_headerright TD { font-size: 10pt; empty-cells: show } -.invoice_longtable table { cellspacing: none } -.invoice_longtable TH { border-top: 2px solid #000000; border-bottom: 1px solid #000000; padding-left: none; padding-right: none; font-size: 10pt } -.invoice_desc TD { border-top: 2px solid #000000; font-weight: bold; font-size: 10pt } -.invoice_extdesc TD { font-size: 8pt } -.invoice_totaldesc TD { font-size: 10pt; empty-cells: show } -</STYLE> - -<table class="invoice" bgcolor="#ffffff" WIDTH=768 CELLSPACING=8><tr><td> - - <table class="invoice_header" width="100%"> - <tr> - <td><img src="<%= $cid ? "cid:$cid" : "cust_bill-logo.cgi?$template" %>"></td> - <td align="left"><%= $returnaddress %></td> - <td align="right"> - <table CLASS="invoice_headerright" cellspacing=0> - <tr> - <td align="right"> - Invoice date<BR> - <B><%= $date %></B> - </td> - <td> - </td> - <td align="center"> - Invoice #<BR> - <B><%= $invnum %></B> - </td> - <td> - </td> - <td align="center"> - Customer #<BR> - <B><%= $custnum %></B> - </td> - </tr> - <tr> - <th> </th> - <th colspan=3 align="center"> - <FONT SIZE="+3">I</FONT><FONT SIZE="+2">NVOICE</FONT> - </th> - <th> </th> - </tr> - </table> - </td> - </tr> - - <tr> - <td> - </td> - <td align="left"> - <b><%= $payname %></b><BR> - <%= join('<BR>', grep length($_), $company, - $address1, - $address2, - "$city, $state  $zip", - $country, - ) - %> - </td> - <td align="right"> - Terms: <%= $terms %><BR> - <%= $po_line %> - </td> - </tr> - - </table> - - <%= - foreach my $section ( @sections ) { - $OUT .= '<table><tr><td>'; - if ($section->{'description'}) { - $OUT .= - '<p><b><font size="+1">'. uc(substr($section->{'description'},0,1)). - '</font><font size="+0">'. uc(substr($section->{'description'},1)). - '</font></b>'. - '<p>'; - }else{ - $OUT .= - '<p><b><font size="+1">C</font><font size="+0">HARGES</font></b>'. - '<p>'; - } - $OUT .= '</td></tr></table>'; - - $OUT .= - '<table class="invoice_longtable" CELLSPACING=0 WIDTH="100%">'. - '<tr>'. - '<th align="center">Ref</th>'. - '<th align="left">Description</th>'. - '<th align="right">Amount</th>'. - '</tr>'; - - foreach my $line ( - grep { ( scalar(@sections) > 1 - ? $section->{'description'} eq $_->{'section'}->{'description'} - : 1 - ) } - @detail_items ) - { - $OUT .= - '<tr class="invoice_desc">'. - '<td align="center">'. $line->{'ref'}. '</td>'. - '<td align="left">'. $line->{'description'}. '</td>'. - '<td align="right">'. $line->{'amount'}. '</td>'. - '</tr>' - ; - foreach my $ext_desc ( @{$line->{'ext_description'} } ) { - $OUT .= - '<tr class="invoice_extdesc">'. - '<td></td>'. - '<td align="left">- '. $ext_desc. '</td>'. - '<td></td>'. - '</tr>' - } - } - - - if (scalar(@sections) > 1) { - my $style = 'border-top: 3px solid #000000;'. - 'border-bottom: 3px solid #000000;'; - $OUT .= - '<tr class="invoice_totaldesc">'. - qq(<td style="$style"> </td>). - qq(<td align="left" style="$style">). - $section->{'description'}. ' Total </td>'. - qq(<td align="right" style="$style">). - $section->{'subtotal'}. '</td>'. - '</tr>' - ; - } - } - - my $style = 'border-top: 3px solid #000000;'; - my $linenum = 0; - - foreach my $line ( @total_items ) { - - $style .= 'border-bottom: 3px solid #000000;' - if ++$linenum == scalar(@total_items); - - $OUT .= - '<tr class="invoice_totaldesc">'. - qq(<td style="$style"> </td>). - qq(<td align="left" style="$style">). - $line->{'total_item'}. '</td>'. - qq(<td align="right" style="$style">). - $line->{'total_amount'}. '</td>'. - '</tr>' - ; - - $style=''; - - } - - %> - </table> - <br><br> - -<%= $notes %> - - <hr NOSHADE SIZE=2 COLOR="#000000"> - <p align="center"><%= $footer %> - -</td></tr></table> diff --git a/conf/invoice_html_statement b/conf/invoice_html_statement deleted file mode 100644 index 4e4d259af..000000000 --- a/conf/invoice_html_statement +++ /dev/null @@ -1,124 +0,0 @@ -<STYLE TYPE="text/css"> -.invoice { font-family: sans-serif; font-size: 10pt } -.invoice_header { font-size: 10pt } -.invoice_headerright TH { border-top: 2px solid #000000; border-bottom: 2px solid #000000 } -.invoice_headerright TD { font-size: 10pt; empty-cells: show } -.invoice_longtable table { cellspacing: none } -.invoice_longtable TH { border-top: 2px solid #000000; border-bottom: 1px solid #000000; padding-left: none; padding-right: none; font-size: 10pt } -.invoice_desc TD { border-top: 2px solid #000000; font-weight: bold; font-size: 10pt } -.invoice_extdesc TD { font-size: 8pt } -.invoice_totaldesc TD { font-size: 10pt; empty-cells: show } -</STYLE> - -<table class="invoice" bgcolor="#ffffff" WIDTH=768 CELLSPACING=8><tr><td> - - <table class="invoice_header" width="100%"> - <tr> - <td><img src="<%= $cid ? "cid:$cid" : "cust_bill-logo.cgi?$template" %>"></td> - <td align="left"><%= $returnaddress %></td> - <td align="right"> - <table CLASS="invoice_headerright" cellspacing=0> - <tr> - <td align="right"> - Invoice date<BR> - <B><%= $date %></B> - </td> - <td> - </td> - <td align="left"> - Invoice number<BR> - <B><%= $invnum %></B> - </td> - </tr> - <tr> - <th> </th> - <th colspan=1 align="center"> - <FONT SIZE="+3">S</FONT><FONT SIZE="+2">TATEMENT</FONT> - </th> - <th> </th> - </tr> - </table> - </td> - </tr> - - <tr> - <td> - </td> - <td align="left"> - <b><%= $payname %></b><BR> - <%= join('<BR>', grep length($_), $company, - $address1, - $address2, - "$city, $state  $zip", - $country, - ) - %> - </td> - <td align="right"> - Terms: <%= $terms %><BR> - <%= $po_line %> - </td> - </tr> - - </table> - - <p><b><font size="+1">C</font><font size="+0">HARGES</font></b> - <p> - <table class="invoice_longtable" CELLSPACING=0 WIDTH="100%"> - <tr> - <th align="center">Ref</th> - <th align="left">Description</th> - <th align="right">Amount</th> - </tr> - <%= - - foreach my $line ( @detail_items ) { - $OUT .= - '<tr class="invoice_desc">'. - '<td align="center">'. $line->{'ref'}. '</td>'. - '<td align="left">'. $line->{'description'}. '</td>'. - '<td align="right">'. $line->{'amount'}. '</td>'. - '</tr>' - ; - foreach my $ext_desc ( @{$line->{'ext_description'} } ) { - $OUT .= - '<tr class="invoice_extdesc">'. - '<td></td>'. - '<td align="left">- '. $ext_desc. '</td>'. - '<td></td>'. - '</tr>' - } - } - - my $style = 'border-top: 3px solid #000000;'; - my $linenum = 0; - - foreach my $line ( @total_items ) { - - $style .= 'border-bottom: 3px solid #000000;' - if ++$linenum == scalar(@total_items); - - $OUT .= - '<tr class="invoice_totaldesc">'. - qq(<td style="$style"> </td>). - qq(<td align="left" style="$style">). - $line->{'total_item'}. '</td>'. - qq(<td align="right" style="$style">). - $line->{'total_amount'}. '</td>'. - '</tr>' - ; - - $style=''; - - } - - %> - </table> - <br><br> - -<%= $notes %> - - <hr NOSHADE SIZE=2 COLOR="#000000"> - <p align="center"><%= $footer %> - -</td></tr></table> diff --git a/conf/invoice_latex b/conf/invoice_latex deleted file mode 100644 index 6a81c4c2e..000000000 --- a/conf/invoice_latex +++ /dev/null @@ -1,260 +0,0 @@ -%% file: Standard Multipage.tex -%% Purpose: Multipage bill template for e-Bills -%% -%% Created by Mark Asplen-Taylor -%% Asplen Management Ltd -%% www.asplen.co.uk -%% -%% Modified for Freeside by Kristian Hoffman -%% -%% Changes -%% 0.1 4/12/00 Created -%% 0.2 18/10/01 More fields added -%% 1.0 16/11/01 RELEASED -%% 1.2 16/10/02 Invoice number added -%% 1.3 2/12/02 Logo graphic added -%% 1.4 7/2/03 Multipage headers/footers added -%% n/a forked for Freeside; checked into CVS -%% - -\documentclass[letterpaper]{article} - -\usepackage{fancyhdr,lastpage,ifthen,longtable,afterpage} -\usepackage{graphicx} % required for logo graphic - -\addtolength{\voffset}{-0.0cm} % top margin to top of header -\addtolength{\hoffset}{-0.6cm} % left margin on page -\addtolength{\topmargin}{-1.25cm} % top margin to top of header -\setlength{\headheight}{2.0cm} % height of header -\setlength{\headsep}{1.0cm} % between header and text -\setlength{\footskip}{1.0cm} % bottom of footer from bottom of text - -%\addtolength{\textwidth}{2.1in} % width of text -\setlength{\textwidth}{19.5cm} -\setlength{\textheight}{19.5cm} -\setlength{\oddsidemargin}{-0.9cm} % odd page left margin -\setlength{\evensidemargin}{-0.9cm} % even page left margin - -\renewcommand{\headrulewidth}{0pt} -\renewcommand{\footrulewidth}{1pt} - -% Adjust the inset of the mailing address -\newcommand{\addressinset}[1][]{\hspace{1.0cm}} - -% Adjust the inset of the return address and logo -\newcommand{\returninset}[1][]{\hspace{-0.25cm}} - -% New command for address lines i.e. skip them if blank -\newcommand{\addressline}[1]{\ifthenelse{\equal{#1}{}}{}{#1\newline}} - -% Inserts dollar symbol -\newcommand{\dollar}[1][]{\symbol{36}} - -% Remove plain style header/footer -\fancypagestyle{plain}{ - \fancyhead{} -} -\fancyhf{} - -% Define fancy header/footer for first and subsequent pages -\fancyfoot[C]{ - \ifthenelse{\equal{\thepage}{1}} - { % First page - \small{ -[@-- $footer --@] - } - } - { % ... pages - \small{ -[@-- $smallfooter --@] - } - } -} - -\fancyfoot[R]{ - \ifthenelse{\equal{\thepage}{1}} - { % First page - } - { % ... pages - \small{\thepage\ of \pageref{LastPage}} - } -} - -\fancyhead[L]{ - \ifthenelse{\equal{\thepage}{1}} - { % First page - \returninset - \makebox{ - \begin{tabular}{ll} - \includegraphics{[@-- $logo_file --@]} & - \begin{minipage}[b]{5.5cm} -[@-- $returnaddress --@] - \end{minipage} - \end{tabular} - } - } - { % ... pages - %\includegraphics{[@-- $logo_file --@]} % Uncomment if you want the logo on all pages. - } -} - -\fancyhead[R]{ - \ifthenelse{\equal{\thepage}{1}} - { % First page - \begin{tabular}{ccc} - Invoice date & Invoice \#& Customer\#\\ - \vspace{0.2cm} - \textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]} & \textbf{[@-- $custnum --@]} \\\hline - \rule{0pt}{5ex} &~~ \huge{\textsc{Invoice}} & \\ - \vspace{-0.2cm} - & & \\\hline - \end{tabular} - } - { % ... pages - \small{ - \begin{tabular}{lll} - Invoice date & Invoice \#& Customer\#\\ - \textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]} & \textbf{[@-- $custnum --@]}\\ - \end{tabular} - } - } -} - -\pagestyle{fancy} - - -%% Font options are: -%% bch Bitsream Charter -%% put Utopia -%% phv Adobe Helvetica -%% pnc New Century Schoolbook -%% ptm Times -%% pcr Courier - -\renewcommand{\familydefault}{phv} - - -% Commands for freeside description... -\newcommand{\FSdesc}[3]{ - \multicolumn{1}{c}{\rule{0pt}{2.5ex}\textbf{#1}} & - \textbf{#2} & - \multicolumn{1}{r}{\textbf{\dollar #3}}\\ -} -% ...extended description... -\newcommand{\FSextdesc}[1]{ - \multicolumn{1}{l}{\rule{0pt}{1.0ex}} & - \multicolumn{2}{l}{\small{~-~#1}}\\ -} -% ...and total line items. -\newcommand{\FStotaldesc}[2]{ - & \multicolumn{1}{l}{#1} & #2\\ -} - - -\begin{document} -% -%% Headers and footers defined for the first page -% -%% The LH Heading comprising logo -%% UNCOMMENT the following FOUR lines and change the path if necssary to provide a logo -% -%% The Heading comprising isue date, customer ref & INVOICE name -% -%% Header & footer changes for subsequent pages -% -% -% -\begin{tabular}{ll} -\addressinset \rule{0cm}{0cm} & -\makebox{ -\begin{minipage}[t]{5.0cm} -\vspace{0.25cm} -\textbf{[@-- $payname --@]}\\ -\addressline{[@-- $company --@]} -\addressline{[@-- $address1 --@]} -\addressline{[@-- $address2 --@]} -\addressline{[@-- $city --@], [@-- $state --@]~~[@-- $zip --@]} -\addressline{[@-- $country --@]} -\end{minipage}} -\end{tabular} -\hfill -\makebox{ -\begin{minipage}[t]{6.4cm} -\begin{flushright} -Terms: [@-- $terms --@]\\ -[@-- $po_line --@]\\ -\end{flushright} -\end{minipage}} -\vspace{1.5cm} -% -[@-- - foreach my $section ( @sections ) { - $OUT .= '\section*{\textsc{'; - $OUT .= ($section->{'description'}) ? $section->{'description'} : 'Charges'; - $OUT .= '}}\begin{longtable}{clr}'; - $OUT .= '\hline'; - $OUT .= '\rule{0pt}{2.5ex}'; - $OUT .= '\makebox[1.4cm]{\textbf{Ref}} & '; - $OUT .= '\makebox[12.8cm][l]{\textbf{Description}} & '; - $OUT .= '\makebox[2.5cm][r]{\textbf{Amount}} \\\\'; - $OUT .= '\hline'; - $OUT .= '\endfirsthead'; - $OUT .= '\multicolumn{3}{r}{\rule{0pt}{2.5ex}Continued from previous page}\\\\'; - $OUT .= '\hline'; - $OUT .= '\rule{0pt}{2.5ex}'; - $OUT .= '\makebox[1.4cm]{\textbf{Ref}} & '; - $OUT .= '\makebox[12.8cm][l]{\textbf{Description}} & '; - $OUT .= '\makebox[2.5cm][r]{\textbf{Amount}} \\\\'; - $OUT .= '\hline'; - $OUT .= '\endhead'; - $OUT .= '\multicolumn{3}{r}{\rule{0pt}{2.5ex}Continued on next page...}\\\\'; - $OUT .= '\endfoot'; - $OUT .= '\hline'; - - if (scalar(@sections) > 1) { - $OUT .= '\FStotaldesc{' . $section->{'description'} . ' Total}' . - '{' . $section->{'subtotal'} . '}' . "\n"; - } - - if ($section == $sections[$#sections]) { - foreach my $line (@total_items) { - $OUT .= '\FStotaldesc{' . $line->{'total_item'} . '}' . - '{' . $line->{'total_amount'} . '}' . "\n"; - } - } - - $OUT .= '\hline'; - $OUT .= '\endlastfoot'; - - foreach my $line ( - grep { ( scalar( @sections ) > 1 - ? $section->{'description'} eq $_->{'section'}->{'description'} - : 1 - ) } - @detail_items ) - { - my $ext_description = $line->{'ext_description'}; - - # Don't break-up small packages. - my $rowbreak = @$ext_description < 5 ? '*' : ''; - - $OUT .= "\\hline\n"; - $OUT .= '\FSdesc{' . $line->{'ref'} . '}{' . $line->{'description'} . '}' . - '{' . $line->{'amount'} . "}${rowbreak}\n"; - - foreach my $ext_desc (@$ext_description) { - $ext_desc = substr($ext_desc, 0, 80) . '...' - if (length($ext_desc) > 80); - $OUT .= '\FSextdesc{' . $ext_desc . '}' . "${rowbreak}\n"; - } - - } - - $OUT .= '\end{longtable}'; - - } - ---@] -\vfill -[@-- $notes --@] -\end{document} diff --git a/conf/invoice_latex.diff b/conf/invoice_latex.diff deleted file mode 100644 index b66a522f0..000000000 --- a/conf/invoice_latex.diff +++ /dev/null @@ -1,138 +0,0 @@ ---- invoice_latex.old 2005-04-14 01:52:02.000000000 -0700 -+++ invoice_latex 2005-04-14 02:33:26.000000000 -0700 -@@ -5,7 +5,7 @@ - %% Asplen Management Ltd - %% www.asplen.co.uk - %% --%% Modified for Freeside by Ivan Kohler -+%% Modified for Freeside by Ivan Kohler and Kristian Hoffman - %% - %% Changes - %% 0.1 4/12/00 Created -@@ -61,7 +61,7 @@ - %% Headers and footers defined for the first page - \fancyfoot[CO,CE]{\small{ - \begin{tabular}{c} --$footer -+[@-- $footer --@] - \end{tabular}}} - % - %% The LH Heading comprising logo -@@ -76,7 +76,7 @@ - \begin{tabular}{rcl} - Invoice date & & Invoice number \\ - \vspace{0.2cm} --\textbf{$date} & & \textbf{$invnum} \\\hline -+\textbf{[@-- $date --@]} & & \textbf{[@-- $invnum --@]} \\\hline - \rule{0pt}{5ex} &~~ \huge{\textsc{Invoice}}& \\ - \vspace{-0.2cm} - & & \\\hline -@@ -85,71 +85,76 @@ - %% Header & footer changes for subsequent pages - % - \afterpage{ \fancyfoot[RO,RE]{\small{\thepage\ of \pageref{LastPage}}} } --\afterpage{ \fancyfoot[CO,CE]{\small{$smallfooter}} } -+\afterpage{ \fancyfoot[CO,CE]{\small{[@-- $smallfooter --@]}} } - \afterpage{ \fancyhead[LO,LE]{\small{}} } - \afterpage{ \fancyhead[RO,RE]{\small{ - \begin{tabular}{ll} - Invoice date & Invoice number\\ --\textbf{$date} & \textbf{$invnum}\\ -+\textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]}\\ - \end{tabular}}} } - % - % - \makebox{ - \begin{minipage}[t]{2.9in} - \vspace{0.20in} --\textbf{$payname}\\ --\addressline{$company} --\addressline{$address1} --\addressline{$address2} --\addressline{$city, $state $zip} --\addressline{$country} -+\textbf{[@-- $payname --@]}\\ -+\addressline{[@-- $company --@]} -+\addressline{[@-- $address1 --@]} -+\addressline{[@-- $address2 --@]} -+\addressline{[@-- $city --@], [@-- $state --@] [@-- $zip --@]} -+\addressline{[@-- $country --@]} - \end{minipage}} - \hfill - \makebox{ - \begin{minipage}[t]{2.5in} - \begin{flushright} --Terms: $terms\\ --$po_line\\ -+Terms: [@-- $terms --@]\\ -+[@-- $po_line --@]\\ - \end{flushright} - \end{minipage}} - \vspace{0.5cm} - % - \section*{\textsc{Charges}} --\begin{longtable}{|c|l|c|r|r|} -+\begin{longtable}{|c|l|r|} - \hline - \rule{0pt}{2.5ex} - \makebox[1.4cm]{\textbf{Ref}} & --\makebox[7.9cm][l]{\textbf{Description}} & --\makebox[1.3cm][c]{\textbf{Quantity}} & --\makebox[2.5cm][r]{\textbf{Unit Price}} & --\makebox[2.5cm][r]{\textbf{Amount}} \\ -+\makebox[13cm][l]{\textbf{Description}} & -+\makebox[2cm][r]{\textbf{Amount}} \\ - \hline - \endfirsthead --\multicolumn{5}{r}{\rule{0pt}{2.5ex}Continued from previous page}\\ -+\multicolumn{3}{r}{\rule{0pt}{2.5ex}Continued from previous page}\\ - \hline - \rule{0pt}{2.5ex} - \makebox[1.4cm]{\textbf{Ref}} & --\makebox[7.9cm][l]{\textbf{Description}} & --\makebox[1.3cm][c]{\textbf{Quantity}} & --\makebox[2.5cm][r]{\textbf{Unit Price}} & --\makebox[2.5cm][r]{\textbf{Amount}} \\ -+\makebox[13cm][l]{\textbf{Description}} & -+\makebox[2cm][r]{\textbf{Amount}} \\ - \hline - \endhead --\multicolumn{5}{r}{\rule{0pt}{2.5ex}/cont...}\\ -+\multicolumn{3}{r}{\rule{0pt}{2.5ex}/cont...}\\ - \endfoot --%%TotalDetails -- & \multicolumn{3}{l}{$total_item} & $total_amount\\ --%%EndTotalDetails -+[@-- -+ -+ foreach my $line (@total_items) { -+ $OUT .= ' & \multicolumn{1}{l}{' . $line->{'total_item'} . '} & ' . -+ $line->{'total_amount'} . '\\\\' . "\n"; -+ } -+ -+--@] - \hline - \endlastfoot --%%Detail --\rule{0pt}{2.5ex}$ref & --\begin{tabular}{l} --$description\tabularnewline --\end{tabular} --& $quantity & \dollar $amount & \dollar $amount\\\hline --%%EndDetail -+[@-- -+ -+ foreach my $line (@detail_items) { -+ $OUT .= '\rule{0pt}{2.5ex}' . $line->{'ref'} . ' &' . "\n". -+ '\begin{tabular}{l}' . "\n". -+ $line->{'description'} . '\tabularnewline' . "\n". -+ '\end{tabular}' . "\n". -+ '& \dollar ' . $line->{'amount'} . '\\\\\\hline' . "\n"; -+ } -+ -+--@] - \end{longtable} - \vfill --$notes -+[@-- $notes --@] - \end{document} diff --git a/conf/invoice_latex_statement b/conf/invoice_latex_statement deleted file mode 100644 index 302306aa7..000000000 --- a/conf/invoice_latex_statement +++ /dev/null @@ -1,244 +0,0 @@ -%% file: Standard Multipage.tex -%% Purpose: Multipage bill template for e-Bills -%% -%% Created by Mark Asplen-Taylor -%% Asplen Management Ltd -%% www.asplen.co.uk -%% -%% Modified for Freeside by Kristian Hoffman -%% -%% Changes -%% 0.1 4/12/00 Created -%% 0.2 18/10/01 More fields added -%% 1.0 16/11/01 RELEASED -%% 1.2 16/10/02 Invoice number added -%% 1.3 2/12/02 Logo graphic added -%% 1.4 7/2/03 Multipage headers/footers added -%% n/a forked for Freeside; checked into CVS -%% - -\documentclass[letterpaper]{article} - -\usepackage{fancyhdr,lastpage,ifthen,longtable,afterpage} -\usepackage{graphicx} % required for logo graphic - -\addtolength{\voffset}{-0.0cm} % top margin to top of header -\addtolength{\hoffset}{-0.6cm} % left margin on page -\addtolength{\topmargin}{-1.25cm} % top margin to top of header -\setlength{\headheight}{2.0cm} % height of header -\setlength{\headsep}{1.0cm} % between header and text -\setlength{\footskip}{1.0cm} % bottom of footer from bottom of text - -%\addtolength{\textwidth}{2.1in} % width of text -\setlength{\textwidth}{19.5cm} -\setlength{\textheight}{19.5cm} -\setlength{\oddsidemargin}{-0.9cm} % odd page left margin -\setlength{\evensidemargin}{-0.9cm} % even page left margin - -\renewcommand{\headrulewidth}{0pt} -\renewcommand{\footrulewidth}{1pt} - -% Adjust the inset of the mailing address -\newcommand{\addressinset}[1][]{\hspace{1.0cm}} - -% Adjust the inset of the return address and logo -\newcommand{\returninset}[1][]{\hspace{-0.25cm}} - -% New command for address lines i.e. skip them if blank -\newcommand{\addressline}[1]{\ifthenelse{\equal{#1}{}}{}{#1\newline}} - -% Inserts dollar symbol -\newcommand{\dollar}[1][]{\symbol{36}} - -% Remove plain style header/footer -\fancypagestyle{plain}{ - \fancyhead{} -} -\fancyhf{} - -% Define fancy header/footer for first and subsequent pages -\fancyfoot[C]{ - \ifthenelse{\equal{\thepage}{1}} - { % First page - \small{ -[@-- $footer --@] - } - } - { % ... pages - \small{ -[@-- $smallfooter --@] - } - } -} - -\fancyfoot[R]{ - \ifthenelse{\equal{\thepage}{1}} - { % First page - } - { % ... pages - \small{\thepage\ of \pageref{LastPage}} - } -} - -\fancyhead[L]{ - \ifthenelse{\equal{\thepage}{1}} - { % First page - \returninset - \makebox{ - \begin{tabular}{ll} - \includegraphics{[@-- $conf_dir --@]/logo.eps} & - \begin{minipage}[b]{5.5cm} -[@-- $returnaddress --@] - \end{minipage} - \end{tabular} - } - } - { % ... pages - %\includegraphics{[@-- $conf_dir --@]/logo.eps} % Uncomment if you want the logo on all pages. - } -} - -\fancyhead[R]{ - \ifthenelse{\equal{\thepage}{1}} - { % First page - \begin{tabular}{rcl} - Invoice date & & Invoice number \\ - \vspace{0.2cm} - \textbf{[@-- $date --@]} & & \textbf{[@-- $invnum --@]} \\\hline - \rule{0pt}{5ex} &~~ \huge{\textsc{Statement}} & \\ - \vspace{-0.2cm} - & & \\\hline - \end{tabular} - } - { % ... pages - \small{ - \begin{tabular}{ll} - Invoice date & Invoice number\\ - \textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]}\\ - \end{tabular} - } - } -} - -\pagestyle{fancy} - - -%% Font options are: -%% bch Bitsream Charter -%% put Utopia -%% phv Adobe Helvetica -%% pnc New Century Schoolbook -%% ptm Times -%% pcr Courier - -\renewcommand{\familydefault}{phv} - - -% Commands for freeside description... -\newcommand{\FSdesc}[3]{ - \multicolumn{1}{c}{\rule{0pt}{2.5ex}\textbf{#1}} & - \textbf{#2} & - \multicolumn{1}{r}{\textbf{\dollar #3}}\\ -} -% ...extended description... -\newcommand{\FSextdesc}[1]{ - \multicolumn{1}{l}{\rule{0pt}{1.0ex}} & - \multicolumn{2}{l}{\small{~-~#1}}\\ -} -% ...and total line items. -\newcommand{\FStotaldesc}[2]{ - & \multicolumn{1}{l}{#1} & #2\\ -} - - -\begin{document} -% -%% Headers and footers defined for the first page -% -%% The LH Heading comprising logo -%% UNCOMMENT the following FOUR lines and change the path if necssary to provide a logo -% -%% The Heading comprising isue date, customer ref & INVOICE name -% -%% Header & footer changes for subsequent pages -% -% -% -\begin{tabular}{ll} -\addressinset \rule{0cm}{0cm} & -\makebox{ -\begin{minipage}[t]{5.0cm} -\vspace{0.25cm} -\textbf{[@-- $payname --@]}\\ -\addressline{[@-- $company --@]} -\addressline{[@-- $address1 --@]} -\addressline{[@-- $address2 --@]} -\addressline{[@-- $city --@], [@-- $state --@]~~[@-- $zip --@]} -\addressline{[@-- $country --@]} -\end{minipage}} -\end{tabular} -\hfill -\makebox{ -\begin{minipage}[t]{6.4cm} -\begin{flushright} -Terms: [@-- $terms --@]\\ -[@-- $po_line --@]\\ -\end{flushright} -\end{minipage}} -\vspace{1.5cm} -% -\section*{\textsc{Charges}} -\begin{longtable}{clr} -\hline -\rule{0pt}{2.5ex} -\makebox[1.4cm]{\textbf{Ref}} & -\makebox[12.8cm][l]{\textbf{Description}} & -\makebox[2.5cm][r]{\textbf{Amount}} \\ -\hline -\endfirsthead -\multicolumn{3}{r}{\rule{0pt}{2.5ex}Continued from previous page}\\ -\hline -\rule{0pt}{2.5ex} -\makebox[1.4cm]{\textbf{Ref}} & -\makebox[12.8cm][l]{\textbf{Description}} & -\makebox[2.5cm][r]{\textbf{Amount}} \\ -\hline -\endhead -\multicolumn{3}{r}{\rule{0pt}{2.5ex}Continued on next page...}\\ -\endfoot -\hline -[@-- - - foreach my $line (@total_items) { - $OUT .= '\FStotaldesc{' . $line->{'total_item'} . '}' . - '{' . $line->{'total_amount'} . '}' . "\n"; - } - ---@] -\hline -\endlastfoot -[@-- - - foreach my $line (@detail_items) { - my $ext_description = $line->{'ext_description'}; - - # Don't break-up small packages. - my $rowbreak = @$ext_description < 5 ? '*' : ''; - - $OUT .= "\\hline\n"; - $OUT .= '\FSdesc{' . $line->{'ref'} . '}{' . $line->{'description'} . '}' . - '{' . $line->{'amount'} . "}${rowbreak}\n"; - - foreach my $ext_desc (@$ext_description) { - $ext_desc = substr($ext_desc, 0, 80) . '...' - if (length($ext_desc) > 80); - $OUT .= '\FSextdesc{' . $ext_desc . '}' . "${rowbreak}\n"; - } - - } - ---@] -\end{longtable} -\vfill -[@-- $notes --@] -\end{document} diff --git a/conf/invoice_latexfooter b/conf/invoice_latexfooter deleted file mode 100644 index 2e32123f1..000000000 --- a/conf/invoice_latexfooter +++ /dev/null @@ -1 +0,0 @@ -[@-- $company_name --@] diff --git a/conf/invoice_latexnotes b/conf/invoice_latexnotes deleted file mode 100644 index 5303d3cc4..000000000 --- a/conf/invoice_latexnotes +++ /dev/null @@ -1,8 +0,0 @@ -%% -%% Add any customer specific notes in here -%% -\section*{\textsc{Notes}} -\begin{enumerate} -\item Please make your check payable to \textbf{[@-- $company_name --@]}. -\item If you have any questions please email or telephone. -\end{enumerate} diff --git a/conf/invoice_latexnotes_statement b/conf/invoice_latexnotes_statement deleted file mode 100644 index 0836d2745..000000000 --- a/conf/invoice_latexnotes_statement +++ /dev/null @@ -1,8 +0,0 @@ -%% -%% Add any customer specific notes in here -%% -\section*{\textsc{Notes}} -\begin{enumerate} -\item This statement reflects current charges and payments. -\item If you have any questions please email or telephone. -\end{enumerate} diff --git a/conf/invoice_latexsmallfooter b/conf/invoice_latexsmallfooter deleted file mode 100644 index 2e32123f1..000000000 --- a/conf/invoice_latexsmallfooter +++ /dev/null @@ -1 +0,0 @@ -[@-- $company_name --@] diff --git a/conf/invoice_template b/conf/invoice_template deleted file mode 100644 index b33c4dda1..000000000 --- a/conf/invoice_template +++ /dev/null @@ -1,26 +0,0 @@ - - Invoice - { substr("Page $page of $total_pages ", 0, 19); } { use Date::Format; time2str("%x", $date); } Invoice #{ $invnum; } - - -{ $company_name; } -{ $company_address; } - - -{ $address[0]; } -{ $address[1]; } -{ $address[2]; } -{ $address[3]; } -{ $address[4]; } -{ $address[5]; } - -{ - join("\n", - map { - my ( $desc, $price ) = @{$_}; - " ". substr( $desc. " "x65, 0, 65). " ". substr( $price. " "x11, 0, 11); - } invoice_lines(31) - ); -} - - -=> { $company_name; } <=- diff --git a/conf/invoice_template_statement b/conf/invoice_template_statement deleted file mode 100644 index db0291544..000000000 --- a/conf/invoice_template_statement +++ /dev/null @@ -1,26 +0,0 @@ - - Statement - { substr("Page $page of $total_pages ", 0, 19); } { use Date::Format; time2str("%x", $date); } Invoice #{ $invnum; } - - -{ $company_name; } -{ $company_address; } - - -{ $address[0]; } -{ $address[1]; } -{ $address[2]; } -{ $address[3]; } -{ $address[4]; } -{ $address[5]; } - -{ - join("\n", - map { - my ( $desc, $price ) = @{$_}; - " ". substr( $desc. " "x65, 0, 65). " ". substr( $price. " "x11, 0, 11); - } invoice_lines(31) - ); -} - - -=> { $company_name; } <=- diff --git a/conf/locale b/conf/locale deleted file mode 100644 index 7741b83a3..000000000 --- a/conf/locale +++ /dev/null @@ -1 +0,0 @@ -en_US diff --git a/conf/logo.eps b/conf/logo.eps deleted file mode 100644 index ff25dd4ce..000000000 --- a/conf/logo.eps +++ /dev/null @@ -1,13510 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%HiResBoundingBox: 261.500000 345.500000 418.500000 446.500000 -%%Creator: xpdf/pdftops 3.00 -%%LanguageLevel: 2 -%%DocumentMedia: plain 612 792 0 () () -%%BoundingBox: 19 0 70 33 -%%EndComments -%%BeginProcSet: epsffit 1 0 -gsave --65.000 -111.618 translate -0.324 0.324 scale -%%EndProcSet - -% EPSF created by ps2eps 1.54 -%%BeginProlog -save -countdictstack -mark -newpath -/showpage {} def -/setpagedevice {pop} def -%%EndProlog -%%Page 1 1 -/xpdf 75 dict def xpdf begin -% PDF special state -/pdfDictSize 15 def -/pdfSetup { - 3 1 roll 2 array astore - /setpagedevice where { - pop 3 dict begin - /PageSize exch def - /ImagingBBox null def - /Policies 1 dict dup begin /PageSize 3 def end def - { /Duplex true def } if - currentdict end setpagedevice - } { - pop pop - } ifelse -} def -/pdfStartPage { - pdfDictSize dict begin - /pdfFill [0] def - /pdfStroke [0] def - /pdfLastFill false def - /pdfLastStroke false def - /pdfTextMat [1 0 0 1 0 0] def - /pdfFontSize 0 def - /pdfCharSpacing 0 def - /pdfTextRender 0 def - /pdfTextRise 0 def - /pdfWordSpacing 0 def - /pdfHorizScaling 1 def - /pdfTextClipPath [] def -} def -/pdfEndPage { end } def -% separation convention operators -/findcmykcustomcolor where { - pop -}{ - /findcmykcustomcolor { 5 array astore } def -} ifelse -/setcustomcolor where { - pop -}{ - /setcustomcolor { - exch - [ exch /Separation exch dup 4 get exch /DeviceCMYK exch - 0 4 getinterval cvx - [ exch /dup load exch { mul exch dup } /forall load - /pop load dup ] cvx - ] setcolorspace setcolor - } def -} ifelse -/customcolorimage where { - pop -}{ - /customcolorimage { - gsave - [ exch /Separation exch dup 4 get exch /DeviceCMYK exch - 0 4 getinterval - [ exch /dup load exch { mul exch dup } /forall load - /pop load dup ] cvx - ] setcolorspace - 10 dict begin - /ImageType 1 def - /DataSource exch def - /ImageMatrix exch def - /BitsPerComponent exch def - /Height exch def - /Width exch def - /Decode [1 0] def - currentdict end - image - grestore - } def -} ifelse -% PDF color state -/sCol { - pdfLastStroke not { - pdfStroke aload length - dup 1 eq { - pop setgray - }{ - dup 3 eq { - pop setrgbcolor - }{ - 4 eq { - setcmykcolor - }{ - findcmykcustomcolor exch setcustomcolor - } ifelse - } ifelse - } ifelse - /pdfLastStroke true def /pdfLastFill false def - } if -} def -/fCol { - pdfLastFill not { - pdfFill aload length - dup 1 eq { - pop setgray - }{ - dup 3 eq { - pop setrgbcolor - }{ - 4 eq { - setcmykcolor - }{ - findcmykcustomcolor exch setcustomcolor - } ifelse - } ifelse - } ifelse - /pdfLastFill true def /pdfLastStroke false def - } if -} def -% build a font -/pdfMakeFont { - 4 3 roll findfont - 4 2 roll matrix scale makefont - dup length dict begin - { 1 index /FID ne { def } { pop pop } ifelse } forall - /Encoding exch def - currentdict - end - definefont pop -} def -/pdfMakeFont16 { - exch findfont - dup length dict begin - { 1 index /FID ne { def } { pop pop } ifelse } forall - /WMode exch def - currentdict - end - definefont pop -} def -/pdfMakeFont16L3 { - 1 index /CIDFont resourcestatus { - pop pop 1 index /CIDFont findresource /CIDFontType known - } { - false - } ifelse - { - 0 eq { /Identity-H } { /Identity-V } ifelse - exch 1 array astore composefont pop - } { - pdfMakeFont16 - } ifelse -} def -% graphics state operators -/q { gsave pdfDictSize dict begin } def -/Q { end grestore } def -/cm { concat } def -/d { setdash } def -/i { setflat } def -/j { setlinejoin } def -/J { setlinecap } def -/M { setmiterlimit } def -/w { setlinewidth } def -% color operators -/g { dup 1 array astore /pdfFill exch def setgray - /pdfLastFill true def /pdfLastStroke false def } def -/G { dup 1 array astore /pdfStroke exch def setgray - /pdfLastStroke true def /pdfLastFill false def } def -/rg { 3 copy 3 array astore /pdfFill exch def setrgbcolor - /pdfLastFill true def /pdfLastStroke false def } def -/RG { 3 copy 3 array astore /pdfStroke exch def setrgbcolor - /pdfLastStroke true def /pdfLastFill false def } def -/k { 4 copy 4 array astore /pdfFill exch def setcmykcolor - /pdfLastFill true def /pdfLastStroke false def } def -/K { 4 copy 4 array astore /pdfStroke exch def setcmykcolor - /pdfLastStroke true def /pdfLastFill false def } def -/ck { 6 copy 6 array astore /pdfFill exch def - findcmykcustomcolor exch setcustomcolor - /pdfLastFill true def /pdfLastStroke false def } def -/CK { 6 copy 6 array astore /pdfStroke exch def - findcmykcustomcolor exch setcustomcolor - /pdfLastStroke true def /pdfLastFill false def } def -% path segment operators -/m { moveto } def -/l { lineto } def -/c { curveto } def -/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto - neg 0 rlineto closepath } def -/h { closepath } def -% path painting operators -/S { sCol stroke } def -/Sf { fCol stroke } def -/f { fCol fill } def -/f* { fCol eofill } def -% clipping operators -/W { clip newpath } def -/W* { eoclip newpath } def -% text state operators -/Tc { /pdfCharSpacing exch def } def -/Tf { dup /pdfFontSize exch def - dup pdfHorizScaling mul exch matrix scale - pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put - exch findfont exch makefont setfont } def -/Tr { /pdfTextRender exch def } def -/Ts { /pdfTextRise exch def } def -/Tw { /pdfWordSpacing exch def } def -/Tz { /pdfHorizScaling exch def } def -% text positioning operators -/Td { pdfTextMat transform moveto } def -/Tm { /pdfTextMat exch def } def -% text string operators -/cshow where { - pop - /cshow2 { - dup { - pop pop - 1 string dup 0 3 index put 3 index exec - } exch cshow - pop pop - } def -}{ - /cshow2 { - currentfont /FontType get 0 eq { - 0 2 2 index length 1 sub { - 2 copy get exch 1 add 2 index exch get - 2 copy exch 256 mul add - 2 string dup 0 6 5 roll put dup 1 5 4 roll put - 3 index exec - } for - } { - dup { - 1 string dup 0 3 index put 3 index exec - } forall - } ifelse - pop pop - } def -} ifelse -/awcp { - exch { - false charpath - 5 index 5 index rmoveto - 6 index eq { 7 index 7 index rmoveto } if - } exch cshow2 - 6 {pop} repeat -} def -/Tj { - fCol - 1 index stringwidth pdfTextMat idtransform pop - sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse - pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 - 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 - pdfTextMat dtransform - 6 5 roll Tj1 -} def -/Tj16 { - fCol - 2 index stringwidth pdfTextMat idtransform pop - sub exch div - pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 - 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 - pdfTextMat dtransform - 6 5 roll Tj1 -} def -/Tj16V { - fCol - 2 index stringwidth pdfTextMat idtransform exch pop - sub exch div - 0 pdfWordSpacing pdfTextMat dtransform 32 - 4 3 roll pdfCharSpacing add 0 exch - pdfTextMat dtransform - 6 5 roll Tj1 -} def -/Tj1 { - 0 pdfTextRise pdfTextMat dtransform rmoveto - currentpoint 8 2 roll - pdfTextRender 1 and 0 eq { - 6 copy awidthshow - } if - pdfTextRender 3 and dup 1 eq exch 2 eq or { - 7 index 7 index moveto - 6 copy - currentfont /FontType get 3 eq { fCol } { sCol } ifelse - false awcp currentpoint stroke moveto - } if - pdfTextRender 4 and 0 ne { - 8 6 roll moveto - false awcp - /pdfTextClipPath [ pdfTextClipPath aload pop - {/moveto cvx} - {/lineto cvx} - {/curveto cvx} - {/closepath cvx} - pathforall ] def - currentpoint newpath moveto - } { - 8 {pop} repeat - } ifelse - 0 pdfTextRise neg pdfTextMat dtransform rmoveto -} def -/TJm { pdfFontSize 0.001 mul mul neg 0 - pdfTextMat dtransform rmoveto } def -/TJmV { pdfFontSize 0.001 mul mul neg 0 exch - pdfTextMat dtransform rmoveto } def -/Tclip { pdfTextClipPath cvx exec clip newpath - /pdfTextClipPath [] def } def -% Level 2 image operators -/pdfImBuf 100 string def -/pdfIm { - image - { currentfile pdfImBuf readline - not { pop exit } if - (%-EOD-) eq { exit } if } loop -} def -/pdfImSep { - findcmykcustomcolor exch - dup /Width get /pdfImBuf1 exch string def - dup /Decode get aload pop 1 index sub /pdfImDecodeRange exch def - /pdfImDecodeLow exch def - begin Width Height BitsPerComponent ImageMatrix DataSource end - /pdfImData exch def - { pdfImData pdfImBuf1 readstring pop - 0 1 2 index length 1 sub { - 1 index exch 2 copy get - pdfImDecodeRange mul 255 div pdfImDecodeLow add round cvi - 255 exch sub put - } for } - 6 5 roll customcolorimage - { currentfile pdfImBuf readline - not { pop exit } if - (%-EOD-) eq { exit } if } loop -} def -/pdfImM { - fCol imagemask - { currentfile pdfImBuf readline - not { pop exit } if - (%-EOD-) eq { exit } if } loop -} def -end -xpdf begin -/F2_0 /Helvetica 1 1 -[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle - /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash - /zero/one/two/three/four/five/six/seven - /eight/nine/colon/semicolon/less/equal/greater/question - /at/A/B/C/D/E/F/G - /H/I/J/K/L/M/N/O - /P/Q/R/S/T/U/V/W - /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore - /grave/a/b/c/d/e/f/g - /h/i/j/k/l/m/n/o - /p/q/r/s/t/u/v/w - /x/y/z/braceleft/bar/braceright/asciitilde/bullet - /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl - /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet - /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash - /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis - /space/exclamdown/cent/sterling/currency/yen/brokenbar/section - /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron - /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered - /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown - /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla - /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis - /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply - /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls - /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla - /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis - /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide - /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] -pdfMakeFont -612 792 false pdfSetup -pdfStartPage -26.1663 -1.02141e-14 translate -0.9406 0.9406 scale -[] 0 d -1 i -0 j -0 J -10 M -1 w -0 g -0 G -q -[1 0 0 1 0 0] cm -[1 0 0 1 0 0] Tm -0 0 Td -0 g -328.715 366.945 10.4374 0.2006 re -f* -0 g -324.902 367.146 18.0648 0.2005 re -f* -0 g -322.292 367.346 23.2834 0.2006 re -f* -0 g -320.285 367.547 27.2978 0.2005 re -f* -0 g -318.278 367.747 31.3122 0.2006 re -f* -0 g -316.672 367.948 34.323 0.2006 re -f* -0 g -315.267 368.148 37.3338 0.2005 re -f* -0 g -313.862 368.349 39.9433 0.2005 re -f* -0 g -312.658 368.549 42.5525 0.2006 re -f* -0 g -311.453 368.75 44.9612 0.2006 re -f* -0 g -310.249 368.951 47.1691 0.2006 re -f* -0 g -309.245 369.151 49.377 0.2005 re -f* -0 g -308.242 369.352 50.5813 0.2005 re -f* -0 g -307.238 369.552 49.377 0.2006 re -f* -0 g -306.435 369.753 47.9719 0.2006 re -f* -0 g -305.432 369.953 47.3698 0.2006 re -f* -0 g -304.629 370.154 46.5669 0.2005 re -f* -0 g -303.826 370.355 46.1654 0.2006 re -f* -0 g -303.023 370.555 45.7641 0.2005 re -f* -1 g -348.787 370.555 13.8496 0.2005 re -f* -0.498 0 0.482 rg -362.637 370.555 2.2079 0.2005 re -f* -0 g -302.22 370.756 45.3626 0.2006 re -f* -1 g -347.583 370.756 13.8497 0.2006 re -f* -0.498 0 0.482 rg -361.433 370.756 4.2151 0.2006 re -f* -0 g -301.417 370.956 45.1618 0.2005 re -f* -1 g -346.579 370.956 13.6489 0.2005 re -f* -0.498 0 0.482 rg -360.228 370.956 6.2224 0.2005 re -f* -0 g -300.615 371.157 45.1619 0.2006 re -f* -1 g -345.776 371.157 13.4481 0.2006 re -f* -0.498 0 0.482 rg -359.225 371.157 7.8281 0.2006 re -f* -0 g -300.012 371.357 44.7605 0.2005 re -f* -1 g -344.773 371.357 13.4481 0.2005 re -f* -0.498 0 0.482 rg -358.221 371.357 9.6346 0.2005 re -f* -0 g -299.209 371.558 44.7604 0.2006 re -f* -1 g -343.97 371.558 13.2475 0.2006 re -f* -0.498 0 0.482 rg -357.217 371.558 11.2403 0.2006 re -f* -0 g -298.607 371.758 44.5597 0.2006 re -f* -1 g -343.167 371.758 13.0467 0.2006 re -f* -0.498 0 0.482 rg -356.214 371.758 13.0468 0.2006 re -f* -0 g -298.005 371.959 44.5597 0.2005 re -f* -1 g -342.565 371.959 12.8461 0.2005 re -f* -0.498 0 0.482 rg -355.411 371.959 14.4518 0.2005 re -f* -0 g -297.202 372.16 44.5597 0.2005 re -f* -1 g -341.762 372.16 12.846 0.2005 re -f* -0.498 0 0.482 rg -354.608 372.16 16.0576 0.2005 re -f* -0 g -296.6 372.36 44.5597 0.2006 re -f* -1 g -341.16 372.36 12.6454 0.2006 re -f* -0.498 0 0.482 rg -353.805 372.36 17.4625 0.2006 re -f* -0 g -295.998 372.561 44.359 0.2006 re -f* -1 g -340.357 372.561 12.6453 0.2006 re -f* -0.498 0 0.482 rg -353.002 372.561 18.8677 0.2006 re -f* -0 g -295.396 372.761 44.359 0.2006 re -f* -1 g -339.755 372.761 12.4446 0.2006 re -f* -0.498 0 0.482 rg -352.2 372.761 20.2726 0.2006 re -f* -0 g -294.794 372.962 44.359 0.2006 re -f* -1 g -339.153 372.962 12.2439 0.2006 re -f* -0.498 0 0.482 rg -351.397 372.962 21.6777 0.2006 re -f* -0 g -294.192 373.162 44.359 0.2005 re -f* -1 g -338.551 373.162 12.2439 0.2005 re -f* -0.498 0 0.482 rg -350.794 373.162 22.882 0.2005 re -f* -0 g -293.589 373.363 44.5597 0.2005 re -f* -1 g -338.149 373.363 11.8424 0.2005 re -f* -0.498 0 0.482 rg -349.991 373.363 24.2871 0.2005 re -f* -0 g -292.987 373.563 44.5598 0.2006 re -f* -1 g -337.547 373.563 11.8424 0.2006 re -f* -0.498 0 0.482 rg -349.389 373.563 25.4914 0.2006 re -f* -0 g -292.385 373.764 44.5597 0.2006 re -f* -1 g -336.945 373.764 11.8425 0.2006 re -f* -0.498 0 0.482 rg -348.787 373.764 26.6956 0.2006 re -f* -0 g -291.783 373.965 44.7605 0.2005 re -f* -1 g -336.543 373.965 11.6417 0.2005 re -f* -0.498 0 0.482 rg -348.185 373.965 27.6993 0.2005 re -f* -0 g -291.381 374.165 44.5597 0.2005 re -f* -1 g -335.941 374.165 11.6417 0.2005 re -f* -0.498 0 0.482 rg -347.583 374.165 28.9036 0.2005 re -f* -0 g -290.779 374.366 44.7605 0.2006 re -f* -1 g -335.54 374.366 11.4409 0.2006 re -f* -0.498 0 0.482 rg -346.981 374.366 30.108 0.2006 re -f* -0 g -290.378 374.566 44.5597 0.2006 re -f* -1 g -334.938 374.566 11.441 0.2006 re -f* -0.498 0 0.482 rg -346.379 374.566 31.1115 0.2006 re -f* -0 g -289.776 374.767 44.7605 0.2005 re -f* -1 g -334.536 374.767 11.4409 0.2005 re -f* -0.498 0 0.482 rg -345.977 374.767 32.1152 0.2005 re -f* -0 g -289.174 374.967 44.9611 0.2006 re -f* -1 g -334.135 374.967 11.2403 0.2006 re -f* -0.498 0 0.482 rg -345.375 374.967 33.1187 0.2006 re -f* -0 g -288.772 375.168 44.9612 0.2005 re -f* -1 g -333.733 375.168 11.0396 0.2005 re -f* -0.498 0 0.482 rg -344.773 375.168 34.323 0.2005 re -f* -0 g -288.371 375.368 44.9611 0.2006 re -f* -1 g -333.332 375.368 11.0396 0.2006 re -f* -0.498 0 0.482 rg -344.371 375.368 35.1259 0.2006 re -f* -0 g -287.768 375.569 45.1619 0.2006 re -f* -1 g -332.93 375.569 10.8389 0.2006 re -f* -0.498 0 0.482 rg -343.769 375.569 36.3302 0.2006 re -f* -0 g -287.367 375.77 45.1619 0.2006 re -f* -1 g -332.529 375.77 10.8388 0.2006 re -f* -0.498 0 0.482 rg -343.368 375.77 37.1331 0.2006 re -f* -0 g -286.765 375.97 45.3626 0.2005 re -f* -1 g -332.127 375.97 10.6382 0.2005 re -f* -0.498 0 0.482 rg -342.766 375.97 38.1367 0.2005 re -f* -0 g -286.363 376.171 45.3626 0.2005 re -f* -1 g -331.726 376.171 10.6381 0.2005 re -f* -0.498 0 0.482 rg -342.364 376.171 39.1403 0.2005 re -f* -0 g -285.962 376.371 45.3625 0.2006 re -f* -1 g -331.325 376.371 10.4375 0.2006 re -f* -0.498 0 0.482 rg -341.762 376.371 40.1439 0.2006 re -f* -0 g -285.561 376.572 45.3626 0.2006 re -f* -1 g -330.923 376.572 10.4374 0.2006 re -f* -0.498 0 0.482 rg -341.361 376.572 40.9468 0.2006 re -f* -0 g -284.958 376.772 45.5633 0.2005 re -f* -1 g -330.522 376.772 10.4374 0.2005 re -f* -0.498 0 0.482 rg -340.959 376.772 41.7496 0.2005 re -f* -0 g -284.557 376.973 45.7639 0.2006 re -f* -1 g -330.321 376.973 10.2368 0.2006 re -f* -0.498 0 0.482 rg -340.558 376.973 42.7532 0.2006 re -f* -0 g -284.156 377.173 45.764 0.2005 re -f* -1 g -329.92 377.173 10.2367 0.2005 re -f* -0.498 0 0.482 rg -340.156 377.173 43.5561 0.2005 re -f* -0 g -283.754 377.374 45.7641 0.2006 re -f* -1 g -329.518 377.374 10.2367 0.2006 re -f* -0.498 0 0.482 rg -339.755 377.374 44.3589 0.2006 re -f* -0 g -283.353 377.575 45.9648 0.2006 re -f* -1 g -329.317 377.575 10.0359 0.2006 re -f* -0.498 0 0.482 rg -339.353 377.575 45.1619 0.2006 re -f* -0 g -282.951 377.775 45.9647 0.2005 re -f* -1 g -328.916 377.775 10.036 0.2005 re -f* -0.498 0 0.482 rg -338.952 377.775 45.9647 0.2005 re -f* -0 g -282.55 377.976 45.9647 0.2006 re -f* -1 g -328.515 377.976 10.036 0.2006 re -f* -0.498 0 0.482 rg -338.551 377.976 46.7676 0.2006 re -f* -0 g -282.148 378.176 46.1655 0.2005 re -f* -1 g -328.314 378.176 9.8352 0.2005 re -f* -0.498 0 0.482 rg -338.149 378.176 47.5705 0.2005 re -f* -0 g -281.747 378.377 46.1655 0.2006 re -f* -1 g -327.912 378.377 9.8353 0.2006 re -f* -0.498 0 0.482 rg -337.748 378.377 48.3733 0.2006 re -f* -0 g -281.346 378.577 46.3662 0.2006 re -f* -1 g -327.712 378.577 9.6346 0.2006 re -f* -0.498 0 0.482 rg -337.346 378.577 49.1762 0.2006 re -f* -0 g -280.944 378.778 46.3662 0.2005 re -f* -1 g -327.31 378.778 9.6345 0.2005 re -f* -0.498 0 0.482 rg -336.945 378.778 49.9792 0.2005 re -f* -0 g -280.543 378.978 46.5668 0.2006 re -f* -1 g -327.11 378.978 9.4339 0.2006 re -f* -0.498 0 0.482 rg -336.543 378.978 50.7819 0.2006 re -f* -0 g -280.141 379.179 46.7676 0.2005 re -f* -1 g -326.909 379.179 9.4339 0.2005 re -f* -0.498 0 0.482 rg -336.343 379.179 51.3841 0.2005 re -f* -0 g -279.74 379.38 46.7677 0.2006 re -f* -1 g -326.507 379.38 9.4338 0.2006 re -f* -0.498 0 0.482 rg -335.941 379.38 52.187 0.2006 re -f* -0 g -279.338 379.58 46.9684 0.2006 re -f* -1 g -326.307 379.58 9.2331 0.2006 re -f* -0.498 0 0.482 rg -335.54 379.58 52.9899 0.2006 re -f* -0 g -278.937 379.781 46.9683 0.2005 re -f* -1 g -325.905 379.781 9.2331 0.2005 re -f* -0.498 0 0.482 rg -335.138 379.781 53.5921 0.2005 re -f* -0 g -278.736 379.981 46.9684 0.2006 re -f* -1 g -325.704 379.981 9.2331 0.2006 re -f* -0.498 0 0.482 rg -334.938 379.981 54.1942 0.2006 re -f* -0 g -278.335 380.182 47.1691 0.2005 re -f* -1 g -325.504 380.182 9.0324 0.2005 re -f* -0.498 0 0.482 rg -334.536 380.182 54.9971 0.2005 re -f* -0 g -277.933 380.382 47.3698 0.2006 re -f* -1 g -325.303 380.382 9.0323 0.2006 re -f* -0.498 0 0.482 rg -334.335 380.382 55.5994 0.2006 re -f* -0 g -277.532 380.583 47.3697 0.2005 re -f* -1 g -324.902 380.583 9.0324 0.2005 re -f* -0.498 0 0.482 rg -333.934 380.583 56.4022 0.2005 re -f* -0 g -277.331 380.783 47.3698 0.2006 re -f* -1 g -324.701 380.783 9.0324 0.2006 re -f* -0.498 0 0.482 rg -333.733 380.783 56.8036 0.2006 re -f* -0 g -287.367 380.984 37.1331 0.2006 re -f* -1 g -324.5 380.984 8.8316 0.2006 re -f* -0.498 0 0.482 rg -333.332 380.984 57.6066 0.2006 re -f* -0 g -287.367 381.185 36.9324 0.2005 re -f* -1 g -324.299 381.185 8.8316 0.2005 re -f* -0.498 0 0.482 rg -333.131 381.185 58.2087 0.2005 re -f* -0 g -287.367 381.385 36.5309 0.2006 re -f* -1 g -323.898 381.385 8.8317 0.2006 re -f* -0.498 0 0.482 rg -332.73 381.385 58.8108 0.2006 re -f* -0 g -287.367 381.586 36.3302 0.2005 re -f* -1 g -323.697 381.586 8.8317 0.2005 re -f* -0.498 0 0.482 rg -332.529 381.586 59.413 0.2005 re -f* -0 g -287.367 381.786 36.1295 0.2006 re -f* -1 g -323.497 381.786 8.6309 0.2006 re -f* -0.498 0 0.482 rg -332.127 381.786 60.2159 0.2006 re -f* -0 g -287.367 381.987 35.9288 0.2006 re -f* -1 g -323.296 381.987 8.6309 0.2006 re -f* -0.498 0 0.482 rg -331.927 381.987 60.6173 0.2006 re -f* -0 g -278.937 382.188 0.2007 0.2005 re -f* -1 g -279.138 382.188 8.2295 0.2005 re -f* -0 g -287.367 382.188 35.7281 0.2005 re -f* -1 g -323.095 382.188 8.4302 0.2005 re -f* -0.498 0 0.482 rg -331.525 382.188 61.4201 0.2005 re -f* -0 g -278.937 382.388 43.9575 0.2006 re -f* -1 g -322.894 382.388 8.4302 0.2006 re -f* -0.498 0 0.482 rg -331.325 382.388 61.8216 0.2006 re -f* -0 g -278.937 382.589 43.7569 0.2005 re -f* -1 g -322.694 382.589 8.4301 0.2005 re -f* -0.498 0 0.482 rg -331.124 382.589 62.4238 0.2005 re -f* -0 g -278.937 382.789 43.5561 0.2006 re -f* -1 g -322.493 382.789 8.2295 0.2006 re -f* -0.498 0 0.482 rg -330.722 382.789 63.2266 0.2006 re -f* -0 g -278.937 382.99 43.3554 0.2006 re -f* -1 g -322.292 382.99 8.2295 0.2006 re -f* -0.498 0 0.482 rg -330.522 382.99 63.628 0.2006 re -f* -0 g -278.937 383.19 43.1547 0.2005 re -f* -1 g -322.092 383.19 8.2294 0.2005 re -f* -0.498 0 0.482 rg -330.321 383.19 64.2303 0.2005 re -f* -0 g -278.937 383.391 42.9539 0.2006 re -f* -1 g -321.891 383.391 8.2295 0.2006 re -f* -0.498 0 0.482 rg -330.12 383.391 64.6317 0.2006 re -f* -0 g -278.937 383.591 42.7533 0.2005 re -f* -1 g -321.69 383.591 8.0287 0.2005 re -f* -0.498 0 0.482 rg -329.719 383.591 65.4345 0.2005 re -f* -0 g -278.937 383.792 42.5525 0.2006 re -f* -1 g -321.489 383.792 8.0288 0.2006 re -f* -0.498 0 0.482 rg -329.518 383.792 65.8359 0.2006 re -f* -0 g -278.937 383.992 42.3518 0.2006 re -f* -1 g -321.289 383.992 8.0288 0.2006 re -f* -0.498 0 0.482 rg -329.317 383.992 66.4381 0.2006 re -f* -0 g -278.937 384.193 42.1511 0.2005 re -f* -1 g -321.088 384.193 8.0287 0.2005 re -f* -0.498 0 0.482 rg -329.117 384.193 66.8396 0.2005 re -f* -0 g -278.937 384.394 41.9503 0.2005 re -f* -1 g -320.887 384.394 8.0288 0.2005 re -f* -0.498 0 0.482 rg -328.916 384.394 67.241 0.2005 re -f* -0 g -278.937 384.594 41.7497 0.2006 re -f* -1 g -320.687 384.594 7.828 0.2006 re -f* -0.498 0 0.482 rg -328.515 384.594 68.0439 0.2006 re -f* -0 g -271.109 384.795 0.2008 0.2006 re -f* -1 g -271.31 384.795 7.6273 0.2006 re -f* -0 g -278.937 384.795 41.5489 0.2006 re -f* -1 g -320.486 384.795 7.8281 0.2006 re -f* -0.498 0 0.482 rg -328.314 384.795 68.4453 0.2006 re -f* -0 g -270.707 384.995 0.6022 0.2006 re -f* -1 g -271.31 384.995 7.6273 0.2006 re -f* -0 g -278.937 384.995 41.3482 0.2006 re -f* -1 g -320.285 384.995 7.828 0.2006 re -f* -0.498 0 0.482 rg -328.113 384.995 69.0475 0.2006 re -f* -0 g -270.507 385.196 0.8029 0.2005 re -f* -1 g -271.31 385.196 7.6273 0.2005 re -f* -0 g -278.937 385.196 41.1475 0.2005 re -f* -1 g -320.084 385.196 7.828 0.2005 re -f* -0.498 0 0.482 rg -327.912 385.196 69.4489 0.2005 re -f* -0 g -270.306 385.396 1.0036 0.2006 re -f* -1 g -271.31 385.396 7.6273 0.2006 re -f* -0 g -278.937 385.396 40.9467 0.2006 re -f* -1 g -319.884 385.396 7.8281 0.2006 re -f* -0.498 0 0.482 rg -327.712 385.396 69.8504 0.2006 re -f* -0 g -269.904 385.597 1.4051 0.2005 re -f* -1 g -271.31 385.597 7.6273 0.2005 re -f* -0 g -278.937 385.597 40.7461 0.2005 re -f* -1 g -319.683 385.597 7.828 0.2005 re -f* -0.498 0 0.482 rg -327.511 385.597 70.4525 0.2005 re -f* -0 g -269.704 385.797 1.6058 0.2006 re -f* -1 g -271.31 385.797 7.6273 0.2006 re -f* -0 g -278.937 385.797 40.7461 0.2006 re -f* -1 g -319.683 385.797 7.6273 0.2006 re -f* -0.498 0 0.482 rg -327.31 385.797 70.8539 0.2006 re -f* -0 g -269.503 385.998 1.8065 0.2005 re -f* -1 g -271.31 385.998 7.6273 0.2005 re -f* -0 g -278.937 385.998 40.5453 0.2005 re -f* -1 g -319.482 385.998 7.6273 0.2005 re -f* -0.498 0 0.482 rg -327.11 385.998 71.2554 0.2005 re -f* -0 g -269.102 386.199 2.208 0.2006 re -f* -1 g -271.31 386.199 7.6273 0.2006 re -f* -0 g -278.937 386.199 40.3446 0.2006 re -f* -1 g -319.281 386.199 7.6273 0.2006 re -f* -0.498 0 0.482 rg -326.909 386.199 71.8576 0.2006 re -f* -0 g -268.901 386.399 2.4087 0.2005 re -f* -1 g -271.31 386.399 7.6273 0.2005 re -f* -0 g -278.937 386.399 40.1438 0.2005 re -f* -1 g -319.081 386.399 7.6274 0.2005 re -f* -0.498 0 0.482 rg -326.708 386.399 72.259 0.2005 re -f* -0 g -268.7 386.6 2.6094 0.2006 re -f* -1 g -271.31 386.6 7.6273 0.2006 re -f* -0 g -278.937 386.6 39.9431 0.2006 re -f* -1 g -318.88 386.6 7.6274 0.2006 re -f* -0.498 0 0.482 rg -326.507 386.6 72.6604 0.2006 re -f* -0 g -268.299 386.8 3.0108 0.2006 re -f* -1 g -271.31 386.8 7.6273 0.2006 re -f* -0 g -278.937 386.8 39.9431 0.2006 re -f* -1 g -318.88 386.8 7.4267 0.2006 re -f* -0.498 0 0.482 rg -326.307 386.8 73.0618 0.2006 re -f* -0 g -268.098 387.001 3.2115 0.2005 re -f* -1 g -271.31 387.001 7.6273 0.2005 re -f* -0 g -278.937 387.001 39.7425 0.2005 re -f* -1 g -318.679 387.001 7.4265 0.2005 re -f* -0.498 0 0.482 rg -326.106 387.001 73.6641 0.2005 re -f* -0 g -267.897 387.201 3.4123 0.2005 re -f* -1 g -271.31 387.201 7.6273 0.2005 re -f* -0 g -278.937 387.201 39.5417 0.2005 re -f* -1 g -318.479 387.201 7.4266 0.2005 re -f* -0.498 0 0.482 rg -325.905 387.201 74.0655 0.2005 re -f* -0 g -267.697 387.402 3.613 0.2006 re -f* -1 g -271.31 387.402 7.6273 0.2006 re -f* -0 g -278.937 387.402 39.341 0.2006 re -f* -1 g -318.278 387.402 7.4266 0.2006 re -f* -0.498 0 0.482 rg -325.704 387.402 74.4669 0.2006 re -f* -0 g -267.295 387.603 4.0144 0.2006 re -f* -1 g -271.31 387.603 7.6273 0.2006 re -f* -0 g -278.937 387.603 39.341 0.2006 re -f* -1 g -318.278 387.603 7.2259 0.2006 re -f* -0.498 0 0.482 rg -325.504 387.603 74.8683 0.2006 re -f* -0 g -267.094 387.803 4.2151 0.2006 re -f* -1 g -271.31 387.803 7.6273 0.2006 re -f* -0 g -278.937 387.803 39.1402 0.2006 re -f* -1 g -318.077 387.803 7.226 0.2006 re -f* -0.498 0 0.482 rg -325.303 387.803 75.4705 0.2006 re -f* -0 g -266.894 388.004 4.4159 0.2006 re -f* -1 g -271.31 388.004 7.6273 0.2006 re -f* -0 g -278.937 388.004 38.9395 0.2006 re -f* -1 g -317.876 388.004 7.226 0.2006 re -f* -0.498 0 0.482 rg -325.102 388.004 75.8719 0.2006 re -f* -0 g -266.693 388.204 4.6166 0.2005 re -f* -1 g -271.31 388.204 7.6273 0.2005 re -f* -0 g -278.937 388.204 38.7389 0.2005 re -f* -1 g -317.676 388.204 7.2258 0.2005 re -f* -0.498 0 0.482 rg -324.902 388.204 76.2734 0.2005 re -f* -0 g -266.492 388.405 4.8173 0.2005 re -f* -1 g -271.31 388.405 7.6273 0.2005 re -f* -0 g -278.937 388.405 38.7389 0.2005 re -f* -1 g -317.676 388.405 7.0251 0.2005 re -f* -0.498 0 0.482 rg -324.701 388.405 76.6748 0.2005 re -f* -0 g -266.292 388.605 5.018 0.2006 re -f* -1 g -271.31 388.605 7.6273 0.2006 re -f* -0 g -278.937 388.605 38.5381 0.2006 re -f* -1 g -317.475 388.605 7.0252 0.2006 re -f* -0.498 0 0.482 rg -324.5 388.605 77.0762 0.2006 re -f* -0 g -265.89 388.806 5.4195 0.2006 re -f* -1 g -271.31 388.806 7.6273 0.2006 re -f* -0 g -278.937 388.806 38.3374 0.2006 re -f* -1 g -317.274 388.806 7.0252 0.2006 re -f* -0.498 0 0.482 rg -324.299 388.806 77.4777 0.2006 re -f* -0 g -265.689 389.006 5.6202 0.2005 re -f* -1 g -271.31 389.006 7.6273 0.2005 re -f* -0 g -278.937 389.006 38.3374 0.2005 re -f* -1 g -317.274 389.006 7.0252 0.2005 re -f* -0.498 0 0.482 rg -324.299 389.006 77.8791 0.2005 re -f* -0 g -265.489 389.207 5.8209 0.2005 re -f* -1 g -271.31 389.207 7.6273 0.2005 re -f* -0 g -278.937 389.207 38.1367 0.2005 re -f* -1 g -317.074 389.207 7.0252 0.2005 re -f* -0.498 0 0.482 rg -324.099 389.207 78.2805 0.2005 re -f* -0 g -265.288 389.407 6.0216 0.2006 re -f* -1 g -271.31 389.407 7.6273 0.2006 re -f* -0 g -278.937 389.407 37.9359 0.2006 re -f* -1 g -316.873 389.407 7.0252 0.2006 re -f* -0.498 0 0.482 rg -323.898 389.407 78.682 0.2006 re -f* -0 g -265.087 389.608 6.2224 0.2006 re -f* -1 g -271.31 389.608 7.6273 0.2006 re -f* -0 g -278.937 389.608 37.9359 0.2006 re -f* -1 g -316.873 389.608 6.8245 0.2006 re -f* -0.498 0 0.482 rg -323.697 389.608 79.0835 0.2006 re -f* -0 g -264.886 389.809 6.4231 0.2005 re -f* -1 g -271.31 389.809 7.6273 0.2005 re -f* -0 g -278.937 389.809 37.7352 0.2005 re -f* -1 g -316.672 389.809 6.8245 0.2005 re -f* -0.498 0 0.482 rg -323.497 389.809 79.4849 0.2005 re -f* -0 g -264.686 390.009 6.6238 0.2006 re -f* -1 g -271.31 390.009 7.6273 0.2006 re -f* -0 g -278.937 390.009 37.5345 0.2006 re -f* -1 g -316.471 390.009 7.0252 0.2006 re -f* -0.498 0 0.482 rg -323.497 390.009 79.6856 0.2006 re -f* -0 g -264.485 390.21 6.8245 0.2005 re -f* -1 g -271.31 390.21 7.6273 0.2005 re -f* -0 g -278.937 390.21 37.5345 0.2005 re -f* -1 g -316.471 390.21 6.8245 0.2005 re -f* -0.498 0 0.482 rg -323.296 390.21 80.087 0.2005 re -f* -0 g -264.284 390.41 7.0252 0.2006 re -f* -1 g -271.31 390.41 7.6273 0.2006 re -f* -0 g -278.937 390.41 37.3338 0.2006 re -f* -1 g -316.271 390.41 6.8245 0.2006 re -f* -0.498 0 0.482 rg -323.095 390.41 80.4884 0.2006 re -f* -0 g -264.084 390.611 7.226 0.2006 re -f* -1 g -271.31 390.611 7.6273 0.2006 re -f* -0 g -278.937 390.611 37.1331 0.2006 re -f* -1 g -316.07 390.611 6.8244 0.2006 re -f* -0.498 0 0.482 rg -322.894 390.611 80.89 0.2006 re -f* -0 g -263.883 390.811 7.4267 0.2006 re -f* -1 g -271.31 390.811 7.6273 0.2006 re -f* -0 g -278.937 390.811 37.1331 0.2006 re -f* -1 g -316.07 390.811 6.8244 0.2006 re -f* -0.498 0 0.482 rg -322.894 390.811 81.0907 0.2006 re -f* -0 g -263.682 391.012 7.6274 0.2005 re -f* -1 g -271.31 391.012 7.6273 0.2005 re -f* -0 g -278.937 391.012 36.9323 0.2005 re -f* -1 g -315.869 391.012 6.8246 0.2005 re -f* -0.498 0 0.482 rg -322.694 391.012 81.492 0.2005 re -f* -0 g -263.281 391.213 8.0288 0.2005 re -f* -1 g -271.31 391.213 7.6273 0.2005 re -f* -0 g -278.937 391.213 36.9323 0.2005 re -f* -1 g -315.869 391.213 6.6238 0.2005 re -f* -0.498 0 0.482 rg -322.493 391.213 81.8935 0.2005 re -f* -0 g -263.08 391.413 8.2296 0.2006 re -f* -1 g -271.31 391.413 7.6273 0.2006 re -f* -0 g -278.937 391.413 36.7317 0.2006 re -f* -1 g -315.669 391.413 6.6237 0.2006 re -f* -0.498 0 0.482 rg -322.292 391.413 82.2949 0.2006 re -f* -0 g -262.879 391.614 8.4303 0.2006 re -f* -1 g -271.31 391.614 7.6273 0.2006 re -f* -0 g -278.937 391.614 36.5309 0.2006 re -f* -1 g -315.468 391.614 6.8245 0.2006 re -f* -0.498 0 0.482 rg -322.292 391.614 82.4957 0.2006 re -f* -0 g -262.679 391.814 8.631 0.2005 re -f* -1 g -271.31 391.814 7.6273 0.2005 re -f* -0 g -278.937 391.814 36.5309 0.2005 re -f* -1 g -315.468 391.814 6.6238 0.2005 re -f* -0.498 0 0.482 rg -322.092 391.814 82.8971 0.2005 re -f* -0 g -262.478 392.015 8.8317 0.2006 re -f* -1 g -271.31 392.015 7.6273 0.2006 re -f* -0 g -278.937 392.015 36.3302 0.2006 re -f* -1 g -315.267 392.015 6.6237 0.2006 re -f* -0.498 0 0.482 rg -321.891 392.015 83.2986 0.2006 re -f* -0 g -262.277 392.215 9.0324 0.2005 re -f* -1 g -271.31 392.215 7.6273 0.2005 re -f* -0 g -278.937 392.215 36.3302 0.2005 re -f* -1 g -315.267 392.215 6.6237 0.2005 re -f* -0.498 0 0.482 rg -321.891 392.215 83.4993 0.2005 re -f* -0 g -262.277 392.416 9.0324 0.2006 re -f* -1 g -271.31 392.416 7.6273 0.2006 re -f* -0 g -278.937 392.416 36.1295 0.2006 re -f* -1 g -315.066 392.416 6.6238 0.2006 re -f* -0.498 0 0.482 rg -321.69 392.416 83.9007 0.2006 re -f* -0 g -262.076 392.616 9.2332 0.2006 re -f* -1 g -271.31 392.616 7.6273 0.2006 re -f* -0 g -278.937 392.616 36.1295 0.2006 re -f* -1 g -315.066 392.616 6.423 0.2006 re -f* -0.498 0 0.482 rg -321.489 392.616 84.3022 0.2006 re -f* -0 g -261.876 392.817 9.4339 0.2005 re -f* -1 g -271.31 392.817 7.6273 0.2005 re -f* -0 g -278.937 392.817 35.9287 0.2005 re -f* -1 g -314.866 392.817 6.6238 0.2005 re -f* -0.498 0 0.482 rg -321.489 392.817 84.5029 0.2005 re -f* -0 g -261.675 393.018 9.6346 0.2006 re -f* -1 g -271.31 393.018 7.6273 0.2006 re -f* -0 g -278.937 393.018 35.9287 0.2006 re -f* -1 g -314.866 393.018 6.4231 0.2006 re -f* -0.498 0 0.482 rg -321.289 393.018 84.9043 0.2006 re -f* -0 g -261.474 393.218 9.8353 0.2005 re -f* -1 g -271.31 393.218 7.6273 0.2005 re -f* -0 g -278.937 393.218 35.7281 0.2005 re -f* -1 g -314.665 393.218 6.423 0.2005 re -f* -0.498 0 0.482 rg -321.088 393.218 85.3057 0.2005 re -f* -0 g -261.274 393.419 10.036 0.2006 re -f* -1 g -271.31 393.419 7.6273 0.2006 re -f* -0 g -278.937 393.419 35.7281 0.2006 re -f* -1 g -314.665 393.419 6.423 0.2006 re -f* -0.498 0 0.482 rg -321.088 393.419 85.5064 0.2006 re -f* -0 g -261.073 393.619 10.2368 0.2006 re -f* -1 g -271.31 393.619 7.6273 0.2006 re -f* -0 g -278.937 393.619 35.5273 0.2006 re -f* -1 g -314.464 393.619 6.423 0.2006 re -f* -0.498 0 0.482 rg -320.887 393.619 85.908 0.2006 re -f* -0 g -260.872 393.82 10.4375 0.2005 re -f* -1 g -271.31 393.82 7.6273 0.2005 re -f* -0 g -278.937 393.82 35.5273 0.2005 re -f* -1 g -314.464 393.82 6.423 0.2005 re -f* -0.498 0 0.482 rg -320.887 393.82 86.1087 0.2005 re -f* -0 g -260.671 394.02 10.6382 0.2006 re -f* -1 g -271.31 394.02 7.6273 0.2006 re -f* -0 g -278.937 394.02 35.3266 0.2006 re -f* -1 g -314.263 394.02 6.4231 0.2006 re -f* -0.498 0 0.482 rg -320.687 394.02 86.51 0.2006 re -f* -0 g -260.471 394.221 10.8389 0.2005 re -f* -1 g -271.31 394.221 7.6273 0.2005 re -f* -0 g -278.937 394.221 35.3266 0.2005 re -f* -1 g -314.263 394.221 6.2223 0.2005 re -f* -0.498 0 0.482 rg -320.486 394.221 86.9115 0.2005 re -f* -0 g -260.27 394.421 11.0396 0.2006 re -f* -1 g -271.31 394.421 7.6273 0.2006 re -f* -0 g -278.937 394.421 35.1259 0.2006 re -f* -1 g -314.063 394.421 6.423 0.2006 re -f* -0.498 0 0.482 rg -320.486 394.421 86.9115 0.2006 re -f* -0 g -260.27 394.622 11.0396 0.2006 re -f* -1 g -271.31 394.622 7.6273 0.2006 re -f* -0 g -278.937 394.622 35.1259 0.2006 re -f* -1 g -314.063 394.622 6.2223 0.2006 re -f* -0.498 0 0.482 rg -320.285 394.622 87.3129 0.2006 re -f* -0 g -260.069 394.823 11.2403 0.2005 re -f* -1 g -271.31 394.823 7.6273 0.2005 re -f* -0 g -278.937 394.823 34.9251 0.2005 re -f* -1 g -313.862 394.823 6.4231 0.2005 re -f* -0.498 0 0.482 rg -320.285 394.823 87.5137 0.2005 re -f* -0 g -259.868 395.023 11.4411 0.2006 re -f* -1 g -271.31 395.023 7.6273 0.2006 re -f* -0 g -278.937 395.023 34.9251 0.2006 re -f* -1 g -313.862 395.023 6.2224 0.2006 re -f* -0.498 0 0.482 rg -320.084 395.023 87.9151 0.2006 re -f* -0 g -259.668 395.224 11.6418 0.2005 re -f* -1 g -271.31 395.224 7.6273 0.2005 re -f* -0 g -278.937 395.224 34.7245 0.2005 re -f* -1 g -313.661 395.224 6.423 0.2005 re -f* -0.498 0 0.482 rg -320.084 395.224 88.1158 0.2005 re -f* -0 g -259.467 395.424 11.8425 0.2006 re -f* -1 g -271.31 395.424 7.6273 0.2006 re -f* -0 g -278.937 395.424 34.7245 0.2006 re -f* -1 g -313.661 395.424 6.2222 0.2006 re -f* -0.498 0 0.482 rg -319.884 395.424 88.5173 0.2006 re -f* -0 g -259.266 395.625 12.0432 0.2005 re -f* -1 g -271.31 395.625 7.6273 0.2005 re -f* -0 g -278.937 395.625 34.5237 0.2005 re -f* -1 g -313.461 395.625 6.423 0.2005 re -f* -0.498 0 0.482 rg -319.884 395.625 88.5173 0.2005 re -f* -0 g -259.266 395.825 12.0432 0.2006 re -f* -1 g -271.31 395.825 7.6273 0.2006 re -f* -0 g -278.937 395.825 34.5237 0.2006 re -f* -1 g -313.461 395.825 6.2224 0.2006 re -f* -0.498 0 0.482 rg -319.683 395.825 88.9186 0.2006 re -f* -0 g -259.066 396.026 12.2439 0.2006 re -f* -1 g -271.31 396.026 7.6273 0.2006 re -f* -0 g -278.937 396.026 34.5237 0.2006 re -f* -1 g -313.461 396.026 6.2224 0.2006 re -f* -0.498 0 0.482 rg -319.683 396.026 89.1194 0.2006 re -f* -0 g -258.865 396.227 12.4447 0.2005 re -f* -1 g -271.31 396.227 7.6273 0.2005 re -f* -0 g -278.937 396.227 34.323 0.2005 re -f* -1 g -313.26 396.227 6.2223 0.2005 re -f* -0.498 0 0.482 rg -319.482 396.227 89.5209 0.2005 re -f* -0 g -258.664 396.427 12.6454 0.2006 re -f* -1 g -271.31 396.427 7.6273 0.2006 re -f* -0 g -278.937 396.427 34.323 0.2006 re -f* -1 g -313.26 396.427 6.2223 0.2006 re -f* -0.498 0 0.482 rg -319.482 396.427 89.7216 0.2006 re -f* -0 g -258.463 396.628 12.8461 0.2005 re -f* -1 g -271.31 396.628 7.6273 0.2005 re -f* -0 g -278.937 396.628 34.1223 0.2005 re -f* -1 g -313.059 396.628 6.2223 0.2005 re -f* -0.498 0 0.482 rg -319.281 396.628 89.9223 0.2005 re -f* -0 g -258.463 396.828 12.8461 0.2006 re -f* -1 g -271.31 396.828 7.6273 0.2006 re -f* -0 g -278.937 396.828 34.1223 0.2006 re -f* -1 g -313.059 396.828 6.2223 0.2006 re -f* -0.498 0 0.482 rg -319.281 396.828 90.123 0.2006 re -f* -0 g -258.263 397.029 13.0468 0.2006 re -f* -1 g -271.31 397.029 7.6273 0.2006 re -f* -0 g -278.937 397.029 34.1223 0.2006 re -f* -1 g -313.059 397.029 6.0215 0.2006 re -f* -0.498 0 0.482 rg -319.081 397.029 90.5245 0.2006 re -f* -0 g -258.062 397.229 13.2475 0.2005 re -f* -1 g -271.31 397.229 7.6273 0.2005 re -f* -0 g -278.937 397.229 33.9216 0.2005 re -f* -1 g -312.858 397.229 6.2222 0.2005 re -f* -0.498 0 0.482 rg -319.081 397.229 90.7253 0.2005 re -f* -0 g -258.062 397.43 13.2475 0.2006 re -f* -1 g -271.31 397.43 7.6273 0.2006 re -f* -0 g -278.937 397.43 33.9216 0.2006 re -f* -1 g -312.858 397.43 6.0215 0.2006 re -f* -0.498 0 0.482 rg -318.88 397.43 90.926 0.2006 re -f* -0 g -257.861 397.63 13.4483 0.2005 re -f* -1 g -271.31 397.63 7.6273 0.2005 re -f* -0 g -278.937 397.63 33.7209 0.2005 re -f* -1 g -312.658 397.63 6.2222 0.2005 re -f* -0.498 0 0.482 rg -318.88 397.63 91.1267 0.2005 re -f* -0 g -257.661 397.831 13.649 0.2006 re -f* -1 g -271.31 397.831 7.6273 0.2006 re -f* -0 g -278.937 397.831 33.7209 0.2006 re -f* -1 g -312.658 397.831 6.2222 0.2006 re -f* -0.498 0 0.482 rg -318.88 397.831 91.3274 0.2006 re -f* -0 g -257.46 398.032 13.8497 0.2006 re -f* -1 g -271.31 398.032 7.6273 0.2006 re -f* -0 g -278.937 398.032 33.7209 0.2006 re -f* -1 g -312.658 398.032 6.0216 0.2006 re -f* -0.498 0 0.482 rg -318.679 398.032 91.7287 0.2006 re -f* -0 g -257.46 398.232 13.8497 0.2005 re -f* -1 g -271.31 398.232 7.6273 0.2005 re -f* -0 g -278.937 398.232 33.5201 0.2005 re -f* -1 g -312.457 398.232 6.2224 0.2005 re -f* -0.498 0 0.482 rg -318.679 398.232 91.7287 0.2005 re -f* -0 g -257.259 398.433 14.0504 0.2006 re -f* -1 g -271.31 398.433 7.6273 0.2006 re -f* -0 g -278.937 398.433 33.5201 0.2006 re -f* -1 g -312.457 398.433 6.0216 0.2006 re -f* -0.498 0 0.482 rg -318.479 398.433 92.1302 0.2006 re -f* -0 g -257.058 398.633 14.2511 0.2005 re -f* -1 g -271.31 398.633 7.6273 0.2005 re -f* -0 g -278.937 398.633 33.5201 0.2005 re -f* -1 g -312.457 398.633 6.0216 0.2005 re -f* -0.498 0 0.482 rg -318.479 398.633 92.3309 0.2005 re -f* -0 g -257.058 398.834 14.2511 0.2006 re -f* -1 g -271.31 398.834 7.6273 0.2006 re -f* -0 g -278.937 398.834 33.3194 0.2006 re -f* -1 g -312.256 398.834 6.2223 0.2006 re -f* -0.498 0 0.482 rg -318.479 398.834 92.3309 0.2006 re -f* -0 g -256.858 399.034 14.4519 0.2006 re -f* -1 g -271.31 399.034 7.6273 0.2006 re -f* -0 g -278.937 399.034 33.3194 0.2006 re -f* -1 g -312.256 399.034 6.0216 0.2006 re -f* -0.498 0 0.482 rg -318.278 399.034 92.7324 0.2006 re -f* -0 g -256.657 399.235 14.6526 0.2005 re -f* -1 g -271.31 399.235 7.6273 0.2005 re -f* -0 g -278.937 399.235 33.3194 0.2005 re -f* -1 g -312.256 399.235 6.0216 0.2005 re -f* -0.498 0 0.482 rg -318.278 399.235 92.9331 0.2005 re -f* -0 g -256.657 399.435 14.6526 0.2005 re -f* -1 g -271.31 399.435 7.6273 0.2005 re -f* -0 g -278.937 399.435 33.1187 0.2005 re -f* -1 g -312.056 399.435 6.2223 0.2005 re -f* -0.498 0 0.482 rg -318.278 399.435 92.9331 0.2005 re -f* -0 g -256.456 399.636 14.8533 0.2006 re -f* -1 g -271.31 399.636 7.6273 0.2006 re -f* -0 g -278.937 399.636 33.1187 0.2006 re -f* -1 g -312.056 399.636 6.0215 0.2006 re -f* -0.498 0 0.482 rg -318.077 399.636 93.3346 0.2006 re -f* -0 g -256.256 399.837 15.054 0.2006 re -f* -1 g -271.31 399.837 7.6273 0.2006 re -f* -0 g -278.937 399.837 33.1187 0.2006 re -f* -1 g -312.056 399.837 6.0215 0.2006 re -f* -0.498 0 0.482 rg -318.077 399.837 93.5353 0.2006 re -f* -0 g -256.256 400.037 15.054 0.2006 re -f* -1 g -271.31 400.037 7.6273 0.2006 re -f* -0 g -278.937 400.037 32.918 0.2006 re -f* -1 g -311.855 400.037 6.2222 0.2006 re -f* -0.498 0 0.482 rg -318.077 400.037 93.5353 0.2006 re -f* -0 g -256.055 400.238 15.2547 0.2005 re -f* -1 g -271.31 400.238 7.6273 0.2005 re -f* -0 g -278.937 400.238 32.918 0.2005 re -f* -1 g -311.855 400.238 6.0215 0.2005 re -f* -0.498 0 0.482 rg -317.876 400.238 93.9367 0.2005 re -f* -0 g -255.854 400.438 15.4555 0.2006 re -f* -1 g -271.31 400.438 7.6273 0.2006 re -f* -0 g -278.937 400.438 32.918 0.2006 re -f* -1 g -311.855 400.438 6.0215 0.2006 re -f* -0.498 0 0.482 rg -317.876 400.438 93.9367 0.2006 re -f* -0 g -255.854 400.639 15.4555 0.2005 re -f* -1 g -271.31 400.639 7.6273 0.2005 re -f* -0 g -278.937 400.639 32.7173 0.2005 re -f* -1 g -311.654 400.639 6.2222 0.2005 re -f* -0.498 0 0.482 rg -317.876 400.639 94.1375 0.2005 re -f* -0 g -255.653 400.839 15.6562 0.2006 re -f* -1 g -271.31 400.839 7.6273 0.2006 re -f* -0 g -278.937 400.839 32.7173 0.2006 re -f* -1 g -311.654 400.839 6.0216 0.2006 re -f* -0.498 0 0.482 rg -317.676 400.839 94.5388 0.2006 re -f* -0 g -255.653 401.04 15.6562 0.2006 re -f* -1 g -271.31 401.04 7.6273 0.2006 re -f* -0 g -278.937 401.04 32.7173 0.2006 re -f* -1 g -311.654 401.04 6.0216 0.2006 re -f* -0.498 0 0.482 rg -317.676 401.04 94.5388 0.2006 re -f* -0 g -255.453 401.241 15.8569 0.2005 re -f* -1 g -271.31 401.241 7.6273 0.2005 re -f* -0 g -278.937 401.241 32.5165 0.2005 re -f* -1 g -311.453 401.241 6.2224 0.2005 re -f* -0.498 0 0.482 rg -317.676 401.241 94.7395 0.2005 re -f* -0 g -255.252 401.441 16.0576 0.2005 re -f* -1 g -271.31 401.441 7.6273 0.2005 re -f* -0 g -278.937 401.441 32.5165 0.2005 re -f* -1 g -311.453 401.441 6.2224 0.2005 re -f* -0.498 0 0.482 rg -317.676 401.441 94.9402 0.2005 re -f* -0 g -255.252 401.642 16.0576 0.2006 re -f* -1 g -271.31 401.642 7.6273 0.2006 re -f* -0 g -278.937 401.642 32.5165 0.2006 re -f* -1 g -311.453 401.642 6.0216 0.2006 re -f* -0.498 0 0.482 rg -317.475 401.642 95.141 0.2006 re -f* -0 g -255.051 401.842 16.2583 0.2006 re -f* -1 g -271.31 401.842 7.6273 0.2006 re -f* -0 g -278.937 401.842 32.5165 0.2006 re -f* -1 g -311.453 401.842 6.0216 0.2006 re -f* -0.498 0 0.482 rg -317.475 401.842 95.3417 0.2006 re -f* -0 g -255.051 402.043 16.2583 0.2005 re -f* -1 g -271.31 402.043 7.6273 0.2005 re -f* -0 g -278.937 402.043 32.3158 0.2005 re -f* -1 g -311.253 402.043 6.2223 0.2005 re -f* -0.498 0 0.482 rg -317.475 402.043 95.3417 0.2005 re -f* -0 g -254.851 402.243 16.4591 0.2005 re -f* -1 g -271.31 402.243 7.6273 0.2005 re -f* -0 g -278.937 402.243 32.3158 0.2005 re -f* -1 g -311.253 402.243 6.2223 0.2005 re -f* -0.498 0 0.482 rg -317.475 402.243 95.5425 0.2005 re -f* -0 g -254.851 402.444 16.4591 0.2006 re -f* -1 g -271.31 402.444 7.6273 0.2006 re -f* -0 g -278.937 402.444 32.3158 0.2006 re -f* -1 g -311.253 402.444 6.0216 0.2006 re -f* -0.498 0 0.482 rg -317.274 402.444 95.7432 0.2006 re -f* -0 g -254.65 402.644 16.6598 0.2006 re -f* -1 g -271.31 402.644 7.6273 0.2006 re -f* -0 g -278.937 402.644 32.1151 0.2006 re -f* -1 g -311.052 402.644 6.2223 0.2006 re -f* -0.498 0 0.482 rg -317.274 402.644 95.9438 0.2006 re -f* -0 g -254.449 402.845 16.8605 0.2006 re -f* -1 g -271.31 402.845 7.6273 0.2006 re -f* -0 g -278.937 402.845 32.1151 0.2006 re -f* -1 g -311.052 402.845 6.2223 0.2006 re -f* -0.498 0 0.482 rg -317.274 402.845 95.9438 0.2006 re -f* -0 g -254.449 403.046 16.8605 0.2006 re -f* -1 g -271.31 403.046 7.6273 0.2006 re -f* -0 g -278.937 403.046 32.1151 0.2006 re -f* -1 g -311.052 403.046 6.2223 0.2006 re -f* -0.498 0 0.482 rg -317.274 403.046 96.1446 0.2006 re -f* -0 g -254.248 403.246 17.0612 0.2005 re -f* -1 g -271.31 403.246 7.6273 0.2005 re -f* -0 g -278.937 403.246 32.1151 0.2005 re -f* -1 g -311.052 403.246 6.2223 0.2005 re -f* -0.498 0 0.482 rg -317.274 403.246 96.1446 0.2005 re -f* -0 g -254.248 403.447 17.0612 0.2005 re -f* -1 g -271.31 403.447 7.6273 0.2005 re -f* -0 g -278.937 403.447 31.9144 0.2005 re -f* -1 g -310.851 403.447 6.423 0.2005 re -f* -0.498 0 0.482 rg -317.274 403.447 96.3453 0.2005 re -f* -0 g -254.048 403.647 17.2619 0.2006 re -f* -1 g -271.31 403.647 7.6273 0.2006 re -f* -0 g -278.937 403.647 31.9144 0.2006 re -f* -1 g -310.851 403.647 6.2223 0.2006 re -f* -0.498 0 0.482 rg -317.074 403.647 96.546 0.2006 re -f* -0 g -254.048 403.848 17.2619 0.2006 re -f* -1 g -271.31 403.848 7.6273 0.2006 re -f* -0 g -278.937 403.848 31.9144 0.2006 re -f* -1 g -310.851 403.848 6.2223 0.2006 re -f* -0.498 0 0.482 rg -317.074 403.848 96.7467 0.2006 re -f* -0 g -253.847 404.048 17.4626 0.2005 re -f* -1 g -271.31 404.048 7.6273 0.2005 re -f* -0 g -278.937 404.048 31.9144 0.2005 re -f* -1 g -310.851 404.048 6.2223 0.2005 re -f* -0.498 0 0.482 rg -317.074 404.048 13.6489 0.2005 re -f* -1 g -330.722 404.048 8.4302 0.2005 re -f* -0.498 0 0.482 rg -339.153 404.048 74.6676 0.2005 re -f* -0 g -253.847 404.249 17.4626 0.2005 re -f* -1 g -271.31 404.249 7.6273 0.2005 re -f* -0 g -278.937 404.249 31.7137 0.2005 re -f* -1 g -310.651 404.249 6.423 0.2005 re -f* -0.498 0 0.482 rg -317.074 404.249 12.2439 0.2005 re -f* -1 g -329.317 404.249 11.2403 0.2005 re -f* -0.498 0 0.482 rg -340.558 404.249 73.4633 0.2005 re -f* -0 g -253.646 404.449 17.6633 0.2006 re -f* -1 g -271.31 404.449 7.6273 0.2006 re -f* -0 g -278.937 404.449 31.7137 0.2006 re -f* -1 g -310.651 404.449 6.423 0.2006 re -f* -0.498 0 0.482 rg -317.074 404.449 11.0395 0.2006 re -f* -1 g -328.113 404.449 13.4483 0.2006 re -f* -0.498 0 0.482 rg -341.561 404.449 72.4597 0.2006 re -f* -0 g -253.646 404.65 17.6633 0.2006 re -f* -1 g -271.31 404.65 7.6273 0.2006 re -f* -0 g -278.937 404.65 31.7137 0.2006 re -f* -1 g -310.651 404.65 6.423 0.2006 re -f* -0.498 0 0.482 rg -317.074 404.65 9.8352 0.2006 re -f* -1 g -326.909 404.65 15.6561 0.2006 re -f* -0.498 0 0.482 rg -342.565 404.65 71.6568 0.2006 re -f* -0 g -253.445 404.851 17.8641 0.2005 re -f* -1 g -271.31 404.851 7.6273 0.2005 re -f* -0 g -278.937 404.851 31.7137 0.2005 re -f* -1 g -310.651 404.851 6.423 0.2005 re -f* -0.498 0 0.482 rg -317.074 404.851 8.8316 0.2005 re -f* -1 g -325.905 404.851 17.2619 0.2005 re -f* -0.498 0 0.482 rg -343.167 404.851 71.0546 0.2005 re -f* -0 g -253.445 405.051 17.8641 0.2006 re -f* -1 g -271.31 405.051 7.6273 0.2006 re -f* -0 g -278.937 405.051 31.7137 0.2006 re -f* -1 g -310.651 405.051 6.423 0.2006 re -f* -0.498 0 0.482 rg -317.074 405.051 8.0288 0.2006 re -f* -1 g -325.102 405.051 7.0251 0.2006 re -f* -0 g -332.127 405.051 6.2223 0.2006 re -f* -1 g -338.35 405.051 5.6201 0.2006 re -f* -0.498 0 0.482 rg -343.97 405.051 70.4526 0.2006 re -f* -0 g -253.445 405.252 17.8641 0.2005 re -f* -1 g -271.31 405.252 7.6273 0.2005 re -f* -0 g -278.937 405.252 31.513 0.2005 re -f* -1 g -310.45 405.252 6.4229 0.2005 re -f* -0.498 0 0.482 rg -316.873 405.252 7.6274 0.2005 re -f* -1 g -324.5 405.252 5.6201 0.2005 re -f* -0 g -330.12 405.252 9.8353 0.2005 re -f* -1 g -339.956 405.252 4.6165 0.2005 re -f* -0.498 0 0.482 rg -344.572 405.252 69.8504 0.2005 re -f* -0 g -253.245 405.452 18.0648 0.2006 re -f* -1 g -271.31 405.452 7.6273 0.2006 re -f* -0 g -278.937 405.452 31.513 0.2006 re -f* -1 g -310.45 405.452 6.4229 0.2006 re -f* -0.498 0 0.482 rg -316.873 405.452 7.0252 0.2006 re -f* -1 g -323.898 405.452 5.2187 0.2006 re -f* -0 g -329.117 405.452 12.0432 0.2006 re -f* -1 g -341.16 405.452 3.8136 0.2006 re -f* -0.498 0 0.482 rg -344.973 405.452 69.6497 0.2006 re -f* -0 g -253.245 405.653 18.0648 0.2006 re -f* -1 g -271.31 405.653 7.6273 0.2006 re -f* -0 g -278.937 405.653 31.513 0.2006 re -f* -1 g -310.45 405.653 6.4229 0.2006 re -f* -0.498 0 0.482 rg -316.873 405.653 6.4231 0.2006 re -f* -1 g -323.296 405.653 4.8172 0.2006 re -f* -0 g -328.113 405.653 13.8497 0.2006 re -f* -1 g -341.963 405.653 3.6129 0.2006 re -f* -0.498 0 0.482 rg -345.576 405.653 69.0475 0.2006 re -f* -0 g -253.044 405.853 18.2655 0.2006 re -f* -1 g -271.31 405.853 7.6273 0.2006 re -f* -0 g -278.937 405.853 31.513 0.2006 re -f* -1 g -310.45 405.853 6.4229 0.2006 re -f* -0.498 0 0.482 rg -316.873 405.853 5.821 0.2006 re -f* -1 g -322.694 405.853 4.8172 0.2006 re -f* -0 g -327.511 405.853 15.0539 0.2006 re -f* -1 g -342.565 405.853 3.4122 0.2006 re -f* -0.498 0 0.482 rg -345.977 405.853 68.8468 0.2006 re -f* -0 g -253.044 406.054 18.2655 0.2005 re -f* -1 g -271.31 406.054 7.6273 0.2005 re -f* -0 g -278.937 406.054 31.513 0.2005 re -f* -1 g -310.45 406.054 6.4229 0.2005 re -f* -0.498 0 0.482 rg -316.873 406.054 5.2188 0.2005 re -f* -1 g -322.092 406.054 4.6165 0.2005 re -f* -0 g -326.708 406.054 16.459 0.2005 re -f* -1 g -343.167 406.054 3.2115 0.2005 re -f* -0.498 0 0.482 rg -346.379 406.054 68.4453 0.2005 re -f* -0 g -252.843 406.255 18.4662 0.2005 re -f* -1 g -271.31 406.255 7.6273 0.2005 re -f* -0 g -278.937 406.255 31.3122 0.2005 re -f* -1 g -310.249 406.255 6.6237 0.2005 re -f* -0.498 0 0.482 rg -316.873 406.255 4.8174 0.2005 re -f* -1 g -321.69 406.255 4.6165 0.2005 re -f* -0 g -326.307 406.255 17.4626 0.2005 re -f* -1 g -343.769 406.255 3.0108 0.2005 re -f* -0.498 0 0.482 rg -346.78 406.255 68.0438 0.2005 re -f* -0 g -252.843 406.455 18.4662 0.2006 re -f* -1 g -271.31 406.455 7.6273 0.2006 re -f* -0 g -278.937 406.455 31.3122 0.2006 re -f* -1 g -310.249 406.455 6.6237 0.2006 re -f* -0.498 0 0.482 rg -316.873 406.455 4.2152 0.2006 re -f* -1 g -321.088 406.455 4.6165 0.2006 re -f* -0 g -325.704 406.455 18.4662 0.2006 re -f* -1 g -344.171 406.455 3.2115 0.2006 re -f* -0.498 0 0.482 rg -347.382 406.455 67.6425 0.2006 re -f* -0 g -252.843 406.656 18.4662 0.2006 re -f* -1 g -271.31 406.656 7.6273 0.2006 re -f* -0 g -278.937 406.656 31.3122 0.2006 re -f* -1 g -310.249 406.656 6.6237 0.2006 re -f* -0.498 0 0.482 rg -316.873 406.656 3.8138 0.2006 re -f* -1 g -320.687 406.656 4.6165 0.2006 re -f* -0 g -325.303 406.656 19.269 0.2006 re -f* -1 g -344.572 406.656 3.2116 0.2006 re -f* -0.498 0 0.482 rg -347.784 406.656 67.241 0.2006 re -f* -0 g -252.643 406.856 18.6669 0.2005 re -f* -1 g -271.31 406.856 7.6273 0.2005 re -f* -0 g -278.937 406.856 31.3122 0.2005 re -f* -1 g -310.249 406.856 6.8245 0.2005 re -f* -0.498 0 0.482 rg -317.074 406.856 3.0108 0.2005 re -f* -1 g -320.084 406.856 4.8172 0.2005 re -f* -0 g -324.902 406.856 20.0719 0.2005 re -f* -1 g -344.973 406.856 3.2116 0.2005 re -f* -0.498 0 0.482 rg -348.185 406.856 67.0402 0.2005 re -f* -0 g -252.643 407.057 18.6669 0.2006 re -f* -1 g -271.31 407.057 7.6273 0.2006 re -f* -0 g -278.937 407.057 31.3122 0.2006 re -f* -1 g -310.249 407.057 6.8245 0.2006 re -f* -0.498 0 0.482 rg -317.074 407.057 2.4086 0.2006 re -f* -1 g -319.482 407.057 4.8173 0.2006 re -f* -0 g -324.299 407.057 21.0755 0.2006 re -f* -1 g -345.375 407.057 3.0108 0.2006 re -f* -0.498 0 0.482 rg -348.386 407.057 66.8395 0.2006 re -f* -0 g -252.442 407.257 18.8677 0.2005 re -f* -1 g -271.31 407.257 7.6273 0.2005 re -f* -0 g -278.937 407.257 31.1115 0.2005 re -f* -1 g -310.048 407.257 7.0252 0.2005 re -f* -0.498 0 0.482 rg -317.074 407.257 2.0071 0.2005 re -f* -1 g -319.081 407.257 5.0181 0.2005 re -f* -0 g -324.099 407.257 21.4769 0.2005 re -f* -1 g -345.576 407.257 3.2116 0.2005 re -f* -0.498 0 0.482 rg -348.787 407.257 66.438 0.2005 re -f* -0 g -252.442 407.458 18.8677 0.2006 re -f* -1 g -271.31 407.458 7.6273 0.2006 re -f* -0 g -278.937 407.458 31.1115 0.2006 re -f* -1 g -310.048 407.458 7.0252 0.2006 re -f* -0.498 0 0.482 rg -317.074 407.458 1.405 0.2006 re -f* -1 g -318.479 407.458 5.2187 0.2006 re -f* -0 g -323.697 407.458 22.2798 0.2006 re -f* -1 g -345.977 407.458 3.2116 0.2006 re -f* -0.498 0 0.482 rg -349.189 407.458 66.2374 0.2006 re -f* -0 g -252.442 407.658 18.8677 0.2006 re -f* -1 g -271.31 407.658 7.6273 0.2006 re -f* -0 g -278.937 407.658 31.1115 0.2006 re -f* -1 g -310.048 407.658 7.0252 0.2006 re -f* -0.498 0 0.482 rg -317.074 407.658 1.0035 0.2006 re -f* -1 g -318.077 407.658 5.2188 0.2006 re -f* -0 g -323.296 407.658 22.882 0.2006 re -f* -1 g -346.178 407.658 3.2115 0.2006 re -f* -0.498 0 0.482 rg -349.389 407.658 66.0367 0.2006 re -f* -0 g -252.241 407.859 19.0684 0.2005 re -f* -1 g -271.31 407.859 7.6273 0.2005 re -f* -0 g -278.937 407.859 31.1115 0.2005 re -f* -1 g -310.048 407.859 7.0252 0.2005 re -f* -0.498 0 0.482 rg -317.074 407.859 0.4014 0.2005 re -f* -1 g -317.475 407.859 5.4194 0.2005 re -f* -0 g -322.894 407.859 23.6849 0.2005 re -f* -1 g -346.579 407.859 3.2116 0.2005 re -f* -0.498 0 0.482 rg -349.791 407.859 65.8359 0.2005 re -f* -0 g -252.241 408.06 19.0684 0.2006 re -f* -1 g -271.31 408.06 7.6273 0.2006 re -f* -0 g -278.937 408.06 31.1115 0.2006 re -f* -1 g -310.048 408.06 12.6454 0.2006 re -f* -0 g -322.694 408.06 24.0863 0.2006 re -f* -1 g -346.78 408.06 3.2114 0.2006 re -f* -0.498 0 0.482 rg -349.991 408.06 65.6353 0.2006 re -f* -0 g -252.241 408.26 19.0684 0.2005 re -f* -1 g -271.31 408.26 7.6273 0.2005 re -f* -0 g -278.937 408.26 31.1115 0.2005 re -f* -1 g -310.048 408.26 12.2439 0.2005 re -f* -0 g -322.292 408.26 24.8892 0.2005 re -f* -1 g -347.181 408.26 3.2115 0.2005 re -f* -0.498 0 0.482 rg -350.393 408.26 65.2338 0.2005 re -f* -0 g -252.04 408.461 19.2691 0.2006 re -f* -1 g -271.31 408.461 7.6273 0.2006 re -f* -0 g -278.937 408.461 31.1115 0.2006 re -f* -1 g -310.048 408.461 12.0432 0.2006 re -f* -0 g -322.092 408.461 25.2906 0.2006 re -f* -1 g -347.382 408.461 3.2115 0.2006 re -f* -0.498 0 0.482 rg -350.594 408.461 65.2338 0.2006 re -f* -0 g -252.04 408.661 19.2691 0.2006 re -f* -1 g -271.31 408.661 7.6273 0.2006 re -f* -0 g -278.937 408.661 30.9108 0.2006 re -f* -1 g -309.848 408.661 11.8425 0.2006 re -f* -0 g -321.69 408.661 25.8927 0.2006 re -f* -1 g -347.583 408.661 3.2116 0.2006 re -f* -0.498 0 0.482 rg -350.794 408.661 65.033 0.2006 re -f* -0 g -252.04 408.862 19.2691 0.2005 re -f* -1 g -271.31 408.862 7.6273 0.2005 re -f* -0 g -278.937 408.862 30.9108 0.2005 re -f* -1 g -309.848 408.862 11.6417 0.2005 re -f* -0 g -321.489 408.862 26.2943 0.2005 re -f* -1 g -347.784 408.862 3.4122 0.2005 re -f* -0.498 0 0.482 rg -351.196 408.862 64.6316 0.2005 re -f* -0 g -251.84 409.062 19.4698 0.2006 re -f* -1 g -271.31 409.062 7.6273 0.2006 re -f* -0 g -278.937 409.062 30.9108 0.2006 re -f* -1 g -309.848 409.062 11.2403 0.2006 re -f* -0 g -321.088 409.062 26.8963 0.2006 re -f* -1 g -347.984 409.062 3.4123 0.2006 re -f* -0.498 0 0.482 rg -351.397 409.062 64.6317 0.2006 re -f* -0 g -251.84 409.263 19.4698 0.2005 re -f* -1 g -271.31 409.263 7.6273 0.2005 re -f* -0 g -278.937 409.263 30.9108 0.2005 re -f* -1 g -309.848 409.263 11.0395 0.2005 re -f* -0 g -320.887 409.263 27.4986 0.2005 re -f* -1 g -348.386 409.263 3.2115 0.2005 re -f* -0.498 0 0.482 rg -351.597 409.263 64.431 0.2005 re -f* -0 g -251.84 409.463 19.4698 0.2006 re -f* -1 g -271.31 409.463 7.6273 0.2006 re -f* -0 g -278.937 409.463 30.9108 0.2006 re -f* -1 g -309.848 409.463 10.8389 0.2006 re -f* -0 g -320.687 409.463 27.6992 0.2006 re -f* -1 g -348.386 409.463 3.6129 0.2006 re -f* -0.498 0 0.482 rg -351.999 409.463 64.0296 0.2006 re -f* -0 g -251.639 409.664 19.6705 0.2006 re -f* -1 g -271.31 409.664 7.6273 0.2006 re -f* -0 g -278.937 409.664 30.9108 0.2006 re -f* -1 g -309.848 409.664 10.4374 0.2006 re -f* -0 g -320.285 409.664 28.3014 0.2006 re -f* -1 g -348.586 409.664 3.613 0.2006 re -f* -0.498 0 0.482 rg -352.2 409.664 64.0294 0.2006 re -f* -0 g -251.639 409.865 19.6705 0.2005 re -f* -1 g -271.31 409.865 7.6273 0.2005 re -f* -0 g -278.937 409.865 30.9108 0.2005 re -f* -1 g -309.848 409.865 10.2367 0.2005 re -f* -0 g -320.084 409.865 28.7029 0.2005 re -f* -1 g -348.787 409.865 3.6129 0.2005 re -f* -0.498 0 0.482 rg -352.4 409.865 63.8287 0.2005 re -f* -0 g -251.639 410.065 19.6705 0.2006 re -f* -1 g -271.31 410.065 7.6273 0.2006 re -f* -0 g -278.937 410.065 30.7101 0.2006 re -f* -1 g -309.647 410.065 10.2366 0.2006 re -f* -0 g -319.884 410.065 29.1043 0.2006 re -f* -1 g -348.988 410.065 3.613 0.2006 re -f* -0.498 0 0.482 rg -352.601 410.065 63.628 0.2006 re -f* -0 g -251.438 410.266 19.8713 0.2005 re -f* -1 g -271.31 410.266 7.6273 0.2005 re -f* -0 g -278.937 410.266 30.7101 0.2005 re -f* -1 g -309.647 410.266 10.036 0.2005 re -f* -0 g -319.683 410.266 29.5057 0.2005 re -f* -1 g -349.189 410.266 3.613 0.2005 re -f* -0.498 0 0.482 rg -352.802 410.266 63.4272 0.2005 re -f* -0 g -251.438 410.466 19.8713 0.2006 re -f* -1 g -271.31 410.466 7.6273 0.2006 re -f* -0 g -278.937 410.466 30.7101 0.2006 re -f* -1 g -309.647 410.466 9.8352 0.2006 re -f* -0 g -319.482 410.466 29.9072 0.2006 re -f* -1 g -349.389 410.466 3.6129 0.2006 re -f* -0.498 0 0.482 rg -353.002 410.466 63.4274 0.2006 re -f* -0 g -251.438 410.667 19.8713 0.2005 re -f* -1 g -271.31 410.667 7.6273 0.2005 re -f* -0 g -278.937 410.667 30.7101 0.2005 re -f* -1 g -309.647 410.667 9.6345 0.2005 re -f* -0 g -319.281 410.667 30.3086 0.2005 re -f* -1 g -349.59 410.667 3.613 0.2005 re -f* -0.498 0 0.482 rg -353.203 410.667 63.2266 0.2005 re -f* -0 g -251.438 410.867 19.8713 0.2006 re -f* -1 g -271.31 410.867 7.6273 0.2006 re -f* -0 g -278.937 410.867 30.7101 0.2006 re -f* -1 g -309.647 410.867 9.4337 0.2006 re -f* -0 g -319.081 410.867 30.5094 0.2006 re -f* -1 g -349.59 410.867 3.8137 0.2006 re -f* -0.498 0 0.482 rg -353.404 410.867 63.0259 0.2006 re -f* -0 g -251.238 411.068 20.072 0.2006 re -f* -1 g -271.31 411.068 7.6273 0.2006 re -f* -0 g -278.937 411.068 30.7101 0.2006 re -f* -1 g -309.647 411.068 9.233 0.2006 re -f* -0 g -318.88 411.068 30.9109 0.2006 re -f* -1 g -349.791 411.068 3.8136 0.2006 re -f* -0.498 0 0.482 rg -353.605 411.068 62.8252 0.2006 re -f* -0 g -251.238 411.268 20.072 0.2005 re -f* -1 g -271.31 411.268 7.6273 0.2005 re -f* -0 g -278.937 411.268 30.7101 0.2005 re -f* -1 g -309.647 411.268 9.0324 0.2005 re -f* -0 g -318.679 411.268 31.3121 0.2005 re -f* -1 g -349.991 411.268 3.8138 0.2005 re -f* -0.498 0 0.482 rg -353.805 411.268 28.7028 0.2005 re -f* -1 g -382.508 411.268 1.2043 0.2005 re -f* -0.498 0 0.482 rg -383.712 411.268 23.2835 0.2005 re -f* -1 g -406.996 411.268 1.6057 0.2005 re -f* -0.498 0 0.482 rg -408.602 411.268 8.0288 0.2005 re -f* -0 g -251.238 411.469 20.072 0.2006 re -f* -1 g -271.31 411.469 7.6273 0.2006 re -f* -0 g -278.937 411.469 30.7101 0.2006 re -f* -1 g -309.647 411.469 8.8316 0.2006 re -f* -0 g -318.479 411.469 31.5129 0.2006 re -f* -1 g -349.991 411.469 4.0144 0.2006 re -f* -0.498 0 0.482 rg -354.006 411.469 27.0972 0.2006 re -f* -1 g -381.103 411.469 3.8136 0.2006 re -f* -0.498 0 0.482 rg -384.917 411.469 20.4734 0.2006 re -f* -1 g -405.39 411.469 4.6166 0.2006 re -f* -0.498 0 0.482 rg -410.007 411.469 6.6237 0.2006 re -f* -0 g -251.238 411.67 20.072 0.2005 re -f* -1 g -271.31 411.67 7.6273 0.2005 re -f* -0 g -278.937 411.67 30.5094 0.2005 re -f* -1 g -309.446 411.67 8.8316 0.2005 re -f* -0 g -318.278 411.67 31.9144 0.2005 re -f* -1 g -350.192 411.67 4.0144 0.2005 re -f* -0.498 0 0.482 rg -354.207 411.67 26.2942 0.2005 re -f* -1 g -380.501 411.67 4.8173 0.2005 re -f* -0.498 0 0.482 rg -385.318 411.67 19.269 0.2005 re -f* -1 g -404.587 411.67 6.0216 0.2005 re -f* -0.498 0 0.482 rg -410.609 411.67 6.0216 0.2005 re -f* -0 g -251.037 411.87 20.2727 0.2006 re -f* -1 g -271.31 411.87 7.6273 0.2006 re -f* -0 g -278.937 411.87 30.5094 0.2006 re -f* -1 g -309.446 411.87 8.6308 0.2006 re -f* -0 g -318.077 411.87 32.3159 0.2006 re -f* -1 g -350.393 411.87 4.0144 0.2006 re -f* -0.498 0 0.482 rg -354.407 411.87 6.2223 0.2006 re -f* -1 g -360.63 411.87 9.6345 0.2006 re -f* -0.498 0 0.482 rg -370.264 411.87 9.6346 0.2006 re -f* -1 g -379.899 411.87 5.8208 0.2006 re -f* -0.498 0 0.482 rg -385.72 411.87 2.6093 0.2006 re -f* -1 g -388.329 411.87 0.2008 0.2006 re -f* -0.498 0 0.482 rg -388.53 411.87 6.2223 0.2006 re -f* -1 g -394.752 411.87 0.2007 0.2006 re -f* -0.498 0 0.482 rg -394.953 411.87 9.0324 0.2006 re -f* -1 g -403.985 411.87 7.2259 0.2006 re -f* -0.498 0 0.482 rg -411.211 411.87 5.4194 0.2006 re -f* -0 g -251.037 412.071 20.2727 0.2006 re -f* -1 g -271.31 412.071 7.6273 0.2006 re -f* -0 g -278.937 412.071 30.5094 0.2006 re -f* -1 g -309.446 412.071 8.4301 0.2006 re -f* -0 g -317.876 412.071 32.5166 0.2006 re -f* -1 g -350.393 412.071 4.0144 0.2006 re -f* -0.498 0 0.482 rg -354.407 412.071 6.2223 0.2006 re -f* -1 g -360.63 412.071 9.6345 0.2006 re -f* -0.498 0 0.482 rg -370.264 412.071 9.2331 0.2006 re -f* -1 g -379.497 412.071 2.8101 0.2006 re -f* -0.498 0 0.482 rg -382.307 412.071 1.6058 0.2006 re -f* -1 g -383.913 412.071 2.2078 0.2006 re -f* -0.498 0 0.482 rg -386.121 412.071 2.2079 0.2006 re -f* -1 g -388.329 412.071 6.6238 0.2006 re -f* -0.498 0 0.482 rg -394.953 412.071 8.6309 0.2006 re -f* -1 g -403.584 412.071 3.4123 0.2006 re -f* -0.498 0 0.482 rg -406.996 412.071 1.8065 0.2006 re -f* -1 g -408.802 412.071 2.6093 0.2006 re -f* -0.498 0 0.482 rg -411.412 412.071 5.4194 0.2006 re -f* -0 g -251.037 412.271 20.2727 0.2005 re -f* -1 g -271.31 412.271 7.6273 0.2005 re -f* -0 g -278.937 412.271 30.5094 0.2005 re -f* -1 g -309.446 412.271 8.2295 0.2005 re -f* -0 g -317.676 412.271 32.9179 0.2005 re -f* -1 g -350.594 412.271 4.0144 0.2005 re -f* -0.498 0 0.482 rg -354.608 412.271 6.0216 0.2005 re -f* -1 g -360.63 412.271 9.6345 0.2005 re -f* -0.498 0 0.482 rg -370.264 412.271 8.8317 0.2005 re -f* -1 g -379.096 412.271 2.2079 0.2005 re -f* -0.498 0 0.482 rg -381.304 412.271 3.4122 0.2005 re -f* -1 g -384.716 412.271 1.6057 0.2005 re -f* -0.498 0 0.482 rg -386.322 412.271 2.0072 0.2005 re -f* -1 g -388.329 412.271 6.6238 0.2005 re -f* -0.498 0 0.482 rg -394.953 412.271 8.2295 0.2005 re -f* -1 g -403.182 412.271 3.0108 0.2005 re -f* -0.498 0 0.482 rg -406.193 412.271 3.613 0.2005 re -f* -1 g -409.806 412.271 2.0071 0.2005 re -f* -0.498 0 0.482 rg -411.813 412.271 5.018 0.2005 re -f* -0 g -251.037 412.472 20.2727 0.2006 re -f* -1 g -271.31 412.472 7.6273 0.2006 re -f* -0 g -278.937 412.472 30.5094 0.2006 re -f* -1 g -309.446 412.472 8.0287 0.2006 re -f* -0 g -317.475 412.472 21.0756 0.2006 re -f* -1 g -338.551 412.472 2.81 0.2006 re -f* -0 g -341.361 412.472 9.2331 0.2006 re -f* -1 g -350.594 412.472 4.2151 0.2006 re -f* -0.498 0 0.482 rg -354.809 412.472 5.8209 0.2006 re -f* -1 g -360.63 412.472 9.6345 0.2006 re -f* -0.498 0 0.482 rg -370.264 412.472 8.4303 0.2006 re -f* -1 g -378.695 412.472 2.2079 0.2006 re -f* -0.498 0 0.482 rg -380.902 412.472 4.4158 0.2006 re -f* -1 g -385.318 412.472 1.405 0.2006 re -f* -0.498 0 0.482 rg -386.723 412.472 1.6057 0.2006 re -f* -1 g -388.329 412.472 6.6238 0.2006 re -f* -0.498 0 0.482 rg -394.953 412.472 7.8281 0.2006 re -f* -1 g -402.781 412.472 2.8101 0.2006 re -f* -0.498 0 0.482 rg -405.591 412.472 4.8172 0.2006 re -f* -1 g -410.408 412.472 1.8065 0.2006 re -f* -0.498 0 0.482 rg -412.215 412.472 4.6165 0.2006 re -f* -0 g -250.836 412.672 20.4734 0.2005 re -f* -1 g -271.31 412.672 7.6273 0.2005 re -f* -0 g -278.937 412.672 30.5094 0.2005 re -f* -1 g -309.446 412.672 8.0287 0.2005 re -f* -0 g -317.475 412.672 19.8713 0.2005 re -f* -1 g -337.346 412.672 5.0179 0.2005 re -f* -0 g -342.364 412.672 8.4303 0.2005 re -f* -1 g -350.794 412.672 4.215 0.2005 re -f* -0.498 0 0.482 rg -355.01 412.672 8.631 0.2005 re -f* -1 g -363.641 412.672 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 412.672 11.2403 0.2005 re -f* -1 g -378.494 412.672 2.0072 0.2005 re -f* -0.498 0 0.482 rg -380.501 412.672 5.018 0.2005 re -f* -1 g -385.519 412.672 1.4051 0.2005 re -f* -0.498 0 0.482 rg -386.924 412.672 1.4049 0.2005 re -f* -1 g -388.329 412.672 3.4123 0.2005 re -f* -0.498 0 0.482 rg -391.741 412.672 10.6381 0.2005 re -f* -1 g -402.379 412.672 2.8101 0.2005 re -f* -0.498 0 0.482 rg -405.189 412.672 5.6201 0.2005 re -f* -1 g -410.81 412.672 1.6058 0.2005 re -f* -0.498 0 0.482 rg -412.415 412.672 4.4158 0.2005 re -f* -0 g -250.836 412.873 20.4734 0.2006 re -f* -1 g -271.31 412.873 7.6273 0.2006 re -f* -0 g -278.937 412.873 30.5094 0.2006 re -f* -1 g -309.446 412.873 7.828 0.2006 re -f* -0 g -317.274 412.873 19.4698 0.2006 re -f* -1 g -336.744 412.873 6.2223 0.2006 re -f* -0 g -342.966 412.873 8.0287 0.2006 re -f* -1 g -350.995 412.873 4.2152 0.2006 re -f* -0.498 0 0.482 rg -355.21 412.873 8.4302 0.2006 re -f* -1 g -363.641 412.873 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 412.873 10.8389 0.2006 re -f* -1 g -378.092 412.873 2.2079 0.2006 re -f* -0.498 0 0.482 rg -380.3 412.873 5.6201 0.2006 re -f* -1 g -385.92 412.873 1.2043 0.2006 re -f* -0.498 0 0.482 rg -387.125 412.873 1.2043 0.2006 re -f* -1 g -388.329 412.873 3.4123 0.2006 re -f* -0.498 0 0.482 rg -391.741 412.873 10.4374 0.2006 re -f* -1 g -402.179 412.873 2.8101 0.2006 re -f* -0.498 0 0.482 rg -404.989 412.873 6.2223 0.2006 re -f* -1 g -411.211 412.873 1.405 0.2006 re -f* -0.498 0 0.482 rg -412.616 412.873 4.4159 0.2006 re -f* -0 g -250.836 413.073 20.4734 0.2006 re -f* -1 g -271.31 413.073 7.6273 0.2006 re -f* -0 g -278.937 413.073 13.0467 0.2006 re -f* -1 g -291.984 413.073 10.036 0.2006 re -f* -0 g -302.02 413.073 7.4267 0.2006 re -f* -1 g -309.446 413.073 7.6273 0.2006 re -f* -0 g -317.074 413.073 19.0683 0.2006 re -f* -1 g -336.142 413.073 7.2259 0.2006 re -f* -0 g -343.368 413.073 7.6273 0.2006 re -f* -1 g -350.995 413.073 4.2152 0.2006 re -f* -0.498 0 0.482 rg -355.21 413.073 8.4302 0.2006 re -f* -1 g -363.641 413.073 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 413.073 10.6382 0.2006 re -f* -1 g -377.892 413.073 2.2079 0.2006 re -f* -0.498 0 0.482 rg -380.099 413.073 6.0215 0.2006 re -f* -1 g -386.121 413.073 1.2043 0.2006 re -f* -0.498 0 0.482 rg -387.325 413.073 1.0036 0.2006 re -f* -1 g -388.329 413.073 3.4123 0.2006 re -f* -0.498 0 0.482 rg -391.741 413.073 10.036 0.2006 re -f* -1 g -401.777 413.073 3.0108 0.2006 re -f* -0.498 0 0.482 rg -404.788 413.073 6.8244 0.2006 re -f* -1 g -411.612 413.073 1.2043 0.2006 re -f* -0.498 0 0.482 rg -412.817 413.073 4.2152 0.2006 re -f* -0 g -250.836 413.274 20.4734 0.2005 re -f* -1 g -271.31 413.274 7.6273 0.2005 re -f* -0 g -278.937 413.274 13.0467 0.2005 re -f* -1 g -291.984 413.274 10.036 0.2005 re -f* -0 g -302.02 413.274 7.4267 0.2005 re -f* -1 g -309.446 413.274 7.4265 0.2005 re -f* -0 g -316.873 413.274 18.667 0.2005 re -f* -1 g -335.54 413.274 3.2115 0.2005 re -f* -0 g -338.751 413.274 2.8101 0.2005 re -f* -1 g -341.561 413.274 2.2079 0.2005 re -f* -0 g -343.769 413.274 7.4266 0.2005 re -f* -1 g -351.196 413.274 4.2151 0.2005 re -f* -0.498 0 0.482 rg -355.411 413.274 8.2295 0.2005 re -f* -1 g -363.641 413.274 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 413.274 10.4375 0.2005 re -f* -1 g -377.691 413.274 2.2079 0.2005 re -f* -0.498 0 0.482 rg -379.899 413.274 6.4229 0.2005 re -f* -1 g -386.322 413.274 1.0036 0.2005 re -f* -0.498 0 0.482 rg -387.325 413.274 1.0036 0.2005 re -f* -1 g -388.329 413.274 3.4123 0.2005 re -f* -0.498 0 0.482 rg -391.741 413.274 9.8352 0.2005 re -f* -1 g -401.576 413.274 3.0108 0.2005 re -f* -0.498 0 0.482 rg -404.587 413.274 7.2259 0.2005 re -f* -1 g -411.813 413.274 1.2044 0.2005 re -f* -0.498 0 0.482 rg -413.017 413.274 4.0144 0.2005 re -f* -0 g -250.836 413.475 20.4734 0.2006 re -f* -1 g -271.31 413.475 7.6273 0.2006 re -f* -0 g -278.937 413.475 13.0467 0.2006 re -f* -1 g -291.984 413.475 10.036 0.2006 re -f* -0 g -302.02 413.475 7.4267 0.2006 re -f* -1 g -309.446 413.475 7.4265 0.2006 re -f* -0 g -316.873 413.475 18.2655 0.2006 re -f* -1 g -335.138 413.475 3.0108 0.2006 re -f* -0 g -338.149 413.475 4.2151 0.2006 re -f* -1 g -342.364 413.475 1.8065 0.2006 re -f* -0 g -344.171 413.475 7.0252 0.2006 re -f* -1 g -351.196 413.475 4.4158 0.2006 re -f* -0.498 0 0.482 rg -355.612 413.475 8.0288 0.2006 re -f* -1 g -363.641 413.475 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 413.475 10.2367 0.2006 re -f* -1 g -377.49 413.475 2.208 0.2006 re -f* -0.498 0 0.482 rg -379.698 413.475 6.8244 0.2006 re -f* -1 g -386.522 413.475 1.0036 0.2006 re -f* -0.498 0 0.482 rg -387.526 413.475 0.8028 0.2006 re -f* -1 g -388.329 413.475 3.4123 0.2006 re -f* -0.498 0 0.482 rg -391.741 413.475 9.6345 0.2006 re -f* -1 g -401.376 413.475 3.0108 0.2006 re -f* -0.498 0 0.482 rg -404.386 413.475 7.6274 0.2006 re -f* -1 g -412.014 413.475 1.2042 0.2006 re -f* -0.498 0 0.482 rg -413.218 413.475 3.8138 0.2006 re -f* -0 g -250.836 413.675 20.4734 0.2005 re -f* -1 g -271.31 413.675 7.6273 0.2005 re -f* -0 g -278.937 413.675 13.0467 0.2005 re -f* -1 g -291.984 413.675 10.036 0.2005 re -f* -0 g -302.02 413.675 7.4267 0.2005 re -f* -1 g -309.446 413.675 7.2258 0.2005 re -f* -0 g -316.672 413.675 18.2655 0.2005 re -f* -1 g -334.938 413.675 2.8101 0.2005 re -f* -0 g -337.748 413.675 5.018 0.2005 re -f* -1 g -342.766 413.675 1.6057 0.2005 re -f* -0 g -344.371 413.675 6.8245 0.2005 re -f* -1 g -351.196 413.675 4.6165 0.2005 re -f* -0.498 0 0.482 rg -355.812 413.675 7.8281 0.2005 re -f* -1 g -363.641 413.675 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 413.675 10.036 0.2005 re -f* -1 g -377.289 413.675 2.2079 0.2005 re -f* -0.498 0 0.482 rg -379.497 413.675 7.2259 0.2005 re -f* -1 g -386.723 413.675 1.0036 0.2005 re -f* -0.498 0 0.482 rg -387.727 413.675 0.6021 0.2005 re -f* -1 g -388.329 413.675 3.4123 0.2005 re -f* -0.498 0 0.482 rg -391.741 413.675 9.4338 0.2005 re -f* -1 g -401.175 413.675 3.0108 0.2005 re -f* -0.498 0 0.482 rg -404.186 413.675 8.0288 0.2005 re -f* -1 g -412.215 413.675 1.2043 0.2005 re -f* -0.498 0 0.482 rg -413.419 413.675 3.613 0.2005 re -f* -0 g -250.635 413.876 20.6741 0.2006 re -f* -1 g -271.31 413.876 7.6273 0.2006 re -f* -0 g -278.937 413.876 16.0575 0.2006 re -f* -1 g -294.994 413.876 3.613 0.2006 re -f* -0 g -298.607 413.876 10.8389 0.2006 re -f* -1 g -309.446 413.876 7.0251 0.2006 re -f* -0 g -316.471 413.876 18.0648 0.2006 re -f* -1 g -334.536 413.876 2.8101 0.2006 re -f* -0 g -337.346 413.876 5.8208 0.2006 re -f* -1 g -343.167 413.876 1.6058 0.2006 re -f* -0 g -344.773 413.876 6.6237 0.2006 re -f* -1 g -351.397 413.876 4.4158 0.2006 re -f* -0.498 0 0.482 rg -355.812 413.876 7.8281 0.2006 re -f* -1 g -363.641 413.876 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 413.876 9.8353 0.2006 re -f* -1 g -377.089 413.876 2.4086 0.2006 re -f* -0.498 0 0.482 rg -379.497 413.876 7.4267 0.2006 re -f* -1 g -386.924 413.876 0.8028 0.2006 re -f* -0.498 0 0.482 rg -387.727 413.876 0.6021 0.2006 re -f* -1 g -388.329 413.876 3.4123 0.2006 re -f* -0.498 0 0.482 rg -391.741 413.876 9.2331 0.2006 re -f* -1 g -400.974 413.876 3.0108 0.2006 re -f* -0.498 0 0.482 rg -403.985 413.876 8.4302 0.2006 re -f* -1 g -412.415 413.876 1.2043 0.2006 re -f* -0.498 0 0.482 rg -413.62 413.876 3.4123 0.2006 re -f* -0 g -250.635 414.076 20.6741 0.2006 re -f* -1 g -271.31 414.076 7.6273 0.2006 re -f* -0 g -278.937 414.076 16.0575 0.2006 re -f* -1 g -294.994 414.076 3.613 0.2006 re -f* -0 g -298.607 414.076 10.6381 0.2006 re -f* -1 g -309.245 414.076 7.2259 0.2006 re -f* -0 g -316.471 414.076 17.6633 0.2006 re -f* -1 g -334.135 414.076 3.0108 0.2006 re -f* -0 g -337.146 414.076 6.423 0.2006 re -f* -1 g -343.568 414.076 1.405 0.2006 re -f* -0 g -344.973 414.076 6.4231 0.2006 re -f* -1 g -351.397 414.076 4.6165 0.2006 re -f* -0.498 0 0.482 rg -356.013 414.076 7.6274 0.2006 re -f* -1 g -363.641 414.076 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 414.076 9.6346 0.2006 re -f* -1 g -376.888 414.076 2.4086 0.2006 re -f* -0.498 0 0.482 rg -379.297 414.076 7.6274 0.2006 re -f* -1 g -386.924 414.076 1.0036 0.2006 re -f* -0.498 0 0.482 rg -387.928 414.076 0.4013 0.2006 re -f* -1 g -388.329 414.076 3.4123 0.2006 re -f* -0.498 0 0.482 rg -391.741 414.076 9.0324 0.2006 re -f* -1 g -400.774 414.076 3.0108 0.2006 re -f* -0.498 0 0.482 rg -403.784 414.076 8.8316 0.2006 re -f* -1 g -412.616 414.076 1.0036 0.2006 re -f* -0.498 0 0.482 rg -413.62 414.076 3.6129 0.2006 re -f* -0 g -250.635 414.277 20.6741 0.2005 re -f* -1 g -271.31 414.277 7.6273 0.2005 re -f* -0 g -278.937 414.277 16.0575 0.2005 re -f* -1 g -294.994 414.277 3.613 0.2005 re -f* -0 g -298.607 414.277 10.6381 0.2005 re -f* -1 g -309.245 414.277 7.0252 0.2005 re -f* -0 g -316.271 414.277 17.6633 0.2005 re -f* -1 g -333.934 414.277 3.0108 0.2005 re -f* -0 g -336.945 414.277 6.8245 0.2005 re -f* -1 g -343.769 414.277 1.405 0.2005 re -f* -0 g -345.174 414.277 6.423 0.2005 re -f* -1 g -351.597 414.277 4.6165 0.2005 re -f* -0.498 0 0.482 rg -356.214 414.277 7.4267 0.2005 re -f* -1 g -363.641 414.277 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 414.277 9.4339 0.2005 re -f* -1 g -376.687 414.277 2.6093 0.2005 re -f* -0.498 0 0.482 rg -379.297 414.277 7.828 0.2005 re -f* -1 g -387.125 414.277 0.803 0.2005 re -f* -0.498 0 0.482 rg -387.928 414.277 0.4013 0.2005 re -f* -1 g -388.329 414.277 3.4123 0.2005 re -f* -0.498 0 0.482 rg -391.741 414.277 8.8316 0.2005 re -f* -1 g -400.573 414.277 3.2116 0.2005 re -f* -0.498 0 0.482 rg -403.784 414.277 9.0323 0.2005 re -f* -1 g -412.817 414.277 1.0036 0.2005 re -f* -0.498 0 0.482 rg -413.82 414.277 3.4122 0.2005 re -f* -0 g -250.635 414.477 20.6741 0.2005 re -f* -1 g -271.31 414.477 7.6273 0.2005 re -f* -0 g -278.937 414.477 16.0575 0.2005 re -f* -1 g -294.994 414.477 3.613 0.2005 re -f* -0 g -298.607 414.477 10.6381 0.2005 re -f* -1 g -309.245 414.477 6.8245 0.2005 re -f* -0 g -316.07 414.477 17.6633 0.2005 re -f* -1 g -333.733 414.477 3.0108 0.2005 re -f* -0 g -336.744 414.477 7.4266 0.2005 re -f* -1 g -344.171 414.477 1.2043 0.2005 re -f* -0 g -345.375 414.477 6.2223 0.2005 re -f* -1 g -351.597 414.477 4.6165 0.2005 re -f* -0.498 0 0.482 rg -356.214 414.477 7.4267 0.2005 re -f* -1 g -363.641 414.477 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 414.477 9.2331 0.2005 re -f* -1 g -376.486 414.477 2.6094 0.2005 re -f* -0.498 0 0.482 rg -379.096 414.477 8.0287 0.2005 re -f* -1 g -387.125 414.477 1.0036 0.2005 re -f* -0.498 0 0.482 rg -388.128 414.477 0.2007 0.2005 re -f* -1 g -388.329 414.477 3.4123 0.2005 re -f* -0.498 0 0.482 rg -391.741 414.477 8.6309 0.2005 re -f* -1 g -400.372 414.477 3.2115 0.2005 re -f* -0.498 0 0.482 rg -403.584 414.477 9.4339 0.2005 re -f* -1 g -413.017 414.477 1.0036 0.2005 re -f* -0.498 0 0.482 rg -414.021 414.477 3.2114 0.2005 re -f* -0 g -250.635 414.678 20.6741 0.2006 re -f* -1 g -271.31 414.678 7.6273 0.2006 re -f* -0 g -278.937 414.678 16.0575 0.2006 re -f* -1 g -294.994 414.678 3.613 0.2006 re -f* -0 g -298.607 414.678 10.6381 0.2006 re -f* -1 g -309.245 414.678 6.8245 0.2006 re -f* -0 g -316.07 414.678 17.4626 0.2006 re -f* -1 g -333.533 414.678 3.0108 0.2006 re -f* -0 g -336.543 414.678 7.828 0.2006 re -f* -1 g -344.371 414.678 1.0036 0.2006 re -f* -0 g -345.375 414.678 6.2223 0.2006 re -f* -1 g -351.597 414.678 4.8173 0.2006 re -f* -0.498 0 0.482 rg -356.415 414.678 7.2259 0.2006 re -f* -1 g -363.641 414.678 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 414.678 9.0324 0.2006 re -f* -1 g -376.286 414.678 2.8101 0.2006 re -f* -0.498 0 0.482 rg -379.096 414.678 8.2294 0.2006 re -f* -1 g -387.325 414.678 0.8029 0.2006 re -f* -0.498 0 0.482 rg -388.128 414.678 0.2007 0.2006 re -f* -1 g -388.329 414.678 3.4123 0.2006 re -f* -0.498 0 0.482 rg -391.741 414.678 8.4302 0.2006 re -f* -1 g -400.171 414.678 3.4122 0.2006 re -f* -0.498 0 0.482 rg -403.584 414.678 9.4339 0.2006 re -f* -1 g -413.017 414.678 1.0036 0.2006 re -f* -0.498 0 0.482 rg -414.021 414.678 3.2114 0.2006 re -f* -0 g -250.635 414.878 20.6741 0.2006 re -f* -1 g -271.31 414.878 7.6273 0.2006 re -f* -0 g -278.937 414.878 16.0575 0.2006 re -f* -1 g -294.994 414.878 3.613 0.2006 re -f* -0 g -298.607 414.878 10.6381 0.2006 re -f* -1 g -309.245 414.878 6.6237 0.2006 re -f* -0 g -315.869 414.878 17.4626 0.2006 re -f* -1 g -333.332 414.878 3.0109 0.2006 re -f* -0 g -336.343 414.878 8.2294 0.2006 re -f* -1 g -344.572 414.878 1.0036 0.2006 re -f* -0 g -345.576 414.878 6.2224 0.2006 re -f* -1 g -351.798 414.878 4.6165 0.2006 re -f* -0.498 0 0.482 rg -356.415 414.878 7.2259 0.2006 re -f* -1 g -363.641 414.878 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 414.878 8.8317 0.2006 re -f* -1 g -376.085 414.878 3.0108 0.2006 re -f* -0.498 0 0.482 rg -379.096 414.878 8.2294 0.2006 re -f* -1 g -387.325 414.878 4.4159 0.2006 re -f* -0.498 0 0.482 rg -391.741 414.878 8.4302 0.2006 re -f* -1 g -400.171 414.878 3.2115 0.2006 re -f* -0.498 0 0.482 rg -403.383 414.878 9.8352 0.2006 re -f* -1 g -413.218 414.878 1.0036 0.2006 re -f* -0.498 0 0.482 rg -414.222 414.878 3.0108 0.2006 re -f* -0 g -250.435 415.079 20.8749 0.2006 re -f* -1 g -271.31 415.079 7.6273 0.2006 re -f* -0 g -278.937 415.079 16.0575 0.2006 re -f* -1 g -294.994 415.079 3.613 0.2006 re -f* -0 g -298.607 415.079 10.6381 0.2006 re -f* -1 g -309.245 415.079 6.4231 0.2006 re -f* -0 g -315.669 415.079 17.4625 0.2006 re -f* -1 g -333.131 415.079 3.0108 0.2006 re -f* -0 g -336.142 415.079 8.631 0.2006 re -f* -1 g -344.773 415.079 0.8028 0.2006 re -f* -0 g -345.576 415.079 6.2224 0.2006 re -f* -1 g -351.798 415.079 4.8172 0.2006 re -f* -0.498 0 0.482 rg -356.615 415.079 7.0252 0.2006 re -f* -1 g -363.641 415.079 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 415.079 8.8317 0.2006 re -f* -1 g -376.085 415.079 2.8101 0.2006 re -f* -0.498 0 0.482 rg -378.895 415.079 8.6309 0.2006 re -f* -1 g -387.526 415.079 4.2151 0.2006 re -f* -0.498 0 0.482 rg -391.741 415.079 8.2295 0.2006 re -f* -1 g -399.971 415.079 3.4122 0.2006 re -f* -0.498 0 0.482 rg -403.383 415.079 9.8352 0.2006 re -f* -1 g -413.218 415.079 1.0036 0.2006 re -f* -0.498 0 0.482 rg -414.222 415.079 3.0108 0.2006 re -f* -0 g -250.435 415.28 20.8749 0.2005 re -f* -1 g -271.31 415.28 7.6273 0.2005 re -f* -0 g -278.937 415.28 16.0575 0.2005 re -f* -1 g -294.994 415.28 3.613 0.2005 re -f* -0 g -298.607 415.28 10.6381 0.2005 re -f* -1 g -309.245 415.28 6.4231 0.2005 re -f* -0 g -315.669 415.28 17.2618 0.2005 re -f* -1 g -332.93 415.28 3.0108 0.2005 re -f* -0 g -335.941 415.28 15.8569 0.2005 re -f* -1 g -351.798 415.28 5.0179 0.2005 re -f* -0.498 0 0.482 rg -356.816 415.28 6.8245 0.2005 re -f* -1 g -363.641 415.28 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 415.28 8.631 0.2005 re -f* -1 g -375.884 415.28 3.0108 0.2005 re -f* -0.498 0 0.482 rg -378.895 415.28 8.6309 0.2005 re -f* -1 g -387.526 415.28 4.2151 0.2005 re -f* -0.498 0 0.482 rg -391.741 415.28 8.0288 0.2005 re -f* -1 g -399.77 415.28 3.4122 0.2005 re -f* -0.498 0 0.482 rg -403.182 415.28 10.2367 0.2005 re -f* -1 g -413.419 415.28 0.8028 0.2005 re -f* -0.498 0 0.482 rg -414.222 415.28 3.2116 0.2005 re -f* -0 g -250.435 415.48 20.8749 0.2006 re -f* -1 g -271.31 415.48 7.6273 0.2006 re -f* -0 g -278.937 415.48 16.0575 0.2006 re -f* -1 g -294.994 415.48 3.613 0.2006 re -f* -0 g -298.607 415.48 10.6381 0.2006 re -f* -1 g -309.245 415.48 6.2223 0.2006 re -f* -0 g -315.468 415.48 17.2619 0.2006 re -f* -1 g -332.73 415.48 3.2115 0.2006 re -f* -0 g -335.941 415.48 16.0575 0.2006 re -f* -1 g -351.999 415.48 4.8173 0.2006 re -f* -0.498 0 0.482 rg -356.816 415.48 6.8245 0.2006 re -f* -1 g -363.641 415.48 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 415.48 8.4303 0.2006 re -f* -1 g -375.684 415.48 3.2115 0.2006 re -f* -0.498 0 0.482 rg -378.895 415.48 8.8316 0.2006 re -f* -1 g -387.727 415.48 4.0144 0.2006 re -f* -0.498 0 0.482 rg -391.741 415.48 8.0288 0.2006 re -f* -1 g -399.77 415.48 3.4122 0.2006 re -f* -0.498 0 0.482 rg -403.182 415.48 10.2367 0.2006 re -f* -1 g -413.419 415.48 1.0036 0.2006 re -f* -0.498 0 0.482 rg -414.422 415.48 3.0108 0.2006 re -f* -0 g -250.435 415.681 20.8749 0.2005 re -f* -1 g -271.31 415.681 7.6273 0.2005 re -f* -0 g -278.937 415.681 16.0575 0.2005 re -f* -1 g -294.994 415.681 3.613 0.2005 re -f* -0 g -298.607 415.681 10.6381 0.2005 re -f* -1 g -309.245 415.681 6.2223 0.2005 re -f* -0 g -315.468 415.681 17.0612 0.2005 re -f* -1 g -332.529 415.681 3.2115 0.2005 re -f* -0 g -335.74 415.681 16.2582 0.2005 re -f* -1 g -351.999 415.681 5.018 0.2005 re -f* -0.498 0 0.482 rg -357.017 415.681 6.6238 0.2005 re -f* -1 g -363.641 415.681 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 415.681 8.4303 0.2005 re -f* -1 g -375.684 415.681 3.2115 0.2005 re -f* -0.498 0 0.482 rg -378.895 415.681 8.8316 0.2005 re -f* -1 g -387.727 415.681 4.0144 0.2005 re -f* -0.498 0 0.482 rg -391.741 415.681 7.828 0.2005 re -f* -1 g -399.569 415.681 3.613 0.2005 re -f* -0.498 0 0.482 rg -403.182 415.681 10.4374 0.2005 re -f* -1 g -413.62 415.681 0.8029 0.2005 re -f* -0.498 0 0.482 rg -414.422 415.681 3.0108 0.2005 re -f* -0 g -250.435 415.881 20.8749 0.2006 re -f* -1 g -271.31 415.881 7.6273 0.2006 re -f* -0 g -278.937 415.881 16.0575 0.2006 re -f* -1 g -294.994 415.881 3.613 0.2006 re -f* -0 g -298.607 415.881 10.6381 0.2006 re -f* -1 g -309.245 415.881 6.2223 0.2006 re -f* -0 g -315.468 415.881 16.8604 0.2006 re -f* -1 g -332.328 415.881 3.4123 0.2006 re -f* -0 g -335.74 415.881 16.2582 0.2006 re -f* -1 g -351.999 415.881 5.018 0.2006 re -f* -0.498 0 0.482 rg -357.017 415.881 6.6238 0.2006 re -f* -1 g -363.641 415.881 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 415.881 8.2295 0.2006 re -f* -1 g -375.483 415.881 3.2116 0.2006 re -f* -0.498 0 0.482 rg -378.695 415.881 9.0323 0.2006 re -f* -1 g -387.727 415.881 4.0144 0.2006 re -f* -0.498 0 0.482 rg -391.741 415.881 7.828 0.2006 re -f* -1 g -399.569 415.881 3.613 0.2006 re -f* -0.498 0 0.482 rg -403.182 415.881 10.4374 0.2006 re -f* -1 g -413.62 415.881 1.0036 0.2006 re -f* -0.498 0 0.482 rg -414.623 415.881 2.8101 0.2006 re -f* -0 g -250.435 416.082 20.8749 0.2006 re -f* -1 g -271.31 416.082 7.6273 0.2006 re -f* -0 g -278.937 416.082 16.0575 0.2006 re -f* -1 g -294.994 416.082 3.613 0.2006 re -f* -0 g -298.607 416.082 10.6381 0.2006 re -f* -1 g -309.245 416.082 6.2223 0.2006 re -f* -0 g -315.468 416.082 16.8604 0.2006 re -f* -1 g -332.328 416.082 3.2116 0.2006 re -f* -0 g -335.54 416.082 16.4589 0.2006 re -f* -1 g -351.999 416.082 5.2187 0.2006 re -f* -0.498 0 0.482 rg -357.217 416.082 6.4231 0.2006 re -f* -1 g -363.641 416.082 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 416.082 8.2295 0.2006 re -f* -1 g -375.483 416.082 3.2116 0.2006 re -f* -0.498 0 0.482 rg -378.695 416.082 9.0323 0.2006 re -f* -1 g -387.727 416.082 4.0144 0.2006 re -f* -0.498 0 0.482 rg -391.741 416.082 7.6273 0.2006 re -f* -1 g -399.368 416.082 3.613 0.2006 re -f* -0.498 0 0.482 rg -402.981 416.082 10.6381 0.2006 re -f* -1 g -413.62 416.082 1.0036 0.2006 re -f* -0.498 0 0.482 rg -414.623 416.082 2.8101 0.2006 re -f* -0 g -250.435 416.282 20.8749 0.2005 re -f* -1 g -271.31 416.282 7.6273 0.2005 re -f* -0 g -278.937 416.282 16.0575 0.2005 re -f* -1 g -294.994 416.282 3.613 0.2005 re -f* -0 g -298.607 416.282 10.6381 0.2005 re -f* -1 g -309.245 416.282 6.0216 0.2005 re -f* -0 g -315.267 416.282 16.8604 0.2005 re -f* -1 g -332.127 416.282 3.4123 0.2005 re -f* -0 g -335.54 416.282 16.6597 0.2005 re -f* -1 g -352.2 416.282 5.0179 0.2005 re -f* -0.498 0 0.482 rg -357.217 416.282 6.4231 0.2005 re -f* -1 g -363.641 416.282 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 416.282 8.0288 0.2005 re -f* -1 g -375.282 416.282 3.4123 0.2005 re -f* -0.498 0 0.482 rg -378.695 416.282 9.2331 0.2005 re -f* -1 g -387.928 416.282 3.8136 0.2005 re -f* -0.498 0 0.482 rg -391.741 416.282 7.6273 0.2005 re -f* -1 g -399.368 416.282 3.613 0.2005 re -f* -0.498 0 0.482 rg -402.981 416.282 10.8388 0.2005 re -f* -1 g -413.82 416.282 0.8029 0.2005 re -f* -0.498 0 0.482 rg -414.623 416.282 2.8101 0.2005 re -f* -0 g -250.435 416.483 20.8749 0.2005 re -f* -1 g -271.31 416.483 7.6273 0.2005 re -f* -0 g -278.937 416.483 16.0575 0.2005 re -f* -1 g -294.994 416.483 3.613 0.2005 re -f* -0 g -298.607 416.483 10.6381 0.2005 re -f* -1 g -309.245 416.483 6.0216 0.2005 re -f* -0 g -315.267 416.483 16.6597 0.2005 re -f* -1 g -331.927 416.483 3.613 0.2005 re -f* -0 g -335.54 416.483 16.6597 0.2005 re -f* -1 g -352.2 416.483 5.2187 0.2005 re -f* -0.498 0 0.482 rg -357.418 416.483 6.2223 0.2005 re -f* -1 g -363.641 416.483 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 416.483 8.0288 0.2005 re -f* -1 g -375.282 416.483 3.4123 0.2005 re -f* -0.498 0 0.482 rg -378.695 416.483 9.2331 0.2005 re -f* -1 g -387.928 416.483 3.8136 0.2005 re -f* -0.498 0 0.482 rg -391.741 416.483 7.4266 0.2005 re -f* -1 g -399.168 416.483 3.8137 0.2005 re -f* -0.498 0 0.482 rg -402.981 416.483 10.8388 0.2005 re -f* -1 g -413.82 416.483 0.2008 0.2005 re -f* -0.498 0 0.482 rg -414.021 416.483 3.4122 0.2005 re -f* -0 g -250.435 416.683 20.8749 0.2006 re -f* -1 g -271.31 416.683 7.6273 0.2006 re -f* -0 g -278.937 416.683 16.0575 0.2006 re -f* -1 g -294.994 416.683 3.613 0.2006 re -f* -0 g -298.607 416.683 10.6381 0.2006 re -f* -1 g -309.245 416.683 6.0216 0.2006 re -f* -0 g -315.267 416.683 16.6597 0.2006 re -f* -1 g -331.927 416.683 3.4123 0.2006 re -f* -0 g -335.339 416.683 16.8604 0.2006 re -f* -1 g -352.2 416.683 5.2187 0.2006 re -f* -0.498 0 0.482 rg -357.418 416.683 6.2223 0.2006 re -f* -1 g -363.641 416.683 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 416.683 7.8281 0.2006 re -f* -1 g -375.081 416.683 3.613 0.2006 re -f* -0.498 0 0.482 rg -378.695 416.683 9.2331 0.2006 re -f* -1 g -387.928 416.683 3.8136 0.2006 re -f* -0.498 0 0.482 rg -391.741 416.683 7.4266 0.2006 re -f* -1 g -399.168 416.683 3.8137 0.2006 re -f* -0.498 0 0.482 rg -402.981 416.683 14.4518 0.2006 re -f* -0 g -250.234 416.884 21.0756 0.2006 re -f* -1 g -271.31 416.884 7.6273 0.2006 re -f* -0 g -278.937 416.884 16.0575 0.2006 re -f* -1 g -294.994 416.884 3.613 0.2006 re -f* -0 g -298.607 416.884 10.6381 0.2006 re -f* -1 g -309.245 416.884 6.0216 0.2006 re -f* -0 g -315.267 416.884 16.459 0.2006 re -f* -1 g -331.726 416.884 3.613 0.2006 re -f* -0 g -335.339 416.884 16.8604 0.2006 re -f* -1 g -352.2 416.884 5.4194 0.2006 re -f* -0.498 0 0.482 rg -357.619 416.884 6.0216 0.2006 re -f* -1 g -363.641 416.884 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 416.884 7.8281 0.2006 re -f* -1 g -375.081 416.884 3.613 0.2006 re -f* -0.498 0 0.482 rg -378.695 416.884 9.2331 0.2006 re -f* -1 g -387.928 416.884 3.8136 0.2006 re -f* -0.498 0 0.482 rg -391.741 416.884 7.4266 0.2006 re -f* -1 g -399.168 416.884 3.8137 0.2006 re -f* -0.498 0 0.482 rg -402.981 416.884 14.4518 0.2006 re -f* -0 g -250.234 417.085 14.2511 0.2005 re -f* -1 g -264.485 417.085 25.8928 0.2005 re -f* -0 g -290.378 417.085 4.6165 0.2005 re -f* -1 g -294.994 417.085 3.613 0.2005 re -f* -0 g -298.607 417.085 10.6381 0.2005 re -f* -1 g -309.245 417.085 5.8209 0.2005 re -f* -0 g -315.066 417.085 16.6597 0.2005 re -f* -1 g -331.726 417.085 3.613 0.2005 re -f* -0 g -335.339 417.085 17.0611 0.2005 re -f* -1 g -352.4 417.085 5.2187 0.2005 re -f* -0.498 0 0.482 rg -357.619 417.085 6.0216 0.2005 re -f* -1 g -363.641 417.085 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 417.085 7.6274 0.2005 re -f* -1 g -374.881 417.085 3.6129 0.2005 re -f* -0.498 0 0.482 rg -378.494 417.085 9.4339 0.2005 re -f* -1 g -387.928 417.085 3.8136 0.2005 re -f* -0.498 0 0.482 rg -391.741 417.085 7.2259 0.2005 re -f* -1 g -398.967 417.085 3.8137 0.2005 re -f* -0.498 0 0.482 rg -402.781 417.085 14.6525 0.2005 re -f* -0 g -250.234 417.285 14.2511 0.2005 re -f* -1 g -264.485 417.285 25.8928 0.2005 re -f* -0 g -290.378 417.285 4.6165 0.2005 re -f* -1 g -294.994 417.285 3.613 0.2005 re -f* -0 g -298.607 417.285 10.6381 0.2005 re -f* -1 g -309.245 417.285 5.8209 0.2005 re -f* -0 g -315.066 417.285 16.459 0.2005 re -f* -1 g -331.525 417.285 3.6129 0.2005 re -f* -0 g -335.138 417.285 17.2619 0.2005 re -f* -1 g -352.4 417.285 5.4194 0.2005 re -f* -0.498 0 0.482 rg -357.82 417.285 5.8209 0.2005 re -f* -1 g -363.641 417.285 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 417.285 7.6274 0.2005 re -f* -1 g -374.881 417.285 3.6129 0.2005 re -f* -0.498 0 0.482 rg -378.494 417.285 9.6345 0.2005 re -f* -1 g -388.128 417.285 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 417.285 7.2259 0.2005 re -f* -1 g -398.967 417.285 3.8137 0.2005 re -f* -0.498 0 0.482 rg -402.781 417.285 14.8532 0.2005 re -f* -0 g -250.234 417.486 14.2511 0.2006 re -f* -1 g -264.485 417.486 25.8928 0.2006 re -f* -0 g -290.378 417.486 4.6165 0.2006 re -f* -1 g -294.994 417.486 3.613 0.2006 re -f* -0 g -298.607 417.486 10.6381 0.2006 re -f* -1 g -309.245 417.486 5.8209 0.2006 re -f* -0 g -315.066 417.486 16.459 0.2006 re -f* -1 g -331.525 417.486 3.6129 0.2006 re -f* -0 g -335.138 417.486 17.2619 0.2006 re -f* -1 g -352.4 417.486 5.4194 0.2006 re -f* -0.498 0 0.482 rg -357.82 417.486 5.8209 0.2006 re -f* -1 g -363.641 417.486 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 417.486 7.6274 0.2006 re -f* -1 g -374.881 417.486 3.6129 0.2006 re -f* -0.498 0 0.482 rg -378.494 417.486 9.6345 0.2006 re -f* -1 g -388.128 417.486 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 417.486 7.2259 0.2006 re -f* -1 g -398.967 417.486 3.8137 0.2006 re -f* -0.498 0 0.482 rg -402.781 417.486 14.8532 0.2006 re -f* -0 g -250.234 417.686 14.2511 0.2006 re -f* -1 g -264.485 417.686 25.8928 0.2006 re -f* -0 g -290.378 417.686 4.6165 0.2006 re -f* -1 g -294.994 417.686 3.613 0.2006 re -f* -0 g -298.607 417.686 10.6381 0.2006 re -f* -1 g -309.245 417.686 5.8209 0.2006 re -f* -0 g -315.066 417.686 16.2582 0.2006 re -f* -1 g -331.325 417.686 3.8137 0.2006 re -f* -0 g -335.138 417.686 17.2619 0.2006 re -f* -1 g -352.4 417.686 5.6201 0.2006 re -f* -0.498 0 0.482 rg -358.02 417.686 5.6202 0.2006 re -f* -1 g -363.641 417.686 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 417.686 7.4267 0.2006 re -f* -1 g -374.68 417.686 3.8136 0.2006 re -f* -0.498 0 0.482 rg -378.494 417.686 9.6345 0.2006 re -f* -1 g -388.128 417.686 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 417.686 7.0252 0.2006 re -f* -1 g -398.766 417.686 4.0144 0.2006 re -f* -0.498 0 0.482 rg -402.781 417.686 14.8532 0.2006 re -f* -0 g -250.234 417.887 14.2511 0.2006 re -f* -1 g -264.485 417.887 25.8928 0.2006 re -f* -0 g -290.378 417.887 4.6165 0.2006 re -f* -1 g -294.994 417.887 3.613 0.2006 re -f* -0 g -298.607 417.887 10.6381 0.2006 re -f* -1 g -309.245 417.887 5.6201 0.2006 re -f* -0 g -314.866 417.887 16.459 0.2006 re -f* -1 g -331.325 417.887 3.8137 0.2006 re -f* -0 g -335.138 417.887 17.2619 0.2006 re -f* -1 g -352.4 417.887 5.6201 0.2006 re -f* -0.498 0 0.482 rg -358.02 417.887 5.6202 0.2006 re -f* -1 g -363.641 417.887 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 417.887 7.4267 0.2006 re -f* -1 g -374.68 417.887 3.8136 0.2006 re -f* -0.498 0 0.482 rg -378.494 417.887 9.6345 0.2006 re -f* -1 g -388.128 417.887 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 417.887 7.0252 0.2006 re -f* -1 g -398.766 417.887 4.0144 0.2006 re -f* -0.498 0 0.482 rg -402.781 417.887 14.8532 0.2006 re -f* -0 g -250.234 418.087 14.2511 0.2006 re -f* -1 g -264.485 418.087 25.8928 0.2006 re -f* -0 g -290.378 418.087 4.6165 0.2006 re -f* -1 g -294.994 418.087 3.613 0.2006 re -f* -0 g -298.607 418.087 10.6381 0.2006 re -f* -1 g -309.245 418.087 5.6201 0.2006 re -f* -0 g -314.866 418.087 16.459 0.2006 re -f* -1 g -331.325 418.087 3.8137 0.2006 re -f* -0 g -335.138 418.087 17.4626 0.2006 re -f* -1 g -352.601 418.087 5.6201 0.2006 re -f* -0.498 0 0.482 rg -358.221 418.087 5.4195 0.2006 re -f* -1 g -363.641 418.087 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 418.087 7.4267 0.2006 re -f* -1 g -374.68 418.087 3.8136 0.2006 re -f* -0.498 0 0.482 rg -378.494 418.087 9.6345 0.2006 re -f* -1 g -388.128 418.087 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 418.087 7.0252 0.2006 re -f* -1 g -398.766 418.087 4.0144 0.2006 re -f* -0.498 0 0.482 rg -402.781 418.087 14.8532 0.2006 re -f* -0 g -250.234 418.288 14.2511 0.2005 re -f* -1 g -264.485 418.288 25.8928 0.2005 re -f* -0 g -290.378 418.288 4.6165 0.2005 re -f* -1 g -294.994 418.288 3.613 0.2005 re -f* -0 g -298.607 418.288 10.6381 0.2005 re -f* -1 g -309.245 418.288 5.6201 0.2005 re -f* -0 g -314.866 418.288 16.2583 0.2005 re -f* -1 g -331.124 418.288 4.0144 0.2005 re -f* -0 g -335.138 418.288 17.4626 0.2005 re -f* -1 g -352.601 418.288 5.6201 0.2005 re -f* -0.498 0 0.482 rg -358.221 418.288 5.4195 0.2005 re -f* -1 g -363.641 418.288 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 418.288 7.2259 0.2005 re -f* -1 g -374.479 418.288 4.0144 0.2005 re -f* -0.498 0 0.482 rg -378.494 418.288 9.6345 0.2005 re -f* -1 g -388.128 418.288 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 418.288 7.0252 0.2005 re -f* -1 g -398.766 418.288 4.0144 0.2005 re -f* -0.498 0 0.482 rg -402.781 418.288 14.8532 0.2005 re -f* -0 g -250.234 418.489 14.2511 0.2005 re -f* -1 g -264.485 418.489 25.8928 0.2005 re -f* -0 g -290.378 418.489 4.6165 0.2005 re -f* -1 g -294.994 418.489 3.613 0.2005 re -f* -0 g -298.607 418.489 10.8389 0.2005 re -f* -1 g -309.446 418.489 5.4193 0.2005 re -f* -0 g -314.866 418.489 16.2583 0.2005 re -f* -1 g -331.124 418.489 3.8137 0.2005 re -f* -0 g -334.938 418.489 17.6633 0.2005 re -f* -1 g -352.601 418.489 5.6201 0.2005 re -f* -0.498 0 0.482 rg -358.221 418.489 5.4195 0.2005 re -f* -1 g -363.641 418.489 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 418.489 7.2259 0.2005 re -f* -1 g -374.479 418.489 4.0144 0.2005 re -f* -0.498 0 0.482 rg -378.494 418.489 9.6345 0.2005 re -f* -1 g -388.128 418.489 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 418.489 7.0252 0.2005 re -f* -1 g -398.766 418.489 4.0144 0.2005 re -f* -0.498 0 0.482 rg -402.781 418.489 14.8532 0.2005 re -f* -0 g -250.234 418.689 14.2511 0.2006 re -f* -1 g -264.485 418.689 25.8928 0.2006 re -f* -0 g -290.378 418.689 4.6165 0.2006 re -f* -1 g -294.994 418.689 3.613 0.2006 re -f* -0 g -298.607 418.689 10.8389 0.2006 re -f* -1 g -309.446 418.689 5.4193 0.2006 re -f* -0 g -314.866 418.689 16.2583 0.2006 re -f* -1 g -331.124 418.689 3.8137 0.2006 re -f* -0 g -334.938 418.689 17.6633 0.2006 re -f* -1 g -352.601 418.689 5.8209 0.2006 re -f* -0.498 0 0.482 rg -358.422 418.689 5.2187 0.2006 re -f* -1 g -363.641 418.689 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 418.689 7.2259 0.2006 re -f* -1 g -374.479 418.689 4.0144 0.2006 re -f* -0.498 0 0.482 rg -378.494 418.689 9.6345 0.2006 re -f* -1 g -388.128 418.689 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 418.689 6.8244 0.2006 re -f* -1 g -398.566 418.689 4.2152 0.2006 re -f* -0.498 0 0.482 rg -402.781 418.689 14.8532 0.2006 re -f* -0 g -250.234 418.89 14.2511 0.2006 re -f* -1 g -264.485 418.89 25.8928 0.2006 re -f* -0 g -290.378 418.89 4.6165 0.2006 re -f* -1 g -294.994 418.89 3.613 0.2006 re -f* -0 g -298.607 418.89 10.8389 0.2006 re -f* -1 g -309.446 418.89 5.4193 0.2006 re -f* -0 g -314.866 418.89 16.0576 0.2006 re -f* -1 g -330.923 418.89 4.0144 0.2006 re -f* -0 g -334.938 418.89 17.6633 0.2006 re -f* -1 g -352.601 418.89 5.8209 0.2006 re -f* -0.498 0 0.482 rg -358.422 418.89 5.2187 0.2006 re -f* -1 g -363.641 418.89 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 418.89 7.2259 0.2006 re -f* -1 g -374.479 418.89 4.0144 0.2006 re -f* -0.498 0 0.482 rg -378.494 418.89 9.6345 0.2006 re -f* -1 g -388.128 418.89 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 418.89 6.8244 0.2006 re -f* -1 g -398.566 418.89 4.2152 0.2006 re -f* -0.498 0 0.482 rg -402.781 418.89 14.8532 0.2006 re -f* -0 g -250.234 419.09 14.2511 0.2005 re -f* -1 g -264.485 419.09 25.8928 0.2005 re -f* -0 g -290.378 419.09 4.6165 0.2005 re -f* -1 g -294.994 419.09 3.613 0.2005 re -f* -0 g -298.607 419.09 10.8389 0.2005 re -f* -1 g -309.446 419.09 5.4193 0.2005 re -f* -0 g -314.866 419.09 16.0576 0.2005 re -f* -1 g -330.923 419.09 4.0144 0.2005 re -f* -0 g -334.938 419.09 17.6633 0.2005 re -f* -1 g -352.601 419.09 5.8209 0.2005 re -f* -0.498 0 0.482 rg -358.422 419.09 5.2187 0.2005 re -f* -1 g -363.641 419.09 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 419.09 7.2259 0.2005 re -f* -1 g -374.479 419.09 4.0144 0.2005 re -f* -0.498 0 0.482 rg -378.494 419.09 9.6345 0.2005 re -f* -1 g -388.128 419.09 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 419.09 6.8244 0.2005 re -f* -1 g -398.566 419.09 4.2152 0.2005 re -f* -0.498 0 0.482 rg -402.781 419.09 14.8532 0.2005 re -f* -0 g -250.234 419.291 14.2511 0.2006 re -f* -1 g -264.485 419.291 25.8928 0.2006 re -f* -0 g -290.378 419.291 4.6165 0.2006 re -f* -1 g -294.994 419.291 3.613 0.2006 re -f* -0 g -298.607 419.291 10.8389 0.2006 re -f* -1 g -309.446 419.291 5.4193 0.2006 re -f* -0 g -314.866 419.291 16.0576 0.2006 re -f* -1 g -330.923 419.291 4.0144 0.2006 re -f* -0 g -334.938 419.291 17.6633 0.2006 re -f* -1 g -352.601 419.291 6.0216 0.2006 re -f* -0.498 0 0.482 rg -358.623 419.291 5.018 0.2006 re -f* -1 g -363.641 419.291 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 419.291 7.0252 0.2006 re -f* -1 g -374.279 419.291 4.2151 0.2006 re -f* -0.498 0 0.482 rg -378.494 419.291 9.6345 0.2006 re -f* -1 g -388.128 419.291 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 419.291 6.8244 0.2006 re -f* -1 g -398.566 419.291 4.2152 0.2006 re -f* -0.498 0 0.482 rg -402.781 419.291 14.8532 0.2006 re -f* -0 g -250.234 419.491 14.2511 0.2005 re -f* -1 g -264.485 419.491 25.8928 0.2005 re -f* -0 g -290.378 419.491 4.6165 0.2005 re -f* -1 g -294.994 419.491 3.613 0.2005 re -f* -0 g -298.607 419.491 10.8389 0.2005 re -f* -1 g -309.446 419.491 5.2187 0.2005 re -f* -0 g -314.665 419.491 16.2582 0.2005 re -f* -1 g -330.923 419.491 4.0144 0.2005 re -f* -0 g -334.938 419.491 17.6633 0.2005 re -f* -1 g -352.601 419.491 6.0216 0.2005 re -f* -0.498 0 0.482 rg -358.623 419.491 5.018 0.2005 re -f* -1 g -363.641 419.491 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 419.491 7.0252 0.2005 re -f* -1 g -374.279 419.491 4.2151 0.2005 re -f* -0.498 0 0.482 rg -378.494 419.491 9.6345 0.2005 re -f* -1 g -388.128 419.491 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 419.491 6.8244 0.2005 re -f* -1 g -398.566 419.491 4.2152 0.2005 re -f* -0.498 0 0.482 rg -402.781 419.491 14.8532 0.2005 re -f* -0 g -250.234 419.692 14.2511 0.2006 re -f* -1 g -264.485 419.692 25.8928 0.2006 re -f* -0 g -290.378 419.692 4.6165 0.2006 re -f* -1 g -294.994 419.692 3.613 0.2006 re -f* -0 g -298.607 419.692 10.8389 0.2006 re -f* -1 g -309.446 419.692 5.2187 0.2006 re -f* -0 g -314.665 419.692 16.2582 0.2006 re -f* -1 g -330.923 419.692 4.0144 0.2006 re -f* -0 g -334.938 419.692 17.6633 0.2006 re -f* -1 g -352.601 419.692 6.0216 0.2006 re -f* -0.498 0 0.482 rg -358.623 419.692 5.018 0.2006 re -f* -1 g -363.641 419.692 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 419.692 7.0252 0.2006 re -f* -1 g -374.279 419.692 4.2151 0.2006 re -f* -0.498 0 0.482 rg -378.494 419.692 9.6345 0.2006 re -f* -1 g -388.128 419.692 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 419.692 6.8244 0.2006 re -f* -1 g -398.566 419.692 4.2152 0.2006 re -f* -0.498 0 0.482 rg -402.781 419.692 14.8532 0.2006 re -f* -0 g -250.234 419.892 14.2511 0.2005 re -f* -1 g -264.485 419.892 6.6237 0.2005 re -f* -0 g -271.109 419.892 0.2008 0.2005 re -f* -1 g -271.31 419.892 7.6273 0.2005 re -f* -0 g -278.937 419.892 0.2007 0.2005 re -f* -1 g -279.138 419.892 11.2403 0.2005 re -f* -0 g -290.378 419.892 4.6165 0.2005 re -f* -1 g -294.994 419.892 3.613 0.2005 re -f* -0 g -298.607 419.892 10.8389 0.2005 re -f* -1 g -309.446 419.892 5.2187 0.2005 re -f* -0 g -314.665 419.892 16.0575 0.2005 re -f* -1 g -330.722 419.892 4.2151 0.2005 re -f* -0 g -334.938 419.892 17.6633 0.2005 re -f* -1 g -352.601 419.892 6.2223 0.2005 re -f* -0.498 0 0.482 rg -358.823 419.892 4.8173 0.2005 re -f* -1 g -363.641 419.892 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 419.892 7.0252 0.2005 re -f* -1 g -374.279 419.892 4.2151 0.2005 re -f* -0.498 0 0.482 rg -378.494 419.892 9.6345 0.2005 re -f* -1 g -388.128 419.892 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 419.892 6.8244 0.2005 re -f* -1 g -398.566 419.892 4.2152 0.2005 re -f* -0.498 0 0.482 rg -402.781 419.892 14.8532 0.2005 re -f* -0 g -250.234 420.093 21.0756 0.2006 re -f* -1 g -271.31 420.093 7.6273 0.2006 re -f* -0 g -278.937 420.093 16.0575 0.2006 re -f* -1 g -294.994 420.093 3.613 0.2006 re -f* -0 g -298.607 420.093 11.0396 0.2006 re -f* -1 g -309.647 420.093 5.018 0.2006 re -f* -0 g -314.665 420.093 16.0575 0.2006 re -f* -1 g -330.722 420.093 4.2151 0.2006 re -f* -0 g -334.938 420.093 17.6633 0.2006 re -f* -1 g -352.601 420.093 6.2223 0.2006 re -f* -0.498 0 0.482 rg -358.823 420.093 4.8173 0.2006 re -f* -1 g -363.641 420.093 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 420.093 7.0252 0.2006 re -f* -1 g -374.279 420.093 4.2151 0.2006 re -f* -0.498 0 0.482 rg -378.494 420.093 9.6345 0.2006 re -f* -1 g -388.128 420.093 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 420.093 6.8244 0.2006 re -f* -1 g -398.566 420.093 4.2152 0.2006 re -f* -0.498 0 0.482 rg -402.781 420.093 14.8532 0.2006 re -f* -0 g -250.234 420.294 21.0756 0.2005 re -f* -1 g -271.31 420.294 7.6273 0.2005 re -f* -0 g -278.937 420.294 16.0575 0.2005 re -f* -1 g -294.994 420.294 3.613 0.2005 re -f* -0 g -298.607 420.294 11.0396 0.2005 re -f* -1 g -309.647 420.294 5.018 0.2005 re -f* -0 g -314.665 420.294 16.0575 0.2005 re -f* -1 g -330.722 420.294 4.2151 0.2005 re -f* -0 g -334.938 420.294 17.8641 0.2005 re -f* -1 g -352.802 420.294 6.0215 0.2005 re -f* -0.498 0 0.482 rg -358.823 420.294 4.8173 0.2005 re -f* -1 g -363.641 420.294 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 420.294 7.0252 0.2005 re -f* -1 g -374.279 420.294 4.2151 0.2005 re -f* -0.498 0 0.482 rg -378.494 420.294 9.6345 0.2005 re -f* -1 g -388.128 420.294 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 420.294 6.8244 0.2005 re -f* -1 g -398.566 420.294 4.2152 0.2005 re -f* -0.498 0 0.482 rg -402.781 420.294 14.8532 0.2005 re -f* -0 g -250.234 420.494 21.0756 0.2006 re -f* -1 g -271.31 420.494 7.6273 0.2006 re -f* -0 g -278.937 420.494 16.0575 0.2006 re -f* -1 g -294.994 420.494 3.613 0.2006 re -f* -0 g -298.607 420.494 11.0396 0.2006 re -f* -1 g -309.647 420.494 5.018 0.2006 re -f* -0 g -314.665 420.494 16.0575 0.2006 re -f* -1 g -330.722 420.494 4.2151 0.2006 re -f* -0 g -334.938 420.494 17.8641 0.2006 re -f* -1 g -352.802 420.494 6.0215 0.2006 re -f* -0.498 0 0.482 rg -358.823 420.494 4.8173 0.2006 re -f* -1 g -363.641 420.494 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 420.494 7.0252 0.2006 re -f* -1 g -374.279 420.494 4.2151 0.2006 re -f* -0.498 0 0.482 rg -378.494 420.494 9.6345 0.2006 re -f* -1 g -388.128 420.494 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 420.494 6.8244 0.2006 re -f* -1 g -398.566 420.494 4.2152 0.2006 re -f* -0.498 0 0.482 rg -402.781 420.494 14.8532 0.2006 re -f* -0 g -250.234 420.695 21.0756 0.2006 re -f* -1 g -271.31 420.695 7.6273 0.2006 re -f* -0 g -278.937 420.695 16.0575 0.2006 re -f* -1 g -294.994 420.695 3.613 0.2006 re -f* -0 g -298.607 420.695 11.0396 0.2006 re -f* -1 g -309.647 420.695 5.018 0.2006 re -f* -0 g -314.665 420.695 16.0575 0.2006 re -f* -1 g -330.722 420.695 4.2151 0.2006 re -f* -0 g -334.938 420.695 17.8641 0.2006 re -f* -1 g -352.802 420.695 6.2222 0.2006 re -f* -0.498 0 0.482 rg -359.024 420.695 4.6166 0.2006 re -f* -1 g -363.641 420.695 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 420.695 7.0252 0.2006 re -f* -1 g -374.279 420.695 4.2151 0.2006 re -f* -0.498 0 0.482 rg -378.494 420.695 9.6345 0.2006 re -f* -1 g -388.128 420.695 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 420.695 6.8244 0.2006 re -f* -1 g -398.566 420.695 4.2152 0.2006 re -f* -0.498 0 0.482 rg -402.781 420.695 14.8532 0.2006 re -f* -0 g -250.234 420.895 21.0756 0.2006 re -f* -1 g -271.31 420.895 7.6273 0.2006 re -f* -0 g -278.937 420.895 16.0575 0.2006 re -f* -1 g -294.994 420.895 3.613 0.2006 re -f* -0 g -298.607 420.895 11.0396 0.2006 re -f* -1 g -309.647 420.895 5.018 0.2006 re -f* -0 g -314.665 420.895 16.0575 0.2006 re -f* -1 g -330.722 420.895 4.2151 0.2006 re -f* -0 g -334.938 420.895 17.8641 0.2006 re -f* -1 g -352.802 420.895 6.2222 0.2006 re -f* -0.498 0 0.482 rg -359.024 420.895 4.6166 0.2006 re -f* -1 g -363.641 420.895 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 420.895 7.0252 0.2006 re -f* -1 g -374.279 420.895 4.2151 0.2006 re -f* -0.498 0 0.482 rg -378.494 420.895 9.6345 0.2006 re -f* -1 g -388.128 420.895 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 420.895 6.8244 0.2006 re -f* -1 g -398.566 420.895 4.2152 0.2006 re -f* -0.498 0 0.482 rg -402.781 420.895 14.8532 0.2006 re -f* -0 g -250.234 421.096 21.0756 0.2005 re -f* -1 g -271.31 421.096 7.6273 0.2005 re -f* -0 g -278.937 421.096 16.0575 0.2005 re -f* -1 g -294.994 421.096 3.613 0.2005 re -f* -0 g -298.607 421.096 11.2403 0.2005 re -f* -1 g -309.848 421.096 4.8173 0.2005 re -f* -0 g -314.665 421.096 16.0575 0.2005 re -f* -1 g -330.722 421.096 4.2151 0.2005 re -f* -0 g -334.938 421.096 17.8641 0.2005 re -f* -1 g -352.802 421.096 6.2222 0.2005 re -f* -0.498 0 0.482 rg -359.024 421.096 4.6166 0.2005 re -f* -1 g -363.641 421.096 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 421.096 7.0252 0.2005 re -f* -1 g -374.279 421.096 4.2151 0.2005 re -f* -0.498 0 0.482 rg -378.494 421.096 9.6345 0.2005 re -f* -1 g -388.128 421.096 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 421.096 6.8244 0.2005 re -f* -1 g -398.566 421.096 4.2152 0.2005 re -f* -0.498 0 0.482 rg -402.781 421.096 14.8532 0.2005 re -f* -0 g -250.234 421.296 21.0756 0.2005 re -f* -1 g -271.31 421.296 7.6273 0.2005 re -f* -0 g -278.937 421.296 16.0575 0.2005 re -f* -1 g -294.994 421.296 3.613 0.2005 re -f* -0 g -298.607 421.296 11.2403 0.2005 re -f* -1 g -309.848 421.296 4.8173 0.2005 re -f* -0 g -314.665 421.296 16.0575 0.2005 re -f* -1 g -330.722 421.296 4.2151 0.2005 re -f* -0 g -334.938 421.296 17.6633 0.2005 re -f* -1 g -352.601 421.296 6.423 0.2005 re -f* -0.498 0 0.482 rg -359.024 421.296 4.6166 0.2005 re -f* -1 g -363.641 421.296 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 421.296 7.0252 0.2005 re -f* -1 g -374.279 421.296 4.2151 0.2005 re -f* -0.498 0 0.482 rg -378.494 421.296 9.6345 0.2005 re -f* -1 g -388.128 421.296 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 421.296 6.8244 0.2005 re -f* -1 g -398.566 421.296 4.2152 0.2005 re -f* -0.498 0 0.482 rg -402.781 421.296 14.8532 0.2005 re -f* -0 g -250.234 421.497 21.0756 0.2006 re -f* -1 g -271.31 421.497 7.6273 0.2006 re -f* -0 g -278.937 421.497 16.0575 0.2006 re -f* -1 g -294.994 421.497 3.613 0.2006 re -f* -0 g -298.607 421.497 11.2403 0.2006 re -f* -1 g -309.848 421.497 4.8173 0.2006 re -f* -0 g -314.665 421.497 16.0575 0.2006 re -f* -1 g -330.722 421.497 4.2151 0.2006 re -f* -0 g -334.938 421.497 17.6633 0.2006 re -f* -1 g -352.601 421.497 6.6237 0.2006 re -f* -0.498 0 0.482 rg -359.225 421.497 4.4159 0.2006 re -f* -1 g -363.641 421.497 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 421.497 7.0252 0.2006 re -f* -1 g -374.279 421.497 4.2151 0.2006 re -f* -0.498 0 0.482 rg -378.494 421.497 9.6345 0.2006 re -f* -1 g -388.128 421.497 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 421.497 6.8244 0.2006 re -f* -1 g -398.566 421.497 4.2152 0.2006 re -f* -0.498 0 0.482 rg -402.781 421.497 14.8532 0.2006 re -f* -0 g -250.234 421.697 21.0756 0.2006 re -f* -1 g -271.31 421.697 7.6273 0.2006 re -f* -0 g -278.937 421.697 16.0575 0.2006 re -f* -1 g -294.994 421.697 3.613 0.2006 re -f* -0 g -298.607 421.697 11.2403 0.2006 re -f* -1 g -309.848 421.697 4.8173 0.2006 re -f* -0 g -314.665 421.697 16.0575 0.2006 re -f* -1 g -330.722 421.697 4.2151 0.2006 re -f* -0 g -334.938 421.697 17.6633 0.2006 re -f* -1 g -352.601 421.697 6.6237 0.2006 re -f* -0.498 0 0.482 rg -359.225 421.697 4.4159 0.2006 re -f* -1 g -363.641 421.697 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 421.697 7.0252 0.2006 re -f* -1 g -374.279 421.697 4.2151 0.2006 re -f* -0.498 0 0.482 rg -378.494 421.697 9.6345 0.2006 re -f* -1 g -388.128 421.697 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 421.697 6.8244 0.2006 re -f* -1 g -398.566 421.697 4.2152 0.2006 re -f* -0.498 0 0.482 rg -402.781 421.697 12.0431 0.2006 re -f* -1 g -414.824 421.697 0.2008 0.2006 re -f* -0.498 0 0.482 rg -415.025 421.697 2.6093 0.2006 re -f* -0 g -250.234 421.898 21.0756 0.2005 re -f* -1 g -271.31 421.898 7.6273 0.2005 re -f* -0 g -278.937 421.898 16.0575 0.2005 re -f* -1 g -294.994 421.898 3.613 0.2005 re -f* -0 g -298.607 421.898 11.441 0.2005 re -f* -1 g -310.048 421.898 4.6166 0.2005 re -f* -0 g -314.665 421.898 16.0575 0.2005 re -f* -1 g -330.722 421.898 4.2151 0.2005 re -f* -0 g -334.938 421.898 17.6633 0.2005 re -f* -1 g -352.601 421.898 6.6237 0.2005 re -f* -0.498 0 0.482 rg -359.225 421.898 4.4159 0.2005 re -f* -1 g -363.641 421.898 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 421.898 7.2259 0.2005 re -f* -1 g -374.479 421.898 4.0144 0.2005 re -f* -0.498 0 0.482 rg -378.494 421.898 9.6345 0.2005 re -f* -1 g -388.128 421.898 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 421.898 6.8244 0.2005 re -f* -1 g -398.566 421.898 16.4591 0.2005 re -f* -0.498 0 0.482 rg -415.025 421.898 2.6093 0.2005 re -f* -0 g -250.234 422.099 21.0756 0.2006 re -f* -1 g -271.31 422.099 7.6273 0.2006 re -f* -0 g -278.937 422.099 16.0575 0.2006 re -f* -1 g -294.994 422.099 3.613 0.2006 re -f* -0 g -298.607 422.099 11.441 0.2006 re -f* -1 g -310.048 422.099 4.6166 0.2006 re -f* -0 g -314.665 422.099 16.0575 0.2006 re -f* -1 g -330.722 422.099 4.2151 0.2006 re -f* -0 g -334.938 422.099 17.6633 0.2006 re -f* -1 g -352.601 422.099 6.6237 0.2006 re -f* -0.498 0 0.482 rg -359.225 422.099 4.4159 0.2006 re -f* -1 g -363.641 422.099 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 422.099 7.2259 0.2006 re -f* -1 g -374.479 422.099 4.0144 0.2006 re -f* -0.498 0 0.482 rg -378.494 422.099 9.6345 0.2006 re -f* -1 g -388.128 422.099 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 422.099 7.0252 0.2006 re -f* -1 g -398.766 422.099 16.2583 0.2006 re -f* -0.498 0 0.482 rg -415.025 422.099 2.6093 0.2006 re -f* -0 g -250.234 422.299 21.0756 0.2005 re -f* -1 g -271.31 422.299 7.6273 0.2005 re -f* -0 g -278.937 422.299 16.0575 0.2005 re -f* -1 g -294.994 422.299 3.613 0.2005 re -f* -0 g -298.607 422.299 11.441 0.2005 re -f* -1 g -310.048 422.299 4.6166 0.2005 re -f* -0 g -314.665 422.299 16.0575 0.2005 re -f* -1 g -330.722 422.299 4.2151 0.2005 re -f* -0 g -334.938 422.299 17.6633 0.2005 re -f* -1 g -352.601 422.299 6.8245 0.2005 re -f* -0.498 0 0.482 rg -359.425 422.299 4.2151 0.2005 re -f* -1 g -363.641 422.299 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 422.299 7.2259 0.2005 re -f* -1 g -374.479 422.299 4.0144 0.2005 re -f* -0.498 0 0.482 rg -378.494 422.299 9.6345 0.2005 re -f* -1 g -388.128 422.299 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 422.299 7.0252 0.2005 re -f* -1 g -398.766 422.299 16.2583 0.2005 re -f* -0.498 0 0.482 rg -415.025 422.299 2.4086 0.2005 re -f* -0 g -250.234 422.5 21.0756 0.2006 re -f* -1 g -271.31 422.5 7.6273 0.2006 re -f* -0 g -278.937 422.5 16.0575 0.2006 re -f* -1 g -294.994 422.5 3.613 0.2006 re -f* -0 g -298.607 422.5 11.441 0.2006 re -f* -1 g -310.048 422.5 4.6166 0.2006 re -f* -0 g -314.665 422.5 16.0575 0.2006 re -f* -1 g -330.722 422.5 4.2151 0.2006 re -f* -0 g -334.938 422.5 17.6633 0.2006 re -f* -1 g -352.601 422.5 6.8245 0.2006 re -f* -0.498 0 0.482 rg -359.425 422.5 4.2151 0.2006 re -f* -1 g -363.641 422.5 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 422.5 7.2259 0.2006 re -f* -1 g -374.479 422.5 4.0144 0.2006 re -f* -0.498 0 0.482 rg -378.494 422.5 9.6345 0.2006 re -f* -1 g -388.128 422.5 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 422.5 7.0252 0.2006 re -f* -1 g -398.766 422.5 4.0144 0.2006 re -f* -0.498 0 0.482 rg -402.781 422.5 8.0287 0.2006 re -f* -1 g -410.81 422.5 4.2152 0.2006 re -f* -0.498 0 0.482 rg -415.025 422.5 2.4086 0.2006 re -f* -0 g -250.234 422.7 21.0756 0.2006 re -f* -1 g -271.31 422.7 7.6273 0.2006 re -f* -0 g -278.937 422.7 16.0575 0.2006 re -f* -1 g -294.994 422.7 3.613 0.2006 re -f* -0 g -298.607 422.7 11.6417 0.2006 re -f* -1 g -310.249 422.7 4.4159 0.2006 re -f* -0 g -314.665 422.7 16.0575 0.2006 re -f* -1 g -330.722 422.7 4.2151 0.2006 re -f* -0 g -334.938 422.7 17.6633 0.2006 re -f* -1 g -352.601 422.7 6.8245 0.2006 re -f* -0.498 0 0.482 rg -359.425 422.7 4.2151 0.2006 re -f* -1 g -363.641 422.7 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 422.7 7.2259 0.2006 re -f* -1 g -374.479 422.7 4.0144 0.2006 re -f* -0.498 0 0.482 rg -378.494 422.7 9.6345 0.2006 re -f* -1 g -388.128 422.7 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 422.7 7.0252 0.2006 re -f* -1 g -398.766 422.7 4.0144 0.2006 re -f* -0.498 0 0.482 rg -402.781 422.7 8.0287 0.2006 re -f* -1 g -410.81 422.7 4.2152 0.2006 re -f* -0.498 0 0.482 rg -415.025 422.7 2.4086 0.2006 re -f* -0 g -250.435 422.901 20.8749 0.2005 re -f* -1 g -271.31 422.901 7.6273 0.2005 re -f* -0 g -278.937 422.901 16.0575 0.2005 re -f* -1 g -294.994 422.901 3.613 0.2005 re -f* -0 g -298.607 422.901 11.6417 0.2005 re -f* -1 g -310.249 422.901 16.6597 0.2005 re -f* -0 g -326.909 422.901 4.0144 0.2005 re -f* -1 g -330.923 422.901 4.0144 0.2005 re -f* -0 g -334.938 422.901 12.0431 0.2005 re -f* -1 g -346.981 422.901 0.2008 0.2005 re -f* -0 g -347.181 422.901 5.4194 0.2005 re -f* -1 g -352.601 422.901 6.8245 0.2005 re -f* -0.498 0 0.482 rg -359.425 422.901 4.2151 0.2005 re -f* -1 g -363.641 422.901 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 422.901 7.4267 0.2005 re -f* -1 g -374.68 422.901 3.8136 0.2005 re -f* -0.498 0 0.482 rg -378.494 422.901 9.6345 0.2005 re -f* -1 g -388.128 422.901 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 422.901 7.2259 0.2005 re -f* -1 g -398.967 422.901 3.8137 0.2005 re -f* -0.498 0 0.482 rg -402.781 422.901 8.0287 0.2005 re -f* -1 g -410.81 422.901 4.2152 0.2005 re -f* -0.498 0 0.482 rg -415.025 422.901 2.4086 0.2005 re -f* -0 g -250.435 423.101 20.8749 0.2006 re -f* -1 g -271.31 423.101 7.6273 0.2006 re -f* -0 g -278.937 423.101 16.0575 0.2006 re -f* -1 g -294.994 423.101 3.613 0.2006 re -f* -0 g -298.607 423.101 11.6417 0.2006 re -f* -1 g -310.249 423.101 16.6597 0.2006 re -f* -0 g -326.909 423.101 4.0144 0.2006 re -f* -1 g -330.923 423.101 16.2583 0.2006 re -f* -0 g -347.181 423.101 5.4194 0.2006 re -f* -1 g -352.601 423.101 6.8245 0.2006 re -f* -0.498 0 0.482 rg -359.425 423.101 4.2151 0.2006 re -f* -1 g -363.641 423.101 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 423.101 7.4267 0.2006 re -f* -1 g -374.68 423.101 3.8136 0.2006 re -f* -0.498 0 0.482 rg -378.494 423.101 9.6345 0.2006 re -f* -1 g -388.128 423.101 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 423.101 7.2259 0.2006 re -f* -1 g -398.967 423.101 3.8137 0.2006 re -f* -0.498 0 0.482 rg -402.781 423.101 8.0287 0.2006 re -f* -1 g -410.81 423.101 4.0144 0.2006 re -f* -0.498 0 0.482 rg -414.824 423.101 2.6094 0.2006 re -f* -0 g -250.435 423.302 20.8749 0.2005 re -f* -1 g -271.31 423.302 7.6273 0.2005 re -f* -0 g -278.937 423.302 16.0575 0.2005 re -f* -1 g -294.994 423.302 3.613 0.2005 re -f* -0 g -298.607 423.302 11.8425 0.2005 re -f* -1 g -310.45 423.302 4.2151 0.2005 re -f* -0 g -314.665 423.302 8.4302 0.2005 re -f* -1 g -323.095 423.302 3.8136 0.2005 re -f* -0 g -326.909 423.302 4.0144 0.2005 re -f* -1 g -330.923 423.302 16.2583 0.2005 re -f* -0 g -347.181 423.302 5.4194 0.2005 re -f* -1 g -352.601 423.302 6.8245 0.2005 re -f* -0.498 0 0.482 rg -359.425 423.302 4.2151 0.2005 re -f* -1 g -363.641 423.302 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 423.302 7.4267 0.2005 re -f* -1 g -374.68 423.302 3.8136 0.2005 re -f* -0.498 0 0.482 rg -378.494 423.302 9.6345 0.2005 re -f* -1 g -388.128 423.302 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 423.302 7.2259 0.2005 re -f* -1 g -398.967 423.302 3.8137 0.2005 re -f* -0.498 0 0.482 rg -402.781 423.302 8.0287 0.2005 re -f* -1 g -410.81 423.302 4.0144 0.2005 re -f* -0.498 0 0.482 rg -414.824 423.302 2.6094 0.2005 re -f* -0 g -250.435 423.502 20.8749 0.2006 re -f* -1 g -271.31 423.502 7.6273 0.2006 re -f* -0 g -278.937 423.502 16.0575 0.2006 re -f* -1 g -294.994 423.502 3.613 0.2006 re -f* -0 g -298.607 423.502 11.8425 0.2006 re -f* -1 g -310.45 423.502 4.4157 0.2006 re -f* -0 g -314.866 423.502 8.2296 0.2006 re -f* -1 g -323.095 423.502 3.8136 0.2006 re -f* -0 g -326.909 423.502 4.0144 0.2006 re -f* -1 g -330.923 423.502 16.2583 0.2006 re -f* -0 g -347.181 423.502 5.2187 0.2006 re -f* -1 g -352.4 423.502 7.0252 0.2006 re -f* -0.498 0 0.482 rg -359.425 423.502 4.2151 0.2006 re -f* -1 g -363.641 423.502 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 423.502 7.4267 0.2006 re -f* -1 g -374.68 423.502 3.8136 0.2006 re -f* -0.498 0 0.482 rg -378.494 423.502 9.6345 0.2006 re -f* -1 g -388.128 423.502 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 423.502 7.4266 0.2006 re -f* -1 g -399.168 423.502 3.613 0.2006 re -f* -0.498 0 0.482 rg -402.781 423.502 8.0287 0.2006 re -f* -1 g -410.81 423.502 4.0144 0.2006 re -f* -0.498 0 0.482 rg -414.824 423.502 2.6094 0.2006 re -f* -0 g -250.435 423.703 20.8749 0.2006 re -f* -1 g -271.31 423.703 7.6273 0.2006 re -f* -0 g -278.937 423.703 16.0575 0.2006 re -f* -1 g -294.994 423.703 3.613 0.2006 re -f* -0 g -298.607 423.703 12.0432 0.2006 re -f* -1 g -310.651 423.703 4.215 0.2006 re -f* -0 g -314.866 423.703 8.2296 0.2006 re -f* -1 g -323.095 423.703 3.8136 0.2006 re -f* -0 g -326.909 423.703 4.0144 0.2006 re -f* -1 g -330.923 423.703 4.0144 0.2006 re -f* -0 g -334.938 423.703 8.0288 0.2006 re -f* -1 g -342.966 423.703 4.2151 0.2006 re -f* -0 g -347.181 423.703 5.2187 0.2006 re -f* -1 g -352.4 423.703 7.2259 0.2006 re -f* -0.498 0 0.482 rg -359.626 423.703 4.0144 0.2006 re -f* -1 g -363.641 423.703 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 423.703 7.6274 0.2006 re -f* -1 g -374.881 423.703 3.8137 0.2006 re -f* -0.498 0 0.482 rg -378.695 423.703 9.2331 0.2006 re -f* -1 g -387.928 423.703 3.8136 0.2006 re -f* -0.498 0 0.482 rg -391.741 423.703 7.4266 0.2006 re -f* -1 g -399.168 423.703 3.8137 0.2006 re -f* -0.498 0 0.482 rg -402.981 423.703 7.828 0.2006 re -f* -1 g -410.81 423.703 4.0144 0.2006 re -f* -0.498 0 0.482 rg -414.824 423.703 2.6094 0.2006 re -f* -0 g -250.435 423.904 20.8749 0.2005 re -f* -1 g -271.31 423.904 7.6273 0.2005 re -f* -0 g -278.937 423.904 16.0575 0.2005 re -f* -1 g -294.994 423.904 3.8137 0.2005 re -f* -0 g -298.808 423.904 11.8425 0.2005 re -f* -1 g -310.651 423.904 4.215 0.2005 re -f* -0 g -314.866 423.904 8.2296 0.2005 re -f* -1 g -323.095 423.904 3.8136 0.2005 re -f* -0 g -326.909 423.904 4.2151 0.2005 re -f* -1 g -331.124 423.904 3.8137 0.2005 re -f* -0 g -334.938 423.904 8.0288 0.2005 re -f* -1 g -342.966 423.904 4.2151 0.2005 re -f* -0 g -347.181 423.904 5.2187 0.2005 re -f* -1 g -352.4 423.904 7.2259 0.2005 re -f* -0.498 0 0.482 rg -359.626 423.904 4.0144 0.2005 re -f* -1 g -363.641 423.904 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 423.904 7.6274 0.2005 re -f* -1 g -374.881 423.904 3.8137 0.2005 re -f* -0.498 0 0.482 rg -378.695 423.904 9.2331 0.2005 re -f* -1 g -387.928 423.904 3.8136 0.2005 re -f* -0.498 0 0.482 rg -391.741 423.904 7.4266 0.2005 re -f* -1 g -399.168 423.904 3.8137 0.2005 re -f* -0.498 0 0.482 rg -402.981 423.904 7.828 0.2005 re -f* -1 g -410.81 423.904 4.0144 0.2005 re -f* -0.498 0 0.482 rg -414.824 423.904 2.6094 0.2005 re -f* -0 g -250.435 424.104 20.8749 0.2006 re -f* -1 g -271.31 424.104 7.6273 0.2006 re -f* -0 g -278.937 424.104 16.0575 0.2006 re -f* -1 g -294.994 424.104 3.8137 0.2006 re -f* -0 g -298.808 424.104 11.8425 0.2006 re -f* -1 g -310.651 424.104 4.215 0.2006 re -f* -0 g -314.866 424.104 8.4303 0.2006 re -f* -1 g -323.296 424.104 3.6129 0.2006 re -f* -0 g -326.909 424.104 4.2151 0.2006 re -f* -1 g -331.124 424.104 3.8137 0.2006 re -f* -0 g -334.938 424.104 8.0288 0.2006 re -f* -1 g -342.966 424.104 4.2151 0.2006 re -f* -0 g -347.181 424.104 5.2187 0.2006 re -f* -1 g -352.4 424.104 7.2259 0.2006 re -f* -0.498 0 0.482 rg -359.626 424.104 4.0144 0.2006 re -f* -1 g -363.641 424.104 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 424.104 7.8281 0.2006 re -f* -1 g -375.081 424.104 3.613 0.2006 re -f* -0.498 0 0.482 rg -378.695 424.104 9.2331 0.2006 re -f* -1 g -387.928 424.104 3.8136 0.2006 re -f* -0.498 0 0.482 rg -391.741 424.104 7.6273 0.2006 re -f* -1 g -399.368 424.104 3.613 0.2006 re -f* -0.498 0 0.482 rg -402.981 424.104 7.828 0.2006 re -f* -1 g -410.81 424.104 3.8137 0.2006 re -f* -0.498 0 0.482 rg -414.623 424.104 2.8101 0.2006 re -f* -0 g -250.435 424.305 20.8749 0.2005 re -f* -1 g -271.31 424.305 7.6273 0.2005 re -f* -0 g -278.937 424.305 16.0575 0.2005 re -f* -1 g -294.994 424.305 3.8137 0.2005 re -f* -0 g -298.808 424.305 12.0432 0.2005 re -f* -1 g -310.851 424.305 4.0143 0.2005 re -f* -0 g -314.866 424.305 8.4303 0.2005 re -f* -1 g -323.296 424.305 3.6129 0.2005 re -f* -0 g -326.909 424.305 4.2151 0.2005 re -f* -1 g -331.124 424.305 4.0144 0.2005 re -f* -0 g -335.138 424.305 7.8281 0.2005 re -f* -1 g -342.966 424.305 4.2151 0.2005 re -f* -0 g -347.181 424.305 5.2187 0.2005 re -f* -1 g -352.4 424.305 7.2259 0.2005 re -f* -0.498 0 0.482 rg -359.626 424.305 4.0144 0.2005 re -f* -1 g -363.641 424.305 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 424.305 7.8281 0.2005 re -f* -1 g -375.081 424.305 3.613 0.2005 re -f* -0.498 0 0.482 rg -378.695 424.305 9.2331 0.2005 re -f* -1 g -387.928 424.305 3.8136 0.2005 re -f* -0.498 0 0.482 rg -391.741 424.305 7.6273 0.2005 re -f* -1 g -399.368 424.305 3.613 0.2005 re -f* -0.498 0 0.482 rg -402.981 424.305 7.828 0.2005 re -f* -1 g -410.81 424.305 3.8137 0.2005 re -f* -0.498 0 0.482 rg -414.623 424.305 2.6093 0.2005 re -f* -0 g -250.435 424.505 20.8749 0.2006 re -f* -1 g -271.31 424.505 7.6273 0.2006 re -f* -0 g -278.937 424.505 16.0575 0.2006 re -f* -1 g -294.994 424.505 3.8137 0.2006 re -f* -0 g -298.808 424.505 12.0432 0.2006 re -f* -1 g -310.851 424.505 4.0143 0.2006 re -f* -0 g -314.866 424.505 8.4303 0.2006 re -f* -1 g -323.296 424.505 3.6129 0.2006 re -f* -0 g -326.909 424.505 4.4158 0.2006 re -f* -1 g -331.325 424.505 3.8137 0.2006 re -f* -0 g -335.138 424.505 7.8281 0.2006 re -f* -1 g -342.966 424.505 4.0143 0.2006 re -f* -0 g -346.981 424.505 5.2188 0.2006 re -f* -1 g -352.2 424.505 7.4266 0.2006 re -f* -0.498 0 0.482 rg -359.626 424.505 4.0144 0.2006 re -f* -1 g -363.641 424.505 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 424.505 8.0288 0.2006 re -f* -1 g -375.282 424.505 3.4123 0.2006 re -f* -0.498 0 0.482 rg -378.695 424.505 9.2331 0.2006 re -f* -1 g -387.928 424.505 3.8136 0.2006 re -f* -0.498 0 0.482 rg -391.741 424.505 7.828 0.2006 re -f* -1 g -399.569 424.505 3.4123 0.2006 re -f* -0.498 0 0.482 rg -402.981 424.505 7.828 0.2006 re -f* -1 g -410.81 424.505 3.8137 0.2006 re -f* -0.498 0 0.482 rg -414.623 424.505 2.6093 0.2006 re -f* -0 g -250.635 424.706 20.6741 0.2006 re -f* -1 g -271.31 424.706 7.6273 0.2006 re -f* -0 g -278.937 424.706 16.0575 0.2006 re -f* -1 g -294.994 424.706 3.8137 0.2006 re -f* -0 g -298.808 424.706 12.2439 0.2006 re -f* -1 g -311.052 424.706 3.8136 0.2006 re -f* -0 g -314.866 424.706 8.4303 0.2006 re -f* -1 g -323.296 424.706 3.4122 0.2006 re -f* -0 g -326.708 424.706 4.6165 0.2006 re -f* -1 g -331.325 424.706 3.8137 0.2006 re -f* -0 g -335.138 424.706 7.8281 0.2006 re -f* -1 g -342.966 424.706 4.0143 0.2006 re -f* -0 g -346.981 424.706 5.2188 0.2006 re -f* -1 g -352.2 424.706 7.4266 0.2006 re -f* -0.498 0 0.482 rg -359.626 424.706 4.0144 0.2006 re -f* -1 g -363.641 424.706 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 424.706 8.0288 0.2006 re -f* -1 g -375.282 424.706 3.4123 0.2006 re -f* -0.498 0 0.482 rg -378.695 424.706 9.2331 0.2006 re -f* -1 g -387.928 424.706 3.8136 0.2006 re -f* -0.498 0 0.482 rg -391.741 424.706 7.828 0.2006 re -f* -1 g -399.569 424.706 3.4123 0.2006 re -f* -0.498 0 0.482 rg -402.981 424.706 7.828 0.2006 re -f* -1 g -410.81 424.706 3.8137 0.2006 re -f* -0.498 0 0.482 rg -414.623 424.706 2.6093 0.2006 re -f* -0 g -250.635 424.906 20.6741 0.2005 re -f* -1 g -271.31 424.906 7.6273 0.2005 re -f* -0 g -278.937 424.906 16.0575 0.2005 re -f* -1 g -294.994 424.906 3.8137 0.2005 re -f* -0 g -298.808 424.906 12.2439 0.2005 re -f* -1 g -311.052 424.906 3.8136 0.2005 re -f* -0 g -314.866 424.906 8.4303 0.2005 re -f* -1 g -323.296 424.906 3.4122 0.2005 re -f* -0 g -326.708 424.906 4.6165 0.2005 re -f* -1 g -331.325 424.906 3.8137 0.2005 re -f* -0 g -335.138 424.906 7.8281 0.2005 re -f* -1 g -342.966 424.906 4.0143 0.2005 re -f* -0 g -346.981 424.906 5.2188 0.2005 re -f* -1 g -352.2 424.906 7.4266 0.2005 re -f* -0.498 0 0.482 rg -359.626 424.906 4.0144 0.2005 re -f* -1 g -363.641 424.906 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 424.906 8.2295 0.2005 re -f* -1 g -375.483 424.906 3.2116 0.2005 re -f* -0.498 0 0.482 rg -378.695 424.906 9.0323 0.2005 re -f* -1 g -387.727 424.906 4.0144 0.2005 re -f* -0.498 0 0.482 rg -391.741 424.906 8.0288 0.2005 re -f* -1 g -399.77 424.906 3.4122 0.2005 re -f* -0.498 0 0.482 rg -403.182 424.906 7.6273 0.2005 re -f* -1 g -410.81 424.906 3.613 0.2005 re -f* -0.498 0 0.482 rg -414.422 424.906 2.81 0.2005 re -f* -0 g -250.635 425.107 20.8748 0.2006 re -f* -1 g -271.51 425.107 7.4266 0.2006 re -f* -0 g -278.937 425.107 16.0575 0.2006 re -f* -1 g -294.994 425.107 4.0144 0.2006 re -f* -0 g -299.009 425.107 5.2187 0.2006 re -f* -1 g -304.227 425.107 2.208 0.2006 re -f* -0 g -306.435 425.107 4.8172 0.2006 re -f* -1 g -311.253 425.107 3.6129 0.2006 re -f* -0 g -314.866 425.107 8.4303 0.2006 re -f* -1 g -323.296 425.107 3.4122 0.2006 re -f* -0 g -326.708 425.107 4.8173 0.2006 re -f* -1 g -331.525 425.107 3.6129 0.2006 re -f* -0 g -335.138 425.107 7.8281 0.2006 re -f* -1 g -342.966 425.107 4.0143 0.2006 re -f* -0 g -346.981 425.107 5.018 0.2006 re -f* -1 g -351.999 425.107 7.6274 0.2006 re -f* -0.498 0 0.482 rg -359.626 425.107 4.0144 0.2006 re -f* -1 g -363.641 425.107 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 425.107 8.2295 0.2006 re -f* -1 g -375.483 425.107 3.4123 0.2006 re -f* -0.498 0 0.482 rg -378.895 425.107 8.8316 0.2006 re -f* -1 g -387.727 425.107 4.0144 0.2006 re -f* -0.498 0 0.482 rg -391.741 425.107 8.2295 0.2006 re -f* -1 g -399.971 425.107 3.2115 0.2006 re -f* -0.498 0 0.482 rg -403.182 425.107 7.6273 0.2006 re -f* -1 g -410.81 425.107 3.613 0.2006 re -f* -0.498 0 0.482 rg -414.422 425.107 2.81 0.2006 re -f* -0 g -250.635 425.308 20.8748 0.2005 re -f* -1 g -271.51 425.308 7.4266 0.2005 re -f* -0 g -278.937 425.308 16.0575 0.2005 re -f* -1 g -294.994 425.308 4.0144 0.2005 re -f* -0 g -299.009 425.308 4.8173 0.2005 re -f* -1 g -303.826 425.308 3.0108 0.2005 re -f* -0 g -306.837 425.308 4.4158 0.2005 re -f* -1 g -311.253 425.308 3.8137 0.2005 re -f* -0 g -315.066 425.308 8.2295 0.2005 re -f* -1 g -323.296 425.308 3.4122 0.2005 re -f* -0 g -326.708 425.308 4.8173 0.2005 re -f* -1 g -331.525 425.308 3.6129 0.2005 re -f* -0 g -335.138 425.308 7.8281 0.2005 re -f* -1 g -342.966 425.308 4.0143 0.2005 re -f* -0 g -346.981 425.308 5.018 0.2005 re -f* -1 g -351.999 425.308 7.6274 0.2005 re -f* -0.498 0 0.482 rg -359.626 425.308 4.0144 0.2005 re -f* -1 g -363.641 425.308 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 425.308 8.4303 0.2005 re -f* -1 g -375.684 425.308 3.2115 0.2005 re -f* -0.498 0 0.482 rg -378.895 425.308 8.8316 0.2005 re -f* -1 g -387.727 425.308 4.0144 0.2005 re -f* -0.498 0 0.482 rg -391.741 425.308 8.2295 0.2005 re -f* -1 g -399.971 425.308 3.2115 0.2005 re -f* -0.498 0 0.482 rg -403.182 425.308 7.6273 0.2005 re -f* -1 g -410.81 425.308 3.4122 0.2005 re -f* -0.498 0 0.482 rg -414.222 425.308 3.0108 0.2005 re -f* -0 g -250.635 425.508 20.8748 0.2006 re -f* -1 g -271.51 425.508 7.4266 0.2006 re -f* -0 g -278.937 425.508 16.0575 0.2006 re -f* -1 g -294.994 425.508 4.0144 0.2006 re -f* -0 g -299.009 425.508 4.6166 0.2006 re -f* -1 g -303.625 425.508 3.4122 0.2006 re -f* -0 g -307.038 425.508 4.4158 0.2006 re -f* -1 g -311.453 425.508 3.613 0.2006 re -f* -0 g -315.066 425.508 8.2295 0.2006 re -f* -1 g -323.296 425.508 3.2115 0.2006 re -f* -0 g -326.507 425.508 5.2187 0.2006 re -f* -1 g -331.726 425.508 3.4122 0.2006 re -f* -0 g -335.138 425.508 7.8281 0.2006 re -f* -1 g -342.966 425.508 3.8137 0.2006 re -f* -0 g -346.78 425.508 5.2186 0.2006 re -f* -1 g -351.999 425.508 7.6274 0.2006 re -f* -0.498 0 0.482 rg -359.626 425.508 4.0144 0.2006 re -f* -1 g -363.641 425.508 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 425.508 8.4303 0.2006 re -f* -1 g -375.684 425.508 3.2115 0.2006 re -f* -0.498 0 0.482 rg -378.895 425.508 8.6309 0.2006 re -f* -1 g -387.526 425.508 4.2151 0.2006 re -f* -0.498 0 0.482 rg -391.741 425.508 8.4302 0.2006 re -f* -1 g -400.171 425.508 3.2115 0.2006 re -f* -0.498 0 0.482 rg -403.383 425.508 7.4266 0.2006 re -f* -1 g -410.81 425.508 3.4122 0.2006 re -f* -0.498 0 0.482 rg -414.222 425.508 2.8102 0.2006 re -f* -0 g -250.635 425.709 20.8748 0.2005 re -f* -1 g -271.51 425.709 7.4266 0.2005 re -f* -0 g -278.937 425.709 16.0575 0.2005 re -f* -1 g -294.994 425.709 4.2151 0.2005 re -f* -0 g -299.209 425.709 4.4159 0.2005 re -f* -1 g -303.625 425.709 3.6129 0.2005 re -f* -0 g -307.238 425.709 4.4159 0.2005 re -f* -1 g -311.654 425.709 3.4122 0.2005 re -f* -0 g -315.066 425.709 8.0288 0.2005 re -f* -1 g -323.095 425.709 3.4122 0.2005 re -f* -0 g -326.507 425.709 5.2187 0.2005 re -f* -1 g -331.726 425.709 3.613 0.2005 re -f* -0 g -335.339 425.709 7.6273 0.2005 re -f* -1 g -342.966 425.709 3.8137 0.2005 re -f* -0 g -346.78 425.709 5.018 0.2005 re -f* -1 g -351.798 425.709 7.828 0.2005 re -f* -0.498 0 0.482 rg -359.626 425.709 4.0144 0.2005 re -f* -1 g -363.641 425.709 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 425.709 8.631 0.2005 re -f* -1 g -375.884 425.709 3.0108 0.2005 re -f* -0.498 0 0.482 rg -378.895 425.709 8.6309 0.2005 re -f* -1 g -387.526 425.709 4.2151 0.2005 re -f* -0.498 0 0.482 rg -391.741 425.709 8.6309 0.2005 re -f* -1 g -400.372 425.709 3.0108 0.2005 re -f* -0.498 0 0.482 rg -403.383 425.709 7.4266 0.2005 re -f* -1 g -410.81 425.709 3.4122 0.2005 re -f* -0.498 0 0.482 rg -414.222 425.709 2.8102 0.2005 re -f* -0 g -250.836 425.909 20.6741 0.2006 re -f* -1 g -271.51 425.909 7.4266 0.2006 re -f* -0 g -278.937 425.909 16.0575 0.2006 re -f* -1 g -294.994 425.909 4.2151 0.2006 re -f* -0 g -299.209 425.909 4.4159 0.2006 re -f* -1 g -303.625 425.909 3.6129 0.2006 re -f* -0 g -307.238 425.909 4.4159 0.2006 re -f* -1 g -311.654 425.909 3.4122 0.2006 re -f* -0 g -315.066 425.909 8.0288 0.2006 re -f* -1 g -323.095 425.909 3.2115 0.2006 re -f* -0 g -326.307 425.909 5.6201 0.2006 re -f* -1 g -331.927 425.909 3.4123 0.2006 re -f* -0 g -335.339 425.909 7.6273 0.2006 re -f* -1 g -342.966 425.909 3.8137 0.2006 re -f* -0 g -346.78 425.909 5.018 0.2006 re -f* -1 g -351.798 425.909 7.828 0.2006 re -f* -0.498 0 0.482 rg -359.626 425.909 4.0144 0.2006 re -f* -1 g -363.641 425.909 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 425.909 8.8317 0.2006 re -f* -1 g -376.085 425.909 3.0108 0.2006 re -f* -0.498 0 0.482 rg -379.096 425.909 8.4302 0.2006 re -f* -1 g -387.526 425.909 4.2151 0.2006 re -f* -0.498 0 0.482 rg -391.741 425.909 8.6309 0.2006 re -f* -1 g -400.372 425.909 3.0108 0.2006 re -f* -0.498 0 0.482 rg -403.383 425.909 7.2259 0.2006 re -f* -1 g -410.609 425.909 3.4123 0.2006 re -f* -0.498 0 0.482 rg -414.021 425.909 3.0108 0.2006 re -f* -0 g -250.836 426.11 20.6741 0.2006 re -f* -1 g -271.51 426.11 7.4266 0.2006 re -f* -0 g -278.937 426.11 16.0575 0.2006 re -f* -1 g -294.994 426.11 4.2151 0.2006 re -f* -0 g -299.209 426.11 4.4159 0.2006 re -f* -1 g -303.625 426.11 3.6129 0.2006 re -f* -0 g -307.238 426.11 4.6166 0.2006 re -f* -1 g -311.855 426.11 3.2115 0.2006 re -f* -0 g -315.066 426.11 8.0288 0.2006 re -f* -1 g -323.095 426.11 3.2115 0.2006 re -f* -0 g -326.307 426.11 5.6201 0.2006 re -f* -1 g -331.927 426.11 3.4123 0.2006 re -f* -0 g -335.339 426.11 7.6273 0.2006 re -f* -1 g -342.966 426.11 3.6129 0.2006 re -f* -0 g -346.579 426.11 5.2188 0.2006 re -f* -1 g -351.798 426.11 8.0287 0.2006 re -f* -0.498 0 0.482 rg -359.827 426.11 3.8137 0.2006 re -f* -1 g -363.641 426.11 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 426.11 8.8317 0.2006 re -f* -1 g -376.085 426.11 3.0108 0.2006 re -f* -0.498 0 0.482 rg -379.096 426.11 8.2294 0.2006 re -f* -1 g -387.325 426.11 4.4159 0.2006 re -f* -0.498 0 0.482 rg -391.741 426.11 8.8316 0.2006 re -f* -1 g -400.573 426.11 3.0108 0.2006 re -f* -0.498 0 0.482 rg -403.584 426.11 7.0252 0.2006 re -f* -1 g -410.609 426.11 3.2115 0.2006 re -f* -0.498 0 0.482 rg -413.82 426.11 3.2116 0.2006 re -f* -0 g -250.836 426.31 20.6741 0.2005 re -f* -1 g -271.51 426.31 7.4266 0.2005 re -f* -0 g -278.937 426.31 16.0575 0.2005 re -f* -1 g -294.994 426.31 4.4159 0.2005 re -f* -0 g -299.41 426.31 4.2151 0.2005 re -f* -1 g -303.625 426.31 3.8137 0.2005 re -f* -0 g -307.439 426.31 4.4158 0.2005 re -f* -1 g -311.855 426.31 3.4122 0.2005 re -f* -0 g -315.267 426.31 7.8281 0.2005 re -f* -1 g -323.095 426.31 3.2115 0.2005 re -f* -0 g -326.307 426.31 5.8208 0.2005 re -f* -1 g -332.127 426.31 3.2116 0.2005 re -f* -0 g -335.339 426.31 7.6273 0.2005 re -f* -1 g -342.966 426.31 3.6129 0.2005 re -f* -0 g -346.579 426.31 5.018 0.2005 re -f* -1 g -351.597 426.31 8.2295 0.2005 re -f* -0.498 0 0.482 rg -359.827 426.31 3.8137 0.2005 re -f* -1 g -363.641 426.31 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 426.31 9.0324 0.2005 re -f* -1 g -376.286 426.31 3.0108 0.2005 re -f* -0.498 0 0.482 rg -379.297 426.31 8.0287 0.2005 re -f* -1 g -387.325 426.31 4.4159 0.2005 re -f* -0.498 0 0.482 rg -391.741 426.31 9.0324 0.2005 re -f* -1 g -400.774 426.31 2.81 0.2005 re -f* -0.498 0 0.482 rg -403.584 426.31 7.0252 0.2005 re -f* -1 g -410.609 426.31 3.2115 0.2005 re -f* -0.498 0 0.482 rg -413.82 426.31 3.2116 0.2005 re -f* -0 g -250.836 426.511 20.6741 0.2006 re -f* -1 g -271.51 426.511 7.4266 0.2006 re -f* -0 g -278.937 426.511 16.0575 0.2006 re -f* -1 g -294.994 426.511 4.4159 0.2006 re -f* -0 g -299.41 426.511 4.2151 0.2006 re -f* -1 g -303.625 426.511 3.8137 0.2006 re -f* -0 g -307.439 426.511 4.6165 0.2006 re -f* -1 g -312.056 426.511 3.2115 0.2006 re -f* -0 g -315.267 426.511 7.8281 0.2006 re -f* -1 g -323.095 426.511 3.0107 0.2006 re -f* -0 g -326.106 426.511 6.2223 0.2006 re -f* -1 g -332.328 426.511 3.2116 0.2006 re -f* -0 g -335.54 426.511 7.4266 0.2006 re -f* -1 g -342.966 426.511 3.4122 0.2006 re -f* -0 g -346.379 426.511 5.2187 0.2006 re -f* -1 g -351.597 426.511 8.2295 0.2006 re -f* -0.498 0 0.482 rg -359.827 426.511 3.8137 0.2006 re -f* -1 g -363.641 426.511 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 426.511 9.2331 0.2006 re -f* -1 g -376.486 426.511 2.8101 0.2006 re -f* -0.498 0 0.482 rg -379.297 426.511 7.828 0.2006 re -f* -1 g -387.125 426.511 4.6166 0.2006 re -f* -0.498 0 0.482 rg -391.741 426.511 9.2331 0.2006 re -f* -1 g -400.974 426.511 2.8101 0.2006 re -f* -0.498 0 0.482 rg -403.784 426.511 6.8244 0.2006 re -f* -1 g -410.609 426.511 3.0108 0.2006 re -f* -0.498 0 0.482 rg -413.62 426.511 3.4123 0.2006 re -f* -0 g -250.836 426.711 20.6741 0.2005 re -f* -1 g -271.51 426.711 7.4266 0.2005 re -f* -0 g -278.937 426.711 16.0575 0.2005 re -f* -1 g -294.994 426.711 4.6166 0.2005 re -f* -0 g -299.611 426.711 4.0144 0.2005 re -f* -1 g -303.625 426.711 3.8137 0.2005 re -f* -0 g -307.439 426.711 4.8172 0.2005 re -f* -1 g -312.256 426.711 3.0108 0.2005 re -f* -0 g -315.267 426.711 7.8281 0.2005 re -f* -1 g -323.095 426.711 3.0107 0.2005 re -f* -0 g -326.106 426.711 6.2223 0.2005 re -f* -1 g -332.328 426.711 3.2116 0.2005 re -f* -0 g -335.54 426.711 7.4266 0.2005 re -f* -1 g -342.966 426.711 3.4122 0.2005 re -f* -0 g -346.379 426.711 5.018 0.2005 re -f* -1 g -351.397 426.711 8.4302 0.2005 re -f* -0.498 0 0.482 rg -359.827 426.711 3.8137 0.2005 re -f* -1 g -363.641 426.711 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 426.711 9.4339 0.2005 re -f* -1 g -376.687 426.711 2.6093 0.2005 re -f* -0.498 0 0.482 rg -379.297 426.711 7.6274 0.2005 re -f* -1 g -386.924 426.711 1.0036 0.2005 re -f* -0.498 0 0.482 rg -387.928 426.711 0.2006 0.2005 re -f* -1 g -388.128 426.711 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 426.711 9.4338 0.2005 re -f* -1 g -401.175 426.711 2.6094 0.2005 re -f* -0.498 0 0.482 rg -403.784 426.711 6.6237 0.2005 re -f* -1 g -410.408 426.711 3.0108 0.2005 re -f* -0.498 0 0.482 rg -413.419 426.711 3.4122 0.2005 re -f* -0 g -251.037 426.912 20.4734 0.2006 re -f* -1 g -271.51 426.912 7.4266 0.2006 re -f* -0 g -278.937 426.912 16.0575 0.2006 re -f* -1 g -294.994 426.912 4.6166 0.2006 re -f* -0 g -299.611 426.912 4.0144 0.2006 re -f* -1 g -303.625 426.912 3.8137 0.2006 re -f* -0 g -307.439 426.912 5.0179 0.2006 re -f* -1 g -312.457 426.912 3.0108 0.2006 re -f* -0 g -315.468 426.912 7.6274 0.2006 re -f* -1 g -323.095 426.912 2.81 0.2006 re -f* -0 g -325.905 426.912 6.6238 0.2006 re -f* -1 g -332.529 426.912 3.0108 0.2006 re -f* -0 g -335.54 426.912 7.4266 0.2006 re -f* -1 g -342.966 426.912 3.2115 0.2006 re -f* -0 g -346.178 426.912 5.2187 0.2006 re -f* -1 g -351.397 426.912 8.4302 0.2006 re -f* -0.498 0 0.482 rg -359.827 426.912 3.8137 0.2006 re -f* -1 g -363.641 426.912 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 426.912 9.6346 0.2006 re -f* -1 g -376.888 426.912 2.6093 0.2006 re -f* -0.498 0 0.482 rg -379.497 426.912 7.4267 0.2006 re -f* -1 g -386.924 426.912 1.0036 0.2006 re -f* -0.498 0 0.482 rg -387.928 426.912 0.2006 0.2006 re -f* -1 g -388.128 426.912 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 426.912 9.6345 0.2006 re -f* -1 g -401.376 426.912 2.6094 0.2006 re -f* -0.498 0 0.482 rg -403.985 426.912 6.423 0.2006 re -f* -1 g -410.408 426.912 3.0108 0.2006 re -f* -0.498 0 0.482 rg -413.419 426.912 3.4122 0.2006 re -f* -0 g -251.037 427.113 20.4734 0.2006 re -f* -1 g -271.51 427.113 7.4266 0.2006 re -f* -0 g -278.937 427.113 16.0575 0.2006 re -f* -1 g -294.994 427.113 3.613 0.2006 re -f* -0 g -298.607 427.113 0.2007 0.2006 re -f* -1 g -298.808 427.113 1.0036 0.2006 re -f* -0 g -299.812 427.113 4.0144 0.2006 re -f* -1 g -303.826 427.113 3.613 0.2006 re -f* -0 g -307.439 427.113 5.0179 0.2006 re -f* -1 g -312.457 427.113 3.0108 0.2006 re -f* -0 g -315.468 427.113 7.6274 0.2006 re -f* -1 g -323.095 427.113 2.6093 0.2006 re -f* -0 g -325.704 427.113 7.0252 0.2006 re -f* -1 g -332.73 427.113 3.0108 0.2006 re -f* -0 g -335.74 427.113 7.0252 0.2006 re -f* -1 g -342.766 427.113 3.4122 0.2006 re -f* -0 g -346.178 427.113 5.018 0.2006 re -f* -1 g -351.196 427.113 8.6309 0.2006 re -f* -0.498 0 0.482 rg -359.827 427.113 3.8137 0.2006 re -f* -1 g -363.641 427.113 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 427.113 9.8353 0.2006 re -f* -1 g -377.089 427.113 2.6094 0.2006 re -f* -0.498 0 0.482 rg -379.698 427.113 7.0251 0.2006 re -f* -1 g -386.723 427.113 1.0036 0.2006 re -f* -0.498 0 0.482 rg -387.727 427.113 0.4014 0.2006 re -f* -1 g -388.128 427.113 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 427.113 9.8352 0.2006 re -f* -1 g -401.576 427.113 2.4087 0.2006 re -f* -0.498 0 0.482 rg -403.985 427.113 6.2223 0.2006 re -f* -1 g -410.207 427.113 3.0107 0.2006 re -f* -0.498 0 0.482 rg -413.218 427.113 3.613 0.2006 re -f* -0 g -251.037 427.313 20.4734 0.2005 re -f* -1 g -271.51 427.313 7.4266 0.2005 re -f* -0 g -278.937 427.313 16.0575 0.2005 re -f* -1 g -294.994 427.313 3.613 0.2005 re -f* -0 g -298.607 427.313 0.2007 0.2005 re -f* -1 g -298.808 427.313 1.0036 0.2005 re -f* -0 g -299.812 427.313 4.0144 0.2005 re -f* -1 g -303.826 427.313 3.613 0.2005 re -f* -0 g -307.439 427.313 5.2187 0.2005 re -f* -1 g -312.658 427.313 2.81 0.2005 re -f* -0 g -315.468 427.313 7.6274 0.2005 re -f* -1 g -323.095 427.313 2.6093 0.2005 re -f* -0 g -325.704 427.313 7.2259 0.2005 re -f* -1 g -332.93 427.313 2.8101 0.2005 re -f* -0 g -335.74 427.313 7.0252 0.2005 re -f* -1 g -342.766 427.313 3.2114 0.2005 re -f* -0 g -345.977 427.313 5.2188 0.2005 re -f* -1 g -351.196 427.313 8.6309 0.2005 re -f* -0.498 0 0.482 rg -359.827 427.313 3.8137 0.2005 re -f* -1 g -363.641 427.313 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 427.313 10.036 0.2005 re -f* -1 g -377.289 427.313 2.4087 0.2005 re -f* -0.498 0 0.482 rg -379.698 427.313 6.8244 0.2005 re -f* -1 g -386.522 427.313 1.0036 0.2005 re -f* -0.498 0 0.482 rg -387.526 427.313 0.6021 0.2005 re -f* -1 g -388.128 427.313 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 427.313 10.036 0.2005 re -f* -1 g -401.777 427.313 2.4086 0.2005 re -f* -0.498 0 0.482 rg -404.186 427.313 6.0216 0.2005 re -f* -1 g -410.207 427.313 2.8101 0.2005 re -f* -0.498 0 0.482 rg -413.017 427.313 3.8136 0.2005 re -f* -0 g -251.037 427.514 20.4734 0.2006 re -f* -1 g -271.51 427.514 7.4266 0.2006 re -f* -0 g -278.937 427.514 16.0575 0.2006 re -f* -1 g -294.994 427.514 3.613 0.2006 re -f* -0 g -298.607 427.514 0.4014 0.2006 re -f* -1 g -299.009 427.514 1.0036 0.2006 re -f* -0 g -300.012 427.514 3.8137 0.2006 re -f* -1 g -303.826 427.514 3.613 0.2006 re -f* -0 g -307.439 427.514 5.4194 0.2006 re -f* -1 g -312.858 427.514 2.8101 0.2006 re -f* -0 g -315.669 427.514 7.2258 0.2006 re -f* -1 g -322.894 427.514 2.6094 0.2006 re -f* -0 g -325.504 427.514 7.4266 0.2006 re -f* -1 g -332.93 427.514 3.0108 0.2006 re -f* -0 g -335.941 427.514 6.8245 0.2006 re -f* -1 g -342.766 427.514 3.2114 0.2006 re -f* -0 g -345.977 427.514 5.018 0.2006 re -f* -1 g -350.995 427.514 8.8317 0.2006 re -f* -0.498 0 0.482 rg -359.827 427.514 3.8137 0.2006 re -f* -1 g -363.641 427.514 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 427.514 10.2367 0.2006 re -f* -1 g -377.49 427.514 2.4087 0.2006 re -f* -0.498 0 0.482 rg -379.899 427.514 6.4229 0.2006 re -f* -1 g -386.322 427.514 1.0036 0.2006 re -f* -0.498 0 0.482 rg -387.325 427.514 0.8029 0.2006 re -f* -1 g -388.128 427.514 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 427.514 10.2367 0.2006 re -f* -1 g -401.978 427.514 2.4086 0.2006 re -f* -0.498 0 0.482 rg -404.386 427.514 5.6202 0.2006 re -f* -1 g -410.007 427.514 2.81 0.2006 re -f* -0.498 0 0.482 rg -412.817 427.514 3.8137 0.2006 re -f* -0 g -251.238 427.714 20.2727 0.2005 re -f* -1 g -271.51 427.714 7.4266 0.2005 re -f* -0 g -278.937 427.714 16.0575 0.2005 re -f* -1 g -294.994 427.714 3.613 0.2005 re -f* -0 g -298.607 427.714 0.4014 0.2005 re -f* -1 g -299.009 427.714 1.0036 0.2005 re -f* -0 g -300.012 427.714 4.0144 0.2005 re -f* -1 g -304.027 427.714 3.4123 0.2005 re -f* -0 g -307.439 427.714 5.6201 0.2005 re -f* -1 g -313.059 427.714 2.6094 0.2005 re -f* -0 g -315.669 427.714 7.2258 0.2005 re -f* -1 g -322.894 427.714 2.4087 0.2005 re -f* -0 g -325.303 427.714 7.828 0.2005 re -f* -1 g -333.131 427.714 2.8101 0.2005 re -f* -0 g -335.941 427.714 6.8245 0.2005 re -f* -1 g -342.766 427.714 3.0108 0.2005 re -f* -0 g -345.776 427.714 5.018 0.2005 re -f* -1 g -350.794 427.714 9.0323 0.2005 re -f* -0.498 0 0.482 rg -359.827 427.714 3.8137 0.2005 re -f* -1 g -363.641 427.714 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 427.714 10.4375 0.2005 re -f* -1 g -377.691 427.714 2.4086 0.2005 re -f* -0.498 0 0.482 rg -380.099 427.714 6.0215 0.2005 re -f* -1 g -386.121 427.714 1.2043 0.2005 re -f* -0.498 0 0.482 rg -387.325 427.714 0.8029 0.2005 re -f* -1 g -388.128 427.714 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 427.714 10.4374 0.2005 re -f* -1 g -402.179 427.714 2.4086 0.2005 re -f* -0.498 0 0.482 rg -404.587 427.714 5.4195 0.2005 re -f* -1 g -410.007 427.714 2.6093 0.2005 re -f* -0.498 0 0.482 rg -412.616 427.714 4.0144 0.2005 re -f* -0 g -251.238 427.915 20.2727 0.2006 re -f* -1 g -271.51 427.915 7.4266 0.2006 re -f* -0 g -278.937 427.915 16.0575 0.2006 re -f* -1 g -294.994 427.915 3.613 0.2006 re -f* -0 g -298.607 427.915 0.6021 0.2006 re -f* -1 g -299.209 427.915 1.0036 0.2006 re -f* -0 g -300.213 427.915 3.8137 0.2006 re -f* -1 g -304.027 427.915 3.4123 0.2006 re -f* -0 g -307.439 427.915 5.8208 0.2006 re -f* -1 g -313.26 427.915 2.6093 0.2006 re -f* -0 g -315.869 427.915 7.0252 0.2006 re -f* -1 g -322.894 427.915 2.208 0.2006 re -f* -0 g -325.102 427.915 8.2294 0.2006 re -f* -1 g -333.332 427.915 2.8101 0.2006 re -f* -0 g -336.142 427.915 6.423 0.2006 re -f* -1 g -342.565 427.915 3.0108 0.2006 re -f* -0 g -345.576 427.915 5.2188 0.2006 re -f* -1 g -350.794 427.915 8.8316 0.2006 re -f* -0.498 0 0.482 rg -359.626 427.915 4.0144 0.2006 re -f* -1 g -363.641 427.915 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 427.915 10.6382 0.2006 re -f* -1 g -377.892 427.915 2.4086 0.2006 re -f* -0.498 0 0.482 rg -380.3 427.915 5.6201 0.2006 re -f* -1 g -385.92 427.915 1.2043 0.2006 re -f* -0.498 0 0.482 rg -387.125 427.915 1.0036 0.2006 re -f* -1 g -388.128 427.915 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 427.915 10.8388 0.2006 re -f* -1 g -402.58 427.915 2.208 0.2006 re -f* -0.498 0 0.482 rg -404.788 427.915 5.018 0.2006 re -f* -1 g -409.806 427.915 2.6093 0.2006 re -f* -0.498 0 0.482 rg -412.415 427.915 4.2151 0.2006 re -f* -0 g -251.238 428.115 20.2727 0.2006 re -f* -1 g -271.51 428.115 7.4266 0.2006 re -f* -0 g -278.937 428.115 16.0575 0.2006 re -f* -1 g -294.994 428.115 3.613 0.2006 re -f* -0 g -298.607 428.115 0.8029 0.2006 re -f* -1 g -299.41 428.115 1.0036 0.2006 re -f* -0 g -300.414 428.115 3.6129 0.2006 re -f* -1 g -304.027 428.115 3.4123 0.2006 re -f* -0 g -307.439 428.115 6.0215 0.2006 re -f* -1 g -313.461 428.115 2.4086 0.2006 re -f* -0 g -315.869 428.115 6.8246 0.2006 re -f* -1 g -322.694 428.115 2.2078 0.2006 re -f* -0 g -324.902 428.115 8.631 0.2006 re -f* -1 g -333.533 428.115 2.6093 0.2006 re -f* -0 g -336.142 428.115 6.423 0.2006 re -f* -1 g -342.565 428.115 2.8101 0.2006 re -f* -0 g -345.375 428.115 5.2187 0.2006 re -f* -1 g -350.594 428.115 9.0324 0.2006 re -f* -0.498 0 0.482 rg -359.626 428.115 4.0144 0.2006 re -f* -1 g -363.641 428.115 3.6129 0.2006 re -f* -0.498 0 0.482 rg -367.253 428.115 11.0396 0.2006 re -f* -1 g -378.293 428.115 2.2079 0.2006 re -f* -0.498 0 0.482 rg -380.501 428.115 5.018 0.2006 re -f* -1 g -385.519 428.115 1.4051 0.2006 re -f* -0.498 0 0.482 rg -386.924 428.115 1.2042 0.2006 re -f* -1 g -388.128 428.115 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 428.115 11.0396 0.2006 re -f* -1 g -402.781 428.115 2.2079 0.2006 re -f* -0.498 0 0.482 rg -404.989 428.115 4.6165 0.2006 re -f* -1 g -409.605 428.115 2.4087 0.2006 re -f* -0.498 0 0.482 rg -412.014 428.115 4.6165 0.2006 re -f* -0 g -251.238 428.316 20.2727 0.2005 re -f* -1 g -271.51 428.316 7.4266 0.2005 re -f* -0 g -278.937 428.316 16.0575 0.2005 re -f* -1 g -294.994 428.316 3.613 0.2005 re -f* -0 g -298.607 428.316 0.8029 0.2005 re -f* -1 g -299.41 428.316 1.2043 0.2005 re -f* -0 g -300.615 428.316 3.4122 0.2005 re -f* -1 g -304.027 428.316 3.2115 0.2005 re -f* -0 g -307.238 428.316 6.4231 0.2005 re -f* -1 g -313.661 428.316 2.4086 0.2005 re -f* -0 g -316.07 428.316 6.6238 0.2005 re -f* -1 g -322.694 428.316 2.0071 0.2005 re -f* -0 g -324.701 428.316 9.0324 0.2005 re -f* -1 g -333.733 428.316 2.6094 0.2005 re -f* -0 g -336.343 428.316 6.0215 0.2005 re -f* -1 g -342.364 428.316 3.0108 0.2005 re -f* -0 g -345.375 428.316 5.018 0.2005 re -f* -1 g -350.393 428.316 9.2331 0.2005 re -f* -0.498 0 0.482 rg -359.626 428.316 1.0036 0.2005 re -f* -1 g -360.63 428.316 0.2007 0.2005 re -f* -0.498 0 0.482 rg -360.83 428.316 2.8101 0.2005 re -f* -1 g -363.641 428.316 3.6129 0.2005 re -f* -0.498 0 0.482 rg -367.253 428.316 11.2403 0.2005 re -f* -1 g -378.494 428.316 2.4087 0.2005 re -f* -0.498 0 0.482 rg -380.902 428.316 4.215 0.2005 re -f* -1 g -385.117 428.316 1.6058 0.2005 re -f* -0.498 0 0.482 rg -386.723 428.316 1.405 0.2005 re -f* -1 g -388.128 428.316 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 428.316 11.441 0.2005 re -f* -1 g -403.182 428.316 2.2079 0.2005 re -f* -0.498 0 0.482 rg -405.39 428.316 3.8137 0.2005 re -f* -1 g -409.204 428.316 2.6093 0.2005 re -f* -0.498 0 0.482 rg -411.813 428.316 4.8173 0.2005 re -f* -0 g -251.438 428.516 20.072 0.2006 re -f* -1 g -271.51 428.516 7.4266 0.2006 re -f* -0 g -278.937 428.516 16.0575 0.2006 re -f* -1 g -294.994 428.516 3.613 0.2006 re -f* -0 g -298.607 428.516 1.0036 0.2006 re -f* -1 g -299.611 428.516 1.2043 0.2006 re -f* -0 g -300.815 428.516 3.2115 0.2006 re -f* -1 g -304.027 428.516 3.2115 0.2006 re -f* -0 g -307.238 428.516 6.8245 0.2006 re -f* -1 g -314.063 428.516 2.2079 0.2006 re -f* -0 g -316.271 428.516 6.2223 0.2006 re -f* -1 g -322.493 428.516 2.0072 0.2006 re -f* -0 g -324.5 428.516 9.4338 0.2006 re -f* -1 g -333.934 428.516 2.6094 0.2006 re -f* -0 g -336.543 428.516 5.8208 0.2006 re -f* -1 g -342.364 428.516 2.8101 0.2006 re -f* -0 g -345.174 428.516 5.2187 0.2006 re -f* -1 g -350.393 428.516 9.2331 0.2006 re -f* -0.498 0 0.482 rg -359.626 428.516 1.0036 0.2006 re -f* -1 g -360.63 428.516 6.6237 0.2006 re -f* -0.498 0 0.482 rg -367.253 428.516 11.6418 0.2006 re -f* -1 g -378.895 428.516 2.4086 0.2006 re -f* -0.498 0 0.482 rg -381.304 428.516 3.4122 0.2006 re -f* -1 g -384.716 428.516 1.6057 0.2006 re -f* -0.498 0 0.482 rg -386.322 428.516 1.8065 0.2006 re -f* -1 g -388.128 428.516 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 428.516 11.6417 0.2006 re -f* -1 g -403.383 428.516 2.4087 0.2006 re -f* -0.498 0 0.482 rg -405.792 428.516 3.0108 0.2006 re -f* -1 g -408.802 428.516 2.6093 0.2006 re -f* -0.498 0 0.482 rg -411.412 428.516 5.018 0.2006 re -f* -0 g -251.438 428.717 20.072 0.2005 re -f* -1 g -271.51 428.717 7.4266 0.2005 re -f* -0 g -278.937 428.717 16.0575 0.2005 re -f* -1 g -294.994 428.717 3.613 0.2005 re -f* -0 g -298.607 428.717 1.2043 0.2005 re -f* -1 g -299.812 428.717 1.2043 0.2005 re -f* -0 g -301.016 428.717 3.0108 0.2005 re -f* -1 g -304.027 428.717 3.2115 0.2005 re -f* -0 g -307.238 428.717 7.0252 0.2005 re -f* -1 g -314.263 428.717 2.2079 0.2005 re -f* -0 g -316.471 428.717 6.0216 0.2005 re -f* -1 g -322.493 428.717 1.8065 0.2005 re -f* -0 g -324.299 428.717 10.0359 0.2005 re -f* -1 g -334.335 428.717 2.4087 0.2005 re -f* -0 g -336.744 428.717 5.4194 0.2005 re -f* -1 g -342.163 428.717 2.81 0.2005 re -f* -0 g -344.973 428.717 5.2188 0.2005 re -f* -1 g -350.192 428.717 9.4338 0.2005 re -f* -0.498 0 0.482 rg -359.626 428.717 1.0036 0.2005 re -f* -1 g -360.63 428.717 6.6237 0.2005 re -f* -0.498 0 0.482 rg -367.253 428.717 12.0432 0.2005 re -f* -1 g -379.297 428.717 2.81 0.2005 re -f* -0.498 0 0.482 rg -382.107 428.717 1.8066 0.2005 re -f* -1 g -383.913 428.717 2.2078 0.2005 re -f* -0.498 0 0.482 rg -386.121 428.717 2.0072 0.2005 re -f* -1 g -388.128 428.717 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 428.717 12.0432 0.2005 re -f* -1 g -403.784 428.717 2.81 0.2005 re -f* -0.498 0 0.482 rg -406.594 428.717 1.6058 0.2005 re -f* -1 g -408.2 428.717 2.8101 0.2005 re -f* -0.498 0 0.482 rg -411.01 428.717 5.4194 0.2005 re -f* -0 g -251.438 428.918 20.072 0.2006 re -f* -1 g -271.51 428.918 7.4266 0.2006 re -f* -0 g -278.937 428.918 16.0575 0.2006 re -f* -1 g -294.994 428.918 3.613 0.2006 re -f* -0 g -298.607 428.918 1.405 0.2006 re -f* -1 g -300.012 428.918 1.2043 0.2006 re -f* -0 g -301.217 428.918 2.8101 0.2006 re -f* -1 g -304.027 428.918 3.0108 0.2006 re -f* -0 g -307.038 428.918 7.4266 0.2006 re -f* -1 g -314.464 428.918 2.2079 0.2006 re -f* -0 g -316.672 428.918 5.6202 0.2006 re -f* -1 g -322.292 428.918 1.8065 0.2006 re -f* -0 g -324.099 428.918 10.4374 0.2006 re -f* -1 g -334.536 428.918 2.4086 0.2006 re -f* -0 g -336.945 428.918 5.018 0.2006 re -f* -1 g -341.963 428.918 2.8101 0.2006 re -f* -0 g -344.773 428.918 5.2186 0.2006 re -f* -1 g -349.991 428.918 9.6346 0.2006 re -f* -0.498 0 0.482 rg -359.626 428.918 1.0036 0.2006 re -f* -1 g -360.63 428.918 6.6237 0.2006 re -f* -0.498 0 0.482 rg -367.253 428.918 12.4447 0.2006 re -f* -1 g -379.698 428.918 6.0215 0.2006 re -f* -0.498 0 0.482 rg -385.72 428.918 2.4086 0.2006 re -f* -1 g -388.128 428.918 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 428.918 12.6453 0.2006 re -f* -1 g -404.386 428.918 6.2223 0.2006 re -f* -0.498 0 0.482 rg -410.609 428.918 5.8209 0.2006 re -f* -0 g -251.438 429.118 20.2727 0.2006 re -f* -1 g -271.711 429.118 7.2259 0.2006 re -f* -0 g -278.937 429.118 16.0575 0.2006 re -f* -1 g -294.994 429.118 3.613 0.2006 re -f* -0 g -298.607 429.118 1.6057 0.2006 re -f* -1 g -300.213 429.118 1.2044 0.2006 re -f* -0 g -301.417 429.118 2.4086 0.2006 re -f* -1 g -303.826 429.118 3.2115 0.2006 re -f* -0 g -307.038 429.118 7.828 0.2006 re -f* -1 g -314.866 429.118 2.0072 0.2006 re -f* -0 g -316.873 429.118 5.2188 0.2006 re -f* -1 g -322.092 429.118 1.8064 0.2006 re -f* -0 g -323.898 429.118 10.8389 0.2006 re -f* -1 g -334.737 429.118 2.4086 0.2006 re -f* -0 g -337.146 429.118 4.6166 0.2006 re -f* -1 g -341.762 429.118 2.6093 0.2006 re -f* -0 g -344.371 429.118 5.4195 0.2006 re -f* -1 g -349.791 429.118 9.8352 0.2006 re -f* -0.498 0 0.482 rg -359.626 429.118 20.4734 0.2006 re -f* -1 g -380.099 429.118 5.2187 0.2006 re -f* -0.498 0 0.482 rg -385.318 429.118 2.81 0.2006 re -f* -1 g -388.128 429.118 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 429.118 13.0468 0.2006 re -f* -1 g -404.788 429.118 5.4194 0.2006 re -f* -0.498 0 0.482 rg -410.207 429.118 6.2223 0.2006 re -f* -0 g -251.639 429.319 20.0719 0.2005 re -f* -1 g -271.711 429.319 7.2259 0.2005 re -f* -0 g -278.937 429.319 16.0575 0.2005 re -f* -1 g -294.994 429.319 3.613 0.2005 re -f* -0 g -298.607 429.319 1.8065 0.2005 re -f* -1 g -300.414 429.319 1.405 0.2005 re -f* -0 g -301.819 429.319 1.8065 0.2005 re -f* -1 g -303.625 429.319 3.2115 0.2005 re -f* -0 g -306.837 429.319 8.4302 0.2005 re -f* -1 g -315.267 429.319 1.8065 0.2005 re -f* -0 g -317.074 429.319 4.8172 0.2005 re -f* -1 g -321.891 429.319 1.6058 0.2005 re -f* -0 g -323.497 429.319 11.6417 0.2005 re -f* -1 g -335.138 429.319 2.208 0.2005 re -f* -0 g -337.346 429.319 4.2151 0.2005 re -f* -1 g -341.561 429.319 2.6093 0.2005 re -f* -0 g -344.171 429.319 5.6202 0.2005 re -f* -1 g -349.791 429.319 9.8352 0.2005 re -f* -0.498 0 0.482 rg -359.626 429.319 21.2763 0.2005 re -f* -1 g -380.902 429.319 3.8136 0.2005 re -f* -0.498 0 0.482 rg -384.716 429.319 3.4122 0.2005 re -f* -1 g -388.128 429.319 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 429.319 13.8497 0.2005 re -f* -1 g -405.591 429.319 3.8136 0.2005 re -f* -0.498 0 0.482 rg -409.404 429.319 6.8244 0.2005 re -f* -0 g -251.639 429.519 20.0719 0.2005 re -f* -1 g -271.711 429.519 7.2259 0.2005 re -f* -0 g -278.937 429.519 13.0467 0.2005 re -f* -1 g -291.984 429.519 0.2008 0.2005 re -f* -0 g -292.184 429.519 2.81 0.2005 re -f* -1 g -294.994 429.519 3.613 0.2005 re -f* -0 g -298.607 429.519 2.0072 0.2005 re -f* -1 g -300.615 429.519 1.6057 0.2005 re -f* -0 g -302.22 429.519 1.2044 0.2005 re -f* -1 g -303.425 429.519 3.2115 0.2005 re -f* -0 g -306.636 429.519 9.0324 0.2005 re -f* -1 g -315.669 429.519 1.8064 0.2005 re -f* -0 g -317.475 429.519 4.2152 0.2005 re -f* -1 g -321.69 429.519 1.405 0.2005 re -f* -0 g -323.095 429.519 12.2439 0.2005 re -f* -1 g -335.339 429.519 2.4086 0.2005 re -f* -0 g -337.748 429.519 3.6129 0.2005 re -f* -1 g -341.361 429.519 2.4087 0.2005 re -f* -0 g -343.769 429.519 5.8208 0.2005 re -f* -1 g -349.59 429.519 10.036 0.2005 re -f* -0.498 0 0.482 rg -359.626 429.519 22.4805 0.2005 re -f* -1 g -382.107 429.519 1.4051 0.2005 re -f* -0.498 0 0.482 rg -383.512 429.519 4.6165 0.2005 re -f* -1 g -388.128 429.519 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 429.519 15.054 0.2005 re -f* -1 g -406.795 429.519 1.6057 0.2005 re -f* -0.498 0 0.482 rg -408.401 429.519 7.828 0.2005 re -f* -0 g -251.639 429.72 20.0719 0.2006 re -f* -1 g -271.711 429.72 7.2259 0.2006 re -f* -0 g -278.937 429.72 13.0467 0.2006 re -f* -1 g -291.984 429.72 6.6238 0.2006 re -f* -0 g -298.607 429.72 2.2079 0.2006 re -f* -1 g -300.815 429.72 5.6202 0.2006 re -f* -0 g -306.435 429.72 9.6345 0.2006 re -f* -1 g -316.07 429.72 1.8064 0.2006 re -f* -0 g -317.876 429.72 3.4123 0.2006 re -f* -1 g -321.289 429.72 1.4051 0.2006 re -f* -0 g -322.694 429.72 13.0467 0.2006 re -f* -1 g -335.74 429.72 2.6093 0.2006 re -f* -0 g -338.35 429.72 2.4087 0.2006 re -f* -1 g -340.758 429.72 2.81 0.2006 re -f* -0 g -343.568 429.72 5.8209 0.2006 re -f* -1 g -349.389 429.72 10.2367 0.2006 re -f* -0.498 0 0.482 rg -359.626 429.72 28.5021 0.2006 re -f* -1 g -388.128 429.72 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 429.72 24.4877 0.2006 re -f* -0 g -251.639 429.92 20.0719 0.2006 re -f* -1 g -271.711 429.92 7.2259 0.2006 re -f* -0 g -278.937 429.92 13.0467 0.2006 re -f* -1 g -291.984 429.92 6.6238 0.2006 re -f* -0 g -298.607 429.92 2.6093 0.2006 re -f* -1 g -301.217 429.92 5.018 0.2006 re -f* -0 g -306.235 429.92 10.4374 0.2006 re -f* -1 g -316.672 429.92 2.0073 0.2006 re -f* -0 g -318.679 429.92 1.8064 0.2006 re -f* -1 g -320.486 429.92 1.6058 0.2006 re -f* -0 g -322.092 429.92 14.0503 0.2006 re -f* -1 g -336.142 429.92 7.0252 0.2006 re -f* -0 g -343.167 429.92 6.0216 0.2006 re -f* -1 g -349.189 429.92 10.2367 0.2006 re -f* -0.498 0 0.482 rg -359.425 429.92 28.7028 0.2006 re -f* -1 g -388.128 429.92 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 429.92 24.2871 0.2006 re -f* -0 g -251.84 430.121 19.8712 0.2006 re -f* -1 g -271.711 430.121 7.2259 0.2006 re -f* -0 g -278.937 430.121 13.0467 0.2006 re -f* -1 g -291.984 430.121 6.6238 0.2006 re -f* -0 g -298.607 430.121 2.8101 0.2006 re -f* -1 g -301.417 430.121 4.4158 0.2006 re -f* -0 g -305.833 430.121 11.6417 0.2006 re -f* -1 g -317.475 430.121 4.0144 0.2006 re -f* -0 g -321.489 430.121 15.2547 0.2006 re -f* -1 g -336.744 430.121 6.0216 0.2006 re -f* -0 g -342.766 430.121 6.2222 0.2006 re -f* -1 g -348.988 430.121 10.4375 0.2006 re -f* -0.498 0 0.482 rg -359.425 430.121 28.7028 0.2006 re -f* -1 g -388.128 430.121 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 430.121 24.2871 0.2006 re -f* -0 g -251.84 430.322 19.8712 0.2005 re -f* -1 g -271.711 430.322 7.2259 0.2005 re -f* -0 g -278.937 430.322 23.0827 0.2005 re -f* -1 g -302.02 430.322 3.4123 0.2005 re -f* -0 g -305.432 430.322 13.4481 0.2005 re -f* -1 g -318.88 430.322 1.6058 0.2005 re -f* -0 g -320.486 430.322 16.8605 0.2005 re -f* -1 g -337.346 430.322 4.8172 0.2005 re -f* -0 g -342.163 430.322 6.6238 0.2005 re -f* -1 g -348.787 430.322 10.6381 0.2005 re -f* -0.498 0 0.482 rg -359.425 430.322 28.7028 0.2005 re -f* -1 g -388.128 430.322 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 430.322 24.2871 0.2005 re -f* -0 g -251.84 430.522 19.8712 0.2006 re -f* -1 g -271.711 430.522 7.2259 0.2006 re -f* -0 g -278.937 430.522 23.6849 0.2006 re -f* -1 g -302.622 430.522 2.2079 0.2006 re -f* -0 g -304.83 430.522 33.3194 0.2006 re -f* -1 g -338.149 430.522 3.2115 0.2006 re -f* -0 g -341.361 430.522 7.2259 0.2006 re -f* -1 g -348.586 430.522 10.8389 0.2006 re -f* -0.498 0 0.482 rg -359.425 430.522 28.7028 0.2006 re -f* -1 g -388.128 430.522 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 430.522 24.0863 0.2006 re -f* -0 g -252.04 430.723 19.8712 0.2005 re -f* -1 g -271.912 430.723 7.0252 0.2005 re -f* -0 g -278.937 430.723 69.4489 0.2005 re -f* -1 g -348.386 430.723 11.0396 0.2005 re -f* -0.498 0 0.482 rg -359.425 430.723 28.7028 0.2005 re -f* -1 g -388.128 430.723 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 430.723 24.0863 0.2005 re -f* -0 g -252.04 430.923 19.8712 0.2006 re -f* -1 g -271.912 430.923 7.0252 0.2006 re -f* -0 g -278.937 430.923 69.2482 0.2006 re -f* -1 g -348.185 430.923 11.0395 0.2006 re -f* -0.498 0 0.482 rg -359.225 430.923 28.9036 0.2006 re -f* -1 g -388.128 430.923 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 430.923 24.0863 0.2006 re -f* -0 g -252.04 431.124 19.8712 0.2006 re -f* -1 g -271.912 431.124 7.0252 0.2006 re -f* -0 g -278.937 431.124 69.0474 0.2006 re -f* -1 g -347.984 431.124 11.2403 0.2006 re -f* -0.498 0 0.482 rg -359.225 431.124 28.9036 0.2006 re -f* -1 g -388.128 431.124 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 431.124 23.8856 0.2006 re -f* -0 g -252.241 431.324 19.6705 0.2005 re -f* -1 g -271.912 431.324 7.0252 0.2005 re -f* -0 g -278.937 431.324 68.8468 0.2005 re -f* -1 g -347.784 431.324 11.4409 0.2005 re -f* -0.498 0 0.482 rg -359.225 431.324 28.9036 0.2005 re -f* -1 g -388.128 431.324 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 431.324 23.8856 0.2005 re -f* -0 g -252.241 431.525 19.6705 0.2005 re -f* -1 g -271.912 431.525 7.0252 0.2005 re -f* -0 g -278.937 431.525 68.4453 0.2005 re -f* -1 g -347.382 431.525 11.8424 0.2005 re -f* -0.498 0 0.482 rg -359.225 431.525 28.9036 0.2005 re -f* -1 g -388.128 431.525 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 431.525 23.8856 0.2005 re -f* -0 g -252.241 431.725 19.6705 0.2006 re -f* -1 g -271.912 431.725 7.0252 0.2006 re -f* -0 g -278.937 431.725 68.2446 0.2006 re -f* -1 g -347.181 431.725 11.8424 0.2006 re -f* -0.498 0 0.482 rg -359.024 431.725 29.1043 0.2006 re -f* -1 g -388.128 431.725 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 431.725 23.6849 0.2006 re -f* -0 g -252.442 431.926 19.6705 0.2006 re -f* -1 g -272.112 431.926 6.8245 0.2006 re -f* -0 g -278.937 431.926 68.0438 0.2006 re -f* -1 g -346.981 431.926 12.0432 0.2006 re -f* -0.498 0 0.482 rg -359.024 431.926 29.1043 0.2006 re -f* -1 g -388.128 431.926 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 431.926 23.6849 0.2006 re -f* -0 g -252.442 432.127 19.6705 0.2005 re -f* -1 g -272.112 432.127 6.8245 0.2005 re -f* -0 g -278.937 432.127 67.6424 0.2005 re -f* -1 g -346.579 432.127 12.4446 0.2005 re -f* -0.498 0 0.482 rg -359.024 432.127 29.1043 0.2005 re -f* -1 g -388.128 432.127 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 432.127 23.4841 0.2005 re -f* -0 g -252.643 432.327 19.4697 0.2005 re -f* -1 g -272.112 432.327 6.8245 0.2005 re -f* -0 g -278.937 432.327 67.4417 0.2005 re -f* -1 g -346.379 432.327 12.6453 0.2005 re -f* -0.498 0 0.482 rg -359.024 432.327 29.1043 0.2005 re -f* -1 g -388.128 432.327 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 432.327 23.4841 0.2005 re -f* -0 g -252.643 432.528 19.4697 0.2006 re -f* -1 g -272.112 432.528 6.8245 0.2006 re -f* -0 g -278.937 432.528 67.0402 0.2006 re -f* -1 g -345.977 432.528 12.8461 0.2006 re -f* -0.498 0 0.482 rg -358.823 432.528 29.305 0.2006 re -f* -1 g -388.128 432.528 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 432.528 23.4841 0.2006 re -f* -0 g -252.643 432.728 19.6705 0.2006 re -f* -1 g -272.313 432.728 6.6237 0.2006 re -f* -0 g -278.937 432.728 66.8396 0.2006 re -f* -1 g -345.776 432.728 13.0467 0.2006 re -f* -0.498 0 0.482 rg -358.823 432.728 29.305 0.2006 re -f* -1 g -388.128 432.728 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 432.728 23.2835 0.2006 re -f* -0 g -252.843 432.929 19.4698 0.2006 re -f* -1 g -272.313 432.929 6.6237 0.2006 re -f* -0 g -278.937 432.929 66.4381 0.2006 re -f* -1 g -345.375 432.929 13.4482 0.2006 re -f* -0.498 0 0.482 rg -358.823 432.929 29.305 0.2006 re -f* -1 g -388.128 432.929 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 432.929 23.2835 0.2006 re -f* -0 g -252.843 433.129 19.4698 0.2006 re -f* -1 g -272.313 433.129 6.6237 0.2006 re -f* -0 g -278.937 433.129 66.0366 0.2006 re -f* -1 g -344.973 433.129 13.649 0.2006 re -f* -0.498 0 0.482 rg -358.623 433.129 29.5057 0.2006 re -f* -1 g -388.128 433.129 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 433.129 23.2835 0.2006 re -f* -0 g -253.044 433.33 19.2691 0.2005 re -f* -1 g -272.313 433.33 6.8244 0.2005 re -f* -0 g -279.138 433.33 65.4345 0.2005 re -f* -1 g -344.572 433.33 14.0504 0.2005 re -f* -0.498 0 0.482 rg -358.623 433.33 29.5057 0.2005 re -f* -1 g -388.128 433.33 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 433.33 23.0827 0.2005 re -f* -0 g -253.044 433.53 19.4698 0.2005 re -f* -1 g -272.514 433.53 6.6237 0.2005 re -f* -0 g -279.138 433.53 65.0331 0.2005 re -f* -1 g -344.171 433.53 14.2511 0.2005 re -f* -0.498 0 0.482 rg -358.422 433.53 29.7064 0.2005 re -f* -1 g -388.128 433.53 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 433.53 23.0827 0.2005 re -f* -0 g -253.044 433.731 19.4698 0.2006 re -f* -1 g -272.514 433.731 6.6237 0.2006 re -f* -0 g -279.138 433.731 64.6317 0.2006 re -f* -1 g -343.769 433.731 14.6525 0.2006 re -f* -0.498 0 0.482 rg -358.422 433.731 29.7064 0.2006 re -f* -1 g -388.128 433.731 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 433.731 22.882 0.2006 re -f* -0 g -253.245 433.932 19.2691 0.2006 re -f* -1 g -272.514 433.932 6.6237 0.2006 re -f* -0 g -279.138 433.932 64.2302 0.2006 re -f* -1 g -343.368 433.932 14.8532 0.2006 re -f* -0.498 0 0.482 rg -358.221 433.932 29.9072 0.2006 re -f* -1 g -388.128 433.932 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 433.932 22.882 0.2006 re -f* -0 g -253.245 434.132 19.2691 0.2005 re -f* -1 g -272.514 434.132 6.6237 0.2005 re -f* -0 g -279.138 434.132 63.8288 0.2005 re -f* -1 g -342.966 434.132 15.2546 0.2005 re -f* -0.498 0 0.482 rg -358.221 434.132 29.9072 0.2005 re -f* -1 g -388.128 434.132 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 434.132 22.6813 0.2005 re -f* -0 g -253.445 434.333 19.2691 0.2006 re -f* -1 g -272.715 434.333 6.423 0.2006 re -f* -0 g -279.138 434.333 15.4554 0.2006 re -f* -1 g -294.593 434.333 2.4086 0.2006 re -f* -0 g -297.002 434.333 45.3626 0.2006 re -f* -1 g -342.364 434.333 15.6561 0.2006 re -f* -0.498 0 0.482 rg -358.02 434.333 30.1079 0.2006 re -f* -1 g -388.128 434.333 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 434.333 22.6813 0.2006 re -f* -0 g -253.445 434.533 19.2691 0.2005 re -f* -1 g -272.715 434.533 6.423 0.2005 re -f* -0 g -279.138 434.533 14.6525 0.2005 re -f* -1 g -293.79 434.533 3.8137 0.2005 re -f* -0 g -297.604 434.533 44.359 0.2005 re -f* -1 g -341.963 434.533 16.0575 0.2005 re -f* -0.498 0 0.482 rg -358.02 434.533 30.1079 0.2005 re -f* -1 g -388.128 434.533 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 434.533 22.4805 0.2005 re -f* -0 g -253.646 434.734 19.0683 0.2006 re -f* -1 g -272.715 434.734 6.423 0.2006 re -f* -0 g -279.138 434.734 14.0504 0.2006 re -f* -1 g -293.188 434.734 4.8172 0.2006 re -f* -0 g -298.005 434.734 43.3554 0.2006 re -f* -1 g -341.361 434.734 16.459 0.2006 re -f* -0.498 0 0.482 rg -357.82 434.734 30.3086 0.2006 re -f* -1 g -388.128 434.734 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 434.734 22.4805 0.2006 re -f* -0 g -253.646 434.934 19.269 0.2005 re -f* -1 g -272.915 434.934 6.2223 0.2005 re -f* -0 g -279.138 434.934 13.6489 0.2005 re -f* -1 g -292.786 434.934 5.6202 0.2005 re -f* -0 g -298.407 434.934 42.3518 0.2005 re -f* -1 g -340.758 434.934 17.0611 0.2005 re -f* -0.498 0 0.482 rg -357.82 434.934 30.3086 0.2005 re -f* -1 g -388.128 434.934 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 434.934 22.4805 0.2005 re -f* -0 g -253.847 435.135 19.0683 0.2006 re -f* -1 g -272.915 435.135 6.2223 0.2006 re -f* -0 g -279.138 435.135 13.2475 0.2006 re -f* -1 g -292.385 435.135 6.2223 0.2006 re -f* -0 g -298.607 435.135 41.5489 0.2006 re -f* -1 g -340.156 435.135 17.4626 0.2006 re -f* -0.498 0 0.482 rg -357.619 435.135 30.5093 0.2006 re -f* -1 g -388.128 435.135 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 435.135 22.2799 0.2006 re -f* -0 g -253.847 435.335 19.0683 0.2005 re -f* -1 g -272.915 435.335 6.2223 0.2005 re -f* -0 g -279.138 435.335 13.0468 0.2005 re -f* -1 g -292.184 435.335 6.6237 0.2005 re -f* -0 g -298.808 435.335 40.7461 0.2005 re -f* -1 g -339.554 435.335 17.864 0.2005 re -f* -0.498 0 0.482 rg -357.418 435.335 30.71 0.2005 re -f* -1 g -388.128 435.335 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 435.335 22.2799 0.2005 re -f* -0 g -254.048 435.536 19.0683 0.2006 re -f* -1 g -273.116 435.536 6.0216 0.2006 re -f* -0 g -279.138 435.536 13.0468 0.2006 re -f* -1 g -292.184 435.536 6.8244 0.2006 re -f* -0 g -299.009 435.536 39.7425 0.2006 re -f* -1 g -338.751 435.536 18.6669 0.2006 re -f* -0.498 0 0.482 rg -357.418 435.536 30.71 0.2006 re -f* -1 g -388.128 435.536 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 435.536 22.0791 0.2006 re -f* -0 g -254.048 435.737 19.0683 0.2006 re -f* -1 g -273.116 435.737 6.0216 0.2006 re -f* -0 g -279.138 435.737 12.846 0.2006 re -f* -1 g -291.984 435.737 7.0252 0.2006 re -f* -0 g -299.009 435.737 39.1403 0.2006 re -f* -1 g -338.149 435.737 19.0683 0.2006 re -f* -0.498 0 0.482 rg -357.217 435.737 30.9108 0.2006 re -f* -1 g -388.128 435.737 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 435.737 22.0791 0.2006 re -f* -0 g -254.248 435.937 19.0683 0.2006 re -f* -1 g -273.317 435.937 5.8209 0.2006 re -f* -0 g -279.138 435.937 12.6453 0.2006 re -f* -1 g -291.783 435.937 7.4266 0.2006 re -f* -0 g -299.209 435.937 38.3375 0.2006 re -f* -1 g -337.547 435.937 19.4697 0.2006 re -f* -0.498 0 0.482 rg -357.017 435.937 31.1115 0.2006 re -f* -1 g -388.128 435.937 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 435.937 21.8784 0.2006 re -f* -0 g -254.248 436.138 19.0683 0.2005 re -f* -1 g -273.317 436.138 6.0216 0.2005 re -f* -0 g -279.338 436.138 12.4446 0.2005 re -f* -1 g -291.783 436.138 7.4266 0.2005 re -f* -0 g -299.209 436.138 37.7353 0.2005 re -f* -1 g -336.945 436.138 20.0719 0.2005 re -f* -0.498 0 0.482 rg -357.017 436.138 7.4267 0.2005 re -f* -1 g -364.443 436.138 1.8064 0.2005 re -f* -0.498 0 0.482 rg -366.25 436.138 21.8784 0.2005 re -f* -1 g -388.128 436.138 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 436.138 21.8784 0.2005 re -f* -0 g -254.449 436.338 19.0684 0.2005 re -f* -1 g -273.517 436.338 5.8208 0.2005 re -f* -0 g -279.338 436.338 12.4446 0.2005 re -f* -1 g -291.783 436.338 7.6274 0.2005 re -f* -0 g -299.41 436.338 36.9324 0.2005 re -f* -1 g -336.343 436.338 20.4733 0.2005 re -f* -0.498 0 0.482 rg -356.816 436.338 7.2259 0.2005 re -f* -1 g -364.042 436.338 2.6094 0.2005 re -f* -0.498 0 0.482 rg -366.651 436.338 21.4769 0.2005 re -f* -1 g -388.128 436.338 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 436.338 21.6777 0.2005 re -f* -0 g -254.449 436.539 19.0684 0.2006 re -f* -1 g -273.517 436.539 5.8208 0.2006 re -f* -0 g -279.338 436.539 12.4446 0.2006 re -f* -1 g -291.783 436.539 7.8281 0.2006 re -f* -0 g -299.611 436.539 35.9288 0.2006 re -f* -1 g -335.54 436.539 21.0755 0.2006 re -f* -0.498 0 0.482 rg -356.615 436.539 7.2259 0.2006 re -f* -1 g -363.841 436.539 3.0108 0.2006 re -f* -0.498 0 0.482 rg -366.852 436.539 21.2762 0.2006 re -f* -1 g -388.128 436.539 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 436.539 21.6777 0.2006 re -f* -0 g -254.65 436.739 19.0684 0.2006 re -f* -1 g -273.718 436.739 5.6201 0.2006 re -f* -0 g -279.338 436.739 12.4446 0.2006 re -f* -1 g -291.783 436.739 7.8281 0.2006 re -f* -0 g -299.611 436.739 35.3266 0.2006 re -f* -1 g -334.938 436.739 21.477 0.2006 re -f* -0.498 0 0.482 rg -356.415 436.739 7.2259 0.2006 re -f* -1 g -363.641 436.739 3.4122 0.2006 re -f* -0.498 0 0.482 rg -367.053 436.739 21.0755 0.2006 re -f* -1 g -388.128 436.739 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 436.739 21.4769 0.2006 re -f* -0 g -254.65 436.94 19.0684 0.2006 re -f* -1 g -273.718 436.94 5.6201 0.2006 re -f* -0 g -279.338 436.94 12.4446 0.2006 re -f* -1 g -291.783 436.94 7.8281 0.2006 re -f* -0 g -299.611 436.94 34.7244 0.2006 re -f* -1 g -334.335 436.94 22.0792 0.2006 re -f* -0.498 0 0.482 rg -356.415 436.94 7.0252 0.2006 re -f* -1 g -363.44 436.94 3.8136 0.2006 re -f* -0.498 0 0.482 rg -367.253 436.94 20.8748 0.2006 re -f* -1 g -388.128 436.94 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 436.94 21.2763 0.2006 re -f* -0 g -254.851 437.141 19.0684 0.2005 re -f* -1 g -273.919 437.141 5.4194 0.2005 re -f* -0 g -279.338 437.141 12.4446 0.2005 re -f* -1 g -291.783 437.141 8.0288 0.2005 re -f* -0 g -299.812 437.141 33.9216 0.2005 re -f* -1 g -333.733 437.141 22.4805 0.2005 re -f* -0.498 0 0.482 rg -356.214 437.141 7.226 0.2005 re -f* -1 g -363.44 437.141 3.8136 0.2005 re -f* -0.498 0 0.482 rg -367.253 437.141 20.8748 0.2005 re -f* -1 g -388.128 437.141 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 437.141 21.2763 0.2005 re -f* -0 g -254.851 437.341 19.0684 0.2005 re -f* -1 g -273.919 437.341 5.4194 0.2005 re -f* -0 g -279.338 437.341 12.4446 0.2005 re -f* -1 g -291.783 437.341 8.0288 0.2005 re -f* -0 g -299.812 437.341 33.3194 0.2005 re -f* -1 g -333.131 437.341 22.882 0.2005 re -f* -0.498 0 0.482 rg -356.013 437.341 7.2259 0.2005 re -f* -1 g -363.239 437.341 4.2152 0.2005 re -f* -0.498 0 0.482 rg -367.454 437.341 20.674 0.2005 re -f* -1 g -388.128 437.341 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 437.341 21.0755 0.2005 re -f* -0 g -255.051 437.542 19.0683 0.2006 re -f* -1 g -274.12 437.542 5.4195 0.2006 re -f* -0 g -279.539 437.542 12.2438 0.2006 re -f* -1 g -291.783 437.542 8.0288 0.2006 re -f* -0 g -299.812 437.542 32.5165 0.2006 re -f* -1 g -332.328 437.542 23.4842 0.2006 re -f* -0.498 0 0.482 rg -355.812 437.542 7.4266 0.2006 re -f* -1 g -363.239 437.542 4.2152 0.2006 re -f* -0.498 0 0.482 rg -367.454 437.542 20.674 0.2006 re -f* -1 g -388.128 437.542 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 437.542 21.0755 0.2006 re -f* -0 g -255.252 437.742 18.8676 0.2006 re -f* -1 g -274.12 437.742 5.4195 0.2006 re -f* -0 g -279.539 437.742 12.2438 0.2006 re -f* -1 g -291.783 437.742 8.0288 0.2006 re -f* -0 g -299.812 437.742 31.9144 0.2006 re -f* -1 g -331.726 437.742 23.8856 0.2006 re -f* -0.498 0 0.482 rg -355.612 437.742 7.6273 0.2006 re -f* -1 g -363.239 437.742 4.2152 0.2006 re -f* -0.498 0 0.482 rg -367.454 437.742 20.674 0.2006 re -f* -1 g -388.128 437.742 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 437.742 20.8748 0.2006 re -f* -0 g -255.252 437.943 19.0683 0.2005 re -f* -1 g -274.32 437.943 5.2188 0.2005 re -f* -0 g -279.539 437.943 12.2438 0.2005 re -f* -1 g -291.783 437.943 8.2295 0.2005 re -f* -0 g -300.012 437.943 31.1115 0.2005 re -f* -1 g -331.124 437.943 24.2871 0.2005 re -f* -0.498 0 0.482 rg -355.411 437.943 7.828 0.2005 re -f* -1 g -363.239 437.943 4.2152 0.2005 re -f* -0.498 0 0.482 rg -367.454 437.943 20.674 0.2005 re -f* -1 g -388.128 437.943 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 437.943 20.8748 0.2005 re -f* -0 g -255.453 438.143 19.0684 0.2006 re -f* -1 g -274.521 438.143 5.018 0.2006 re -f* -0 g -279.539 438.143 12.2438 0.2006 re -f* -1 g -291.783 438.143 8.2295 0.2006 re -f* -0 g -300.012 438.143 30.5094 0.2006 re -f* -1 g -330.522 438.143 24.6885 0.2006 re -f* -0.498 0 0.482 rg -355.21 438.143 8.0287 0.2006 re -f* -1 g -363.239 438.143 4.4159 0.2006 re -f* -0.498 0 0.482 rg -367.655 438.143 20.4733 0.2006 re -f* -1 g -388.128 438.143 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 438.143 20.6741 0.2006 re -f* -0 g -255.453 438.344 19.0684 0.2005 re -f* -1 g -274.521 438.344 5.2186 0.2005 re -f* -0 g -279.74 438.344 12.0432 0.2005 re -f* -1 g -291.783 438.344 8.2295 0.2005 re -f* -0 g -300.012 438.344 29.9072 0.2005 re -f* -1 g -329.92 438.344 25.2907 0.2005 re -f* -0.498 0 0.482 rg -355.21 438.344 8.0287 0.2005 re -f* -1 g -363.239 438.344 4.4159 0.2005 re -f* -0.498 0 0.482 rg -367.655 438.344 20.4733 0.2005 re -f* -1 g -388.128 438.344 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 438.344 20.6741 0.2005 re -f* -0 g -255.653 438.544 19.0683 0.2006 re -f* -1 g -274.722 438.544 5.018 0.2006 re -f* -0 g -279.74 438.544 12.2439 0.2006 re -f* -1 g -291.984 438.544 8.0288 0.2006 re -f* -0 g -300.012 438.544 29.3051 0.2006 re -f* -1 g -329.317 438.544 25.692 0.2006 re -f* -0.498 0 0.482 rg -355.01 438.544 8.2295 0.2006 re -f* -1 g -363.239 438.544 4.2152 0.2006 re -f* -0.498 0 0.482 rg -367.454 438.544 20.674 0.2006 re -f* -1 g -388.128 438.544 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 438.544 20.4734 0.2006 re -f* -0 g -255.653 438.745 19.2691 0.2006 re -f* -1 g -274.922 438.745 4.8172 0.2006 re -f* -0 g -279.74 438.745 12.2439 0.2006 re -f* -1 g -291.984 438.745 8.0288 0.2006 re -f* -0 g -300.012 438.745 28.7029 0.2006 re -f* -1 g -328.715 438.745 26.0935 0.2006 re -f* -0.498 0 0.482 rg -354.809 438.745 8.4302 0.2006 re -f* -1 g -363.239 438.745 4.2152 0.2006 re -f* -0.498 0 0.482 rg -367.454 438.745 20.674 0.2006 re -f* -1 g -388.128 438.745 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 438.745 20.2727 0.2006 re -f* -0 g -255.854 438.946 19.0684 0.2005 re -f* -1 g -274.922 438.946 4.8172 0.2005 re -f* -0 g -279.74 438.946 12.4447 0.2005 re -f* -1 g -292.184 438.946 7.828 0.2005 re -f* -0 g -300.012 438.946 28.1007 0.2005 re -f* -1 g -328.113 438.946 26.2943 0.2005 re -f* -0.498 0 0.482 rg -354.407 438.946 8.8316 0.2005 re -f* -1 g -363.239 438.946 4.2152 0.2005 re -f* -0.498 0 0.482 rg -367.454 438.946 20.674 0.2005 re -f* -1 g -388.128 438.946 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 438.946 20.2727 0.2005 re -f* -0 g -256.055 439.146 19.0683 0.2006 re -f* -1 g -275.123 439.146 4.8173 0.2006 re -f* -0 g -279.94 439.146 12.2439 0.2006 re -f* -1 g -292.184 439.146 7.828 0.2006 re -f* -0 g -300.012 439.146 27.4986 0.2006 re -f* -1 g -327.511 439.146 26.6957 0.2006 re -f* -0.498 0 0.482 rg -354.207 439.146 9.0323 0.2006 re -f* -1 g -363.239 439.146 4.2152 0.2006 re -f* -0.498 0 0.482 rg -367.454 439.146 20.674 0.2006 re -f* -1 g -388.128 439.146 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 439.146 20.0719 0.2006 re -f* -0 g -256.055 439.347 19.269 0.2005 re -f* -1 g -275.324 439.347 4.6166 0.2005 re -f* -0 g -279.94 439.347 12.4446 0.2005 re -f* -1 g -292.385 439.347 7.6273 0.2005 re -f* -0 g -300.012 439.347 26.8964 0.2005 re -f* -1 g -326.909 439.347 27.0971 0.2005 re -f* -0.498 0 0.482 rg -354.006 439.347 9.4339 0.2005 re -f* -1 g -363.44 439.347 3.8136 0.2005 re -f* -0.498 0 0.482 rg -367.253 439.347 20.8748 0.2005 re -f* -1 g -388.128 439.347 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 439.347 19.8712 0.2005 re -f* -0 g -256.256 439.547 19.2691 0.2006 re -f* -1 g -275.525 439.547 4.4158 0.2006 re -f* -0 g -279.94 439.547 12.4446 0.2006 re -f* -1 g -292.385 439.547 7.6273 0.2006 re -f* -0 g -300.012 439.547 26.495 0.2006 re -f* -1 g -326.507 439.547 27.2979 0.2006 re -f* -0.498 0 0.482 rg -353.805 439.547 9.8352 0.2006 re -f* -1 g -363.641 439.547 3.4122 0.2006 re -f* -0.498 0 0.482 rg -367.053 439.547 21.0755 0.2006 re -f* -1 g -388.128 439.547 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 439.547 19.8712 0.2006 re -f* -0 g -256.456 439.748 19.0684 0.2006 re -f* -1 g -275.525 439.748 4.6165 0.2006 re -f* -0 g -280.141 439.748 12.4446 0.2006 re -f* -1 g -292.586 439.748 7.2259 0.2006 re -f* -0 g -299.812 439.748 26.0935 0.2006 re -f* -1 g -325.905 439.748 27.6993 0.2006 re -f* -0.498 0 0.482 rg -353.605 439.748 10.2367 0.2006 re -f* -1 g -363.841 439.748 3.2115 0.2006 re -f* -0.498 0 0.482 rg -367.053 439.748 21.0755 0.2006 re -f* -1 g -388.128 439.748 3.613 0.2006 re -f* -0.498 0 0.482 rg -391.741 439.748 19.6705 0.2006 re -f* -0 g -256.456 439.948 19.269 0.2005 re -f* -1 g -275.725 439.948 4.4159 0.2005 re -f* -0 g -280.141 439.948 12.6453 0.2005 re -f* -1 g -292.786 439.948 7.0252 0.2005 re -f* -0 g -299.812 439.948 25.6921 0.2005 re -f* -1 g -325.504 439.948 27.6993 0.2005 re -f* -0.498 0 0.482 rg -353.203 439.948 10.8388 0.2005 re -f* -1 g -364.042 439.948 2.6094 0.2005 re -f* -0.498 0 0.482 rg -366.651 439.948 18.4661 0.2005 re -f* -1 g -385.117 439.948 0.2008 0.2005 re -f* -0.498 0 0.482 rg -385.318 439.948 2.81 0.2005 re -f* -1 g -388.128 439.948 3.613 0.2005 re -f* -0.498 0 0.482 rg -391.741 439.948 19.6705 0.2005 re -f* -0 g -256.657 440.149 19.2691 0.2006 re -f* -1 g -275.926 440.149 4.2151 0.2006 re -f* -0 g -280.141 440.149 12.6453 0.2006 re -f* -1 g -292.786 440.149 7.0252 0.2006 re -f* -0 g -299.812 440.149 25.2907 0.2006 re -f* -1 g -325.102 440.149 27.8999 0.2006 re -f* -0.498 0 0.482 rg -353.002 440.149 11.2403 0.2006 re -f* -1 g -364.243 440.149 2.208 0.2006 re -f* -0.498 0 0.482 rg -366.451 440.149 18.6668 0.2006 re -f* -1 g -385.117 440.149 6.6238 0.2006 re -f* -0.498 0 0.482 rg -391.741 440.149 19.4698 0.2006 re -f* -0 g -256.858 440.35 19.2691 0.2005 re -f* -1 g -276.127 440.35 4.2151 0.2005 re -f* -0 g -280.342 440.35 12.6453 0.2005 re -f* -1 g -292.987 440.35 6.8245 0.2005 re -f* -0 g -299.812 440.35 24.6885 0.2005 re -f* -1 g -324.5 440.35 28.1007 0.2005 re -f* -0.498 0 0.482 rg -352.601 440.35 12.2439 0.2005 re -f* -1 g -364.845 440.35 1.0036 0.2005 re -f* -0.498 0 0.482 rg -365.848 440.35 19.269 0.2005 re -f* -1 g -385.117 440.35 6.6238 0.2005 re -f* -0.498 0 0.482 rg -391.741 440.35 19.2691 0.2005 re -f* -0 g -256.858 440.55 19.4698 0.2006 re -f* -1 g -276.327 440.55 4.0144 0.2006 re -f* -0 g -280.342 440.55 12.6453 0.2006 re -f* -1 g -292.987 440.55 6.6238 0.2006 re -f* -0 g -299.611 440.55 24.4878 0.2006 re -f* -1 g -324.099 440.55 28.3014 0.2006 re -f* -0.498 0 0.482 rg -352.4 440.55 32.7172 0.2006 re -f* -1 g -385.117 440.55 6.6238 0.2006 re -f* -0.498 0 0.482 rg -391.741 440.55 19.2691 0.2006 re -f* -0 g -257.058 440.751 19.4698 0.2005 re -f* -1 g -276.528 440.751 4.0144 0.2005 re -f* -0 g -280.543 440.751 12.6453 0.2005 re -f* -1 g -293.188 440.751 6.423 0.2005 re -f* -0 g -299.611 440.751 24.0863 0.2005 re -f* -1 g -323.697 440.751 28.3014 0.2005 re -f* -0.498 0 0.482 rg -351.999 440.751 58.8108 0.2005 re -f* -0 g -257.259 440.951 19.4697 0.2006 re -f* -1 g -276.729 440.951 3.8138 0.2006 re -f* -0 g -280.543 440.951 12.6453 0.2006 re -f* -1 g -293.188 440.951 6.423 0.2006 re -f* -0 g -299.611 440.951 23.6849 0.2006 re -f* -1 g -323.296 440.951 28.5022 0.2006 re -f* -0.498 0 0.482 rg -351.798 440.951 58.8107 0.2006 re -f* -0 g -257.259 441.152 19.6705 0.2006 re -f* -1 g -276.93 441.152 3.8136 0.2006 re -f* -0 g -280.743 441.152 12.4447 0.2006 re -f* -1 g -293.188 441.152 6.2223 0.2006 re -f* -0 g -299.41 441.152 23.4841 0.2006 re -f* -1 g -322.894 441.152 28.5022 0.2006 re -f* -0.498 0 0.482 rg -351.397 441.152 59.0115 0.2006 re -f* -0 g -257.46 441.352 19.6705 0.2005 re -f* -1 g -277.13 441.352 3.6129 0.2005 re -f* -0 g -280.743 441.352 12.4447 0.2005 re -f* -1 g -293.188 441.352 6.2223 0.2005 re -f* -0 g -299.41 441.352 23.0827 0.2005 re -f* -1 g -322.493 441.352 28.5021 0.2005 re -f* -0.498 0 0.482 rg -350.995 441.352 59.413 0.2005 re -f* -0 g -257.661 441.553 19.6705 0.2006 re -f* -1 g -277.331 441.553 3.613 0.2006 re -f* -0 g -280.944 441.553 12.4446 0.2006 re -f* -1 g -293.389 441.553 5.8208 0.2006 re -f* -0 g -299.209 441.553 23.0828 0.2006 re -f* -1 g -322.292 441.553 28.5022 0.2006 re -f* -0.498 0 0.482 rg -350.794 441.553 59.4129 0.2006 re -f* -0 g -257.661 441.753 19.8713 0.2005 re -f* -1 g -277.532 441.753 3.4122 0.2005 re -f* -0 g -280.944 441.753 12.4446 0.2005 re -f* -1 g -293.389 441.753 5.8208 0.2005 re -f* -0 g -299.209 441.753 22.6813 0.2005 re -f* -1 g -321.891 441.753 28.5022 0.2005 re -f* -0.498 0 0.482 rg -350.393 441.753 59.6137 0.2005 re -f* -0 g -257.861 441.954 19.8712 0.2006 re -f* -1 g -277.732 441.954 3.4123 0.2006 re -f* -0 g -281.145 441.954 12.2439 0.2006 re -f* -1 g -293.389 441.954 5.6201 0.2006 re -f* -0 g -299.009 441.954 22.4806 0.2006 re -f* -1 g -321.489 441.954 28.5021 0.2006 re -f* -0.498 0 0.482 rg -349.991 441.954 60.0152 0.2006 re -f* -0 g -258.062 442.155 19.8712 0.2006 re -f* -1 g -277.933 442.155 3.4122 0.2006 re -f* -0 g -281.346 442.155 12.0432 0.2006 re -f* -1 g -293.389 442.155 5.6201 0.2006 re -f* -0 g -299.009 442.155 22.2799 0.2006 re -f* -1 g -321.289 442.155 28.1007 0.2006 re -f* -0.498 0 0.482 rg -349.389 442.155 60.4166 0.2006 re -f* -0 g -258.263 442.355 19.8712 0.2005 re -f* -1 g -278.134 442.355 3.4123 0.2005 re -f* -0 g -281.546 442.355 11.8424 0.2005 re -f* -1 g -293.389 442.355 5.4194 0.2005 re -f* -0 g -298.808 442.355 22.0791 0.2005 re -f* -1 g -320.887 442.355 28.1007 0.2005 re -f* -0.498 0 0.482 rg -348.988 442.355 60.6173 0.2005 re -f* -0 g -258.263 442.556 20.0719 0.2006 re -f* -1 g -278.335 442.556 3.2116 0.2006 re -f* -0 g -281.546 442.556 11.8424 0.2006 re -f* -1 g -293.389 442.556 5.2187 0.2006 re -f* -0 g -298.607 442.556 22.0792 0.2006 re -f* -1 g -320.687 442.556 27.6992 0.2006 re -f* -0.498 0 0.482 rg -348.386 442.556 61.0187 0.2006 re -f* -0 g -258.463 442.756 20.072 0.2005 re -f* -1 g -278.535 442.756 3.2114 0.2005 re -f* -0 g -281.747 442.756 11.6418 0.2005 re -f* -1 g -293.389 442.756 5.2187 0.2005 re -f* -0 g -298.607 442.756 21.6777 0.2005 re -f* -1 g -320.285 442.756 27.6992 0.2005 re -f* -0.498 0 0.482 rg -347.984 442.756 61.4202 0.2005 re -f* -0 g -258.664 442.957 20.0719 0.2006 re -f* -1 g -278.736 442.957 3.2116 0.2006 re -f* -0 g -281.948 442.957 11.441 0.2006 re -f* -1 g -293.389 442.957 5.018 0.2006 re -f* -0 g -298.407 442.957 21.6777 0.2006 re -f* -1 g -320.084 442.957 27.2978 0.2006 re -f* -0.498 0 0.482 rg -347.382 442.957 61.8216 0.2006 re -f* -0 g -258.865 443.157 20.2727 0.2006 re -f* -1 g -279.138 443.157 3.0108 0.2006 re -f* -0 g -282.148 443.157 11.2403 0.2006 re -f* -1 g -293.389 443.157 4.8173 0.2006 re -f* -0 g -298.206 443.157 21.6776 0.2006 re -f* -1 g -319.884 443.157 26.8965 0.2006 re -f* -0.498 0 0.482 rg -346.78 443.157 62.223 0.2006 re -f* -0 g -258.865 443.358 20.4734 0.2005 re -f* -1 g -279.338 443.358 3.0108 0.2005 re -f* -0 g -282.349 443.358 11.0396 0.2005 re -f* -1 g -293.389 443.358 4.6165 0.2005 re -f* -0 g -298.005 443.358 21.477 0.2005 re -f* -1 g -319.482 443.358 26.6957 0.2005 re -f* -0.498 0 0.482 rg -346.178 443.358 62.6245 0.2005 re -f* -0 g -259.066 443.558 20.4734 0.2006 re -f* -1 g -279.539 443.558 3.0108 0.2006 re -f* -0 g -282.55 443.558 10.8388 0.2006 re -f* -1 g -293.389 443.558 4.4158 0.2006 re -f* -0 g -297.805 443.558 21.477 0.2006 re -f* -1 g -319.281 443.558 26.2942 0.2006 re -f* -0.498 0 0.482 rg -345.576 443.558 63.2267 0.2006 re -f* -0 g -259.266 443.759 20.4733 0.2005 re -f* -1 g -279.74 443.759 3.0108 0.2005 re -f* -0 g -282.75 443.759 10.4375 0.2005 re -f* -1 g -293.188 443.759 4.4158 0.2005 re -f* -0 g -297.604 443.759 21.4769 0.2005 re -f* -1 g -319.081 443.759 25.8928 0.2005 re -f* -0.498 0 0.482 rg -344.973 443.759 63.6281 0.2005 re -f* -0 g -259.467 443.959 20.6741 0.2006 re -f* -1 g -280.141 443.959 2.8101 0.2006 re -f* -0 g -282.951 443.959 10.2367 0.2006 re -f* -1 g -293.188 443.959 4.2151 0.2006 re -f* -0 g -297.403 443.959 21.4769 0.2006 re -f* -1 g -318.88 443.959 25.6921 0.2006 re -f* -0.498 0 0.482 rg -344.572 443.959 63.8288 0.2006 re -f* -0 g -259.668 444.16 20.6741 0.2006 re -f* -1 g -280.342 444.16 2.8101 0.2006 re -f* -0 g -283.152 444.16 9.8352 0.2006 re -f* -1 g -292.987 444.16 4.2152 0.2006 re -f* -0 g -297.202 444.16 21.477 0.2006 re -f* -1 g -318.679 444.16 25.2905 0.2006 re -f* -0.498 0 0.482 rg -343.97 444.16 64.2303 0.2006 re -f* -0 g -259.868 444.361 20.8748 0.2005 re -f* -1 g -280.743 444.361 2.6094 0.2005 re -f* -0 g -283.353 444.361 9.6345 0.2005 re -f* -1 g -292.987 444.361 4.0144 0.2005 re -f* -0 g -297.002 444.361 21.477 0.2005 re -f* -1 g -318.479 444.361 24.8892 0.2005 re -f* -0.498 0 0.482 rg -343.368 444.361 64.6317 0.2005 re -f* -0 g -259.868 444.561 21.0756 0.2005 re -f* -1 g -280.944 444.561 2.81 0.2005 re -f* -0 g -283.754 444.561 9.0324 0.2005 re -f* -1 g -292.786 444.561 4.0144 0.2005 re -f* -0 g -296.801 444.561 21.477 0.2005 re -f* -1 g -318.278 444.561 24.287 0.2005 re -f* -0.498 0 0.482 rg -342.565 444.561 65.2339 0.2005 re -f* -0 g -260.069 444.762 21.2762 0.2006 re -f* -1 g -281.346 444.762 2.6094 0.2006 re -f* -0 g -283.955 444.762 8.6309 0.2006 re -f* -1 g -292.586 444.762 4.0144 0.2006 re -f* -0 g -296.6 444.762 21.4769 0.2006 re -f* -1 g -318.077 444.762 23.8857 0.2006 re -f* -0.498 0 0.482 rg -341.963 444.762 65.836 0.2006 re -f* -0 g -260.27 444.962 21.2763 0.2006 re -f* -1 g -281.546 444.962 2.81 0.2006 re -f* -0 g -284.356 444.962 8.0288 0.2006 re -f* -1 g -292.385 444.962 3.8137 0.2006 re -f* -0 g -296.199 444.962 21.6776 0.2006 re -f* -1 g -317.876 444.962 23.4842 0.2006 re -f* -0.498 0 0.482 rg -341.361 444.962 66.2374 0.2006 re -f* -0 g -260.471 445.163 21.477 0.2006 re -f* -1 g -281.948 445.163 2.6094 0.2006 re -f* -0 g -284.557 445.163 7.6273 0.2006 re -f* -1 g -292.184 445.163 3.8136 0.2006 re -f* -0 g -295.998 445.163 21.6778 0.2006 re -f* -1 g -317.676 445.163 23.0827 0.2006 re -f* -0.498 0 0.482 rg -340.758 445.163 66.6388 0.2006 re -f* -0 g -260.671 445.363 21.6777 0.2005 re -f* -1 g -282.349 445.363 2.8101 0.2005 re -f* -0 g -285.159 445.363 6.6237 0.2005 re -f* -1 g -291.783 445.363 3.8137 0.2005 re -f* -0 g -295.597 445.363 21.8784 0.2005 re -f* -1 g -317.475 445.363 22.6813 0.2005 re -f* -0.498 0 0.482 rg -340.156 445.363 67.0403 0.2005 re -f* -0 g -260.872 445.564 21.8784 0.2006 re -f* -1 g -282.75 445.564 2.8101 0.2006 re -f* -0 g -285.561 445.564 5.6202 0.2006 re -f* -1 g -291.181 445.564 4.0144 0.2006 re -f* -0 g -295.195 445.564 22.0791 0.2006 re -f* -1 g -317.274 445.564 22.2799 0.2006 re -f* -0.498 0 0.482 rg -339.554 445.564 67.4417 0.2006 re -f* -0 g -261.073 445.765 22.0792 0.2005 re -f* -1 g -283.152 445.765 3.0108 0.2005 re -f* -0 g -286.163 445.765 4.2151 0.2005 re -f* -1 g -290.378 445.765 4.4158 0.2005 re -f* -0 g -294.794 445.765 22.2799 0.2005 re -f* -1 g -317.074 445.765 21.8784 0.2005 re -f* -0.498 0 0.482 rg -338.952 445.765 67.8432 0.2005 re -f* -0 g -261.073 445.965 22.4807 0.2006 re -f* -1 g -283.553 445.965 3.6129 0.2006 re -f* -0 g -287.166 445.965 2.2079 0.2006 re -f* -1 g -289.374 445.965 5.018 0.2006 re -f* -0 g -294.392 445.965 22.4805 0.2006 re -f* -1 g -316.873 445.965 21.477 0.2006 re -f* -0.498 0 0.482 rg -338.35 445.965 68.2446 0.2006 re -f* -0 g -261.274 446.166 22.882 0.2006 re -f* -1 g -284.156 446.166 9.8352 0.2006 re -f* -0 g -293.991 446.166 22.6813 0.2006 re -f* -1 g -316.672 446.166 21.0756 0.2006 re -f* -0.498 0 0.482 rg -337.748 446.166 68.646 0.2006 re -f* -0 g -261.474 446.366 23.2834 0.2005 re -f* -1 g -284.758 446.366 8.631 0.2005 re -f* -0 g -293.389 446.366 23.2834 0.2005 re -f* -1 g -316.672 446.366 20.4734 0.2005 re -f* -0.498 0 0.482 rg -337.146 446.366 69.0475 0.2005 re -f* -0 g -261.675 446.567 23.6849 0.2005 re -f* -1 g -285.36 446.567 7.4266 0.2005 re -f* -0 g -292.786 446.567 23.6849 0.2005 re -f* -1 g -316.471 446.567 19.8713 0.2005 re -f* -0.498 0 0.482 rg -336.343 446.567 69.8503 0.2005 re -f* -0 g -261.876 446.767 24.2871 0.2006 re -f* -1 g -286.163 446.767 5.6201 0.2006 re -f* -0 g -291.783 446.767 24.4878 0.2006 re -f* -1 g -316.271 446.767 19.4698 0.2006 re -f* -0.498 0 0.482 rg -335.74 446.767 70.2518 0.2006 re -f* -0 g -262.076 446.968 25.2907 0.2006 re -f* -1 g -287.367 446.968 3.2115 0.2006 re -f* -0 g -290.579 446.968 25.6921 0.2006 re -f* -1 g -316.271 446.968 18.8676 0.2006 re -f* -0.498 0 0.482 rg -335.138 446.968 70.6533 0.2006 re -f* -0 g -262.277 447.168 53.7928 0.2005 re -f* -1 g -316.07 447.168 18.4662 0.2005 re -f* -0.498 0 0.482 rg -334.536 447.168 71.0547 0.2005 re -f* -0 g -262.478 447.369 53.3913 0.2006 re -f* -1 g -315.869 447.369 18.0648 0.2006 re -f* -0.498 0 0.482 rg -333.934 447.369 71.4561 0.2006 re -f* -0 g -262.679 447.57 53.1906 0.2005 re -f* -1 g -315.869 447.57 17.4626 0.2005 re -f* -0.498 0 0.482 rg -333.332 447.57 71.8576 0.2005 re -f* -0 g -262.879 447.77 52.7893 0.2006 re -f* -1 g -315.669 447.77 17.0611 0.2006 re -f* -0.498 0 0.482 rg -332.73 447.77 72.259 0.2006 re -f* -0 g -263.08 447.971 52.5886 0.2006 re -f* -1 g -315.669 447.971 16.4589 0.2006 re -f* -0.498 0 0.482 rg -332.127 447.971 72.6605 0.2006 re -f* -0 g -263.281 448.171 52.187 0.2006 re -f* -1 g -315.468 448.171 16.0576 0.2006 re -f* -0.498 0 0.482 rg -331.525 448.171 73.0618 0.2006 re -f* -0 g -263.481 448.372 51.9863 0.2005 re -f* -1 g -315.468 448.372 15.4554 0.2005 re -f* -0.498 0 0.482 rg -330.923 448.372 73.4633 0.2005 re -f* -0 g -263.682 448.572 51.5849 0.2005 re -f* -1 g -315.267 448.572 15.0539 0.2005 re -f* -0.498 0 0.482 rg -330.321 448.572 73.8648 0.2005 re -f* -0 g -263.883 448.773 51.3842 0.2006 re -f* -1 g -315.267 448.773 14.4518 0.2006 re -f* -0.498 0 0.482 rg -329.719 448.773 74.2662 0.2006 re -f* -0 g -264.084 448.973 50.9828 0.2006 re -f* -1 g -315.066 448.973 14.2511 0.2006 re -f* -0.498 0 0.482 rg -329.317 448.973 74.4669 0.2006 re -f* -0 g -264.284 449.174 50.782 0.2005 re -f* -1 g -315.066 449.174 13.6489 0.2005 re -f* -0.498 0 0.482 rg -328.715 449.174 74.8683 0.2005 re -f* -0 g -264.485 449.375 50.5813 0.2006 re -f* -1 g -315.066 449.375 13.2475 0.2006 re -f* -0.498 0 0.482 rg -328.314 449.375 75.069 0.2006 re -f* -0 g -264.686 449.575 50.1798 0.2005 re -f* -1 g -314.866 449.575 12.8461 0.2005 re -f* -0.498 0 0.482 rg -327.712 449.575 75.2698 0.2005 re -f* -0 g -264.886 449.776 49.9791 0.2006 re -f* -1 g -314.866 449.776 12.4447 0.2006 re -f* -0.498 0 0.482 rg -327.31 449.776 75.4705 0.2006 re -f* -0 g -265.288 449.976 49.5776 0.2006 re -f* -1 g -314.866 449.976 12.0432 0.2006 re -f* -0.498 0 0.482 rg -326.909 449.976 75.6712 0.2006 re -f* -0 g -265.489 450.177 49.1763 0.2005 re -f* -1 g -314.665 450.177 11.8424 0.2005 re -f* -0.498 0 0.482 rg -326.507 450.177 75.8719 0.2005 re -f* -0 g -265.689 450.377 48.9756 0.2005 re -f* -1 g -314.665 450.377 11.4409 0.2005 re -f* -0.498 0 0.482 rg -326.106 450.377 76.0727 0.2005 re -f* -0 g -265.89 450.578 48.7749 0.2006 re -f* -1 g -314.665 450.578 11.0395 0.2006 re -f* -0.498 0 0.482 rg -325.704 450.578 76.2734 0.2006 re -f* -0 g -266.091 450.778 48.3733 0.2006 re -f* -1 g -314.464 450.778 10.8389 0.2006 re -f* -0.498 0 0.482 rg -325.303 450.778 76.4741 0.2006 re -f* -0 g -266.292 450.979 48.1726 0.2006 re -f* -1 g -314.464 450.979 10.4374 0.2006 re -f* -0.498 0 0.482 rg -324.902 450.979 76.6748 0.2006 re -f* -0 g -266.492 451.18 47.9719 0.2005 re -f* -1 g -314.464 451.18 10.2367 0.2005 re -f* -0.498 0 0.482 rg -324.701 451.18 76.6748 0.2005 re -f* -0 g -266.693 451.38 47.7712 0.2005 re -f* -1 g -314.464 451.38 9.8353 0.2005 re -f* -0.498 0 0.482 rg -324.299 451.38 76.6748 0.2005 re -f* -0 g -267.094 451.581 47.169 0.2006 re -f* -1 g -314.263 451.581 9.8353 0.2006 re -f* -0.498 0 0.482 rg -324.099 451.581 76.6748 0.2006 re -f* -0 g -267.295 451.781 46.9683 0.2006 re -f* -1 g -314.263 451.781 9.4338 0.2006 re -f* -0.498 0 0.482 rg -323.697 451.781 76.8755 0.2006 re -f* -0 g -267.496 451.982 46.7676 0.2006 re -f* -1 g -314.263 451.982 9.2331 0.2006 re -f* -0.498 0 0.482 rg -323.497 451.982 76.8755 0.2006 re -f* -0 g -267.697 452.183 46.5669 0.2005 re -f* -1 g -314.263 452.183 9.0324 0.2005 re -f* -0.498 0 0.482 rg -323.296 452.183 76.6748 0.2005 re -f* -0 g -268.098 452.383 46.1654 0.2005 re -f* -1 g -314.263 452.383 8.6309 0.2005 re -f* -0.498 0 0.482 rg -322.894 452.383 76.8756 0.2005 re -f* -0 g -268.299 452.583 45.764 0.2006 re -f* -1 g -314.063 452.583 8.631 0.2006 re -f* -0.498 0 0.482 rg -322.694 452.583 76.8754 0.2006 re -f* -0 g -268.499 452.784 45.5633 0.2006 re -f* -1 g -314.063 452.784 8.4302 0.2006 re -f* -0.498 0 0.482 rg -322.493 452.784 76.8755 0.2006 re -f* -0 g -268.7 452.985 45.3626 0.2005 re -f* -1 g -314.063 452.985 8.2295 0.2005 re -f* -0.498 0 0.482 rg -322.292 452.985 76.6748 0.2005 re -f* -0 g -269.102 453.185 44.9612 0.2006 re -f* -1 g -314.063 453.185 8.0288 0.2006 re -f* -0.498 0 0.482 rg -322.092 453.185 76.6748 0.2006 re -f* -0 g -269.302 453.386 44.7604 0.2005 re -f* -1 g -314.063 453.386 7.828 0.2005 re -f* -0.498 0 0.482 rg -321.891 453.386 76.6748 0.2005 re -f* -0 g -269.503 453.586 44.5597 0.2006 re -f* -1 g -314.063 453.586 7.6274 0.2006 re -f* -0.498 0 0.482 rg -321.69 453.586 76.6747 0.2006 re -f* -0 g -269.904 453.787 44.1583 0.2006 re -f* -1 g -314.063 453.787 7.4266 0.2006 re -f* -0.498 0 0.482 rg -321.489 453.787 76.4741 0.2006 re -f* -0 g -270.105 453.987 43.9576 0.2005 re -f* -1 g -314.063 453.987 7.2259 0.2005 re -f* -0.498 0 0.482 rg -321.289 453.987 76.4741 0.2005 re -f* -0 g -270.306 454.188 43.7568 0.2006 re -f* -1 g -314.063 454.188 7.2259 0.2006 re -f* -0.498 0 0.482 rg -321.289 454.188 76.2734 0.2006 re -f* -0 g -270.707 454.389 43.3554 0.2005 re -f* -1 g -314.063 454.389 7.0252 0.2005 re -f* -0.498 0 0.482 rg -321.088 454.389 76.0726 0.2005 re -f* -0 g -270.908 454.589 43.1547 0.2006 re -f* -1 g -314.063 454.589 6.8244 0.2006 re -f* -0.498 0 0.482 rg -320.887 454.589 76.0727 0.2006 re -f* -0 g -271.109 454.79 42.954 0.2006 re -f* -1 g -314.063 454.79 6.6238 0.2006 re -f* -0.498 0 0.482 rg -320.687 454.79 75.8719 0.2006 re -f* -0 g -271.51 454.99 42.3517 0.2005 re -f* -1 g -313.862 454.99 6.8246 0.2005 re -f* -0.498 0 0.482 rg -320.687 454.99 75.6711 0.2005 re -f* -0 g -271.711 455.191 42.151 0.2006 re -f* -1 g -313.862 455.191 6.6238 0.2006 re -f* -0.498 0 0.482 rg -320.486 455.191 75.6712 0.2006 re -f* -0 g -272.112 455.391 41.7496 0.2005 re -f* -1 g -313.862 455.391 6.4231 0.2005 re -f* -0.498 0 0.482 rg -320.285 455.391 75.4705 0.2005 re -f* -0 g -272.313 455.592 41.5488 0.2006 re -f* -1 g -313.862 455.592 6.4231 0.2006 re -f* -0.498 0 0.482 rg -320.285 455.592 75.2698 0.2006 re -f* -0 g -272.715 455.792 41.1474 0.2005 re -f* -1 g -313.862 455.792 6.2224 0.2005 re -f* -0.498 0 0.482 rg -320.084 455.792 75.069 0.2005 re -f* -0 g -272.915 455.993 41.1475 0.2006 re -f* -1 g -314.063 455.993 6.0216 0.2006 re -f* -0.498 0 0.482 rg -320.084 455.993 74.8683 0.2006 re -f* -0 g -273.116 456.194 40.9468 0.2006 re -f* -1 g -314.063 456.194 5.8208 0.2006 re -f* -0.498 0 0.482 rg -319.884 456.194 74.6677 0.2006 re -f* -0 g -273.517 456.394 40.5453 0.2005 re -f* -1 g -314.063 456.394 5.8208 0.2005 re -f* -0.498 0 0.482 rg -319.884 456.394 74.4669 0.2005 re -f* -0 g -273.919 456.595 40.1439 0.2006 re -f* -1 g -314.063 456.595 5.6202 0.2006 re -f* -0.498 0 0.482 rg -319.683 456.595 74.2661 0.2006 re -f* -0 g -274.12 456.795 39.9432 0.2005 re -f* -1 g -314.063 456.795 5.6202 0.2005 re -f* -0.498 0 0.482 rg -319.683 456.795 32.5165 0.2005 re -f* -1 g -352.2 456.795 1.0036 0.2005 re -f* -0.498 0 0.482 rg -353.203 456.795 40.5453 0.2005 re -f* -0 g -274.521 456.996 39.5417 0.2006 re -f* -1 g -314.063 456.996 5.4194 0.2006 re -f* -0.498 0 0.482 rg -319.482 456.996 32.7173 0.2006 re -f* -1 g -352.2 456.996 1.0036 0.2006 re -f* -0.498 0 0.482 rg -353.203 456.996 40.1439 0.2006 re -f* -0 g -274.722 457.196 39.3411 0.2006 re -f* -1 g -314.063 457.196 5.4194 0.2006 re -f* -0.498 0 0.482 rg -319.482 457.196 32.7173 0.2006 re -f* -1 g -352.2 457.196 1.0036 0.2006 re -f* -0.498 0 0.482 rg -353.203 457.196 39.9431 0.2006 re -f* -0 g -275.123 457.397 38.9396 0.2005 re -f* -1 g -314.063 457.397 5.4194 0.2005 re -f* -0.498 0 0.482 rg -319.482 457.397 32.7173 0.2005 re -f* -1 g -352.2 457.397 1.0036 0.2005 re -f* -0.498 0 0.482 rg -353.203 457.397 39.5417 0.2005 re -f* -0 g -275.324 457.597 38.7389 0.2006 re -f* -1 g -314.063 457.597 5.2187 0.2006 re -f* -0.498 0 0.482 rg -319.281 457.597 32.918 0.2006 re -f* -1 g -352.2 457.597 1.0036 0.2006 re -f* -0.498 0 0.482 rg -353.203 457.597 39.1403 0.2006 re -f* -0 g -275.725 457.798 38.3375 0.2005 re -f* -1 g -314.063 457.798 5.2187 0.2005 re -f* -0.498 0 0.482 rg -319.281 457.798 32.7172 0.2005 re -f* -1 g -351.999 457.798 1.2044 0.2005 re -f* -0.498 0 0.482 rg -353.203 457.798 38.9395 0.2005 re -f* -0 g -276.127 457.999 37.936 0.2006 re -f* -1 g -314.063 457.999 5.2187 0.2006 re -f* -0.498 0 0.482 rg -319.281 457.999 32.7172 0.2006 re -f* -1 g -351.999 457.999 1.2044 0.2006 re -f* -0.498 0 0.482 rg -353.203 457.999 38.5381 0.2006 re -f* -0 g -276.327 458.199 37.7353 0.2006 re -f* -1 g -314.063 458.199 5.0179 0.2006 re -f* -0.498 0 0.482 rg -319.081 458.199 32.918 0.2006 re -f* -1 g -351.999 458.199 1.2044 0.2006 re -f* -0.498 0 0.482 rg -353.203 458.199 38.1367 0.2006 re -f* -0 g -276.729 458.4 37.3339 0.2005 re -f* -1 g -314.063 458.4 5.0179 0.2005 re -f* -0.498 0 0.482 rg -319.081 458.4 32.918 0.2005 re -f* -1 g -351.999 458.4 1.2044 0.2005 re -f* -0.498 0 0.482 rg -353.203 458.4 37.9359 0.2005 re -f* -0 g -277.13 458.6 37.1331 0.2006 re -f* -1 g -314.263 458.6 4.8172 0.2006 re -f* -0.498 0 0.482 rg -319.081 458.6 32.7174 0.2006 re -f* -1 g -351.798 458.6 1.405 0.2006 re -f* -0.498 0 0.482 rg -353.203 458.6 37.5345 0.2006 re -f* -0 g -277.532 458.801 36.7316 0.2005 re -f* -1 g -314.263 458.801 4.8172 0.2005 re -f* -0.498 0 0.482 rg -319.081 458.801 32.7174 0.2005 re -f* -1 g -351.798 458.801 1.405 0.2005 re -f* -0.498 0 0.482 rg -353.203 458.801 37.1331 0.2005 re -f* -0 g -277.732 459.001 36.531 0.2006 re -f* -1 g -314.263 459.001 4.8172 0.2006 re -f* -0.498 0 0.482 rg -319.081 459.001 32.7174 0.2006 re -f* -1 g -351.798 459.001 1.405 0.2006 re -f* -0.498 0 0.482 rg -353.203 459.001 36.9323 0.2006 re -f* -0 g -278.134 459.202 36.1295 0.2006 re -f* -1 g -314.263 459.202 4.8172 0.2006 re -f* -0.498 0 0.482 rg -319.081 459.202 32.7174 0.2006 re -f* -1 g -351.798 459.202 1.405 0.2006 re -f* -0.498 0 0.482 rg -353.203 459.202 36.5309 0.2006 re -f* -0 g -278.535 459.403 35.728 0.2005 re -f* -1 g -314.263 459.403 4.6165 0.2005 re -f* -0.498 0 0.482 rg -318.88 459.403 32.7173 0.2005 re -f* -1 g -351.597 459.403 1.6058 0.2005 re -f* -0.498 0 0.482 rg -353.203 459.403 36.1295 0.2005 re -f* -0 g -278.736 459.603 35.5274 0.2005 re -f* -1 g -314.263 459.603 4.6165 0.2005 re -f* -0.498 0 0.482 rg -318.88 459.603 32.7173 0.2005 re -f* -1 g -351.597 459.603 1.6058 0.2005 re -f* -0.498 0 0.482 rg -353.203 459.603 35.7281 0.2005 re -f* -0 g -279.138 459.804 35.3266 0.2006 re -f* -1 g -314.464 459.804 4.4158 0.2006 re -f* -0.498 0 0.482 rg -318.88 459.804 32.7173 0.2006 re -f* -1 g -351.597 459.804 1.6058 0.2006 re -f* -0.498 0 0.482 rg -353.203 459.804 35.3266 0.2006 re -f* -0 g -279.539 460.004 34.9251 0.2006 re -f* -1 g -314.464 460.004 4.4158 0.2006 re -f* -0.498 0 0.482 rg -318.88 460.004 32.7173 0.2006 re -f* -1 g -351.597 460.004 1.6058 0.2006 re -f* -0.498 0 0.482 rg -353.203 460.004 34.9251 0.2006 re -f* -0 g -279.94 460.205 34.5237 0.2006 re -f* -1 g -314.464 460.205 4.4158 0.2006 re -f* -0.498 0 0.482 rg -318.88 460.205 32.5166 0.2006 re -f* -1 g -351.397 460.205 1.8065 0.2006 re -f* -0.498 0 0.482 rg -353.203 460.205 34.7245 0.2006 re -f* -0 g -280.342 460.405 34.1223 0.2005 re -f* -1 g -314.464 460.405 4.4158 0.2005 re -f* -0.498 0 0.482 rg -318.88 460.405 32.5166 0.2005 re -f* -1 g -351.397 460.405 1.8065 0.2005 re -f* -0.498 0 0.482 rg -353.203 460.405 34.323 0.2005 re -f* -0 g -280.743 460.606 33.9217 0.2006 re -f* -1 g -314.665 460.606 4.215 0.2006 re -f* -0.498 0 0.482 rg -318.88 460.606 32.5166 0.2006 re -f* -1 g -351.397 460.606 1.8065 0.2006 re -f* -0.498 0 0.482 rg -353.203 460.606 33.9215 0.2006 re -f* -0 g -281.145 460.806 33.5202 0.2005 re -f* -1 g -314.665 460.806 4.215 0.2005 re -f* -0.498 0 0.482 rg -318.88 460.806 32.3159 0.2005 re -f* -1 g -351.196 460.806 2.0072 0.2005 re -f* -0.498 0 0.482 rg -353.203 460.806 33.5201 0.2005 re -f* -0 g -281.546 461.007 33.1187 0.2006 re -f* -1 g -314.665 461.007 4.215 0.2006 re -f* -0.498 0 0.482 rg -318.88 461.007 32.3159 0.2006 re -f* -1 g -351.196 461.007 2.0072 0.2006 re -f* -0.498 0 0.482 rg -353.203 461.007 33.1186 0.2006 re -f* -0 g -281.948 461.208 32.7173 0.2006 re -f* -1 g -314.665 461.208 4.215 0.2006 re -f* -0.498 0 0.482 rg -318.88 461.208 32.3159 0.2006 re -f* -1 g -351.196 461.208 2.0072 0.2006 re -f* -0.498 0 0.482 rg -353.203 461.208 32.7172 0.2006 re -f* -0 g -282.349 461.408 32.3159 0.2005 re -f* -1 g -314.665 461.408 4.215 0.2005 re -f* -0.498 0 0.482 rg -318.88 461.408 32.1151 0.2005 re -f* -1 g -350.995 461.408 2.208 0.2005 re -f* -0.498 0 0.482 rg -353.203 461.408 32.3158 0.2005 re -f* -0 g -282.75 461.609 32.1151 0.2005 re -f* -1 g -314.866 461.609 4.0144 0.2005 re -f* -0.498 0 0.482 rg -318.88 461.609 32.1151 0.2005 re -f* -1 g -350.995 461.609 2.208 0.2005 re -f* -0.498 0 0.482 rg -353.203 461.609 31.9143 0.2005 re -f* -0 g -283.152 461.809 31.7136 0.2006 re -f* -1 g -314.866 461.809 4.0144 0.2006 re -f* -0.498 0 0.482 rg -318.88 461.809 32.1151 0.2006 re -f* -1 g -350.995 461.809 2.208 0.2006 re -f* -0.498 0 0.482 rg -353.203 461.809 31.5129 0.2006 re -f* -0 g -283.553 462.01 31.3121 0.2006 re -f* -1 g -314.866 462.01 4.0144 0.2006 re -f* -0.498 0 0.482 rg -318.88 462.01 31.9145 0.2006 re -f* -1 g -350.794 462.01 2.4086 0.2006 re -f* -0.498 0 0.482 rg -353.203 462.01 31.1115 0.2006 re -f* -0 g -283.955 462.21 31.1115 0.2005 re -f* -1 g -315.066 462.21 3.8136 0.2005 re -f* -0.498 0 0.482 rg -318.88 462.21 31.9145 0.2005 re -f* -1 g -350.794 462.21 2.4086 0.2005 re -f* -0.498 0 0.482 rg -353.203 462.21 30.7101 0.2005 re -f* -0 g -284.356 462.411 30.7101 0.2006 re -f* -1 g -315.066 462.411 3.8136 0.2006 re -f* -0.498 0 0.482 rg -318.88 462.411 31.9145 0.2006 re -f* -1 g -350.794 462.411 2.4086 0.2006 re -f* -0.498 0 0.482 rg -353.203 462.411 30.1079 0.2006 re -f* -0 g -284.758 462.611 30.5094 0.2005 re -f* -1 g -315.267 462.611 3.6129 0.2005 re -f* -0.498 0 0.482 rg -318.88 462.611 31.7137 0.2005 re -f* -1 g -350.594 462.611 2.6094 0.2005 re -f* -0.498 0 0.482 rg -353.203 462.611 29.7065 0.2005 re -f* -0 g -285.36 462.812 29.9072 0.2006 re -f* -1 g -315.267 462.812 3.6129 0.2006 re -f* -0.498 0 0.482 rg -318.88 462.812 31.7137 0.2006 re -f* -1 g -350.594 462.812 2.6094 0.2006 re -f* -0.498 0 0.482 rg -353.203 462.812 29.305 0.2006 re -f* -0 g -285.761 463.013 29.5058 0.2006 re -f* -1 g -315.267 463.013 3.6129 0.2006 re -f* -0.498 0 0.482 rg -318.88 463.013 31.7137 0.2006 re -f* -1 g -350.594 463.013 2.6094 0.2006 re -f* -0.498 0 0.482 rg -353.203 463.013 28.9035 0.2006 re -f* -0 g -286.163 463.213 29.305 0.2006 re -f* -1 g -315.468 463.213 3.4122 0.2006 re -f* -0.498 0 0.482 rg -318.88 463.213 31.513 0.2006 re -f* -1 g -350.393 463.213 2.8101 0.2006 re -f* -0.498 0 0.482 rg -353.203 463.213 28.5021 0.2006 re -f* -0 g -286.564 463.414 28.9036 0.2005 re -f* -1 g -315.468 463.414 3.6129 0.2005 re -f* -0.498 0 0.482 rg -319.081 463.414 31.3123 0.2005 re -f* -1 g -350.393 463.414 2.8101 0.2005 re -f* -0.498 0 0.482 rg -353.203 463.414 27.9 0.2005 re -f* -0 g -287.166 463.614 28.3014 0.2005 re -f* -1 g -315.468 463.614 3.6129 0.2005 re -f* -0.498 0 0.482 rg -319.081 463.614 31.1116 0.2005 re -f* -1 g -350.192 463.614 3.0108 0.2005 re -f* -0.498 0 0.482 rg -353.203 463.614 27.4985 0.2005 re -f* -0 g -287.568 463.815 28.1008 0.2006 re -f* -1 g -315.669 463.815 3.4121 0.2006 re -f* -0.498 0 0.482 rg -319.081 463.815 31.1116 0.2006 re -f* -1 g -350.192 463.815 3.0108 0.2006 re -f* -0.498 0 0.482 rg -353.203 463.815 27.0971 0.2006 re -f* -0 g -287.969 464.015 27.6994 0.2006 re -f* -1 g -315.669 464.015 3.4121 0.2006 re -f* -0.498 0 0.482 rg -319.081 464.015 30.9108 0.2006 re -f* -1 g -349.991 464.015 3.2116 0.2006 re -f* -0.498 0 0.482 rg -353.203 464.015 26.495 0.2006 re -f* -0 g -288.571 464.216 27.2978 0.2005 re -f* -1 g -315.869 464.216 3.2115 0.2005 re -f* -0.498 0 0.482 rg -319.081 464.216 30.9108 0.2005 re -f* -1 g -349.991 464.216 3.2116 0.2005 re -f* -0.498 0 0.482 rg -353.203 464.216 26.0935 0.2005 re -f* -0 g -288.973 464.416 26.8964 0.2006 re -f* -1 g -315.869 464.416 3.2115 0.2006 re -f* -0.498 0 0.482 rg -319.081 464.416 30.7102 0.2006 re -f* -1 g -349.791 464.416 3.4122 0.2006 re -f* -0.498 0 0.482 rg -353.203 464.416 25.4914 0.2006 re -f* -0 g -289.575 464.617 26.495 0.2005 re -f* -1 g -316.07 464.617 3.2115 0.2005 re -f* -0.498 0 0.482 rg -319.281 464.617 30.5094 0.2005 re -f* -1 g -349.791 464.617 3.4122 0.2005 re -f* -0.498 0 0.482 rg -353.203 464.617 25.0899 0.2005 re -f* -0 g -289.976 464.818 26.0936 0.2006 re -f* -1 g -316.07 464.818 3.2115 0.2006 re -f* -0.498 0 0.482 rg -319.281 464.818 30.3086 0.2006 re -f* -1 g -349.59 464.818 3.613 0.2006 re -f* -0.498 0 0.482 rg -353.203 464.818 24.4878 0.2006 re -f* -0 g -290.579 465.018 25.6921 0.2006 re -f* -1 g -316.271 465.018 3.0108 0.2006 re -f* -0.498 0 0.482 rg -319.281 465.018 30.3086 0.2006 re -f* -1 g -349.59 465.018 3.613 0.2006 re -f* -0.498 0 0.482 rg -353.203 465.018 24.0863 0.2006 re -f* -0 g -291.181 465.219 25.0899 0.2005 re -f* -1 g -316.271 465.219 3.0108 0.2005 re -f* -0.498 0 0.482 rg -319.281 465.219 30.1079 0.2005 re -f* -1 g -349.389 465.219 3.8137 0.2005 re -f* -0.498 0 0.482 rg -353.203 465.219 23.4842 0.2005 re -f* -0 g -291.582 465.419 24.8892 0.2005 re -f* -1 g -316.471 465.419 3.0108 0.2005 re -f* -0.498 0 0.482 rg -319.482 465.419 29.9072 0.2005 re -f* -1 g -349.389 465.419 3.8137 0.2005 re -f* -0.498 0 0.482 rg -353.203 465.419 22.882 0.2005 re -f* -0 g -292.184 465.62 24.287 0.2006 re -f* -1 g -316.471 465.62 3.0108 0.2006 re -f* -0.498 0 0.482 rg -319.482 465.62 29.7065 0.2006 re -f* -1 g -349.189 465.62 4.0144 0.2006 re -f* -0.498 0 0.482 rg -353.203 465.62 22.4806 0.2006 re -f* -0 g -292.786 465.82 23.8856 0.2006 re -f* -1 g -316.672 465.82 2.8101 0.2006 re -f* -0.498 0 0.482 rg -319.482 465.82 29.7065 0.2006 re -f* -1 g -349.189 465.82 4.0144 0.2006 re -f* -0.498 0 0.482 rg -353.203 465.82 21.8784 0.2006 re -f* -0 g -293.389 466.021 23.2834 0.2006 re -f* -1 g -316.672 466.021 3.0109 0.2006 re -f* -0.498 0 0.482 rg -319.683 466.021 29.3049 0.2006 re -f* -1 g -348.988 466.021 4.2152 0.2006 re -f* -0.498 0 0.482 rg -353.203 466.021 21.2762 0.2006 re -f* -0 g -293.79 466.222 23.0827 0.2005 re -f* -1 g -316.873 466.222 2.8102 0.2005 re -f* -0.498 0 0.482 rg -319.683 466.222 29.3049 0.2005 re -f* -1 g -348.988 466.222 4.2152 0.2005 re -f* -0.498 0 0.482 rg -353.203 466.222 20.6741 0.2005 re -f* -0 g -294.392 466.422 22.6813 0.2006 re -f* -1 g -317.074 466.422 2.6094 0.2006 re -f* -0.498 0 0.482 rg -319.683 466.422 29.1043 0.2006 re -f* -1 g -348.787 466.422 4.4158 0.2006 re -f* -0.498 0 0.482 rg -353.203 466.422 20.0719 0.2006 re -f* -0 g -295.195 466.623 21.8784 0.2005 re -f* -1 g -317.074 466.623 2.81 0.2005 re -f* -0.498 0 0.482 rg -319.884 466.623 28.7029 0.2005 re -f* -1 g -348.586 466.623 4.6166 0.2005 re -f* -0.498 0 0.482 rg -353.203 466.623 19.4698 0.2005 re -f* -0 g -295.797 466.823 21.477 0.2006 re -f* -1 g -317.274 466.823 2.6093 0.2006 re -f* -0.498 0 0.482 rg -319.884 466.823 28.7029 0.2006 re -f* -1 g -348.586 466.823 4.6166 0.2006 re -f* -0.498 0 0.482 rg -353.203 466.823 18.8676 0.2006 re -f* -0 g -296.399 467.024 20.8748 0.2006 re -f* -1 g -317.274 467.024 2.8101 0.2006 re -f* -0.498 0 0.482 rg -320.084 467.024 28.3014 0.2006 re -f* -1 g -348.386 467.024 4.8173 0.2006 re -f* -0.498 0 0.482 rg -353.203 467.024 18.2654 0.2006 re -f* -0 g -297.002 467.224 20.4734 0.2005 re -f* -1 g -317.475 467.224 2.6094 0.2005 re -f* -0.498 0 0.482 rg -320.084 467.224 28.1007 0.2005 re -f* -1 g -348.185 467.224 5.018 0.2005 re -f* -0.498 0 0.482 rg -353.203 467.224 17.6633 0.2005 re -f* -0 g -297.604 467.425 20.072 0.2005 re -f* -1 g -317.676 467.425 2.6093 0.2005 re -f* -0.498 0 0.482 rg -320.285 467.425 27.9 0.2005 re -f* -1 g -348.185 467.425 5.018 0.2005 re -f* -0.498 0 0.482 rg -353.203 467.425 17.0611 0.2005 re -f* -0 g -298.206 467.625 19.6704 0.2006 re -f* -1 g -317.876 467.625 2.4087 0.2006 re -f* -0.498 0 0.482 rg -320.285 467.625 27.6992 0.2006 re -f* -1 g -347.984 467.625 5.2188 0.2006 re -f* -0.498 0 0.482 rg -353.203 467.625 16.2582 0.2006 re -f* -0 g -299.009 467.826 18.8676 0.2006 re -f* -1 g -317.876 467.826 2.6094 0.2006 re -f* -0.498 0 0.482 rg -320.486 467.826 27.2979 0.2006 re -f* -1 g -347.784 467.826 5.4194 0.2006 re -f* -0.498 0 0.482 rg -353.203 467.826 15.6561 0.2006 re -f* -0 g -299.611 468.027 18.4661 0.2005 re -f* -1 g -318.077 468.027 2.6095 0.2005 re -f* -0.498 0 0.482 rg -320.687 468.027 26.8963 0.2005 re -f* -1 g -347.583 468.027 5.6202 0.2005 re -f* -0.498 0 0.482 rg -353.203 468.027 14.8532 0.2005 re -f* -0 g -300.414 468.227 17.864 0.2006 re -f* -1 g -318.278 468.227 2.4087 0.2006 re -f* -0.498 0 0.482 rg -320.687 468.227 26.8963 0.2006 re -f* -1 g -347.583 468.227 5.6202 0.2006 re -f* -0.498 0 0.482 rg -353.203 468.227 14.2511 0.2006 re -f* -0 g -301.217 468.428 17.2619 0.2005 re -f* -1 g -318.479 468.428 2.4086 0.2005 re -f* -0.498 0 0.482 rg -320.887 468.428 26.495 0.2005 re -f* -1 g -347.382 468.428 5.8209 0.2005 re -f* -0.498 0 0.482 rg -353.203 468.428 13.4482 0.2005 re -f* -0 g -301.819 468.628 16.6597 0.2006 re -f* -1 g -318.479 468.628 2.6094 0.2006 re -f* -0.498 0 0.482 rg -321.088 468.628 26.0935 0.2006 re -f* -1 g -347.181 468.628 6.0216 0.2006 re -f* -0.498 0 0.482 rg -353.203 468.628 12.6453 0.2006 re -f* -0 g -302.622 468.829 16.0576 0.2006 re -f* -1 g -318.679 468.829 2.4086 0.2006 re -f* -0.498 0 0.482 rg -321.088 468.829 25.8927 0.2006 re -f* -1 g -346.981 468.829 6.2224 0.2006 re -f* -0.498 0 0.482 rg -353.203 468.829 11.8424 0.2006 re -f* -0 g -303.425 469.029 15.4553 0.2005 re -f* -1 g -318.88 469.029 2.4087 0.2005 re -f* -0.498 0 0.482 rg -321.289 469.029 25.4914 0.2005 re -f* -1 g -346.78 469.029 6.423 0.2005 re -f* -0.498 0 0.482 rg -353.203 469.029 11.2403 0.2005 re -f* -0 g -304.227 469.23 14.8532 0.2006 re -f* -1 g -319.081 469.23 2.4087 0.2006 re -f* -0.498 0 0.482 rg -321.489 469.23 25.0899 0.2006 re -f* -1 g -346.579 469.23 6.6238 0.2006 re -f* -0.498 0 0.482 rg -353.203 469.23 10.4374 0.2006 re -f* -0 g -305.231 469.43 14.0504 0.2005 re -f* -1 g -319.281 469.43 2.4087 0.2005 re -f* -0.498 0 0.482 rg -321.69 469.43 24.8891 0.2005 re -f* -1 g -346.579 469.43 6.6238 0.2005 re -f* -0.498 0 0.482 rg -353.203 469.43 9.4338 0.2005 re -f* -0 g -306.034 469.631 13.4482 0.2006 re -f* -1 g -319.482 469.631 2.4086 0.2006 re -f* -0.498 0 0.482 rg -321.891 469.631 24.4878 0.2006 re -f* -1 g -346.379 469.631 6.8245 0.2006 re -f* -0.498 0 0.482 rg -353.203 469.631 8.6309 0.2006 re -f* -0 g -306.837 469.832 12.8461 0.2006 re -f* -1 g -319.683 469.832 2.4086 0.2006 re -f* -0.498 0 0.482 rg -322.092 469.832 24.0863 0.2006 re -f* -1 g -346.178 469.832 7.0252 0.2006 re -f* -0.498 0 0.482 rg -353.203 469.832 7.6273 0.2006 re -f* -0 g -307.841 470.032 12.0431 0.2005 re -f* -1 g -319.884 470.032 2.4087 0.2005 re -f* -0.498 0 0.482 rg -322.292 470.032 23.6848 0.2005 re -f* -1 g -345.977 470.032 7.226 0.2005 re -f* -0.498 0 0.482 rg -353.203 470.032 6.8244 0.2005 re -f* -0 g -308.844 470.233 11.2403 0.2006 re -f* -1 g -320.084 470.233 2.4086 0.2006 re -f* -0.498 0 0.482 rg -322.493 470.233 23.2835 0.2006 re -f* -1 g -345.776 470.233 7.4266 0.2006 re -f* -0.498 0 0.482 rg -353.203 470.233 5.6201 0.2006 re -f* -0 g -309.848 470.433 10.4374 0.2005 re -f* -1 g -320.285 470.433 2.4087 0.2005 re -f* -0.498 0 0.482 rg -322.694 470.433 22.6812 0.2005 re -f* -1 g -345.375 470.433 7.8281 0.2005 re -f* -0.498 0 0.482 rg -353.203 470.433 4.6165 0.2005 re -f* -0 g -311.052 470.634 9.4338 0.2006 re -f* -1 g -320.486 470.634 2.4086 0.2006 re -f* -0.498 0 0.482 rg -322.894 470.634 22.2799 0.2006 re -f* -1 g -345.174 470.634 8.0288 0.2006 re -f* -0.498 0 0.482 rg -353.203 470.634 3.6129 0.2006 re -f* -0 g -312.256 470.834 8.4303 0.2005 re -f* -1 g -320.687 470.834 2.4086 0.2005 re -f* -0.498 0 0.482 rg -323.095 470.834 21.8783 0.2005 re -f* -1 g -344.973 470.834 8.2296 0.2005 re -f* -0.498 0 0.482 rg -353.203 470.834 2.4086 0.2005 re -f* -0 g -313.461 471.035 7.6274 0.2006 re -f* -1 g -321.088 471.035 2.2079 0.2006 re -f* -0.498 0 0.482 rg -323.296 471.035 21.477 0.2006 re -f* -1 g -344.773 471.035 8.4302 0.2006 re -f* -0.498 0 0.482 rg -353.203 471.035 1.2043 0.2006 re -f* -0 g -314.665 471.235 6.6237 0.2006 re -f* -1 g -321.289 471.235 2.4086 0.2006 re -f* -0.498 0 0.482 rg -323.697 471.235 20.8748 0.2006 re -f* -0 g -316.271 471.436 5.2187 0.2005 re -f* -1 g -321.489 471.436 2.4086 0.2005 re -f* -0.498 0 0.482 rg -323.898 471.436 20.2727 0.2005 re -f* -0 g -317.676 471.637 4.215 0.2006 re -f* -1 g -321.891 471.637 2.208 0.2006 re -f* -0.498 0 0.482 rg -324.099 471.637 19.8711 0.2006 re -f* -0 g -319.482 471.837 2.6094 0.2006 re -f* -1 g -322.092 471.837 2.4086 0.2006 re -f* -0.498 0 0.482 rg -324.5 471.837 19.0683 0.2006 re -f* -0 g -321.289 472.038 0.8029 0.2005 re -f* -1 g -322.092 472.038 2.6093 0.2005 re -f* -0.498 0 0.482 rg -324.701 472.038 18.6669 0.2005 re -f* -0.498 0 0.482 rg -325.102 472.238 17.864 0.2006 re -f* -0.498 0 0.482 rg -325.504 472.439 17.2619 0.2005 re -f* -0.498 0 0.482 rg -325.905 472.639 16.459 0.2006 re -f* -0.498 0 0.482 rg -326.307 472.84 15.6561 0.2006 re -f* -0.498 0 0.482 rg -326.909 473.041 14.6526 0.2005 re -f* -0.498 0 0.482 rg -327.511 473.241 13.4482 0.2006 re -f* -0.498 0 0.482 rg -328.113 473.442 12.4447 0.2005 re -f* -0.498 0 0.482 rg -328.715 473.642 11.2403 0.2006 re -f* -0.498 0 0.482 rg -329.518 473.843 9.8352 0.2005 re -f* -0.498 0 0.482 rg -330.321 474.043 8.2296 0.2006 re -f* -0.498 0 0.482 rg -331.525 474.244 6.0216 0.2006 re -f* -0.498 0 0.482 rg -333.533 474.445 2.2079 0.2005 re -f* -Q -showpage -pdfEndPage -end -%%Trailer -cleartomark -countdictstack -exch sub { end } repeat -restore -%%EOF -grestore diff --git a/conf/logo.png b/conf/logo.png deleted file mode 100644 index 1e415e6d855d08db32c5d806c44ca9ca5812b314..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4887 zcmV+y6X@)TP)<h;3K|Lk000e1NJLTq003M7002G+1^@s6rqg^000006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru)C(I6A|NF?oF4!H5~N8) zK~#9!?VNd3R9Cjff2Wv70R?1Gkja6;35PtvS&4I$h_u8hMqljcYnSPlspET{m!uQh z*v>J=)@Y~IcETBrLy#zlLj*+ynFI$EPzDhMr0Tpsz><;zN+wM&_gZ(YTc_^b_nfcx z-TT}7oKx^hT2#bux${y=Q@{`?2ObF_<g1^wX#s90rTj=rc~qrR-Ikh?rBbOjNh#lw zQrf>lt8qXNQK?ihQg=~GDZi9b>c4U+^@D2+_yAs2$6z2(RiWbIKjOF(m&NUKw@?@; zFf=p7x`Pe=@Ajr`R|jqC&H--=AuhiHyb|0lz(~MLO6etp@XF22bx2N5COJ8o+}vCi zELcF)pCdW>bre#ms#TX`PbVhtpNfTpg}O~yu0#ld!a#8kxCq2oJCcMD75~<NODS!D zAwZCna(Hrba=V>7cXI98HIkE)xp?s+rKP0+*xA_;7Z*qB#$=BF>4;AHO>9h=a%ehE zy`2Fl$Sh!~>tC^QwZ^HJGfusnaO&lZLr*6R%?%|GC4|@p>=Huc{#yVpr8Ecr2m}=r z6!iJ|=byz-KmEj!BS*-{$k2L^xw$zPE?nU8r82g?x#hW@XJ%){yu<~V*qEpR*Cq}< z9O*cwGu{(@u<c@}1fqoyyMS;Z#I4^P;8M!IQp&ldrKJ-$Z{BRUXU`rYA|jBoe&+Vs zXP>cf;X;;sEFnKV@427db5<|Lem}lWz^jXG7dyNs`r<v&7dvk|fJop=A;j^Q8t|%s zHwl=Vo}TXi?YH0Z!w)}@m!~^umX?-eXJ=EETgKnoFKXDJgy7w{xfolS=mdCmvGca4 z-v|Bi3+swdh*%-SUw{Km#qkwQ1hkM+&X7`O9zTA3<CrmH{5?HAS+ZowbAb&I6cmK9 zu`v(t7B!|nT=@I>2Hl%;C7a#TcCf;83BRsA*SDgqVxN>UQA+v7O98l)vMX>hF)?w& zkRe0th7KLdfddCnsZ<TpH+1Mw0BqcC5TfBPV9Md-MvW`~dOrK-?BQ?i7ZJNGrenpU z$GcT3)ln&>%L@TqN@*#jTv}9AbpE4{KI+%4TQ?#jBO7f2?b@|dGmbW$Z5ym7FZDk6 zQ|>joKgBu49A0pcH9b~w>&(rez$Gc=EGeaEF~Fsi!=#j1;o;%)eSCcM7cE*ud3kx0 z!~q){8})hDDcu{TYxAg0O%|W-CFQaq;CqgIaM-e<wBmc<kd(4rvjZ-roK;p<77-Q} zW)>VA%#9m2nly@6*BAKV0DLERZLlt7xw1+7rc$biUi=Gdy07H+xm!V1*50#O0Iv#+ zU*+fLe?MZx2>q>Fw>Ar%OiWDF;85c?1T$daVDyb%p0dcjq+HeqtmX3d1S=p)N*UCo zw6KcqZMuH_ddR3zqclNjVi`MjEPMCvt<hfgpo~+0{e{!ZqIq0g{!#!h^aNwRdxM_u z^eP9!gb+I$4Y-t24~UA7kMB2R$Pk@rp1!_5efsnvGc%K0w{%b3gb+kVMlxW)0PX!z zNv?)pA!*N55_ezWamnKsUX2P`Jc8F21So|N(}WP48w>b1w{PEmzekTA<mBYk3-ViU zy~VU?(@086;{5sZbno7s2@@s|8ym}<IdjO)&aQV19v&VfBqU&LY+SF8PCuT?)m>Le z+LuU4Zt)Alee}2E@PD_rQV20j2oc#Jz@?PIWo2bM1`i%AVq#+Iu3?y&v2EKnEG;bw z4h|+a_h~JtZ{NP0K7AUcQb|BS0I{*L^$ws{uU`D?U;o0*%}w`!dn$wYO>tb=kw9r- zY0DbALNN8n+qeyJzYTN~Lfm^Uz@?NOrIcsq&!2C(V#SI&A7*cF&w&F6aCdjd)zy^; z4<2ZI@9*!=xpU_L$j!~g+1Xhq8fj{3%9=H6m@;L`b0tBgg{7QY6h-W^7#=@rIhSMM zXvyy{{uicgO!onAXe$ROY5`jzrQErF`}TUlHa9mXCME`de}7i2SWyFPfN|r-JuMX3 z+S0S9ZcM7Aq=aeHrs3k^!k1ruS+7fbBF3$Z8TywXKD_s7jfn}N5d3cUTlAXKM<+d= zBfOY?d?p_k{7=2t7iB$Q?>oCdG8UNoJhX6fX=$m?ym|BLeaMCl8`Q7;&YjwW^q4VY zG(Hy;6g-#Z+`M^{Pe1*XcJ10RYSbv!ty`zzvT73pQv<>dOvS><Qr%`~ZivSSFMNO3 zRi`&4<xnzZMP(RS80pm4q`is6ZTuBrk(AO}R|{Y8<BvbqJ17qi58iz9O$}hQ$(1Wt z)aTLB(G8}R<>lo>L_{!q_H5d=ZA(Bv0E-tduC=ZXVCme7DTk(GU}mVMm&-aV=7)jn znysiBz4#<ZOo0Ea7jP-%AfWrQWy|VS92y#`_N@;dJfN_!Q0sMJVPSOW(1C#i2QqNr zz^2LiR4SsQqxs;24{&pHWBBml96zqTd~NUBmL4;ny0M}=MM#xwF1*Q2%ppB84JqZE zXD70?0lwhSp+h=ZVV^!v{a}86ex285WMmK(6-7lw(@!HxDLH!dD8q&gWA^OX6cyDh z?KY+^(~v6Fxz(`<A=(4uY6ZM%J;$ikt5@r!v`d#RI$h`E<3n(8Fu(lr3-jj9!`<DT z9zA++_Uu_gLqlumT)K2Avu4d==FFLF*suX7C#RaO!qSpYKKX=^BS$iM@?<t{+=z>d z3+vXcW5R?9HOj+wKK7W|nd8vS0f%l5wDxRWE4_2*;fUK1ciME)ty*c?#tiR?K6Dz_ z1rr++wJ(2orwHKPx-7i25JJSo#p(1QD=RCVuDg8sGBGhR1O^5Y7#N7NvojYiTp%YW zhw83tz<>e7#>TRD?_SoeTgUqK>xqnv<jk2f*xA{suk-Tq;?A8rgolR{5fQ<bEn7Hs z>J%qWp2XJHmSe|`@x>Qk)CiyoeZhmQBBr01#kju**UTmC%n3U<4ONAT^y6tfxK&sg zTx&6LeG>yle>)DZksZ0R<1)zylbCwsZ9GSIM5R=5BPJ6mrGH(3dleNGarf?Boq)8o zw0!PYty8B?L`6lZgXt4s3=Iw0x^*iLA3o&7i4#wweo_)nPENe{-g{5WuA4WLnVCsa zQj)qYB_#!CXJ=;4oC(0!Uw>W0eLXIIOmWUbt^QjGLCCh>@i421>`Rs7FMn80a>TXT z*1Rx!)mZHP+7kbd3zc!DLPbi%H9~iVVP<bmURoYP2rDUN8}*O$j1JG#)Kr}&diC`5 z(AR(d3f`qlm(=GUe)ysKeA1*zI5;?P`SN8ZPMoN2cXDzfD=P~Zm&%D2H#ax@{rx$6 z_AJAO4O3s|?(WXDYuB)~t#kvA9z7x<A%X7QD}8sxqsMh-pPnPUa2?ozD?1W2i)MwT z6z3LW>D;P@i|YP%&q_v8O&;YxLf=>)*Zv*IPgB>OJb-&z0Z&d&ra7fH4*tY~lai9y zv15nEch%j_lem$Zn#$3mN7d~|j~?Z_@4nLvT<6ZI0nbgWo8mh6ZKvkm&&s2`M>X2q zhPbPFz58%ab^C*xh3uQXoBJvEFl}vG9q?FffIHUZPR5NJ$N2H%)vsW6Y2CUt>({TZ zanGJTd)U8!zfOVmNhVq!+W{~#sy`8_-p7<f*BZ`6w7l_85~19yIiwv)(R!Pmk9tjM z+uB@8;geTao4C5VGHB2st>2lLm@s_!@EYw22?_NAV`gTCnVA^?-rnAIXL3nN+`D%V zcX#)C^?G@EscB>UKk6m|x6W23ZH83|lE&C<Ol!2=t@886*0onOEuUt%S+xP4`=pcF zWcl*tEMLA{?Zc}FrCYad;p*zzAUD&dO&g8#&Ye5gng>)=R1gvp!m(q=@bmN2hzYi~ zw(9KIz`y`MKfg+rv@L=A$#qXCr$k)i#;MHeR;jjRYquI1I;lS;lXE#6=RWOgvNsni z^i2$~a#7!xQ5#E1cXxM3PfxE&{kE^KFa7%U<Jhrdl$4YZ6cnW4I<m8~HF)!yHEZhB z7a19ei;D|0X3Svn<jD*lKAZsq257LR_uhLCYinyt3raci--qf?o>Y<@p<A)@w$rG+ zbe+<jj9+S&4wPj|woTlEowpqxL7o~vkc~%c?j_~Y%0*3^GqpOds=2wtZf<T|zka=5 zmQvlqGcz+AY~fGtZ{NPX2KAdheR_j3Q!_I&($dnfZEedB1J`jQx^lc$9js~7(H1>J zJy1z1%9Y&t^)@B<OEg@0yVu%dWMPDnr7?-&S7_VK0SgBUD$14Qr{|HEdS4?>xDWH7 zm5UX3<L{tSs<?BZ(t}Le8Ag|2?-IcLNvZZ(ml7?dtmxafuYP@iH?^dsq-X#h78Zu7 zsVS2tP2%xm-D}#8j*gWRAqJNG`1%iOumK9L=TmS!zaCSEn=zUz5wd>0U1wP#RZGw` zvaBraN-6g!6bh-;r3fJ&3Lzr?@P|Lp(vq5*`m_#yub9(IqZv751bKOReEjjp7#bSZ ztD}Ga{=~(_(dK?@*7~m^{dgKLN_;|mF)%ei2(eKkJJoXScYXTw85<A~z^PNGTGYay z0$#%51qV6u!67=1=}c&F2%qMD%E6xw5*HUoMn(purKKp9N}QaWaCCHJ#NgNAs$}2z z@ER8SBBa~&9!M!~KDz=}8{mh5)c4<i-{VCA-pa)ap{GDqp(1hj6%uz>*3&JVEOBvg z!mnKy6nYBKhX?TwDBNGjzJ=kuEMo81miGNz05%FCRQ0lbDdlLDO10n1%Zs$Mv=#}P zty;ArD=Q0A(@M^}%6l2PS9AESi9%1otk`#P=;?Gr2;n1yD5|p_UggUVC=`mrn>KC2 zz`&qII$Bs*NO*X-h7bHLO5geafup}OLWnuff?X@%Rq{^1e*JDQS+b<XI=f-R2K9OO z89fn--`2ieYd0GP|KBjAlv{)l5nA7XI_eO&fzfm4&V4v}^5hoj@QD*ANKa3%bTRF% z@SgbFv2r5|BSOQ&FfcVJ6hh3e)#cPv{D~Jrgsxq?R_W{8{DYTLvT@^67Byn&D2%O5 zUV5+%ObrM-IE}Vl9ddv^b?u0&clE3g;-I;?`TWC&59>Uo))-m2a;197vblo=!~gpF zOAWT3p&pZVhT#(ES^xwIA?hqk>a<*02(il1(Q#pHY%C*3j%?Ne6ciLNb?Q`gZKdZs zz3^+q8u8`^J9PJ3c#iNY21W@X;_GEGx+)h!d|_c>F=g-Gy~T6q&TZC#L`6mM%{Sku zKabxu5uZtZFBRBrI@<E?g}Hc+@VXB47ed77a^G{!kqIIGDW!~CxpL)Bdwcs%%{icj z3m5YG>#yVI=Z8XHLGV9AP*te7y6eSnoA2_b4{xjw#>mnr0+=F%(0Qv~gLs#e(gOG% z2yLpwM{CArZ_mDc`{>=fHvr1VN`78=l<03xB9$%w*C_hN`V9Vj82$bjr~>{><>uMv z+OF3qqAR8RUn%9Egb)U2&Ya=eHO+W2ZQ8U(57N}slr3AfXe<c5efAc+XY6dTOjIZY zJ>K?b$QQ#fvp2s4%o0MJZIG@epmJ@153{qg=PqBq+<5is)mm53HY#0KC|I**4YOy@ zR<~7@RdC|7<3uk$iK;@?Y+$<tx-w$<XxesjxGRMC1laVvR^6n4R|DP=`1Jn$`!iRs zUTwHy#R~4<zu%;T4-5=s@#4iAOY90V3pl^_EEm?Fr#R<flUcOasE)igzaOrH+#U%b zRsf$1AsW5KqRDe-DWx0mzs1GHVV{5gx!$T(t0*pRx~(8W2tq<a`0A^#=+L2qx?NeW z<m%4LoLzH<8>ccFq}#;Wgzj(mr1$UpV(n&=0jvSm3n7}!a+>qsB%FW{AT&NczSr*E zyG3|-IF~Os4a?Bi*Jse6L4<~eGGW35jb(S)33o|}Nap708)TeFuX6#Ap_w6GqdL+# z*oV&JyGVt;;%6bmDqz15LfO=~v`BTR%IYTplhV`EyKdjUon5<jasK@ICeg1@C<qA& zp<B0Z`1||w+H0?=%e(-2X?ff{eS=%4Z*cSU4a$nj=s3C)UZXqFE};Em10#czz<yw_ z5TaS<7F)a=C#AFneh>JUl$7`<CMLFxkB{f##fx0Lc#%t&E<N`S32ox*>#JV0-@ku< z0s;cmOY@|ZIYNjdzyTmaTN(A=25>DufCJE@`f>gG_4a9LY2@YQQBY7oVPPSKg@x+# zf`S4{OG|0hsukwu<{F2kr6nF79(a0s;^yX7uBWG$1f*0Q8Ne|i#0#73d?^dgReNLF z0#?-y>t{Zj0}rK?MM8*&z>}j8xC5j#=U*wkl2`IdUdc-!{|`Xf(WEFzbUgq7002ov JPDHLkV1oSof|dXP diff --git a/conf/lpr b/conf/lpr deleted file mode 100644 index fa1c31315..000000000 --- a/conf/lpr +++ /dev/null @@ -1 +0,0 @@ -lpr -h diff --git a/conf/maxsearchrecordsperpage b/conf/maxsearchrecordsperpage deleted file mode 100644 index 29d6383b5..000000000 --- a/conf/maxsearchrecordsperpage +++ /dev/null @@ -1 +0,0 @@ -100 diff --git a/conf/payment_receipt_email b/conf/payment_receipt_email deleted file mode 100644 index 1a0a75830..000000000 --- a/conf/payment_receipt_email +++ /dev/null @@ -1,26 +0,0 @@ - -{ $date } - -Dear { $name }, - -This message is to inform you that your payment of ${ $paid } has been -received. - -Payment ID: { $paynum } -Date: { $date } -Amount: { $paid } -Type: { $payby } # { $payinfo } - -{ - if ( $balance > 0 ) { - $OUT .= "Your current balance is now \$$balance.\n\n"; - } elsif ( $balance < 0 ) { - $OUT .= 'You have a credit balance of $'. sprintf("%.2f",0-$balance). - ".\n". - "Future charges will be deducted from this balance before billing ". - "you again.\n\n"; - - } -} -Thank you for your business. - diff --git a/conf/report_template b/conf/report_template deleted file mode 100644 index 9c6bb2b4a..000000000 --- a/conf/report_template +++ /dev/null @@ -1,14 +0,0 @@ -{ sprintf("%-19s", "Page $page of $total_pages"); } { - my $spacer = (40 - length($title) > 0) ? 40 - length($title) : 0; - $spacer = int($spacer / 2); - my $titlelen = 40 - $spacer; - sprintf("%*s%-*s", $spacer, " ", $titlelen, $title); - } { use Date::Format; time2str("%x %X", $date); } - - -{ - join("\n", map { $_ } report_lines(57)); -} - - - diff --git a/conf/shells b/conf/shells deleted file mode 100644 index a41fc6209..000000000 --- a/conf/shells +++ /dev/null @@ -1,5 +0,0 @@ - -/bin/sh -/bin/csh -/bin/bash -/bin/false diff --git a/conf/show-msgcat-codes b/conf/show-msgcat-codes deleted file mode 100644 index e69de29bb..000000000 diff --git a/conf/smtpmachine b/conf/smtpmachine deleted file mode 100644 index 2fbb50c4a..000000000 --- a/conf/smtpmachine +++ /dev/null @@ -1 +0,0 @@ -localhost diff --git a/conf/soadefaultttl b/conf/soadefaultttl deleted file mode 100644 index 92f616fb8..000000000 --- a/conf/soadefaultttl +++ /dev/null @@ -1 +0,0 @@ -259200 diff --git a/conf/soaexpire b/conf/soaexpire deleted file mode 100644 index d235b91b6..000000000 --- a/conf/soaexpire +++ /dev/null @@ -1 +0,0 @@ -3600000 diff --git a/conf/soarefresh b/conf/soarefresh deleted file mode 100644 index 9f35f8e81..000000000 --- a/conf/soarefresh +++ /dev/null @@ -1 +0,0 @@ -10800 diff --git a/conf/soaretry b/conf/soaretry deleted file mode 100644 index bb08106db..000000000 --- a/conf/soaretry +++ /dev/null @@ -1 +0,0 @@ -1800 diff --git a/conf/ticket_system b/conf/ticket_system deleted file mode 100644 index 631f98a94..000000000 --- a/conf/ticket_system +++ /dev/null @@ -1 +0,0 @@ -RT_Internal diff --git a/conf/welcome_letter b/conf/welcome_letter deleted file mode 100644 index be7b484ca..000000000 --- a/conf/welcome_letter +++ /dev/null @@ -1,121 +0,0 @@ -%% file: random_latex -%% Purpose: Multipage template for welcome letters -%% -%% Based on work by -%% -%% Mark Asplen-Taylor -%% Asplen Management Ltd -%% www.asplen.co.uk -%% -%% Kristian Hoffman -%% -%% Changes -%% 0.1 6/19/07 Created - -\documentclass[letterpaper]{article} - -\hyphenpenalty=5000 -\usepackage{fancyhdr,lastpage,ifthen,afterpage} -\usepackage{graphicx} % required for logo graphic - -\addtolength{\voffset}{-0.0cm} % top margin to top of header -\addtolength{\hoffset}{-0.6cm} % left margin on page -\addtolength{\topmargin}{-1.25cm} % top margin to top of header -\setlength{\headheight}{2.0cm} % height of header -\setlength{\headsep}{1.0cm} % between header and text -\setlength{\footskip}{1.0cm} % bottom of footer from bottom of text - -%\addtolength{\textwidth}{2.1in} % width of text -\setlength{\textwidth}{19.5cm} -\setlength{\textheight}{19.5cm} -\setlength{\oddsidemargin}{-0.9cm} % odd page left margin -\setlength{\evensidemargin}{-0.9cm} % even page left margin - -\renewcommand{\headrulewidth}{0pt} -\renewcommand{\footrulewidth}{0pt} - -% Adjust the inset of the mailing address -\newcommand{\addressinset}[1][]{\hspace{1.0cm}} - -% Adjust the inset of the return address and logo -\newcommand{\returninset}[1][]{\hspace{-0.25cm}} - -% New command for address lines i.e. skip them if blank -\newcommand{\addressline}[1]{\ifthenelse{\equal{#1}{}}{}{#1\newline}} - -% Remove plain style header/footer -\fancypagestyle{plain}{ - \fancyhead{} -} -\fancyhf{} - -% Define fancy header/footer for first and subsequent pages - -\fancyfoot[R]{ - \ifthenelse{\equal{\thepage}{1}} - { % First page - ~ - } - { % ... pages - \small{\thepage\ of \pageref{LastPage}} - } -} - -\fancyhead[L]{ - \ifthenelse{\equal{\thepage}{1}} - { % First page - \returninset - \makebox{ - \begin{tabular}{ll} - \includegraphics{[@-- $conf_dir --@]/logo.eps} & - \begin{minipage}[b]{5.5cm} -[@-- $returnaddress --@] - \end{minipage} - \end{tabular} - } - } - { % ... pages - %\includegraphics{[@-- $conf_dir --@]/logo.eps} % Uncomment if you want the logo on all pages. - } -} - -\pagestyle{fancy} - - -%% Font options are: -%% bch Bitsream Charter -%% put Utopia -%% phv Adobe Helvetica -%% pnc New Century Schoolbook -%% ptm Times -%% pcr Courier - -\renewcommand{\familydefault}{phv} - - -\begin{document} -% -\begin{tabular}{ll} -\addressinset \rule{0cm}{0cm} & -\makebox{ -\begin{minipage}[t]{5.0cm} -\vspace{0.25cm} -\textbf{[@-- $payname --@]}\\ -\addressline{[@-- $company --@]} -\addressline{[@-- $address1 --@]} -\addressline{[@-- $address2 --@]} -\addressline{[@-- $city --@], [@-- $state --@]~~[@-- $zip --@]} -\addressline{[@-- $country --@]} -\end{minipage}} -\end{tabular} -\vspace{1.5cm} -\\ -% Your content goes here -Dear [@-- $first --@] [@-- $last --@]:\\ -\\ - Thank you for choosing [@-- $company_name --@]. We aim to meet all of your - needs. Please do not hesitate to contact us for any additional - services or assistance.\\ - -\end{document} - diff --git a/debian/README.Debian b/debian/README.Debian deleted file mode 100644 index b51eee8d5..000000000 --- a/debian/README.Debian +++ /dev/null @@ -1,6 +0,0 @@ -freeside for Debian -------------------- - -<possible notes regarding this package - if none, delete this file> - - -- Ivan Kohler <ivan-debian@420.am>, Thu, 12 Apr 2001 15:49:17 -0700 diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index d8283b5d9..000000000 --- a/debian/changelog +++ /dev/null @@ -1,9 +0,0 @@ -freeside (1.4.1-1) unstable; urgency=low - - * Initial Release. - - -- Ivan Kohler <ivan-debian@420.am> Thu, 12 Apr 2001 15:49:17 -0700 - -Local variables: -mode: debian-changelog -End: diff --git a/debian/conffiles.ex b/debian/conffiles.ex deleted file mode 100644 index 8686d2af8..000000000 --- a/debian/conffiles.ex +++ /dev/null @@ -1,7 +0,0 @@ -# -# If you want to use this conffile, remove all comments and put files that -# you want dpkg to process here using their absolute pathnames. -# See section 9.1 of the packaging manual. -# -# for example: -# /etc/freeside/freeside.conf diff --git a/debian/control b/debian/control deleted file mode 100644 index d7873b228..000000000 --- a/debian/control +++ /dev/null @@ -1,59 +0,0 @@ -Source: freeside -Section: admin -Priority: optional -Maintainer: Ivan Kohler <ivan-debian@420.am> -Build-Depends: debhelper (>> 3.0.0) -Standards-Version: 3.5.2 - -Package: freeside -Architecture: any -Depends: freeside-lib -Recommends: freeside-doc, freeside-ui-web -Suggests: freeside-selfservice-server -Description: Billing and administration package for ISPs. - Freeside is a billing and account administration package for ISPs. It stores - customer information in an SQL database, and will update UNIX passwd and - shadow files, RADIUS users file and SQL databases, and configuration for - sendmail, qmail, BIND and/or Apache. It is also useful as a central database - of accounts/domains/web-space for a large number of machines. - -Package: freeside-doc -Architecture: all -Description: Documentation for freeside - This package provides the HTML documentation for Freeside, a billing and - account administration package for ISPs. - -Package: freeside-lib -Architecture: all -Depends: libmime-base64-perl, libdigest-md5-perl, liburi-perl, libhtml-tagset-perl, libhtml-parser-perl, libnet-perl, liblocale-codes-perl, libnet-whois-perl, libwww-perl, libbusiness-creditcard-perl, libmailtools-perl, libtimedate-perl, libdate-manip-perl, libfile-counterfile-perl, libfreezethaw-perl, libtext-template-perl, libdbd-pg-perl, libdbix-datasource-perl, libdbix-dbschema-perl, libnet-ssh-perl, libnet-scp-perl, libapache-asp-perl, libtie-ixhash-perl, libtime-duration-perl, libhtml-widgets-selectlayers-perl, libstorable-perl, libapache-dbi-perl -Description: Freeside libraries and extension API - This package contains the libraries which implement the business logic and - backend functions of Freeside, a billing and account administration package - for ISPs. This package also contains the manual pages for the library API. - (? like a libmodule-perl package) - -Package: freeside-ui-web -Architecture: all -Depends: libhtml-mason-perl, libstring-approx-perl, freeside-lib, libapache-mod-perl|apache-perl -Suggests: libapache-mod-ssl|apache-ssl -Description: Easy-to-use web interface for Freeside - This package contains the web interface for Freeside, a billing and account - administration package for ISPs. This is what sales or support folks will - typically use to add new accounts, edit exiting accounts and so on. - -Package: freeside-selfservice-server -Architecture: all -Depends: freeside-lib, libnet-ssh-perl, ssh -Description: - This package contains the server side of the customer self-service interface. - It is installed on a private backend machine, and opens an outgoing ssh - connection to one or more public web server(s). - -Package: freeside-selfservice-client -Architecture: all -Depends: libstorable-perl, libhttp-browserdetect-perl, libbusiness-creditcard-perl, ssh -Description: - This package contains the client side of the customer self-service interface. - It is typically installed on a public webserver and interfaces with - freeside-selfservice-server installed on a private backend machine. - diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index e148fcec5..000000000 --- a/debian/copyright +++ /dev/null @@ -1,10 +0,0 @@ -This package was debianized by Ivan Kohler <ivan-debian@420.am> on -Thu, 12 Apr 2001 15:49:17 -0700. - -It was downloaded from <fill in ftp site> - -Upstream Author(s): <put author(s) name and email here> - -Copyright: - -<Must follow here> diff --git a/debian/cron.d.ex b/debian/cron.d.ex deleted file mode 100644 index 61c074da3..000000000 --- a/debian/cron.d.ex +++ /dev/null @@ -1,4 +0,0 @@ -# -# Regular cron jobs for the freeside package -# -0 4 * * * root freeside_maintenance diff --git a/debian/dirs b/debian/dirs deleted file mode 100644 index ca882bbb7..000000000 --- a/debian/dirs +++ /dev/null @@ -1,2 +0,0 @@ -usr/bin -usr/sbin diff --git a/debian/docs b/debian/docs deleted file mode 100644 index 16636bd92..000000000 --- a/debian/docs +++ /dev/null @@ -1,3 +0,0 @@ -INSTALL -README -TODO diff --git a/debian/ex.doc-base.package b/debian/ex.doc-base.package deleted file mode 100644 index 2a055d199..000000000 --- a/debian/ex.doc-base.package +++ /dev/null @@ -1,22 +0,0 @@ -Document: freeside -Title: Debian freeside Manual -Author: <insert document author here> -Abstract: This manual describes what freeside is - and how it can be used to - manage online manuals on Debian systems. -Section: unknown - -Format: debiandoc-sgml -Files: /usr/share/doc/freeside/freeside.sgml.gz - -Format: postscript -Files: /usr/share/doc/freeside/freeside.ps.gz - -Format: text -Files: /usr/share/doc/freeside/freeside.text.gz - -Format: HTML -Index: /usr/share/doc/freeside/html/index.html -Files: /usr/share/doc/freeside/html/*.html - - diff --git a/debian/freeside-doc.docs b/debian/freeside-doc.docs deleted file mode 100644 index 299950c58..000000000 --- a/debian/freeside-doc.docs +++ /dev/null @@ -1,2 +0,0 @@ -#DOCS# - diff --git a/debian/freeside-doc.files b/debian/freeside-doc.files deleted file mode 100644 index 299950c58..000000000 --- a/debian/freeside-doc.files +++ /dev/null @@ -1,2 +0,0 @@ -#DOCS# - diff --git a/debian/init.d.ex b/debian/init.d.ex deleted file mode 100644 index 57910493a..000000000 --- a/debian/init.d.ex +++ /dev/null @@ -1,70 +0,0 @@ -#! /bin/sh -# -# skeleton example file to build /etc/init.d/ scripts. -# This file should be used to construct scripts for /etc/init.d. -# -# Written by Miquel van Smoorenburg <miquels@cistron.nl>. -# Modified for Debian GNU/Linux -# by Ian Murdock <imurdock@gnu.ai.mit.edu>. -# -# Version: @(#)skeleton 1.8 03-Mar-1998 miquels@cistron.nl -# -# This file was automatically customized by dh-make on Thu, 12 Apr 2001 15:49:17 -0700 - -PATH=/sbin:/bin:/usr/sbin:/usr/bin -DAEMON=/usr/sbin/freeside -NAME=freeside -DESC=freeside - -test -f $DAEMON || exit 0 - -set -e - -case "$1" in - start) - echo -n "Starting $DESC: " - start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ - --exec $DAEMON - echo "$NAME." - ;; - stop) - echo -n "Stopping $DESC: " - start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ - --exec $DAEMON - echo "$NAME." - ;; - #reload) - # - # If the daemon can reload its config files on the fly - # for example by sending it SIGHUP, do it here. - # - # If the daemon responds to changes in its config file - # directly anyway, make this a do-nothing entry. - # - # echo "Reloading $DESC configuration files." - # start-stop-daemon --stop --signal 1 --quiet --pidfile \ - # /var/run/$NAME.pid --exec $DAEMON - #;; - restart|force-reload) - # - # If the "reload" option is implemented, move the "force-reload" - # option to the "reload" entry above. If not, "force-reload" is - # just the same as "restart". - # - echo -n "Restarting $DESC: " - start-stop-daemon --stop --quiet --pidfile \ - /var/run/$NAME.pid --exec $DAEMON - sleep 1 - start-stop-daemon --start --quiet --pidfile \ - /var/run/$NAME.pid --exec $DAEMON - echo "$NAME." - ;; - *) - N=/etc/init.d/$NAME - # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 - echo "Usage: $N {start|stop|restart|force-reload}" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/debian/manpage.1.ex b/debian/manpage.1.ex deleted file mode 100644 index ec542bb05..000000000 --- a/debian/manpage.1.ex +++ /dev/null @@ -1,60 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.\" First parameter, NAME, should be all caps -.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection -.\" other parameters are allowed: see man(7), man(1) -.TH FREESIDE SECTION "April 12, 2001" -.\" Please adjust this date whenever revising the manpage. -.\" -.\" Some roff macros, for reference: -.\" .nh disable hyphenation -.\" .hy enable hyphenation -.\" .ad l left justify -.\" .ad b justify to both left and right margins -.\" .nf disable filling -.\" .fi enable filling -.\" .br insert line break -.\" .sp <n> insert n+1 empty lines -.\" for manpage-specific macros, see man(7) -.SH NAME -freeside \- program to do something -.SH SYNOPSIS -.B freeside -.RI [ options ] " files" ... -.br -.B bar -.RI [ options ] " files" ... -.SH DESCRIPTION -This manual page documents briefly the -.B freeside -and -.B bar -commands. -This manual page was written for the Debian GNU/Linux distribution -because the original program does not have a manual page. -Instead, it has documentation in the GNU Info format; see below. -.PP -.\" TeX users may be more comfortable with the \fB<whatever>\fP and -.\" \fI<whatever>\fP escape sequences to invode bold face and italics, -.\" respectively. -\fBfreeside\fP is a program that... -.SH OPTIONS -These programs follow the usual GNU command line syntax, with long -options starting with two dashes (`-'). -A summary of options is included below. -For a complete description, see the Info files. -.TP -.B \-h, \-\-help -Show summary of options. -.TP -.B \-v, \-\-version -Show version of program. -.SH SEE ALSO -.BR bar (1), -.BR baz (1). -.br -The programs are documented fully by -.IR "The Rise and Fall of a Fooish Bar" , -available via the Info system. -.SH AUTHOR -This manual page was written by Ivan Kohler <ivan-debian@420.am>, -for the Debian GNU/Linux system (but may be used by others). diff --git a/debian/manpage.sgml.ex b/debian/manpage.sgml.ex deleted file mode 100644 index 9bc3a8663..000000000 --- a/debian/manpage.sgml.ex +++ /dev/null @@ -1,143 +0,0 @@ -<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [ - -<!-- Process this file with docbook-to-man to generate an nroff manual - page: `docbook-to-man manpage.sgml > manpage.1'. You may view - the manual page with: `docbook-to-man manpage.sgml | nroff -man | - less'. A typical entry in a Makefile or Makefile.am is: - -manpage.1: manpage.sgml - docbook-to-man $< > $@ - --> - - <!-- Fill in your name for FIRSTNAME and SURNAME. --> - <!ENTITY dhfirstname "<firstname>FIRSTNAME</firstname>"> - <!ENTITY dhsurname "<surname>SURNAME</surname>"> - <!-- Please adjust the date whenever revising the manpage. --> - <!ENTITY dhdate "<date>April 12, 2001</date>"> - <!-- SECTION should be 1-8, maybe w/ subsection other parameters are - allowed: see man(7), man(1). --> - <!ENTITY dhsection "<manvolnum>SECTION</manvolnum>"> - <!ENTITY dhemail "<email>ivan-debian@420.am</email>"> - <!ENTITY dhusername "Ivan Kohler"> - <!ENTITY dhucpackage "<refentrytitle>FREESIDE</refentrytitle>"> - <!ENTITY dhpackage "freeside"> - - <!ENTITY debian "<productname>Debian GNU/Linux</productname>"> - <!ENTITY gnu "<acronym>GNU</acronym>"> -]> - -<refentry> - <refentryinfo> - <address> - &dhemail; - </address> - <author> - &dhfirstname; - &dhsurname; - </author> - <copyright> - <year>2001</year> - <holder>&dhusername;</holder> - </copyright> - &dhdate; - </refentryinfo> - <refmeta> - &dhucpackage; - - &dhsection; - </refmeta> - <refnamediv> - <refname>&dhpackage;</refname> - - <refpurpose>program to do something</refpurpose> - </refnamediv> - <refsynopsisdiv> - <cmdsynopsis> - <command>&dhpackage;</command> - - <arg><option>-e <replaceable>this</replaceable></option></arg> - - <arg><option>--example <replaceable>that</replaceable></option></arg> - </cmdsynopsis> - </refsynopsisdiv> - <refsect1> - <title>DESCRIPTION - - This manual page documents briefly the - &dhpackage; and bar - commands. - - This manual page was written for the &debian; distribution - because the original program does not have a manual page. - Instead, it has documentation in the &gnu; - Info format; see below. - - &dhpackage; is a program that... - - - - OPTIONS - - These programs follow the usual GNU command line syntax, - with long options starting with two dashes (`-'). A summary of - options is included below. For a complete description, see the - Info files. - - - - - - - - Show summary of options. - - - - - - - - Show version of program. - - - - - - SEE ALSO - - bar (1), baz (1). - - The programs are documented fully by The Rise and - Fall of a Fooish Bar available via the - Info system. - - - AUTHOR - - This manual page was written by &dhusername; &dhemail; for - the &debian; system (but may be used by others). Permission is - granted to copy, distribute and/or modify this document under - the terms of the GNU Free Documentation - License, Version 1.1 or any later version published by the Free - Software Foundation; with no Invariant Sections, no Front-Cover - Texts and no Back-Cover Texts. - - - - - diff --git a/debian/menu.ex b/debian/menu.ex deleted file mode 100644 index ddc947e9c..000000000 --- a/debian/menu.ex +++ /dev/null @@ -1,2 +0,0 @@ -?package(freeside):needs=X11|text|vc|wm section=Apps/see-menu-manual\ - title="freeside" command="/usr/bin/freeside" diff --git a/debian/postinst.ex b/debian/postinst.ex deleted file mode 100644 index c4d4bfba8..000000000 --- a/debian/postinst.ex +++ /dev/null @@ -1,47 +0,0 @@ -#! /bin/sh -# postinst script for freeside -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `configure' -# * `abort-upgrade' -# * `abort-remove' `in-favour' -# -# * `abort-deconfigure' `in-favour' -# `removing' -# -# for details, see /usr/share/doc/packaging-manual/ -# -# quoting from the policy: -# Any necessary prompting should almost always be confined to the -# post-installation script, and should be protected with a conditional -# so that unnecessary prompting doesn't happen if a package's -# installation fails and the `postinst' is called with `abort-upgrade', -# `abort-remove' or `abort-deconfigure'. - -case "$1" in - configure) - - ;; - - abort-upgrade|abort-remove|abort-deconfigure) - - ;; - - *) - echo "postinst called with unknown argument \`$1'" >&2 - exit 0 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 - - diff --git a/debian/postrm.ex b/debian/postrm.ex deleted file mode 100644 index bed8abd3d..000000000 --- a/debian/postrm.ex +++ /dev/null @@ -1,36 +0,0 @@ -#! /bin/sh -# postrm script for freeside -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `remove' -# * `purge' -# * `upgrade' -# * `failed-upgrade' -# * `abort-install' -# * `abort-install' -# * `abort-upgrade' -# * `disappear' overwrit>r> -# for details, see /usr/share/doc/packaging-manual/ - -case "$1" in - purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) - - - ;; - - *) - echo "postrm called with unknown argument \`$1'" >&2 - exit 0 - -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - - diff --git a/debian/preinst.ex b/debian/preinst.ex deleted file mode 100644 index 0b42bb28f..000000000 --- a/debian/preinst.ex +++ /dev/null @@ -1,42 +0,0 @@ -#! /bin/sh -# preinst script for freeside -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `install' -# * `install' -# * `upgrade' -# * `abort-upgrade' -# -# For details see /usr/share/doc/packaging-manual/ - -case "$1" in - install|upgrade) -# if [ "$1" = "upgrade" ] -# then -# start-stop-daemon --stop --quiet --oknodo \ -# --pidfile /var/run/freeside.pid \ -# --exec /usr/sbin/freeside 2>/dev/null || true -# fi - ;; - - abort-upgrade) - ;; - - *) - echo "preinst called with unknown argument \`$1'" >&2 - exit 0 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 - - diff --git a/debian/prerm.ex b/debian/prerm.ex deleted file mode 100644 index ebb87c540..000000000 --- a/debian/prerm.ex +++ /dev/null @@ -1,37 +0,0 @@ -#! /bin/sh -# prerm script for freeside -# -# see: dh_installdeb(1) - -set -e - -# summary of how this script can be called: -# * `remove' -# * `upgrade' -# * `failed-upgrade' -# * `remove' `in-favour' -# * `deconfigure' `in-favour' -# `removing' -# -# for details, see /usr/share/doc/packaging-manual/ - -case "$1" in - remove|upgrade|deconfigure) -# install-info --quiet --remove /usr/info/freeside.info.gz - ;; - failed-upgrade) - ;; - *) - echo "prerm called with unknown argument \`$1'" >&2 - exit 0 - ;; -esac - -# dh_installdeb will replace this with shell code automatically -# generated by other debhelper scripts. - -#DEBHELPER# - -exit 0 - - diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 71016c406..000000000 --- a/debian/rules +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/make -f -# Sample debian/rules that uses debhelper. -# GNU copyright 1997 by Joey Hess. -# -# This version is for a hypothetical package that builds an -# architecture-dependant package, as well as an architecture-independent -# package. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -# This is the debhelper compatability version to use. -export DH_COMPAT=3 - -configure: configure-stamp -configure-stamp: - dh_testdir - # Add here commands to configure the package. - - - touch configure-stamp - -build: configure-stamp build-stamp -build-stamp: - dh_testdir - - # Add here commands to compile the package. - $(MAKE) - - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp configure-stamp - - # Add here commands to clean up after the build process. - -$(MAKE) clean - - dh_clean - -install: DH_OPTIONS= -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # Add here commands to install the package into debian/freeside. - $(MAKE) install DESTDIR=$(CURDIR)/debian/freeside - - dh_movefiles - -# Build architecture-independent files here. -# Pass -i to all debhelper commands in this target to reduce clutter. -binary-indep: build install - dh_testdir -i - dh_testroot -i -# dh_installdebconf -i - dh_installdocs -i - dh_installexamples -i - dh_installmenu -i -# dh_installlogrotate -i -# dh_installemacsen -i -# dh_installpam -i -# dh_installmime -i -# dh_installinit -i - dh_installcron -i -# dh_installman -i - dh_installinfo -i -# dh_undocumented -i - dh_installchangelogs -i - dh_link -i - dh_compress -i - dh_fixperms -i - dh_installdeb -i -# dh_perl -i - dh_gencontrol -i - dh_md5sums -i - dh_builddeb -i - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir -a - dh_testroot -a -# dh_installdebconf -a - dh_installdocs -a - dh_installexamples -a - dh_installmenu -a -# dh_installlogrotate -a -# dh_installemacsen -a -# dh_installpam -a -# dh_installmime -a -# dh_installinit -a - dh_installcron -a -# dh_installman -a - dh_installinfo -a -# dh_undocumented -a - dh_installchangelogs -a - dh_strip -a - dh_link -a - dh_compress -a - dh_fixperms -a -# dh_makeshlibs -a - dh_installdeb -a -# dh_perl -a - dh_shlibdeps -a - dh_gencontrol -a - dh_md5sums -a - dh_builddeb -a - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/debian/watch.ex b/debian/watch.ex deleted file mode 100644 index 3f57ae020..000000000 --- a/debian/watch.ex +++ /dev/null @@ -1,5 +0,0 @@ -# Example watch control file for uscan -# Rename this file to "watch" and then you can run the "uscan" command -# to check for upstream updates and more. -# Site Directory Pattern Version Script -sunsite.unc.edu /pub/Linux/Incoming freeside-(.*)\.tar\.gz debian uupdate diff --git a/eg/TEMPLATE_cust_main.import b/eg/TEMPLATE_cust_main.import deleted file mode 100755 index f6d88c701..000000000 --- a/eg/TEMPLATE_cust_main.import +++ /dev/null @@ -1,196 +0,0 @@ -#!/usr/bin/perl -w -# -# Template for importing legacy customer data - -use strict; -use Date::Parse; -use FS::UID qw(adminsuidsetup datasrc); -use FS::Record qw(fields qsearch qsearchs); -use FS::cust_main; -use FS::cust_pkg; -use FS::cust_svc; -use FS::svc_acct; -use FS::pkg_svc; - -my $user = shift or die &usage; -adminsuidsetup $user; - -# use these for the imported cust_main records (unless you have these in legacy -# data) -my($agentnum)=4; -my($refnum)=5; - -# map from legacy billing data to pkgpart, maps imported field -# LegacyBillingData to pkgpart. your names and pkgparts will be different -my(%pkgpart)=( - 'Employee' => 10, - 'Business' => 11, - 'Individual' => 12, - 'Basic PPP' => 13, - 'Slave' => 14, - 'Co-Located Server' => 15, - 'Virtual Web' => 16, - 'Perk Mail' => 17, - 'Credit Hold' => 18, -); - -my($file)="legacy_file"; - -open(CLIENT,$file) - or die "Can't open $file: $!"; - -# put a tab-separated header atop the file, or define @fields -# (use these names or change them below) -# -# for cust_main -# custnum - unique -# last - (name) -# first - (name) -# company -# address1 -# address2 -# city -# state -# zip -# country -# daytime - (phone) -# night - (phone) -# fax -# payby - CARD, BILL or COMP -# payinfo - Credit card #, P.O. # or COMP authorization -# paydate - Expiration -# tax - 'Y' for tax exempt -# for cust_pkg -# LegacyBillingData - maps via %pkgpart above to a pkgpart -# for svc_acct -# username - -my($header); -$header=; -chop $header; -my(@fields)=map { /^\s*(.*[^\s]+)\s*$/; $1 } split(/\t/,$header); -#print join("\n",@fields); - -my($error); -my($link,$line)=(0,0); -while () { - chop; - next if /^[\s\t]*$/; #skip any blank lines - - #define %svc hash for this record - my(@record)=split(/\t/); - my(%svc); - foreach (@fields) { - $svc{$_}=shift @record; - } - - # might need to massage some data like this - $svc{'payby'} =~ s/^Credit Card$/CARD/io; - $svc{'payby'} =~ s/^Check$/BILL/io; - $svc{'payby'} =~ s/^Cash$/BILL/io; - $svc{'payby'} =~ s/^$/BILL/o; - $svc{'First'} =~ s/&/and/go; - $svc{'Zip'} =~ s/\s+$//go; - - my($cust_main) = new FS::cust_main ( { - 'custnum' => $svc{'custnum'}, - 'agentnum' => $agentnum, - 'last' => $svc{'last'}, - 'first' => $svc{'first'}, - 'company' => $svc{'company'}, - 'address1' => $svc{'address1'}, - 'address2' => $svc{'address2'}, - 'city' => $svc{'city'}, - 'state' => $svc{'state'}, - 'zip' => $svc{'zip'}, - 'country' => $svc{'country'}, - 'daytime' => $svc{'daytime'}, - 'night' => $svc{'night'}, - 'fax' => $svc{'fax'}, - 'payby' => $svc{'payby'}, - 'payinfo' => $svc{'payinfo'}, - 'paydate' => $svc{'paydate'}, - 'payname' => $svc{'payname'}, - 'tax' => $svc{'tax'}, - 'refnum' => $refnum, - } ); - - $error=$cust_main->insert; - - if ( $error ) { - warn $cust_main->_dump; - warn map "$_: ". $svc{$_}. "|\n", keys %svc; - die $error; - } - - my($cust_pkg)=new FS::cust_pkg ( { - 'custnum' => $svc{'custnum'}, - 'pkgpart' => $pkgpart{$svc{'LegacyBillingData'}}, - 'setup' => '', - 'bill' => '', - 'susp' => '', - 'expire' => '', - 'cancel' => '', - } ); - - $error=$cust_pkg->insert; - if ( $error ) { - warn $svc{'LegacyBillingData'}; - die $error; - } - - unless ( $svc{'username'} ) { - warn "Empty login"; - } else { - #find svc_acct record (imported with bin/svc_acct.import) for this username - my($svc_acct)=qsearchs('svc_acct',{'username'=>$svc{'username'}}); - unless ( $svc_acct ) { - warn "username ", $svc{'username'}, " not found\n"; - } else { - #link to the cust_pkg record we created above - - #find cust_svc record for this svc_acct record - my($o_cust_svc)=qsearchs('cust_svc',{ - 'svcnum' => $svc_acct->svcnum, - 'pkgnum' => '', - } ); - unless ( $o_cust_svc ) { - warn "No unlinked cust_svc for svcnum ", $svc_acct->svcnum; - } else { - - #make sure this svcpart is in pkgpart - my($pkg_svc)=qsearchs('pkg_svc',{ - 'pkgpart' => $pkgpart{$svc{'LegacyBillingData'}}, - 'svcpart' => $o_cust_svc->svcpart, - 'quantity' => 1, - }); - unless ( $pkg_svc ) { - warn "login ", $svc{'username'}, ": No svcpart ", $o_cust_svc->svcpart, - " for pkgpart ", $pkgpart{$svc{'Acct. Type'}}, "\n" ; - } else { - - #create new cust_svc record linked to cust_pkg record - my($n_cust_svc) = new FS::cust_svc ({ - 'svcnum' => $o_cust_svc->svcnum, - 'pkgnum' => $cust_pkg->pkgnum, - 'svcpart' => $pkg_svc->svcpart, - }); - my($error) = $n_cust_svc->replace($o_cust_svc); - die $error if $error; - $link++; - } - } - } - } - - $line++; - -} - -warn "\n$link of $line lines linked\n"; - -# --- - -sub usage { - die "Usage:\n\n cust_main.import user\n"; -} diff --git a/eg/export_template.pm b/eg/export_template.pm deleted file mode 100644 index 22eb36a42..000000000 --- a/eg/export_template.pm +++ /dev/null @@ -1,113 +0,0 @@ -package FS::part_export::myexport; - -use vars qw(@ISA %info); -use Tie::IxHash; -use FS::part_export; - -@ISA = qw(FS::part_export); - -tie my %options, 'Tie::IxHash', - 'regular_option' => { label => 'Option description', default => 'value' }, - 'select_option' => { label => 'Select option description', - type => 'select', options=>[qw(chocolate vanilla)], - default => 'vanilla', - }, - 'textarea_option' => { label => 'Textarea option description', - type => 'textarea', - default => 'Default text.', - }, - 'checkbox_option' => { label => 'Checkbox label', type => 'checkbox' }, -; - -%info = ( - 'svc' => 'svc_acct', - #'svc' => [qw( svc_acct svc_forward )], - 'desc' => - 'Export short description', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => <<'END' -HTML notes about this export. -END - -sub rebless { shift; } - -sub _export_insert { - my($self, $svc_something) = (shift, shift); - $err_or_queue = $self->myexport_queue( $svc_something->svcnum, 'insert', - $svc_something->username, $svc_something->_password ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub _export_replace { - my( $self, $new, $old ) = (shift, shift, shift); - #return "can't change username with myexport" - # if $old->username ne $new->username; - #return '' unless $old->_password ne $new->_password; - $err_or_queue = $self->myexport_queue( $new->svcnum, - 'replace', $new->username, $new->_password ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub _export_delete { - my( $self, $svc_something ) = (shift, shift); - $err_or_queue = $self->myexport_queue( $svc_something->svcnum, - 'delete', $svc_something->username ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -#these three are optional -# fallback for svc_acct will change and restore password -sub _export_suspend { - my( $self, $svc_something ) = (shift, shift); - $err_or_queue = $self->myexport_queue( $svc_something->svcnum, - 'suspend', $svc_something->username ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub _export_unsuspend { - my( $self, $svc_something ) = (shift, shift); - $err_or_queue = $self->myexport_queue( $svc_something->svcnum, - 'unsuspend', $svc_something->username ); - ref($err_or_queue) ? '' : $err_or_queue; -} - -sub export_links { - my($self, $svc_something, $arrayref) = (shift, shift, shift); - #push @$arrayref, qq!!. $svc_something->username. qq!!; - ''; -} - -### - -#a good idea to queue anything that could fail or take any time -sub myexport_queue { - my( $self, $svcnum, $method ) = (shift, shift, shift); - my $queue = new FS::queue { - 'svcnum' => $svcnum, - 'job' => "FS::part_export::myexport::myexport_$method", - }; - $queue->insert( @_ ) or $queue; -} - -sub myexport_insert { #subroutine, not method - my( $username, $password ) = @_; - #do things with $username and $password -} - -sub myexport_replace { #subroutine, not method -} - -sub myexport_delete { #subroutine, not method - my( $username ) = @_; - #do things with $username -} - -sub myexport_suspend { #subroutine, not method -} - -sub myexport_unsuspend { #subroutine, not method -} - - diff --git a/eg/part_event-Action-template.pm b/eg/part_event-Action-template.pm deleted file mode 100644 index c2f5ba58f..000000000 --- a/eg/part_event-Action-template.pm +++ /dev/null @@ -1,55 +0,0 @@ -package FS::part_event::Action::myaction; - -use strict; - -use base qw( FS::part_event::Action ); - -# see the FS::part_event::Action manpage for full documentation on each -# of the required and optional methods. - -sub description { - 'New action (the author forgot to change this description)'; -} - -#sub eventtable_hashref { -# { 'cust_main' => 1, -# 'cust_bill' => 1, -# 'cust_pkg' => 1, -# }; -#} - -#sub option_fields { -# ( -# 'field' => 'description', -# -# 'another_field' => { 'label'=>'Amount', 'type'=>'money', }, -# -# 'third_field' => { 'label' => 'Types', -# 'type' => 'select', -# 'options' => [ 'h', 's' ], -# 'option_labels' => { 'h' => 'Happy', -# 's' => 'Sad', -# }, -# ); -#} - -#sub default_weight { -# 100; -#} - - -sub do_action { - my( $self, $object ) = @_; - - my $cust_main = $self->cust_main($object); - - my $value_of_field = $self->option('field'); - - #do your action - - #die "Error: $error"; - return 'Null example action completed sucessfully.'; - -} - -1; diff --git a/eg/part_event-Condition-template.pm b/eg/part_event-Condition-template.pm deleted file mode 100644 index cc05843b4..000000000 --- a/eg/part_event-Condition-template.pm +++ /dev/null @@ -1,57 +0,0 @@ -package FS::part_event::Condition::mycondition; - -use strict; - -use base qw( FS::part_event::Condition ); - -# see the FS::part_event::Condition manpage for full documentation on each -# of the required and optional methods. - -sub description { - 'New condition (the author forgot to change this description)'; -} - -#sub eventtable_hashref { -# { 'cust_main' => 1, -# 'cust_bill' => 1, -# 'cust_pkg' => 1, -# 'cust_pay_batch' => 1, -# }; -#} - -#sub option_fields { -# ( -# 'field' => 'description', -# -# 'another_field' => { 'label'=>'Amount', 'type'=>'money', }, -# -# 'third_field' => { 'label' => 'Types', -# 'type' => 'checkbox-multiple', -# 'options' => [ 'h', 's' ], -# 'option_labels' => { 'h' => 'Happy', -# 's' => 'Sad', -# }, -# ); -#} - -sub condition { - my($self, $object, %opt) = @_; - - my $cust_main = $self->cust_main($object); - - my $value_of_field = $self->option('field'); - - my $time = $opt{'time'}; #use this instead of time or $^T - - #test your condition - 1; - -} - -#sub condition_sql { -# my( $class, $table ) = @_; -# #... -# 'true'; -#} - -1; diff --git a/eg/table_template-svc.pm b/eg/table_template-svc.pm deleted file mode 100644 index 47dcbe6e4..000000000 --- a/eg/table_template-svc.pm +++ /dev/null @@ -1,215 +0,0 @@ -package FS::svc_table; - -use strict; -use vars qw(@ISA); -#use FS::Record qw( qsearch qsearchs ); -use FS::svc_Common; -use FS::cust_svc; - -@ISA = qw(FS::svc_Common); - -=head1 NAME - -FS::table_name - Object methods for table_name records - -=head1 SYNOPSIS - - use FS::table_name; - - $record = new FS::table_name \%hash; - $record = new FS::table_name { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - - $error = $record->suspend; - - $error = $record->unsuspend; - - $error = $record->cancel; - -=head1 DESCRIPTION - -An FS::table_name object represents an example. FS::table_name inherits from -FS::svc_Common. The following fields are currently supported: - -=over 4 - -=item field - description - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new example. To add the example to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -sub table { 'table_name'; } - -sub table_info { - { - 'name' => 'Example', - 'name_plural' => 'Example services', #optional, - 'longname_plural' => 'Example services', #optional - 'sorts' => 'svcnum', # optional sort field (or arrayref of sort fields, main first) - 'display_weight' => 100, - 'cancel_weight' => 100, - 'fields' => { - 'field' => 'Description', - 'another_field' => { - 'label' => 'Description', - 'def_label' => 'Description for service definitions', - 'type' => 'text', - 'disable_default' => 1, #disable switches - 'disable_fixed' => 1, # - 'disable_inventory' => 1, # - }, - 'foreign_key' => { - 'label' => 'Description', - 'def_label' => 'Description for service defs', - 'type' => 'select', - 'select_table' => 'foreign_table', - 'select_key' => 'key_field_in_table', - 'select_label' => 'label_field_in_table', - }, - - }, - }; -} - -=item search_sql STRING - -Class method which returns an SQL fragment to search for the given string. - -=cut - -#or something more complicated if necessary -sub search_sql { - my($class, $string) = @_; - $class->search_sql_field('search_field', $string); -} - -=item label - -Returns a meaningful identifier for this example - -=cut - -sub label { - my $self = shift; - $self->label_field; #or something more complicated if necessary -} - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -The additional fields pkgnum and svcpart (see L) should be -defined. An FS::cust_svc record will be created and inserted. - -=cut - -sub insert { - my $self = shift; - my $error; - - $error = $self->SUPER::insert; - return $error if $error; - - ''; -} - -=item delete - -Delete this record from the database. - -=cut - -sub delete { - my $self = shift; - my $error; - - $error = $self->SUPER::delete; - return $error if $error; - - ''; -} - - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -sub replace { - my ( $new, $old ) = ( shift, shift ); - my $error; - - $error = $new->SUPER::replace($old); - return $error if $error; - - ''; -} - -=item suspend - -Called by the suspend method of FS::cust_pkg (see L). - -=item unsuspend - -Called by the unsuspend method of FS::cust_pkg (see L). - -=item cancel - -Called by the cancel method of FS::cust_pkg (see L). - -=item check - -Checks all fields to make sure this is a valid example. If there is -an error, returns the error, otherwise returns false. Called by the insert -and repalce methods. - -=cut - -sub check { - my $self = shift; - - my $x = $self->setfixed; - return $x unless ref($x); - my $part_svc = $x; - - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -The author forgot to customize this manpage. - -=head1 SEE ALSO - -L, L, L, L, -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/eg/table_template.pm b/eg/table_template.pm deleted file mode 100644 index 5da6f3b28..000000000 --- a/eg/table_template.pm +++ /dev/null @@ -1,118 +0,0 @@ -package FS::table_name; - -use strict; -use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs ); - -@ISA = qw(FS::Record); - -=head1 NAME - -FS::table_name - Object methods for table_name records - -=head1 SYNOPSIS - - use FS::table_name; - - $record = new FS::table_name \%hash; - $record = new FS::table_name { 'column' => 'value' }; - - $error = $record->insert; - - $error = $new_record->replace($old_record); - - $error = $record->delete; - - $error = $record->check; - -=head1 DESCRIPTION - -An FS::table_name object represents an example. FS::table_name inherits from -FS::Record. The following fields are currently supported: - -=over 4 - -=item field - description - -=back - -=head1 METHODS - -=over 4 - -=item new HASHREF - -Creates a new example. To add the example to the database, see L<"insert">. - -Note that this stores the hash reference, not a distinct copy of the hash it -points to. You can ask the object for a copy with the I method. - -=cut - -# the new method can be inherited from FS::Record, if a table method is defined - -sub table { 'table_name'; } - -=item insert - -Adds this record to the database. If there is an error, returns the error, -otherwise returns false. - -=cut - -# the insert method can be inherited from FS::Record - -=item delete - -Delete this record from the database. - -=cut - -# the delete method can be inherited from FS::Record - -=item replace OLD_RECORD - -Replaces the OLD_RECORD with this one in the database. If there is an error, -returns the error, otherwise returns false. - -=cut - -# the replace method can be inherited from FS::Record - -=item check - -Checks all fields to make sure this is a valid example. If there is -an error, returns the error, otherwise returns false. Called by the insert -and replace methods. - -=cut - -# the check method should currently be supplied - FS::Record contains some -# data checking routines - -sub check { - my $self = shift; - - my $error = - $self->ut_numbern('primary_key') - || $self->ut_number('validate_other_fields') - ; - return $error if $error; - - $self->SUPER::check; -} - -=back - -=head1 BUGS - -The author forgot to customize this manpage. - -=head1 SEE ALSO - -L, schema.html from the base documentation. - -=cut - -1; - diff --git a/eg/xmlrpc-example.pl b/eg/xmlrpc-example.pl deleted file mode 100755 index 7a2a0a6f0..000000000 --- a/eg/xmlrpc-example.pl +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Frontier::Client; -use Data::Dumper; - -my $server = new Frontier::Client ( - url => 'http://user:pass@freesidehost/misc/xmlrpc.cgi', -); - -#my $method = 'cust_main.smart_search'; -#my @args = (search => '1'); - -my $method = 'Record.qsearch'; -my @args = (cust_main => { }); - -my $result = $server->call($method, @args); - -if (ref($result) eq 'ARRAY') { - print "Result:\n"; - print Dumper(@$result); -} - diff --git a/etc/abbr_state.txt b/etc/abbr_state.txt deleted file mode 100644 index 7e4f57f78..000000000 --- a/etc/abbr_state.txt +++ /dev/null @@ -1,72 +0,0 @@ -State/Possession Abbreviation - -ALABAMA AL -ALASKA AK -AMERICAN SAMOA AS -ARIZONA AZ -ARKANSAS AR -CALIFORNIA CA -COLORADO CO -CONNECTICUT CT -DELAWARE DE -DISTRICT OF COLUMBIA DC -FEDERATED STATES OF MICRONESIA FM -FLORIDA FL -GEORGIA GA -GUAM GU -HAWAII HI -IDAHO ID -ILLINOIS IL -INDIANA IN -IOWA IA -KANSAS KS -KENTUCKY KY -LOUISIANA LA -MAINE ME -MARSHALL ISLANDS MH -MARYLAND MD -MASSACHUSETTS MA -MICHIGAN MI -MINNESOTA MN -MISSISSIPPI MS -MISSOURI MO -MONTANA MT -NEBRASKA NE -NEVADA NV -NEW HAMPSHIRE NH -NEW JERSEY NJ -NEW MEXICO NM -NEW YORK NY -NORTH CAROLINA NC -NORTH DAKOTA ND -NORTHERN MARIANA ISLANDS MP -OHIO OH -OKLAHOMA OK -OREGON OR -PALAU PW -PENNSYLVANIA PA -PUERTO RICO PR -RHODE ISLAND RI -SOUTH CAROLINA SC -SOUTH DAKOTA SD -TENNESSEE TN -TEXAS TX -UTAH UT -VERMONT VT -VIRGIN ISLANDS VI -VIRGINIA VA -WASHINGTON WA -WEST VIRGINIA WV -WISCONSIN WI -WYOMING WY - - -Military "State" Abbreviation - -Armed Forces Africa AE -Armed Forces Americas AA -(except Canada) -Armed Forces Canada AE -Armed Forces Europe AE -Armed Forces Middle East AE -Armed Forces Pacific AP diff --git a/etc/countries.txt b/etc/countries.txt deleted file mode 100644 index 73c3975ed..000000000 --- a/etc/countries.txt +++ /dev/null @@ -1,239 +0,0 @@ -AFGHANISTAN AF AFG 004 -ALBANIA AL ALB 008 -ALGERIA DZ DZA 012 -AMERICAN SAMOA AS ASM 016 -ANDORRA AD AND 020 -ANGOLA AO AGO 024 -ANGUILLA AI AIA 660 -ANTARCTICA AQ ATA 010 -ANTIGUA AND BARBUDA AG ATG 028 -ARGENTINA AR ARG 032 -ARMENIA AM ARM 051 -ARUBA AW ABW 533 -AUSTRALIA AU AUS 036 -AUSTRIA AT AUT 040 -AZERBAIJAN AZ AZE 031 -BAHAMAS BS BHS 044 -BAHRAIN BH BHR 048 -BANGLADESH BD BGD 050 -BARBADOS BB BRB 052 -BELARUS BY BLR 112 -BELGIUM BE BEL 056 -BELIZE BZ BLZ 084 -BENIN BJ BEN 204 -BERMUDA BM BMU 060 -BHUTAN BT BTN 064 -BOLIVIA BO BOL 068 -BOSNIA AND HERZEGOWINA BA BIH 070 -BOTSWANA BW BWA 072 -BOUVET ISLAND BV BVT 074 -BRAZIL BR BRA 076 -BRITISH INDIAN OCEAN TERRITORY IO IOT 086 -BRUNEI DARUSSALAM BN BRN 096 -BULGARIA BG BGR 100 -BURKINA FASO BF BFA 854 -BURUNDI BI BDI 108 -CAMBODIA KH KHM 116 -CAMEROON CM CMR 120 -CANADA CA CAN 124 -CAPE VERDE CV CPV 132 -CAYMAN ISLANDS KY CYM 136 -CENTRAL AFRICAN REPUBLIC CF CAF 140 -CHAD TD TCD 148 -CHILE CL CHL 152 -CHINA CN CHN 156 -CHRISTMAS ISLAND CX CXR 162 -COCOS (KEELING) ISLANDS CC CCK 166 -COLOMBIA CO COL 170 -COMOROS KM COM 174 -CONGO CG COG 178 -COOK ISLANDS CK COK 184 -COSTA RICA CR CRI 188 -COTE D'IVOIRE CI CIV 384 -CROATIA (local name: Hrvatska) HR HRV 191 -CUBA CU CUB 192 -CYPRUS CY CYP 196 -CZECH REPUBLIC CZ CZE 203 -DENMARK DK DNK 208 -DJIBOUTI DJ DJI 262 -DOMINICA DM DMA 212 -DOMINICAN REPUBLIC DO DOM 214 -EAST TIMOR TP TMP 626 -ECUADOR EC ECU 218 -EGYPT EG EGY 818 -EL SALVADOR SV SLV 222 -EQUATORIAL GUINEA GQ GNQ 226 -ERITREA ER ERI 232 -ESTONIA EE EST 233 -ETHIOPIA ET ETH 231 -FALKLAND ISLANDS (MALVINAS) FK FLK 238 -FAROE ISLANDS FO FRO 234 -FIJI FJ FJI 242 -FINLAND FI FIN 246 -FRANCE FR FRA 250 -FRANCE, METROPOLITAN FX FXX 249 -FRENCH GUIANA GF GUF 254 -FRENCH POLYNESIA PF PYF 258 -FRENCH SOUTHERN TERRITORIES TF ATF 260 -GABON GA GAB 266 -GAMBIA GM GMB 270 -GEORGIA GE GEO 268 -GERMANY DE DEU 276 -GHANA GH GHA 288 -GIBRALTAR GI GIB 292 -GREECE GR GRC 300 -GREENLAND GL GRL 304 -GRENADA GD GRD 308 -GUADELOUPE GP GLP 312 -GUAM GU GUM 316 -GUATEMALA GT GTM 320 -GUINEA GN GIN 324 -GUINEA-BISSAU GW GNB 624 -GUYANA GY GUY 328 -HAITI HT HTI 332 -HEARD AND MC DONALD ISLANDS HM HMD 334 -HONDURAS HN HND 340 -HONG KONG HK HKG 344 -HUNGARY HU HUN 348 -ICELAND IS ISL 352 -INDIA IN IND 356 -INDONESIA ID IDN 360 -IRAN (ISLAMIC REPUBLIC OF) IR IRN 364 -IRAQ IQ IRQ 368 -IRELAND IE IRL 372 -ISRAEL IL ISR 376 -ITALY IT ITA 380 -JAMAICA JM JAM 388 -JAPAN JP JPN 392 -JORDAN JO JOR 400 -KAZAKHSTAN KZ KAZ 398 -KENYA KE KEN 404 -KIRIBATI KI KIR 296 -KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF KP PRK 408 -KOREA, REPUBLIC OF KR KOR 410 -KUWAIT KW KWT 414 -KYRGYZSTAN KG KGZ 417 -LAO PEOPLE'S DEMOCRATIC REPUBLIC LA LAO 418 -LATVIA LV LVA 428 -LEBANON LB LBN 422 -LESOTHO LS LSO 426 -LIBERIA LR LBR 430 -LIBYAN ARAB JAMAHIRIYA LY LBY 434 -LIECHTENSTEIN LI LIE 438 -LITHUANIA LT LTU 440 -LUXEMBOURG LU LUX 442 -MACAU MO MAC 446 -MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF MK MKD 807 -MADAGASCAR MG MDG 450 -MALAWI MW MWI 454 -MALAYSIA MY MYS 458 -MALDIVES MV MDV 462 -MALI ML MLI 466 -MALTA MT MLT 470 -MARSHALL ISLANDS MH MHL 584 -MARTINIQUE MQ MTQ 474 -MAURITANIA MR MRT 478 -MAURITIUS MU MUS 480 -MAYOTTE YT MYT 175 -MEXICO MX MEX 484 -MICRONESIA, FEDERATED STATES OF FM FSM 583 -MOLDOVA, REPUBLIC OF MD MDA 498 -MONACO MC MCO 492 -MONGOLIA MN MNG 496 -MONTSERRAT MS MSR 500 -MOROCCO MA MAR 504 -MOZAMBIQUE MZ MOZ 508 -MYANMAR MM MMR 104 -NAMIBIA NA NAM 516 -NAURU NR NRU 520 -NEPAL NP NPL 524 -NETHERLANDS NL NLD 528 -NETHERLANDS ANTILLES AN ANT 530 -NEW CALEDONIA NC NCL 540 -NEW ZEALAND NZ NZL 554 -NICARAGUA NI NIC 558 -NIGER NE NER 562 -NIGERIA NG NGA 566 -NIUE NU NIU 570 -NORFOLK ISLAND NF NFK 574 -NORTHERN MARIANA ISLANDS MP MNP 580 -NORWAY NO NOR 578 -OMAN OM OMN 512 -PAKISTAN PK PAK 586 -PALAU PW PLW 585 -PANAMA PA PAN 591 -PAPUA NEW GUINEA PG PNG 598 -PARAGUAY PY PRY 600 -PERU PE PER 604 -PHILIPPINES PH PHL 608 -PITCAIRN PN PCN 612 -POLAND PL POL 616 -PORTUGAL PT PRT 620 -PUERTO RICO PR PRI 630 -QATAR QA QAT 634 -REUNION RE REU 638 -ROMANIA RO ROM 642 -RUSSIAN FEDERATION RU RUS 643 -RWANDA RW RWA 646 -SAINT KITTS AND NEVIS KN KNA 659 -SAINT LUCIA LC LCA 662 -SAINT VINCENT AND THE GRENADINES VC VCT 670 -SAMOA WS WSM 882 -SAN MARINO SM SMR 674 -SAO TOME AND PRINCIPE ST STP 678 -SAUDI ARABIA SA SAU 682 -SENEGAL SN SEN 686 -SEYCHELLES SC SYC 690 -SIERRA LEONE SL SLE 694 -SINGAPORE SG SGP 702 -SLOVAKIA (Slovak Republic) SK SVK 703 -SLOVENIA SI SVN 705 -SOLOMON ISLANDS SB SLB 090 -SOMALIA SO SOM 706 -SOUTH AFRICA ZA ZAF 710 -SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS GS SGS 239 -SPAIN ES ESP 724 -SRI LANKA LK LKA 144 -ST. HELENA SH SHN 654 -ST. PIERRE AND MIQUELON PM SPM 666 -SUDAN SD SDN 736 -SURINAME SR SUR 740 -SVALBARD AND JAN MAYEN ISLANDS SJ SJM 744 -SWAZILAND SZ SWZ 748 -SWEDEN SE SWE 752 -SWITZERLAND CH CHE 756 -SYRIAN ARAB REPUBLIC SY SYR 760 -TAIWAN, PROVINCE OF CHINA TW TWN 158 -TAJIKISTAN TJ TJK 762 -TANZANIA, UNITED REPUBLIC OF TZ TZA 834 -THAILAND TH THA 764 -TOGO TG TGO 768 -TOKELAU TK TKL 772 -TONGA TO TON 776 -TRINIDAD AND TOBAGO TT TTO 780 -TUNISIA TN TUN 788 -TURKEY TR TUR 792 -TURKMENISTAN TM TKM 795 -TURKS AND CAICOS ISLANDS TC TCA 796 -TUVALU TV TUV 798 -UGANDA UG UGA 800 -UKRAINE UA UKR 804 -UNITED ARAB EMIRATES AE ARE 784 -UNITED KINGDOM GB GBR 826 -UNITED STATES US USA 840 -UNITED STATES MINOR OUTLYING ISLANDS UM UMI 581 -URUGUAY UY URY 858 -UZBEKISTAN UZ UZB 860 -VANUATU VU VUT 548 -VATICAN CITY STATE (HOLY SEE) VA VAT 336 -VENEZUELA VE VEN 862 -VIET NAM VN VNM 704 -VIRGIN ISLANDS (BRITISH) VG VGB 092 -VIRGIN ISLANDS (U.S.) VI VIR 850 -WALLIS AND FUTUNA ISLANDS WF WLF 876 -WESTERN SAHARA EH ESH 732 -YEMEN YE YEM 887 -YUGOSLAVIA YU YUG 891 -ZAIRE ZR ZAR 180 -ZAMBIA ZM ZMB 894 -ZIMBABWE ZW ZWE 716 diff --git a/etc/domain-template.txt b/etc/domain-template.txt deleted file mode 100644 index 8e4983ce2..000000000 --- a/etc/domain-template.txt +++ /dev/null @@ -1,231 +0,0 @@ -[ URL ftp://rs.internic.net/templates/domain-template.txt ] [ 03/98 ] - -******* Please DO NOT REMOVE Version Number or Sections A-Q ******** - -Domain Version Number: 4.0 - -******* Email completed agreement to hostmaster@internic.net ******* - - NETWORK SOLUTIONS, INC. - - DOMAIN NAME REGISTRATION AGREEMENT - - -A. Introduction. This domain name registration agreement -("Registration Agreement") is submitted to NETWORK SOLUTIONS, INC. -("NSI") for the purpose of applying for and registering a domain name -on the Internet. If this Registration Agreement is accepted by NSI, -and a domain name is registered in NSI's domain name database and -assigned to the Registrant, Registrant ("Registrant") agrees to be -bound by the terms of this Registration Agreement and the terms of -NSI's Domain Name Dispute Policy ("Dispute Policy") which is -incorporated herein by reference and made a part of this Registration -Agreement. This Registration Agreement shall be accepted at the -offices of NSI. - -B. Fees and Payments. - -1) Registration or renewal (re-registration) date through March 31, 1998: -Registrant agrees to pay a registration fee of One Hundred United States -Dollars (US$100) as consideration for the registration of each new domain -name or Fifty United States Dollars (US$50) to renew (re-register) an -existing registration. -2) Registration or renewal date on and after April 1, 1998: Registrant -agrees to pay a registration fee of Seventy United States Dollars (US$70) -as consideration for the registration of each new domain name or the -applicable renewal (re-registration) fee (currently Thirty-Five United -States Dollars (US$35)) at the time of renewal (re-registration). -3) Period of Service: The non-refundable fee covers a period of two (2) -years for each new registration, and one (1) year for each renewal, -and includes any permitted modification(s) to the domain name record -during the covered period. -4) Payment: Payment is due to Network Solutions within thirty (30) -days from the date of the invoice. - -C. Dispute Policy. Registrant agrees, as a condition to -submitting this Registration Agreement, and if the Registration -Agreement is accepted by NSI, that the Registrant shall be bound by -NSI's current Dispute Policy. The current version of the Dispute -Policy may be found at the InterNIC Registration Services web site: -"http://www.netsol.com/rs/dispute-policy.html". - -D. Dispute Policy Changes or Modifications. Registrant agrees -that NSI, in its sole discretion, may change or modify the Dispute -Policy, incorporated by reference herein, at any time. Registrant -agrees that Registrant's maintaining the registration of a domain name -after changes or modifications to the Dispute Policy become effective -constitutes Registrant's continued acceptance of these changes or -modifications. Registrant agrees that if Registrant considers any such -changes or modifications to be unacceptable, Registrant may request -that the domain name be deleted from the domain name database. - -E. Disputes. Registrant agrees that, if the registration of its -domain name is challenged by any third party, the Registrant will be -subject to the provisions specified in the Dispute Policy. - -F. Agents. Registrant agrees that if this Registration Agreement -is completed by an agent for the Registrant, such as an ISP or -Administrative Contact/Agent, the Registrant is nonetheless bound as a -principal by all terms and conditions herein, including the Dispute -Policy. - -G. Limitation of Liability. Registrant agrees that NSI shall have -no liability to the Registrant for any loss Registrant may incur in -connection with NSI's processing of this Registration Agreement, in -connection with NSI's processing of any authorized modification to the -domain name's record during the covered period, as a result of the -Registrant's ISP's failure to pay either the initial registration fee -or renewal fee, or as a result of the application of the provisions of -the Dispute Policy. Registrant agrees that in no event shall the -maximum liability of NSI under this Agreement for any matter exceed -Five Hundred United States Dollars (US$500). - -H. Indemnity. Registrant agrees, in the event the Registration -Agreement is accepted by NSI and a subsequent dispute arises with any -third party, to indemnify and hold NSI harmless pursuant to the terms -and conditions contained in the Dispute Policy. - -I. Breach. Registrant agrees that failure to abide by any -provision of this Registration Agreement or the Dispute Policy may be -considered by NSI to be a material breach and that NSI may provide a -written notice, describing the breach, to the Registrant. If, within -thirty (30) days of the date of mailing such notice, the Registrant -fails to provide evidence, which is reasonably satisfactory to NSI, -that it has not breached its obligations, then NSI may delete -Registrant's registration of the domain name. Any such breach by a -Registrant shall not be deemed to be excused simply because NSI did -not act earlier in response to that, or any other, breach by the -Registrant. - -J. No Guaranty. Registrant agrees that, by registration of a -domain name, such registration does not confer immunity from objection -to either the registration or use of the domain name. - -K. Warranty. Registrant warrants by submitting this Registration -Agreement that, to the best of Registrant's knowledge and belief, the -information submitted herein is true and correct, and that any future -changes to this information will be provided to NSI in a timely manner -according to the domain name modification procedures in place at that -time. Breach of this warranty will constitute a material breach. - -L. Revocation. Registrant agrees that NSI may delete a -Registrant's domain name if this Registration Agreement, or subsequent -modification(s) thereto, contains false or misleading information, or -conceals or omits any information NSI would likely consider material -to its decision to approve this Registration Agreement. - -M. Right of Refusal. NSI, in its sole discretion, reserves the -right to refuse to approve the Registration Agreement for any -Registrant. Registrant agrees that the submission of this Registration -Agreement does not obligate NSI to accept this Registration Agreement. -Registrant agrees that NSI shall not be liable for loss or damages -that may result from NSI's refusal to accept this Registration -Agreement. - -N. Severability. Registrant agrees that the terms of this -Registration Agreement are severable. If any term or provision is -declared invalid, it shall not affect the remaining terms or -provisions which shall continue to be binding. - -O. Entirety. Registrant agrees that this Registration Agreement -and the Dispute Policy is the complete and exclusive agreement between -Registrant and NSI regarding the registration of Registrant's domain -name. This Registration Agreement and the Dispute Policy supersede all -prior agreements and understandings, whether established by custom, -practice, policy, or precedent. - -P. Governing Law. Registrant agrees that this Registration -Agreement shall be governed in all respects by and construed in -accordance with the laws of the Commonwealth of Virginia, United -States of America. By submitting this Registration Agreement, -Registrant consents to the exclusive jurisdiction and venue of the -United States District Court for the Eastern District of Virginia, -Alexandria Division. If there is no jurisdiction in the United States -District Court for the Eastern District of Virginia, Alexandria -Division, then jurisdiction shall be in the Circuit Court of Fairfax -County, Fairfax, Virginia. - -Q. This is Domain Name Registration Agreement Version -Number 4.0. This Registration Agreement is only for registrations -under top-level domains: COM, ORG, NET, and EDU. By completing -and submitting this Registration Agreement for consideration and -acceptance by NSI, the Registrant agrees that he/she has read and -agrees to be bound by A through P above. - - -Authorization -0a. (N)ew (M)odify (D)elete....:###action### -0b. Auth Scheme................: -0c. Auth Info..................: - -1. Comments...................:###purpose### - -2. Complete Domain Name.......:###domain### - -Organization Using Domain Name - -3a. Organization Name..........:###company### -###LOOP### -3b. Street Address.............:###address### -###ENDLOOP### -3c. City.......................:###city### -3d. State......................:###state### -3e. Postal Code................:###zip### -3f. Country....................:###country### - -Administrative Contact -4a. NIC Handle (if known)......: -4b. (I)ndividual (R)ole........:I -4c. Name (Last, First).........:###last###, ###first### -4d. Organization Name..........:###company### -###LOOP### -4e. Street Address.............:###address### -###ENDLOOP### -4f. City.......................:###city### -4g. State......................:###state### -4h. Postal Code................:###zip### -4i. Country....................:###country### -4j. Phone Number...............:###daytime### -4k. Fax Number.................:###fax### -4l. E-Mailbox..................:###email### - -Technical Contact -5a. NIC Handle (if known)......:###tech_contact### -5b. (I)ndividual (R)ole........: -5c. Name (Last, First).........: -5d. Organization Name..........: -5e. Street Address.............: -5f. City.......................: -5g. State......................: -5h. Postal Code................: -5i. Country....................: -5j. Phone Number...............: -5k. Fax Number.................: -5l. E-Mailbox..................: - -Billing Contact -6a. NIC Handle (if known)......: -6b. (I)ndividual (R)ole........: -6c. Name (Last, First).........: -6d. Organization Name..........: -6e. Street Address.............: -6f. City.......................: -6g. State......................: -6h. Postal Code................: -6i. Country....................: -6j. Phone Number...............: -6k. Fax Number.................: -6l. E-Mailbox..................: - -Prime Name Server -7a. Primary Server Hostname....:###primary### -7b. Primary Server Netaddress..:###primary_ip### - -Secondary Name Server(s) -###LOOP### -8a. Secondary Server Hostname..:###secondary### -8b. Secondary Server Netaddress:###secondary_ip### -###ENDLOOP### - -END OF AGREEMENT - diff --git a/etc/megapop.pl b/etc/megapop.pl deleted file mode 100755 index e2930fb55..000000000 --- a/etc/megapop.pl +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/perl -Tw -# -# this will break when megapop changes the URL or format of their listing page. -# that's stupid. perhaps they can provide a machine-readable listing? - -use strict; -use LWP::UserAgent; -use FS::UID qw(adminsuidsetup); -use FS::svc_acct_pop; - -my $url = "http://www.megapop.com/location.htm"; - -my $user = shift or die &usage; -adminsuidsetup($user); - -my %state2usps = &state2usps; -$state2usps{'WASHINGTON STATE'} = 'WA'; #megapop's on crack -$state2usps{'CANADA'} = 'CANADA'; #freeside's on crack - -my $ua = new LWP::UserAgent; -my $request = new HTTP::Request('GET', $url); -my $response = $ua->request($request); -die $response->error_as_HTML unless $response->is_success; -my $line; -my $usps = ''; -foreach $line ( split("\n", $response->content) ) { - if ( $line =~ /\W(\w[\w\s]*\w)\s+LOCATIONS/i ) { - $usps = $state2usps{uc($1)} - or warn "warning: unknown state $1\n"; - } elsif ( $line =~ /(\d{3})\-(\d{3})\-(\d{4})\s+(\w[\w\s]*\w)/ ) { - print "$1 $2 $3 $4 $usps\n"; - my $svc_acct_pop = new FS::svc_acct_pop ( { - 'city' => $4, - 'state' => $usps, - 'ac' => $1, - 'exch' => $2, - } ); - my $error = $svc_acct_pop->insert; - die $error if $error; - } -} - -sub usage { - die "Usage:\n $0 user\n"; -} - -sub state2usps{ ( - 'ALABAMA' => 'AL', - 'ALASKA' => 'AK', - 'AMERICAN SAMOA' => 'AS', - 'ARIZONA' => 'AZ', - 'ARKANSAS' => 'AR', - 'CALIFORNIA' => 'CA', - 'COLORADO' => 'CO', - 'CONNECTICUT' => 'CT', - 'DELAWARE' => 'DE', - 'DISTRICT OF COLUMBIA' => 'DC', - 'FEDERATED STATES OF MICRONESIA' => 'FM', - 'FLORIDA' => 'FL', - 'GEORGIA' => 'GA', - 'GUAM' => 'GU', - 'HAWAII' => 'HI', - 'IDAHO' => 'ID', - 'ILLINOIS' => 'IL', - 'INDIANA' => 'IN', - 'IOWA' => 'IA', - 'KANSAS' => 'KS', - 'KENTUCKY' => 'KY', - 'LOUISIANA' => 'LA', - 'MAINE' => 'ME', - 'MARSHALL ISLANDS' => 'MH', - 'MARYLAND' => 'MD', - 'MASSACHUSETTS' => 'MA', - 'MICHIGAN' => 'MI', - 'MINNESOTA' => 'MN', - 'MISSISSIPPI' => 'MS', - 'MISSOURI' => 'MO', - 'MONTANA' => 'MT', - 'NEBRASKA' => 'NE', - 'NEVADA' => 'NV', - 'NEW HAMPSHIRE' => 'NH', - 'NEW JERSEY' => 'NJ', - 'NEW MEXICO' => 'NM', - 'NEW YORK' => 'NY', - 'NORTH CAROLINA' => 'NC', - 'NORTH DAKOTA' => 'ND', - 'NORTHERN MARIANA ISLANDS' => 'MP', - 'OHIO' => 'OH', - 'OKLAHOMA' => 'OK', - 'OREGON' => 'OR', - 'PALAU' => 'PW', - 'PENNSYLVANIA' => 'PA', - 'PUERTO RICO' => 'PR', - 'RHODE ISLAND' => 'RI', - 'SOUTH CAROLINA' => 'SC', - 'SOUTH DAKOTA' => 'SD', - 'TENNESSEE' => 'TN', - 'TEXAS' => 'TX', - 'UTAH' => 'UT', - 'VERMONT' => 'VT', - 'VIRGIN ISLANDS' => 'VI', - 'VIRGINIA' => 'VA', - 'WASHINGTON' => 'WA', - 'WEST VIRGINIA' => 'WV', - 'WISCONSIN' => 'WI', - 'WYOMING' => 'WY', - 'ARMED FORCES AFRICA' => 'AE', - 'ARMED FORCES AMERICAS' => 'AA', - 'ARMED FORCES CANADA' => 'AE', - 'ARMED FORCES EUROPE' => 'AE', - 'ARMED FORCES MIDDLE EAST' => 'AE', - 'ARMED FORCES PACIFIC' => 'AP', -) } - diff --git a/etc/sql-reserved-words.txt b/etc/sql-reserved-words.txt deleted file mode 100644 index dc507cef5..000000000 --- a/etc/sql-reserved-words.txt +++ /dev/null @@ -1,103 +0,0 @@ -From http://epoch.cs.berkeley.edu:8000/sequoia/dba/montage/FAQ/SQL.html - by Jean Anderson (jta@postgres.berkeley.edu) - -What are the SQL reserved words? - -I grep'd the following list out of the sql docs available via anonymous ftp to speckle.ncsl.nist.gov:/isowg3. -SQL3 words are not set in stone, but you'd do well to avoid them. - - From sql1992.txt: - - AFTER, ALIAS, ASYNC, BEFORE, BOOLEAN, BREADTH, - COMPLETION, CALL, CYCLE, DATA, DEPTH, DICTIONARY, EACH, ELSEIF, - EQUALS, GENERAL, IF, IGNORE, LEAVE, LESS, LIMIT, LOOP, MODIFY, - NEW, NONE, OBJECT, OFF, OID, OLD, OPERATION, OPERATORS, OTHERS, - PARAMETERS, PENDANT, PREORDER, PRIVATE, PROTECTED, RECURSIVE, REF, - REFERENCING, REPLACE, RESIGNAL, RETURN, RETURNS, ROLE, ROUTINE, - ROW, SAVEPOINT, SEARCH, SENSITIVE, SEQUENCE, SIGNAL, SIMILAR, - SQLEXCEPTION, SQLWARNING, STRUCTURE, TEST, THERE, TRIGGER, TYPE, - UNDER, VARIABLE, VIRTUAL, VISIBLE, WAIT, WHILE, WITHOUT - - From sql1992.txt (Annex E): - - ABSOLUTE, ACTION, ADD, ALLOCATE, ALTER, ARE, ASSERTION, AT, BETWEEN, - BIT, BIT - -What are the SQL reserved words? - -I grep'd the following list out of the sql docs available via anonymous ftp to speckle.ncsl.nist.gov:/isowg3. -SQL3 words are not set in stone, but you'd do well to avoid them. - - From sql1992.txt: - - AFTER, ALIAS, ASYNC, BEFORE, BOOLEAN, BREADTH, - COMPLETION, CALL, CYCLE, DATA, DEPTH, DICTIONARY, EACH, ELSEIF, - EQUALS, GENERAL, IF, IGNORE, LEAVE, LESS, LIMIT, LOOP, MODIFY, - NEW, NONE, OBJECT, OFF, OID, OLD, OPERATION, OPERATORS, OTHERS, - PARAMETERS, PENDANT, PREORDER, PRIVATE, PROTECTED, RECURSIVE, REF, - REFERENCING, REPLACE, RESIGNAL, RETURN, RETURNS, ROLE, ROUTINE, - ROW, SAVEPOINT, SEARCH, SENSITIVE, SEQUENCE, SIGNAL, SIMILAR, - SQLEXCEPTION, SQLWARNING, STRUCTURE, TEST, THERE, TRIGGER, TYPE, - UNDER, VARIABLE, VIRTUAL, VISIBLE, WAIT, WHILE, WITHOUT - - From sql1992.txt (Annex E): - - ABSOLUTE, ACTION, ADD, ALLOCATE, ALTER, ARE, ASSERTION, AT, BETWEEN, - BIT, BIT - -What are the SQL reserved words? - -I grep'd the following list out of the sql docs available via anonymous ftp to speckle.ncsl.nist.gov:/isowg3. -SQL3 words are not set in stone, but you'd do well to avoid them. - - From sql1992.txt: - - AFTER, ALIAS, ASYNC, BEFORE, BOOLEAN, BREADTH, - COMPLETION, CALL, CYCLE, DATA, DEPTH, DICTIONARY, EACH, ELSEIF, - EQUALS, GENERAL, IF, IGNORE, LEAVE, LESS, LIMIT, LOOP, MODIFY, - NEW, NONE, OBJECT, OFF, OID, OLD, OPERATION, OPERATORS, OTHERS, - PARAMETERS, PENDANT, PREORDER, PRIVATE, PROTECTED, RECURSIVE, REF, - REFERENCING, REPLACE, RESIGNAL, RETURN, RETURNS, ROLE, ROUTINE, - ROW, SAVEPOINT, SEARCH, SENSITIVE, SEQUENCE, SIGNAL, SIMILAR, - SQLEXCEPTION, SQLWARNING, STRUCTURE, TEST, THERE, TRIGGER, TYPE, - UNDER, VARIABLE, VIRTUAL, VISIBLE, WAIT, WHILE, WITHOUT - - From sql1992.txt (Annex E): - - ABSOLUTE, ACTION, ADD, ALLOCATE, ALTER, ARE, ASSERTION, AT, BETWEEN, - BIT, BIT_LENGTH, BOTH, CASCADE, CASCADED, CASE, CAST, CATALOG, - CHAR_LENGTH, CHARACTER_LENGTH, COALESCE, COLLATE, COLLATION, COLUMN, - CONNECT, CONNECTION, CONSTRAINT, CONSTRAINTS, CONVERT, CORRESPONDING, - CROSS, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, - DATE, DAY, DEALLOCATE, DEFERRABLE, DEFERRED, DESCRIBE, DESCRIPTOR, - DIAGNOSTICS, DISCONNECT, DOMAIN, DROP, ELSE, END-EXEC, EXCEPT, - EXCEPTION, EXECUTE, EXTERNAL, EXTRACT, FALSE, FIRST, FULL, GET, - GLOBAL, HOUR, IDENTITY, IMMEDIATE, INITIALLY, INNER, INPUT, - INSENSITIVE, INTERSECT, INTERVAL, ISOLATION, JOIN, LAST, LEADING, - LEFT, LEVEL, LOCAL, LOWER, MATCH, MINUTE, MONTH, NAMES, NATIONAL, - NATURAL, NCHAR, NEXT, NO, NULLIF, OCTET_LENGTH, ONLY, OUTER, OUTPUT, - OVERLAPS, PAD, PARTIAL, POSITION, PREPARE, PRESERVE, PRIOR, READ, - RELATIVE, RESTRICT, REVOKE, RIGHT, ROWS, SCROLL, SECOND, SESSION, - SESSION_USER, SIZE, SPACE, SQLSTATE, SUBSTRING, SYSTEM_USER, - TEMPORARY, THEN, TIME, TIMESTAMP, TIMEZONE_HOUR, TIMEZONE_MINUTE, - TRAILING, TRANSACTION, TRANSLATE, TRANSLATION, TRIM, TRUE, UNKNOWN, - UPPER, USAGE, USING, VALUE, VARCHAR, VARYING, WHEN, WRITE, YEAR, ZONE - - From sql3part2.txt (Annex E) - - ACTION, ACTOR, AFTER, ALIAS, ASYNC, ATTRIBUTES, BEFORE, BOOLEAN, - BREADTH, COMPLETION, CURRENT_PATH, CYCLE, DATA, DEPTH, DESTROY, - DICTIONARY, EACH, ELEMENT, ELSEIF, EQUALS, FACTOR, GENERAL, HOLD, - IGNORE, INSTEAD, LESS, LIMIT, LIST, MODIFY, NEW, NEW_TABLE, NO, - NONE, OFF, OID, OLD, OLD_TABLE, OPERATION, OPERATOR, OPERATORS, - PARAMETERS, PATH, PENDANT, POSTFIX, PREFIX, PREORDER, PRIVATE, - PROTECTED, RECURSIVE, REFERENCING, REPLACE, ROLE, ROUTINE, ROW, - SAVEPOINT, SEARCH, SENSITIVE, SEQUENCE, SESSION, SIMILAR, SPACE, - SQLEXCEPTION, SQLWARNING, START, STATE, STRUCTURE, SYMBOL, TERM, - TEST, THERE, TRIGGER, TYPE, UNDER, VARIABLE, VIRTUAL, VISIBLE, - WAIT, WITHOUT - - sql3part4.txt (ANNEX E): - - CALL, DO, ELSEIF, EXCEPTION, IF, LEAVE, LOOP, OTHERS, RESIGNAL, - RETURN, RETURNS, SIGNAL, TUPLE, WHILE diff --git a/fs_passwd/fs_passwd b/fs_passwd/fs_passwd deleted file mode 100755 index feddb462c..000000000 --- a/fs_passwd/fs_passwd +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/perl -Tw -# -# fs_passwd -# -# portions of this script are copied from the `passwd' script in the original -# (perl 4) camel book, now archived at -# http://www.perl.com/CPAN/scripts/nutshell/ch6/passwd -# -# ivan@sisd.com 98-mar-8 -# -# password lengths 0,255 instead of 6,8 - we'll let the server process -# check the data ivan@sisd.com 98-jul-17 -# -# updated for the exciting new world of self-service 2004-mar-10 - -use strict; -use Getopt::Std; -use FS::SelfService qw(passwd); -use vars qw($opt_f $opt_s); - -my($freeside_uid)=scalar(getpwnam('freeside')); - -$ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin'; -$ENV{'SHELL'} = '/bin/sh'; -$ENV{'IFS'} = " \t\n"; -$ENV{'CDPATH'} = ''; -$ENV{'ENV'} = ''; -$ENV{'BASH_ENV'} = ''; - -$SIG{__DIE__}= sub { system '/bin/stty', 'echo'; }; - -die "passwd program isn't running setuid to freeside\n" if $> != $freeside_uid; - -unshift @ARGV, "-f" if $0 =~ /chfn$/; -unshift @ARGV, "-s" if $0 =~ /chsh$/; - -getopts('fs'); - -my($me)=''; -if ( $_ = shift(@ARGV) ) { - /^(\w{2,8})$/; - $me = $1; -} -die "You can't change the password for $me." if $me && $<; -$me = (getpwuid($<))[0] unless $me; - -my($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,$shell)= - getpwnam $me; - -my($old_password,$new_password,$new_gecos,$new_shell); - -if ( $opt_f || $opt_s ) { - system '/bin/stty', '-echo'; - print "Password:"; - $old_password=; - system '/bin/stty', 'echo'; - chop($old_password); - #$old_password =~ /^(.{6,8})$/ or die "\nIllegal password.\n"; - $old_password =~ /^(.{0,255})$/ or die "\nIllegal password.\n"; - $old_password = $1; - - $new_password = ''; - - if ( $opt_f ) { - print "\nChanging gecos for $me.\n"; - print "Gecos [", $gcos, "]: "; - $new_gecos=; - chop($new_gecos); - $new_gecos ||= $gcos; - $new_gecos =~ /^(.{0,255})$/ or die "\nIllegal gecos.\n"; - } else { - $new_gecos = ''; - } - - if ( $opt_s ) { - print "\nChanging shell for $me.\n"; - print "Shell [", $shell, "]: "; - $new_shell=; - chop($new_shell); - $new_shell ||= $shell; - $new_shell =~ /^(.{0,255})$/ or die "\nIllegal shell.\n"; - } else { - $new_shell = ''; - } - -} else { - - print "Changing password for $me.\n"; - print "Old password:"; - system '/bin/stty', '-echo'; - $old_password=; - chop $old_password; - #$old_password =~ /^(.{6,8})$/ or die "\nIllegal password.\n"; - $old_password =~ /^(.{0,255})$/ or die "\nIllegal password.\n"; - $old_password = $1; - print "\nEnter the new password (minimum of 6, maximum of 8 characters)\n"; - print "Please use a combination of upper and lowercase letters and numbers.\n"; - print "New password:"; - $new_password=; - chop($new_password); - #$new_password =~ /^(.{6,8})$/ or die "\nIllegal password.\n"; - $new_password =~ /^(.{0,255})$/ or die "\nIllegal password.\n"; - $new_password = $1; - print "\nRe-enter new password:"; - my($check_new_password); - $check_new_password=; - chop($check_new_password); - die "\nThey don't match; try again.\n" unless $check_new_password eq $new_password; - - $new_gecos=''; - $new_shell=''; -} -print "\n"; - -system '/bin/stty', 'echo'; - -my $rv = passwd( - 'username' => $me, - 'old_password' => $old_password, - 'new_password' => $new_password, - 'new_gecos' => $new_gecos, - 'new_shell' => $new_shell, -); - -my $error = $rv->{error}; - -if ($error) { - print "\nUpdate error: $error\n"; -} else { - print "\nUpdate sucessful.\n"; -} diff --git a/fs_selfadmin/FS-MailAdminServer/MailAdminClient.pm b/fs_selfadmin/FS-MailAdminServer/MailAdminClient.pm deleted file mode 100755 index d0a741049..000000000 --- a/fs_selfadmin/FS-MailAdminServer/MailAdminClient.pm +++ /dev/null @@ -1,537 +0,0 @@ -package FS::MailAdminClient; - -use strict; -use vars qw($VERSION @ISA @EXPORT_OK $fs_mailadmind_socket); -use Exporter; -use Socket; -use FileHandle; -use IO::Handle; - -$VERSION = '0.01'; - -@ISA = qw( Exporter ); -@EXPORT_OK = qw( signup_info authenticate list_packages list_mailboxes delete_mailbox password_mailbox add_mailbox list_forwards list_pkg_forwards delete_forward add_forward new_customer ); - -$fs_mailadmind_socket = "/usr/local/freeside/fs_mailadmind_socket"; - -$ENV{'PATH'} ='/usr/bin:/usr/ucb:/bin'; -$ENV{'SHELL'} = '/bin/sh'; -$ENV{'IFS'} = " \t\n"; -$ENV{'CDPATH'} = ''; -$ENV{'ENV'} = ''; -$ENV{'BASH_ENV'} = ''; - -my $freeside_uid = scalar(getpwnam('freeside')); -die "not running as the freeside user\n" if $> != $freeside_uid; - -=head1 NAME - -FS::MailAdminClient - Freeside mail administration client API - -=head1 SYNOPSIS - - use FS::MailAdminClient qw( signup_info list_mailboxes new_customer ); - - ( $locales, $packages, $pops ) = signup_info; - - ( $accounts ) = list_mailboxes; - - $error = new_customer ( { - 'first' => $first, - 'last' => $last, - 'ss' => $ss, - 'comapny' => $company, - 'address1' => $address1, - 'address2' => $address2, - 'city' => $city, - 'county' => $county, - 'state' => $state, - 'zip' => $zip, - 'country' => $country, - 'daytime' => $daytime, - 'night' => $night, - 'fax' => $fax, - 'payby' => $payby, - 'payinfo' => $payinfo, - 'paydate' => $paydate, - 'payname' => $payname, - 'invoicing_list' => $invoicing_list, - 'pkgpart' => $pkgpart, - 'username' => $username, - '_password' => $password, - 'popnum' => $popnum, - } ); - -=head1 DESCRIPTION - -This module provides an API for a remote mail administration server. - -It needs to be run as the freeside user. Because of this, the program which -calls these subroutines should be written very carefully. - -=head1 SUBROUTINES - -=over 4 - -=item signup_info - -Returns three array references of hash references. - -The first set of hash references is of allowable locales. Each hash reference -has the following keys: - taxnum - state - county - country - -The second set of hash references is of allowable packages. Each hash -reference has the following keys: - pkgpart - pkg - -The third set of hash references is of allowable POPs (Points Of Presence). -Each hash reference has the following keys: - popnum - city - state - ac - exch - -=cut - -sub signup_info { - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "signup_info\n"; - SOCK->flush; - - chop ( my $n_cust_main_county = ); - my @cust_main_county = map { - chop ( my $taxnum = ); - chop ( my $state = ); - chop ( my $county = ); - chop ( my $country = ); - { - 'taxnum' => $taxnum, - 'state' => $state, - 'county' => $county, - 'country' => $country, - }; - } 1 .. $n_cust_main_county; - - chop ( my $n_part_pkg = ); - my @part_pkg = map { - chop ( my $pkgpart = ); - chop ( my $pkg = ); - { - 'pkgpart' => $pkgpart, - 'pkg' => $pkg, - }; - } 1 .. $n_part_pkg; - - chop ( my $n_svc_acct_pop = ); - my @svc_acct_pop = map { - chop ( my $popnum = ); - chop ( my $city = ); - chop ( my $state = ); - chop ( my $ac = ); - chop ( my $exch = ); - chop ( my $loc = ); - { - 'popnum' => $popnum, - 'city' => $city, - 'state' => $state, - 'ac' => $ac, - 'exch' => $exch, - 'loc' => $loc, - }; - } 1 .. $n_svc_acct_pop; - - close SOCK; - - \@cust_main_county, \@part_pkg, \@svc_acct_pop; -} - -=item authenticate - -Authentictes against a service on the remote Freeside system. Requires a hash -reference as a parameter with the following keys: - authuser - _password - -Returns a scalar error message of the form "authuser OK|FAILED" or an error -message. - -=cut - -sub authenticate { - my $hashref = shift; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "authenticate", "\n"; - SOCK->flush; - - print SOCK join("\n", map { $hashref->{$_} } qw( - authuser _password - ) ), "\n"; - SOCK->flush; - - chop( my $error = ); - close SOCK; - - $error; -} - -=item list_packages - -Returns one array reference of hash references. - -The set of hash references is of existing packages. Each hash reference -has the following keys: - pkgnum - domain - account - -=cut - -sub list_packages { - my $user = shift; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "list_packages\n", $user, "\n"; - SOCK->flush; - - chop ( my $n_packages = ); - my @packages = map { - chop ( my $pkgnum = ); - chop ( my $domain = ); - chop ( my $account = ); - { - 'pkgnum' => $pkgnum, - 'domain' => $domain, - 'account' => $account, - }; - } 1 .. $n_packages; - - close SOCK; - - \@packages; -} - -=item list_mailboxes - -Returns one array references of hash references. - -The set of hash references is of existing accounts. Each hash reference -has the following keys: - svcnum - username - _password - -=cut - -sub list_mailboxes { - my ($user, $package) = @_; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "list_mailboxes\n", $user, "\n", $package, "\n"; - SOCK->flush; - - chop ( my $n_svc_acct = ); - my @svc_acct = map { - chop ( my $svcnum = ); - chop ( my $username = ); - chop ( my $_password = ); - { - 'svcnum' => $svcnum, - 'username' => $username, - '_password' => $_password, - }; - } 1 .. $n_svc_acct; - - close SOCK; - - \@svc_acct; -} - -=item delete_mailbox - -Deletes a mailbox service from the remote Freeside system. Requires a hash -reference as a paramater with the following keys: - authuser - account - -Returns a scalar error message, or the empty string for success. - -=cut - -sub delete_mailbox { - my $hashref = shift; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "delete_mailbox", "\n"; - SOCK->flush; - - print SOCK join("\n", map { $hashref->{$_} } qw( - authuser account - ) ), "\n"; - SOCK->flush; - - chop( my $error = ); - close SOCK; - - $error; -} - -=item password_mailbox - -Changes the password for a mailbox service on the remote Freeside system. - Requires a hash reference as a paramater with the following keys: - authuser - account - _password - -Returns a scalar error message, or the empty string for success. - -=cut - -sub password_mailbox { - my $hashref = shift; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "password_mailbox", "\n"; - SOCK->flush; - - print SOCK join("\n", map { $hashref->{$_} } qw( - authuser account _password - ) ), "\n"; - SOCK->flush; - - chop( my $error = ); - close SOCK; - - $error; -} - -=item add_mailbox - -Creates a mailbox service on the remote Freeside system. Requires a hash -reference as a parameter with the following keys: - authuser - package - account - _password - -Returns a scalar error message, or the empty string for success. - -=cut - -sub add_mailbox { - my $hashref = shift; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "add_mailbox", "\n"; - SOCK->flush; - - print SOCK join("\n", map { $hashref->{$_} } qw( - authuser package account _password - ) ), "\n"; - SOCK->flush; - - chop( my $error = ); - close SOCK; - - $error; -} - -=item list_forwards - -Returns one array references of hash references. - -The set of hash references is of existing forwards. Each hash reference -has the following keys: - svcnum - dest - -=cut - -sub list_forwards { - my ($user, $service) = @_; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "list_forwards\n", $user, "\n", $service, "\n"; - SOCK->flush; - - chop ( my $n_svc_forward = ); - my @svc_forward = map { - chop ( my $svcnum = ); - chop ( my $dest = ); - { - 'svcnum' => $svcnum, - 'dest' => $dest, - }; - } 1 .. $n_svc_forward; - - close SOCK; - - \@svc_forward; -} - -=item list_pkg_forwards - -Returns one array references of hash references. - -The set of hash references is of existing forwards. Each hash reference -has the following keys: - svcnum - srcsvc - dest - -=cut - -sub list_pkg_forwards { - my ($user, $package) = @_; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "list_pkg_forwards\n", $user, "\n", $package, "\n"; - SOCK->flush; - - chop ( my $n_svc_forward = ); - my @svc_forward = map { - chop ( my $svcnum = ); - chop ( my $srcsvc = ); - chop ( my $dest = ); - { - 'svcnum' => $svcnum, - 'srcsvc' => $srcsvc, - 'dest' => $dest, - }; - } 1 .. $n_svc_forward; - - close SOCK; - - \@svc_forward; -} - -=item delete_forward - -Deletes a forward service from the remote Freeside system. Requires a hash -reference as a paramater with the following keys: - authuser - svcnum - -Returns a scalar error message, or the empty string for success. - -=cut - -sub delete_forward { - my $hashref = shift; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "delete_forward", "\n"; - SOCK->flush; - - print SOCK join("\n", map { $hashref->{$_} } qw( - authuser svcnum - ) ), "\n"; - SOCK->flush; - - chop( my $error = ); - close SOCK; - - $error; -} - -=item add_forward - -Creates a forward service on the remote Freeside system. Requires a hash -reference as a parameter with the following keys: - authuser - package - source - dest - -Returns a scalar error message, or the empty string for success. - -=cut - -sub add_forward { - my $hashref = shift; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "add_forward", "\n"; - SOCK->flush; - - print SOCK join("\n", map { $hashref->{$_} } qw( - authuser package source dest - ) ), "\n"; - SOCK->flush; - - chop( my $error = ); - close SOCK; - - $error; -} - -=item new_customer HASHREF - -Adds a customer to the remote Freeside system. Requires a hash reference as -a paramater with the following keys: - first - last - ss - comapny - address1 - address2 - city - county - state - zip - country - daytime - night - fax - payby - payinfo - paydate - payname - invoicing_list - pkgpart - username - _password - popnum - -Returns a scalar error message, or the empty string for success. - -=cut - -sub new_customer { - my $hashref = shift; - - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_mailadmind_socket)) or die "connect: $!"; - print SOCK "new_customer\n"; - - print SOCK join("\n", map { $hashref->{$_} } qw( - first last ss company address1 address2 city county state zip country - daytime night fax payby payinfo paydate payname invoicing_list - pkgpart username _password popnum - ) ), "\n"; - SOCK->flush; - - chop( my $error = ); - $error; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L, L, L - -=cut - -1; - diff --git a/fs_selfadmin/FS-MailAdminServer/cgi/mailadmin.cgi b/fs_selfadmin/FS-MailAdminServer/cgi/mailadmin.cgi deleted file mode 100755 index c26c3dc42..000000000 --- a/fs_selfadmin/FS-MailAdminServer/cgi/mailadmin.cgi +++ /dev/null @@ -1,698 +0,0 @@ -#!/usr/bin/perl -######################################################################## -# # -# mailadmin.cgi NCI2000 # -# Jeff Finucane # -# 26 April 2001 # -# # -######################################################################## - -use DBI; -use strict; -use CGI; -use FS::MailAdminClient qw(authenticate list_packages list_mailboxes delete_mailbox password_mailbox add_mailbox list_forwards list_pkg_forwards delete_forward add_forward); - -my $sessionfile = '/usr/local/apache/htdocs/mailadmin/adminsess'; # session file -my $tmpdir = '/usr/local/apache/htdocs/mailadmin/tmp'; # Location to store temp files -my $cookiedomain = ".your.dom"; # domain if THIS server, should prepend with a '.' -my $cookieexpire = '+12h'; # expire the cookie session after this much idle time -my $sessexpire = 43200; # expire session after this long of no use (in seconds) - -my $body = ""; - -#### Should not have to change anything under this line #### -my $printmainpage = 1; -my $i = 0; -my $printheader = 1; -my $query = new CGI; -my $cgi = $query->url(); -my $now = getdatetime(); -my $current_package = 0; -my $current_account = 0; -my $current_domname = ""; - -# if they are trying to login we wont check the session yet -if ($query->param('login') eq '' && $query->param('action') ne 'login') { - checksession(); - printheader(); -} - -if ($query->param('login') ne '') { - - my $username = $query->param('username'); - my $password = $query->param('password'); - - if (!checkuserpass($username, $password)) { - printheader(); - error('not_admin'); - } - - my @alpha = ('A'..'Z', 'a'..'z', 0..9); - my $sessid = ''; - for (my $i = 0; $i < 10; $i++) { - $sessid .= @alpha[rand(@alpha)]; - } - - my $cookie1 = $query->cookie(-name=>'username', - -value=>$username, - -expires=>$cookieexpire, - -domain=>$cookiedomain); - - my $cookie2 = $query->cookie(-name=>'ma_sessionid', - -value=>$sessid, - -expires=>$cookieexpire, - -domain=>$cookiedomain); - - my $now = time(); - open(NEWSESS, ">>$sessionfile") || error('open'); - print NEWSESS "$username $sessid $now 0 0\n"; - close(NEWSESS); - - print $query->header(-COOKIE=>[$cookie1, $cookie2]); - - $printmainpage = 1; - -} elsif ($query->param('action') eq 'blankframe') { - - print "$body\n"; - $printmainpage = 0; - -} elsif ($query->param('action') eq 'list_packages') { - - my $username = $query->cookie(-name=>'username'); # session checked - my $list = list_packages($username); - print "$body\n"; - print "
    \n"; - print "\n"; - foreach my $package ( @{$list} ) { - print ""; - print "\n"; - print "\n"; - print ""; - } - print "

    Package Number

    Description

    $package->{'pkgnum'}

    $package->{'domain'}

    {'pkgnum'}&account=$package->{'account'}&domname=$package->{'domain'}\" target=\"rightmainframe\">select
    \n"; - print "\n"; - $printmainpage=0; - -} elsif ($query->param('action') eq 'list_mailboxes') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - my $list = list_mailboxes($username, $current_package); - my $forwardlist = list_pkg_forwards($username, $current_package); - print "$body\n"; - print "
    \n"; - print "\n"; - foreach my $account ( @{$list} ) { - print ""; - print "\n"; - print "\n"; - print ""; - -# my $forwardlist = list_forwards($username, $account->{'svcnum'}); -# foreach my $forward ( @{$forwardlist} ) { -# my $label = qq!=> ! . $forward->{'dest'}; -# print "\n"; -# } - foreach my $forward ( @{$forwardlist} ) { - if ($forward->{'srcsvc'} == $account->{'svcnum'}) { - my $label = qq!=> ! . $forward->{'dest'}; - print "\n"; - } - } - - } - print "

    Username

    Password

    $account->{'username'}

    $account->{'_password'}

    {'svcnum'}&mailbox=$account->{'username'}\" target=\"rightmainframe\">change

    $label

    $label

    \n"; - print "\n"; - $printmainpage=0; - -} elsif ($query->param('action') eq 'select') { - - my $username = $query->cookie(-name=>'username'); # session checked - $current_package = $query->param('package'); - $current_account = $query->param('account'); - $current_domname = $query->param('domname'); - set_package(); - print "$body\n"; - print "\n"; - print "
    \n"; - print "

    Selected package $current_package\n"; - print "

    \n"; - print "\n"; - print "\n"; - $printmainpage=0; - -} elsif ($query->param('action') eq 'change') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - my $account = $query->param('account'); - my $mailbox = $query->param('mailbox'); - my $list = list_forwards($username, $account); - print "$body\n"; - print "
    \n"; - print "
    \n"; - print "\n"; - print "\n"; - print "\n"; - foreach my $forward ( @{$list} ) { - my $label = qq!=> ! . $forward->{'dest'}; -# print "\n"; - print "\n"; - } - print "\n"; - print "

    Username

    $mailbox

    $label

    $label

    {'svcnum'}&mailbox=$mailbox&dest=$forward->{'dest'}\" target=\"rightmainframe\">remove

    Password

    \n"; - print "\n"; - print "\n"; - print "\n"; - print "
    \n"; - print "
    \n"; - print "
    \n"; - print "

    You may delete this user and all mailforwarding by pressing Delete This User.\n"; - print "

    To set or change the password for this user, type the new password in the box next to Password and press Change The Password.\n"; - print "

    If you would like to have mail destined for this user forwarded to another email address then press the Add Forwarding button.\n"; - print "\n"; - $printmainpage=0; - -} elsif ($query->param('deleteaccount') ne '') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - my $account = $query->param('account'); - my $mailbox = $query->param('mailbox'); - print "$body\n"; - print "

    \n"; - print "

    Are you certain you want to delete user $mailbox?\n"; - print "

    \n"; - print "\n"; - print "\n"; - $printmainpage=0; - -} elsif ($query->param('deleteaccounty') ne '') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - my $account = $query->param('account'); - - if ( my $error = delete_mailbox ( { - 'authuser' => $username, - 'account' => $account, - } ) ) { - print "$body\n"; - print "

    $error\n"; - print "\n"; - - } else { - print "$body\n"; - print "

    Deleted\n"; - print "\n"; - } - - $printmainpage=0; - -} elsif ($query->param('changepassword') ne '') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - my $account = $query->param('account'); - my $_password = $query->param('_password'); - - if ( my $error = password_mailbox ( { - 'authuser' => $username, - 'account' => $account, - '_password' => $_password, - } ) ) { - print "$body\n"; - print "

    $error\n"; - print "\n"; - - } else { - print "$body\n"; - print "

    Changed\n"; - print "\n"; - } - - $printmainpage=0; - -} elsif ($query->param('action') eq 'newmailbox') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - print "$body\n"; - print "\n"; - print "

    \n"; - print "\n"; - print "\n"; - print "

    Username

    @ " . $current_domname . "

    Password

    \n"; - print "\n"; - print "
    \n"; - print "
    \n"; - print "
    \n"; - print "

    Use this screen to add a new mailbox user. If the domain name of the email address (the part after the @ sign) is not what you expect then you may need to use List Packages to select the package with the correct domain.\n"; - print "

    Enter the first portion of the email address in the box adjacent to Username and enter the password for that user in the space next to Password. Then press the button labeled Add The User.\n"; - print "

    If you do not want to add a new user at this time then select a choice from the menu at the left, such as List Mailboxes.\n"; - print "\n"; - $printmainpage=0; - -} elsif ($query->param('addmailbox') ne '') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - my $account = $query->param('account'); - my $_password = $query->param('_password'); - - if ( my $error = add_mailbox ( { - 'authuser' => $username, - 'package' => $current_package, - 'account' => $account, - '_password' => $_password, - } ) ) { - print "$body\n"; - print "

    $error\n"; - print "\n"; - - } else { - print "$body\n"; - print "

    Created\n"; - print "\n"; - } - - $printmainpage=0; - -} elsif ($query->param('action') eq 'deleteforward') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - my $svcnum = $query->param('service'); - my $mailbox = $query->param('mailbox'); - my $dest = $query->param('dest'); - print "$body\n"; - print "

    \n"; - print "

    Are you certain you want to remove the forwarding from $mailbox to $dest?\n"; - print "

    \n"; - print "\n"; - print "\n"; - $printmainpage=0; - -} elsif ($query->param('deleteforwardy') ne '') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - my $service = $query->param('service'); - - if ( my $error = delete_forward ( { - 'authuser' => $username, - 'svcnum' => $service, - } ) ) { - print "$body\n"; - print "

    $error\n"; - print "\n"; - - } else { - print "$body\n"; - print "

    Forwarding Removed\n"; - print "\n"; - } - - $printmainpage=0; - -} elsif ($query->param('addforward') ne '') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - my $account = $query->param('account'); - my $mailbox = $query->param('mailbox'); - - print "$body\n"; - print "\n"; - print "

    \n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "
    Forward mail from

    $mailbox:

    to

    Destination:

    \n"; - print "\n"; - print "
    \n"; - print "
    \n"; - print "
    \n"; - print "

    If you would like mail originally destined for the above address to be forwarded to a different email address then type that email address in the box next to Destination: and press the Add the Forwarding button.\n"; - print "

    If you do not want to add mail forwarding then select a choice from the menu at the left, such as List Accounts.\n"; - - $printmainpage=0; - -} elsif ($query->param('addforwarddst') ne '') { - - my $username = $query->cookie(-name=>'username'); # session checked - select_package($username) unless $current_package; - my $account = $query->param('account'); - my $dest = $query->param('dest'); - - if ( my $error = add_forward ( { - 'authuser' => $username, - 'package' => $current_package, - 'source' => $account, - 'dest' => $dest, - } ) ) { - print "$body\n"; - print "

    $error\n"; - print "\n"; - - } else { - print "$body\n"; - print "

    Forwarding Created\n"; - print "\n"; - } - - $printmainpage=0; - -} elsif ($query->param('action') eq 'navframe') { - - print "\n"; - print "

    NCI2000 MAIL ADMIN Web Interface

    \n"; - - print "
    Choose Action:

    \n"; - print "
    \n"; - print "
      \n"; - print "
    \n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "
  • Log Off
  • List Packages
  • List Accounts
  • Add Account
  • \n"; - - print "


    \n"; - print "\n"; - - $printmainpage = 0; - -} elsif ($query->param('action') eq 'rightmainframe') { - - print "$body\n"; - print "


    \n"; - print "<----- Please choose function on the left menu\n"; - print "

    \n"; - print "

    Choose Log Off when you are finished. This helps prevent unauthorized access to your accounts.\n"; - print "

    Use List Packages when you administer multiple packages. When you have multiple domains at NCI2000 you are likely to have multiple packages. Use of List Packages is not necessary if administer only one package.\n"; - print "

    Use List Accounts to view your current arrangement of mailboxes. From this list you my choose to make changes to existing mailboxes or delete mailboxes. If you would like to modify the forwarding associated with a mailbox then choose it from this list.\n"; - print "

    Use Add Account when you would like an additional mailbox. After you have added the mailbox you may choose to make additional changes from the list provided by List Accounts.\n"; - print "\n"; - - $printmainpage = 0; - -} - - -if ($query->param('action') eq 'login') { - - printheader(); - printlogin(); - -} elsif ($query->param('action') eq 'logout') { - - destroysession(); - printheader(); - printlogin(); - -} elsif ($printmainpage) { - - - print "NCI2000 MAIL ADMIN Web Interface\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - - -} - -sub getdatetime { - my $today = localtime(time()); - my ($day,$mon,$dayofmon,$time,$year) = split(/\s+/,$today); - my @datemonths = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); - - my $numidx = "01"; - my ($nummon); - foreach my $mons (@datemonths) { - if ($mon eq $mons) { - $nummon = $numidx; - } - $numidx++; - } - - return "$year-$nummon-$dayofmon $time"; - -} - -sub error { - - my $error = shift; - my $arg1 = shift; - - printheader(); - - if ($error eq 'not_admin') { - print "Error!\n"; - print "$body\n"; - print "

    Error!

    \n"; - print "Unauthorized attempt to access mail administration.\n"; - print "
    Please login again if you think this is an error.\n"; - print "
    \n"; - print "\n"; - } elsif ($error eq 'exists') { - print "Error!\n"; - print "$body\n"; - print "

    Error!

    \n"; - print "The user you are trying to enter already exists. Please go back and enter a different username\n"; - print "\n"; - } elsif ($error eq 'ingroup') { - print "Error!\n"; - print "$body\n"; - print "

    Error!

    \n"; - print "This user is already in the group $arg1. Please go back and deselect group $arg1 from the list.\n"; - print "
    \n"; - print "\n"; - } elsif ($error eq 'sess_expired') { - print "$body\n"; - print "
    Your session has expired.
    \n"; - print "

    Please login again HERE
    \n"; - print "\n"; - } elsif ($error eq 'open') { - print "$body\n"; - print "
    Unable to open or rename file.
    \n"; - print "

    If this continues, please contact your administrator
    \n"; - print "\n"; - } - - - exit; - -} - - -#print a html header if not printed yet -sub printheader { - - if ($printheader) { - print "Content-Type: text/html\n\n"; - $printheader = 0; - } - -} - - -#verify user can access administration -sub checksession { - - my $username = $query->cookie(-name=>'username'); - my $sessionid = $query->cookie(-name=>'ma_sessionid'); - - if ($sessionid eq '') { - printheader(); - if ($query->param()) { - error('sess_expired'); - } else { - printlogin(); - exit; - } - } - - my $now = time(); - my $founduser = 0; - open(SESSFILE, "$sessionfile") || error('open'); - error('open') if -l "$tmpdir/adminsess.$$"; - open(NEWSESS, ">$tmpdir/adminsess.$$") || error('open'); - while () { - chomp(); - my ($user, $sess, $time, $pkgnum, $svcdomain, $domname) = split(/\s+/); - next if $now - $sessexpire > $time; - if ($username eq $user && !$founduser) { - if ($sess eq $sessionid) { - $founduser = 1; - print NEWSESS "$user $sess $now $pkgnum $svcdomain $domname\n"; - $current_package=$pkgnum; - $current_account=$svcdomain; - $current_domname=$domname; - next; - } - } - print NEWSESS "$user $sess $time $pkgnum $svcdomain $domname\n"; - } - close(SESSFILE); - close(NEWSESS); - system("mv $tmpdir/adminsess.$$ $sessionfile"); - error('sess_expired') unless $founduser; - - my $cookie1 = $query->cookie(-name=>'username', - -value=>$username, - -expires=>$cookieexpire, - -domain=>$cookiedomain); - - my $cookie2 = $query->cookie(-name=>'ma_sessionid', - -value=>$sessionid, - -expires=>$cookieexpire, - -domain=>$cookiedomain); - - print $query->header(-COOKIE=>[$cookie1, $cookie2]); - - $printheader = 0; - - return 0; - -} - -sub destroysession { - - my $username = $query->cookie(-name=>'username'); - my $sessionid = $query->cookie(-name=>'ma_sessionid'); - - if ($sessionid eq '') { - printheader(); - if ($query->param()) { - error('sess_expired'); - } else { - printlogin(); - exit; - } - } - - my $now = time(); - my $founduser = 0; - open(SESSFILE, "$sessionfile") || error('open'); - error('open') if -l "$tmpdir/adminsess.$$"; - open(NEWSESS, ">$tmpdir/adminsess.$$") || error('open'); - while () { - chomp(); - my ($user, $sess, $time, $pkgnum, $svcdomain, $domname) = split(/\s+/); - next if $now - $sessexpire > $time; - if ($username eq $user && !$founduser) { - if ($sess eq $sessionid) { - $founduser = 1; - next; - } - } - print NEWSESS "$user $sess $time $pkgnum $svcdomain $domname\n"; - } - close(SESSFILE); - close(NEWSESS); - system("mv $tmpdir/adminsess.$$ $sessionfile"); - error('sess_expired') unless $founduser; - - $printheader = 0; - - return 0; - -} - -# checks the username and pass against the database -sub checkuserpass { - - my $username = shift; - my $password = shift; - - my $error = authenticate ( { - 'authuser' => $username, - '_password' => $password, - } ); - - if ($error eq "$username OK") { - return 1; - }else{ - return 0; - } - -} - -#printlogin prints a login page -sub printlogin { - - print "$body\n"; - print "
    Please login to access MAIL ADMIN
    \n"; - print "
    \n"; - print "
    Email Address:   \n"; - print "
    Email Password: \n"; - print "
    \n"; - print "
    \n"; - print "\n"; -} - - -#select_package chooses a administrable package if more than one exists -sub select_package { - my $user = shift; - my $packages = list_packages($user); - if (scalar(@{$packages}) eq 1) { - $current_package = @{$packages}[0]->{'pkgnum'}; - set_package(); - } - if (scalar(@{$packages}) > 1) { -# print $query->redirect("$cgi\?action=list_packages"); - print "

    No package selected. You must first select a package.\n"; - exit; - } -} - -sub set_package { - - my $username = $query->cookie(-name=>'username'); - my $sessionid = $query->cookie(-name=>'ma_sessionid'); - - if ($sessionid eq '') { - printheader(); - if ($query->param()) { - error('sess_expired'); - } else { - printlogin(); - exit; - } - } - - my $now = time(); - my $founduser = 0; - open(SESSFILE, "$sessionfile") || error('open'); - error('open') if -l "$tmpdir/adminsess.$$"; - open(NEWSESS, ">$tmpdir/adminsess.$$") || error('open'); - while () { - chomp(); - my ($user, $sess, $time, $pkgnum, $svcdomain, $domname) = split(/\s+/); - next if $now - $sessexpire > $time; - if ($username eq $user && !$founduser) { - if ($sess eq $sessionid) { - $founduser = 1; - print NEWSESS "$user $sess $time $current_package $current_account $current_domname\n"; - next; - } - } - print NEWSESS "$user $sess $time $pkgnum $svcdomain $domname\n"; - } - close(SESSFILE); - close(NEWSESS); - system("mv $tmpdir/adminsess.$$ $sessionfile"); - error('sess_expired') unless $founduser; - - $printheader = 0; - - return 0; - -} - diff --git a/fs_selfadmin/FS-MailAdminServer/fs_mailadmind b/fs_selfadmin/FS-MailAdminServer/fs_mailadmind deleted file mode 100755 index 746d7822e..000000000 --- a/fs_selfadmin/FS-MailAdminServer/fs_mailadmind +++ /dev/null @@ -1,366 +0,0 @@ -#!/usr/bin/perl -Tw - -eval 'exec /usr/bin/perl -Tw -S $0 ${1+"$@"}' - if 0; # not running under some shell -# -# fs_mailadmind -# -# This is run REMOTELY over ssh by fs_mailadmin_server. -# - -use strict; -use Socket; - -use vars qw( $Debug ); - -$Debug = 0; - -my($fs_mailadmind_socket)="/usr/local/freeside/fs_mailadmind_socket"; - -$ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin'; -$ENV{'SHELL'} = '/bin/sh'; -$ENV{'IFS'} = " \t\n"; -$ENV{'CDPATH'} = ''; -$ENV{'ENV'} = ''; -$ENV{'BASH_ENV'} = ''; - -$|=1; - -warn "[fs_mailadmind] Reading locales...\n" if $Debug; -chomp( my $n_cust_main_county = ); -my @cust_main_county = map { - chomp( my $taxnum = ); - chomp( my $state = ); - chomp( my $county = ); - chomp( my $country = ); - { - 'taxnum' => $taxnum, - 'state' => $state, - 'county' => $county, - 'country' => $country, - }; -} ( 1 .. $n_cust_main_county ); - -warn "[fs_mailadmind] Reading package definitions...\n" if $Debug; -chomp( my $n_part_pkg = ); -my @part_pkg = map { - chomp( my $pkgpart = ); - chomp( my $pkg = ); - { - 'pkgpart' => $pkgpart, - 'pkg' => $pkg, - }; -} ( 1 .. $n_part_pkg ); - -warn "[fs_mailadmind] Reading POPs...\n" if $Debug; -chomp( my $n_svc_acct_pop = ); -my @svc_acct_pop = map { - chomp( my $popnum = ); - chomp( my $city = ); - chomp( my $state = ); - chomp( my $ac = ); - chomp( my $exch = ); - chomp( my $loc = ); - { - 'popnum' => $popnum, - 'city' => $city, - 'state' => $state, - 'ac' => $ac, - 'exch' => $exch, - 'loc' => $loc, - }; -} ( 1 .. $n_svc_acct_pop ); - -warn "[fs_mailadmind] Creating $fs_mailadmind_socket\n" if $Debug; -my $uaddr = sockaddr_un($fs_mailadmind_socket); -my $proto = getprotobyname('tcp'); -socket(Server,PF_UNIX,SOCK_STREAM,0) or die "socket: $!"; -unlink($fs_mailadmind_socket); -bind(Server, $uaddr) or die "bind: $!"; -listen(Server,SOMAXCONN) or die "listen: $!"; - -warn "[fs_mailadmind] Entering main loop...\n" if $Debug; -my $paddr; -for ( ; $paddr = accept(Client,Server); close Client) { - - chop( my $command = ); - - if ( $command eq "signup_info" ) { - warn "[fs_mailadmind] sending signup info...\n" if $Debug; - print Client join("\n", $n_cust_main_county, - map { - $_->{taxnum}, - $_->{state}, - $_->{county}, - $_->{country}, - } @cust_main_county - ), "\n"; - - print Client join("\n", $n_part_pkg, - map { - $_->{pkgpart}, - $_->{pkg}, - } @part_pkg - ), "\n"; - - print Client join("\n", $n_svc_acct_pop, - map { - $_->{popnum}, - $_->{city}, - $_->{state}, - $_->{ac}, - $_->{exch}, - $_->{loc}, - } @svc_acct_pop - ), "\n"; - - } elsif ( $command eq "new_customer" ) { - warn "[fs_mailadmind] reading customer signup...\n" if $Debug; - my( - $first, $last, $ss, $company, $address1, $address2, $city, $county, - $state, $zip, $country, $daytime, $night, $fax, $payby, $payinfo, - $paydate, $payname, $invoicing_list, $pkgpart, $username, $password, - $popnum, - ) = map { scalar() } ( 1 .. 23 ); - - warn "[fs_mailadmind] sending customer data to remote server...\n" if $Debug; - print - $first, $last, $ss, $company, $address1, $address2, $city, $county, - $state, $zip, $country, $daytime, $night, $fax, $payby, $payinfo, - $paydate, $payname, $invoicing_list, $pkgpart, $username, $password, - $popnum, - ; - - warn "[fs_mailadmind] reading error from remote server...\n" if $Debug; - my $error = ; - - warn "[fs_mailadmind] sending error to local client...\n" if $Debug; - print Client $error; - - } elsif ( $command eq "authenticate" ) { - warn "[fs_mailadmind] reading user information to auth...\n" if $Debug; - chop( my $user = ); - warn "[fs_mailadmind] reading authentication material...\n" if $Debug; - chop( my $password = ); - warn "[fs_mailadmind] sending information to remote server...\n" if $Debug; - print "authenticate\n", $user, "\n", $password, "\n"; - - warn "[fs_mailadmind] reading error from remote server...\n" if $Debug; - my $error = ; - - warn "[fs_mailadmind] sending error to local client...\n" if $Debug; - print Client $error; - - } elsif ( $command eq "list_packages" ) { - warn "[fs_mailadmind] reading user information to list_packages...\n" if $Debug; - chop( my $user = ); - warn "[fs_mailadmind] sending user information to remote server...\n" if $Debug; - print "list_packages\n", $user, "\n"; - - warn "[fs_mailadmind] reading data from remote server...\n" if $Debug; - chomp( my $n_packages = ); - my @packages = map { - chomp( my $pkgnum = ); - chomp( my $domain = ); - chomp( my $account = ); - { - 'pkgnum' => $pkgnum, - 'domain' => $domain, - 'account' => $account, - }; - } ( 1 .. $n_packages ); - - warn "[fs_mailadmind] sending data to local client...\n" if $Debug; - - print Client join("\n", $n_packages, - map { - $_->{pkgnum}, - $_->{domain}, - $_->{account}, - } @packages - ), "\n"; - - } elsif ( $command eq "list_mailboxes" ) { - warn "[fs_mailadmind] reading user information to list_mailboxes...\n" if $Debug; - chop( my $user = ); - warn "[fs_mailadmind] reading package number to list_mailboxes...\n" if $Debug; - chop( my $package = ); - warn "[fs_mailadmind] sending user information to remote server...\n" if $Debug; - print "list_mailboxes\n", $user, "\n", $package, "\n"; - - warn "[fs_mailadmind] reading data from remote server...\n" if $Debug; - chomp( my $n_svc_acct = ); - my @svc_acct = map { - chomp( my $svcnum = ); - chomp( my $username = ); - chomp( my $_password = ); - { - 'svcnum' => $svcnum, - 'username' => $username, - '_password' => $_password, - }; - } ( 1 .. $n_svc_acct ); - - warn "[fs_mailadmind] sending data to local client...\n" if $Debug; - - print Client join("\n", $n_svc_acct, - map { - $_->{svcnum}, - $_->{username}, - $_->{_password}, - } @svc_acct - ), "\n"; - - } elsif ( $command eq "delete_mailbox" ) { - warn "[fs_mailadmind] reading user information to auth...\n" if $Debug; - chop( my $user = ); - warn "[fs_mailadmind] reading account information to delete...\n" if $Debug; - chop( my $account = ); - warn "[fs_mailadmind] sending information to remote server...\n" if $Debug; - print "delete_mailbox\n", $user, "\n", $account, "\n"; - - warn "[fs_mailadmind] reading error from remote server...\n" if $Debug; - my $error = ; - - warn "[fs_mailadmind] sending error to local client...\n" if $Debug; - print Client $error; - - } elsif ( $command eq "password_mailbox" ) { - warn "[fs_mailadmind] reading user information to auth...\n" if $Debug; - chop( my $user = ); - warn "[fs_mailadmind] reading account information to password...\n" if $Debug; - my( - $account, $_password, - ) = map { scalar() } ( 1 .. 2 ); - - warn "[fs_mailadmind] sending password data to remote server...\n" if $Debug; - print "password_mailbox", "\n"; - print - $user, "\n", $account, $_password, - ; - - warn "[fs_mailadmind] reading error from remote server...\n" if $Debug; - my $error = ; - - warn "[fs_mailadmind] sending error to local client...\n" if $Debug; - print Client $error; - - } elsif ( $command eq "add_mailbox" ) { - warn "[fs_mailadmind] reading user information to auth...\n" if $Debug; - chop( my $user = ); - warn "[fs_mailadmind] reading account information to create...\n" if $Debug; - my( - $package, $account, $_password, - ) = map { scalar() } ( 1 .. 3 ); - - warn "[fs_mailadmind] sending service data to remote server...\n" if $Debug; - print "add_mailbox", "\n"; - print - $user, "\n", $package, $account, $_password, - ; - - warn "[fs_mailadmind] reading error from remote server...\n" if $Debug; - my $error = ; - - warn "[fs_mailadmind] sending error to local client...\n" if $Debug; - print Client $error; - - } elsif ( $command eq "add_forward" ) { - warn "[fs_mailadmind] reading user information to auth...\n" if $Debug; - chop( my $user = ); - warn "[fs_mailadmind] reading forward information to create...\n" if $Debug; - my( - $package, $source, $dest, - ) = map { scalar() } ( 1 .. 3 ); - - warn "[fs_mailadmind] sending service data to remote server...\n" if $Debug; - print "add_forward", "\n"; - print - $user, "\n", $package, $source, $dest, - ; - - warn "[fs_mailadmind] reading error from remote server...\n" if $Debug; - my $error = ; - - warn "[fs_mailadmind] sending error to local client...\n" if $Debug; - print Client $error; - - } elsif ( $command eq "delete_forward" ) { - warn "[fs_mailadmind] reading user information to auth...\n" if $Debug; - chop( my $user = ); - warn "[fs_mailadmind] reading forward information to delete...\n" if $Debug; - chop( my $service = ); - warn "[fs_mailadmind] sending information to remote server...\n" if $Debug; - print "delete_forward\n", $user, "\n", $service, "\n"; - - warn "[fs_mailadmind] reading error from remote server...\n" if $Debug; - my $error = ; - - warn "[fs_mailadmind] sending error to local client...\n" if $Debug; - print Client $error; - - } elsif ( $command eq "list_forwards" ) { - warn "[fs_mailadmind] reading user information to list_forwards...\n" if $Debug; - chop( my $user = ); - warn "[fs_mailadmind] reading service number to list_forwards...\n" if $Debug; - chop( my $service = ); - warn "[fs_mailadmind] sending user information to remote server...\n" if $Debug; - print "list_forwards\n", $user, "\n", $service, "\n"; - - warn "[fs_mailadmind] reading data from remote server...\n" if $Debug; - chomp( my $n_svc_forward = ); - my @svc_forward = map { - chomp( my $svcnum = ); - chomp( my $dest = ); - { - 'svcnum' => $svcnum, - 'dest' => $dest, - }; - } ( 1 .. $n_svc_forward ); - - warn "[fs_mailadmind] sending data to local client...\n" if $Debug; - - print Client join("\n", $n_svc_forward, - map { - $_->{svcnum}, - $_->{dest}, - } @svc_forward - ), "\n"; - - } elsif ( $command eq "list_pkg_forwards" ) { - warn "[fs_mailadmind] reading user information to list_pkg_forwards...\n" if $Debug; - chop( my $user = ); - warn "[fs_mailadmind] reading service number to list_forwards...\n" if $Debug; - chop( my $package = ); - warn "[fs_mailadmind] sending user information to remote server...\n" if $Debug; - print "list_pkg_forwards\n", $user, "\n", $package, "\n"; - - warn "[fs_mailadmind] reading data from remote server...\n" if $Debug; - chomp( my $n_svc_forward = ); - my @svc_forward = map { - chomp( my $svcnum = ); - chomp( my $srcsvc = ); - chomp( my $dest = ); - { - 'svcnum' => $svcnum, - 'srcsvc' => $srcsvc, - 'dest' => $dest, - }; - } ( 1 .. $n_svc_forward ); - - warn "[fs_mailadmind] sending data to local client...\n" if $Debug; - - print Client join("\n", $n_svc_forward, - map { - $_->{svcnum}, - $_->{srcsvc}, - $_->{dest}, - } @svc_forward - ), "\n"; - - } else { - die "unexpected command from client: $command"; - } - -} - diff --git a/fs_selfadmin/README b/fs_selfadmin/README deleted file mode 100644 index d9857f054..000000000 --- a/fs_selfadmin/README +++ /dev/null @@ -1,27 +0,0 @@ - -This collection of files implements a 'self-administered mail service.' -Configuration is similar to fs_signupd - -Additionally you will need to modify the database: - -CREATE TABLE svc_acct_admin ( - svcnum int primary key, - adminsvc int not null -); - -creating both as keys might be good - -(and perform the dbdef-create) - - -As it exists now, a package containing one svc_domain, at least one -svc_acct_admin, and other services can have its svc_acct's and svc_forward's -manipulated by the svc_acct referenced by a svc_acct_admin in the package. - -One svc_acct may be referenced as svc_acct_admin for multiple packages. - -fs_mailadmin_server contains hard coded references to service numbers which -will require editing for your system. - -It's not a lot, but it might provide inspiration. - diff --git a/fs_selfadmin/fs_mailadmin_server b/fs_selfadmin/fs_mailadmin_server deleted file mode 100755 index ef4788543..000000000 --- a/fs_selfadmin/fs_mailadmin_server +++ /dev/null @@ -1,642 +0,0 @@ -#!/usr/bin/perl -Tw -# -# fs_mailadmin_server -# - -use strict; -use IO::Handle; -use FS::SSH qw(sshopen2); -use FS::UID qw(adminsuidsetup); -use FS::Conf; -use FS::Record qw( qsearch qsearchs ); -use FS::cust_main_county; -use FS::cust_main; -use FS::svc_acct_admin; - -use vars qw( $opt $Debug $conf $default_domain ); - -$Debug = 1; - -#my @payby = qw(CARD PREPAY); - -my $user = shift or die &usage; -&adminsuidsetup( $user ); - -$conf = new FS::Conf; -$default_domain = $conf->config('domain'); - -my $machine = shift or die &usage; - -my $agentnum = shift or die &usage; -my $agent = qsearchs( 'agent', { 'agentnum' => $agentnum } ) or die &usage; -my $pkgpart = $agent->pkgpart_hashref; - -my $refnum = shift or die &usage; - -#causing trouble for some folks -#$SIG{CHLD} = sub { wait() }; - -my($fs_mailadmind)=$conf->config('fs_mailadmind'); - -while (1) { - my($reader,$writer)=(new IO::Handle, new IO::Handle); - $writer->autoflush(1); - warn "[fs_mailadmin_server] Connecting to $machine...\n" if $Debug; - sshopen2($machine,$reader,$writer,$fs_mailadmind); - - my $data; - - warn "[fs_mailadmin_server] Sending locales...\n" if $Debug; - my @cust_main_county = qsearch('cust_main_county', {} ); - print $writer $data = join("\n", - ( scalar(@cust_main_county) || die "no tax rates (cust_main_county records)" ), - map { - $_->taxnum, - $_->state, - $_->county, - $_->country, - } @cust_main_county - ),"\n"; - warn "[fs_mailadmin_server] $data\n" if $Debug > 2; - - warn "[fs_mailadmin_server] Sending package definitions...\n" if $Debug; - my @part_pkg = grep { $_->svcpart('svc_acct') && $pkgpart->{ $_->pkgpart } } - qsearch( 'part_pkg', {} ); - print $writer $data = join("\n", - ( scalar(@part_pkg) || die "no usable package definitions, agent $agentnum" ), - map { - $_->pkgpart, - $_->pkg, - } @part_pkg - ), "\n"; - warn "[fs_mailadmin_server] $data\n" if $Debug > 2; - - warn "[fs_mailadmin_server] Sending POPs...\n" if $Debug; - my @svc_acct_pop = qsearch ('svc_acct_pop',{} ); - print $writer $data = join("\n", - ( scalar(@svc_acct_pop) || die "No points of presence (svc_acct_pop records)" ), - map { - $_->popnum, - $_->city, - $_->state, - $_->ac, - $_->exch, - $_->loc, - } @svc_acct_pop - ), "\n"; - warn "[fs_mailadmin_server] $data\n" if $Debug > 2; - - warn "[fs_mailadmin_server] Entering main loop...\n" if $Debug; -COMMAND: while (1) { - warn "[fs_mailadmin_server] Reading (waiting for) command...\n" if $Debug; - chop( my($command, $user) = map { scalar(<$reader>) } ( 1 .. 2 ) ); - my $domain = $default_domain; - $user =~ /^([\w\.\-]+)\@(([\w\-]+\.)+\w+)$/; - ($user, $domain) = ($1, $2); - - if ($command eq 'authenticate'){ - warn "[fs_mailadmin_server] Processing authenticate command for $user \n" if $Debug; - chop( my($password) = map { scalar(<$reader>) } ( 1 .. 1 ) ); - - my $error = ''; - - my @svc_domain = qsearchs('svc_domain', { 'domain' => $domain }); - - if (scalar(@svc_domain) != 1) { - warn "Nonexistant or duplicate service account for \"$domain\""; - next COMMAND; - } - - my @svc_acct = qsearchs('svc_acct', { 'username' => $user, - 'domsvc' => $svc_domain[0]->svcnum }); - if (scalar(@svc_acct) != 1) { - die "Nonexistant or duplicate service account for \"$user\""; - next COMMAND; - } - - if ($svc_acct[0]->_password eq $password) { - $error = "$user\@$domain OK"; - }else{ - $error = "$user\@$domain FAILED"; - } - warn "[fs_mailadmin_server] Sending results...\n" if $Debug; - print $writer $error, "\n"; - } - elsif ($command eq 'list_packages'){ - warn "[fs_mailadmin_server] Processing list_packages command for $user \n" if $Debug; - - my $error = ''; - - my @packages = eval {find_administrable_packages( $user, $domain )}; - warn "$@" if $@; - - my %packages; - my %accounts; - - foreach my $package (@packages) { - $packages{my $pkgnum = $package->getfield('pkgnum')} = $default_domain; - $accounts{$pkgnum} = 0; - my @services = qsearch('cust_svc', { 'pkgnum' => $pkgnum }); - foreach my $service (@services) { - if ($service->getfield('svcpart') eq '4'){ - my $account=qsearchs('svc_domain', { 'svcnum' => $service->getfield('svcnum') }); - $packages{$pkgnum}=$account->getfield('domain'); - $accounts{$pkgnum}=$account->getfield('svcnum'); - } - } - } - - print $writer $data = join("\n", - ( scalar(keys(%packages)) ), - map { - $_, - $packages{$_}, - $accounts{$_}, - } keys(%packages) - ), "\n"; - warn "[fs_mailadmin_server] $data\n" if $Debug > 2; - - }elsif ($command eq 'list_mailboxes'){ - - warn "[fs_mailadmin_server] Processing list_mailboxes command for $user" if $Debug; - chop( my($pkgnum) = map { scalar(<$reader>) } ( 1 .. 1 ) ); - warn "package $pkgnum \n" if $Debug; - - my $error = ''; - - my @packages = eval {find_administrable_packages( $user, $domain )}; - warn "$@" if $@; - - my @accounts; - - foreach my $package (@packages) { - next unless ($pkgnum eq $package->getfield('pkgnum')); - my @services = qsearch('cust_svc', { 'pkgnum' => $package->getfield('pkgnum') }); - foreach my $service (@services) { - if ($service->getfield('svcpart') eq '2'){ - my $account=qsearchs('svc_acct', { 'svcnum' => $service->getfield('svcnum') }); -# $accounts[$#accounts+1]=$account->getfield('username'); - $accounts[$#accounts+1]=$account; - } - } - } - - print $writer $data = join("\n", -# ( scalar(@accounts) || die "No accounts (svc_acct records)" ), - ( scalar(@accounts) ), - map { - $_->svcnum, -# $_->username, - $_->email, -# $_->_password, - '*****', - } @accounts - ), "\n"; - warn "[fs_mailadmin_server] $data\n" if $Debug > 2; - - - } elsif ($command eq 'delete_mailbox'){ - warn "[fs_mailadmin_server] Processing delete_mailbox command for $user " if $Debug; - chop( my($account) = map { scalar(<$reader>) } ( 1 .. 1 ) ); - warn "account $account \n" if $Debug; - - my $error = ''; - - my @packages = eval { find_administrable_packages($user, $domain) }; - warn "$@" if $@; - $error ||= "$@" if $@; - - my @svc_acct = qsearchs('svc_acct', { 'svcnum' => $account }) unless $error; - if (scalar(@svc_acct) != 1) { $error ||= 'Nonexistant or duplicate service account for user.' }; - if (! $error && check_administrator(\@packages, $svc_acct[0])){ -# not sure about the next three lines... do we delete? or return error - foreach my $svc_forward (qsearch('svc_forward', { 'dstsvc' => $svc_acct[0]->getfield('svcnum') })) { - $error ||= $svc_forward->delete; - } - foreach my $svc_forward (qsearch('svc_forward', { 'srcsvc' => $svc_acct[0]->getfield('svcnum') })) { - $error ||= $svc_forward->delete; - } - $error ||= $svc_acct[0]->delete; - } else { - $error ||= "Illegal attempt to remove service"; - } - - - warn "[fs_mailadmin_server] Sending results...\n" if $Debug; - print $writer $error, "\n"; - - } elsif ($command eq 'password_mailbox'){ - warn "[fs_mailadmin_server] Processing password_mailbox command for $user " if $Debug; - chop( my($account, $_password) = map { scalar(<$reader>) } ( 1 .. 2 ) ); - warn "account $account with password $_password \n" if $Debug; - - my $error = ''; - - my @packages = eval { find_administrable_packages($user, $domain) }; - warn "$@" if $@; - $error ||= "$@" if $@; - - my @svc_acct = qsearchs('svc_acct', { 'svcnum' => $account }) unless $error; - if (scalar(@svc_acct) != 1) { $error ||= 'Nonexistant or duplicate service account.' }; - - if (! $error && check_administrator(\@packages, $svc_acct[0])){ - my $new = new FS::svc_acct ({$svc_acct[0]->hash}); - $new->setfield('_password' => $_password); - $error ||= $new->replace($svc_acct[0]); - } else { - $error ||= "Illegal attempt to change password"; - } - - - warn "[fs_mailadmin_server] Sending results...\n" if $Debug; - print $writer $error, "\n"; - - } elsif ($command eq 'add_mailbox'){ - warn "[fs_mailadmin_server] Processing add_mailbox command for $user " if $Debug; - chop( my($target_package, $account, $_password) = map { scalar(<$reader>) } ( 1 .. 3 ) ); - warn "in package $target_package account $account with password $_password \n" if $Debug; - - my $found_package; - my $domainsvc=0; - my $svcpart=2; # this is 'email box' - my $svcpartsm=3; # this is 'domain alias' - my $error = ''; - my $found = 0; - - my @packages = eval { find_administrable_packages($user, $domain) }; - warn "$@" if $@; - $error ||= "$@" if $@; - - foreach my $package (@packages) { - if ($package->getfield('pkgnum') eq $target_package) { - $found = 1; - $found_package=$package; - my @services = qsearch('cust_svc', { 'pkgnum' => $target_package }); - foreach my $service (@services) { - if ($service->getfield('svcpart') eq '4'){ - my @svc_domain=qsearchs('svc_domain', { 'svcnum' => $service->getfield('svcnum') }); - if (scalar(@svc_domain) eq 1) { - $domainsvc=$svc_domain[0]->getfield('svcnum'); - } - } - } - last; - } - } - warn "User $user does not have administration rights to package $target_package\n" unless $found; - $error ||= "User $user does not have administration rights to package $target_package\n" unless $found; - - my $part_pkg = qsearchs('part_pkg',{'pkgpart'=>$found_package->getfield('pkgpart')}); - - #list of services this pkgpart includes (although at the moment we only care - # about $svcpart - my $pkg_svc; - my %pkg_svc = (); - foreach $pkg_svc ( qsearch('pkg_svc',{'pkgpart'=> $found_package->pkgpart }) ) { - $pkg_svc{$pkg_svc->svcpart} = $pkg_svc->quantity if $pkg_svc->quantity; - } - - my @services = qsearch('cust_svc', {'pkgnum' => $found_package->getfield('pkgnum'), - 'svcpart' => $svcpart, - }); - - if (scalar(@services) >= $pkg_svc{$svcpart}) { - $error="Maximum allowed already reached."; - } - - my $svc_acct = new FS::svc_acct ( { - 'pkgnum' => $found_package->pkgnum, - 'svcpart' => $svcpart, - 'username' => $account, - 'domsvc' => $domainsvc, - '_password' => $_password, - } ); - - my $y = $svc_acct->setdefault; # arguably should be in new method - $error ||= $y unless ref($y); - #and just in case you were silly - $svc_acct->pkgnum($found_package->pkgnum); - $svc_acct->svcpart($svcpart); - $svc_acct->username($account); - $svc_acct->domsvc($domainsvc); - $svc_acct->_password($_password); - - $error ||= $svc_acct->check; - - if ( ! $error ) { #in this case, $cust_pkg should always - #be definied, but.... - $error ||= $svc_acct->insert; - warn "WARNING: $error on pre-checked svc_acct record!" if $error; - } - - warn "[fs_mailadmin_server] Sending results...\n" if $Debug; - print $writer $error, "\n"; - - }elsif ($command eq 'list_forwards'){ - - warn "[fs_mailadmin_server] Processing list_forwards command for $user" if $Debug; - chop( my($svcnum) = map { scalar(<$reader>) } ( 1 .. 1 ) ); - warn "service $svcnum \n" if $Debug; - - my $error = ''; - - my @packages = eval {find_administrable_packages( $user, $domain )}; - warn "$@" if $@; - - my @forwards; - - foreach my $package (@packages) { -# next unless ($pkgnum eq $package->getfield('pkgnum')); - my @services = qsearch('cust_svc', { 'pkgnum' => $package->getfield('pkgnum') }); - foreach my $service (@services) { - if ($service->getfield('svcpart') eq '10'){ - my $forward=qsearchs('svc_forward', { 'svcnum' => $service->getfield('svcnum') }); - $forwards[$#forwards+1]=$forward if ($forward->getfield('srcsvc') == $svcnum); - } - } - } - - print $writer $data = join("\n", - ( scalar(@forwards) ), - map { - $_->svcnum, - ($_->dstsvc ? qsearchs('svc_acct', {'svcnum' => $_->dstsvc})->email : $_->dst), - } @forwards - ), "\n"; - warn "[fs_mailadmin_server] $data\n" if $Debug > 2; - - - }elsif ($command eq 'list_pkg_forwards'){ - - warn "[fs_mailadmin_server] Processing list_pkg_forwards command for $user" if $Debug; - chop( my($pkgnum) = map { scalar(<$reader>) } ( 1 .. 1 ) ); - warn "package $pkgnum \n" if $Debug; - - my $error = ''; - - my @packages = eval {find_administrable_packages( $user, $domain )}; - warn "$@" if $@; - - my @forwards; - - foreach my $package (@packages) { - next unless ($pkgnum eq $package->getfield('pkgnum')); - my @services = qsearch('cust_svc', { 'pkgnum' => $package->getfield('pkgnum') }); - foreach my $service (@services) { - if ($service->getfield('svcpart') eq '10'){ - my $forward=qsearchs('svc_forward', { 'svcnum' => $service->getfield('svcnum') }); - $forwards[$#forwards+1]=$forward; - } - } - } - - print $writer $data = join("\n", - ( scalar(@forwards) ), - map { - $_->svcnum, - $_->srcsvc, - ($_->dstsvc ? qsearchs('svc_acct', {'svcnum' => $_->dstsvc})->email : $_->dst), - } @forwards - ), "\n"; - warn "[fs_mailadmin_server] $data\n" if $Debug > 2; - - - } elsif ($command eq 'delete_forward'){ - warn "[fs_mailadmin_server] Processing delete_forward command for $user " if $Debug; - chop( my($forward) = map { scalar(<$reader>) } ( 1 .. 1 ) ); - warn "forward $forward \n" if $Debug; - - my $error = ''; - - my @packages = eval { find_administrable_packages($user, $domain) }; - warn "$@" if $@; - $error ||= "$@" if $@; - - my @svc_forward = qsearchs('svc_forward', { 'svcnum' => $forward }) unless $error; - if (scalar(@svc_forward) != 1) { $error ||= 'Nonexistant or duplicate service account for user.' }; - if (! $error && check_administrator(\@packages, $svc_forward[0])){ -# not sure about the next three lines... do we delete? or return error - $error ||= $svc_forward[0]->delete; - } else { - $error ||= "Illegal attempt to remove service"; - } - - - warn "[fs_mailadmin_server] Sending results...\n" if $Debug; - print $writer $error, "\n"; - - } elsif ($command eq 'add_forward'){ - warn "[fs_mailadmin_server] Processing add_forward command for $user " if $Debug; - chop( my($target_package, $source, $dest) = map { scalar(<$reader>) } ( 1 .. 3 ) ); - warn "in package $target_package source $source with destination $dest \n" if $Debug; - - my $found_package; - my $domainsvc=0; - my $svcpart=10; # this is 'forward service' - my $error = ''; - my $found = 0; - - my @packages = eval { find_administrable_packages($user, $domain) }; - warn "$@" if $@; - $error ||= "$@" if $@; - - foreach my $package (@packages) { - if ($package->getfield('pkgnum') eq $target_package) { - $found = 1; - $found_package=$package; - last; - } - } - warn "User $user does not have administration rights to package $target_package\n" unless $found; - $error ||= "User $user does not have administration rights to package $target_package\n" unless $found; - - my $svc_acct = qsearchs('svc_acct', { 'svcnum' => $source }); - warn "Forwarding source $source does not exist.\n" unless $svc_acct; - $error ||= "Forwarding source $source does not exist.\n" unless $svc_acct; - - my $cust_svc = qsearchs('cust_svc', { 'svcnum' => $source }); - warn "Forwarding source $source not attached to any account.\n" unless $cust_svc; - $error ||= "Forwarding source $source not attached to any account.\n" unless $cust_svc; - - if ( ! $error ) { - warn "Forwarding source $source is not in package $target_package\n" - unless ($cust_svc->getfield('pkgnum') == $target_package); - $error ||= "Forwarding source $source is not in package $target_package\n" - unless ($cust_svc->getfield('pkgnum') == $target_package); - } - - my $part_pkg = qsearchs('part_pkg',{'pkgpart'=>$found_package->getfield('pkgpart')}); - - #list of services this pkgpart includes (although at the moment we only care - # about $svcpart - my $pkg_svc; - my %pkg_svc = (); - foreach $pkg_svc ( qsearch('pkg_svc',{'pkgpart'=> $found_package->pkgpart }) ) { - $pkg_svc{$pkg_svc->svcpart} = $pkg_svc->quantity if $pkg_svc->quantity; - } - - my @services = qsearch('cust_svc', {'pkgnum' => $found_package->getfield('pkgnum'), - 'svcpart' => $svcpart, - }); - - if (scalar(@services) >= $pkg_svc{$svcpart}) { - $error="Maximum allowed already reached."; - } - - my $svc_forward = new FS::svc_forward ( { - 'pkgnum' => $found_package->pkgnum, - 'svcpart' => $svcpart, - 'srcsvc' => $source, - 'dstsvc' => 0, - 'dst' => $dest, - } ); - - my $y = $svc_forward->setdefault; # arguably should be in new method - $error ||= $y unless ref($y); - #and just in case you were silly - $svc_forward->pkgnum($found_package->pkgnum); - $svc_forward->svcpart($svcpart); - $svc_forward->srcsvc($source); - $svc_forward->dstsvc(0); - $svc_forward->dst($dest); - - $error ||= $svc_forward->check; - - if ( ! $error ) { #in this case, $cust_pkg should always - #be definied, but.... - $error ||= $svc_forward->insert; - warn "WARNING: $error on pre-checked svc_forward record!" if $error; - } - - warn "[fs_mailadmin_server] Sending results...\n" if $Debug; - print $writer $error, "\n"; - - } else { - warn "[fs_mailadmin_server] Bad command: $command \n" if $Debug; - print $writer "Bad command \n"; - } - } - close $writer; - close $reader; - warn "connection to $machine lost! waiting 60 seconds...\n"; - sleep 60; - warn "reconnecting...\n"; -} - -sub usage { - die "Usage:\n\n fs_mailadmin_server user machine agentnum refnum\n"; -} - -#sub find_administrable_packages { -# my $user = shift; -# -# my $error = ''; -# -# my @svc_acct = qsearchs('svc_acct', { 'username' => $user }); -# if (scalar(@svc_acct) != 1) { -# die "Nonexistant or duplicate service account for \"$user\""; -# } -# -# my @cust_svc = qsearchs('cust_svc', { 'svcnum' => $svc_acct[0]->getfield('svcnum') }); -# if (scalar(@cust_svc) != 1 ) { -# die "Nonexistant or duplicate customer service for \"$user\""; -# } -# -# my @cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $cust_svc[0]->getfield('pkgnum') }); -# if (scalar(@cust_pkg) != 1) { -# die "Nonexistant or duplicate customer package for \"$user\""; -# } -# -# my @cust_main = qsearchs('cust_main', { 'custnum' => $cust_pkg[0]->getfield('custnum') }); -# if (scalar(@cust_main) != 1 ) { -# die "Nonexistant or duplicate customer for \"$user\""; -# } -# -# my @packages = $cust_main[0]->ncancelled_pkgs; -#} - -sub find_administrable_packages { - my $user = shift; - my $domain = shift; - - my @packages; - my $error = ''; - - my @svc_domain = qsearchs('svc_domain', { 'domain' => $domain }); - - if (scalar(@svc_domain) != 1) { - die "Nonexistant or duplicate service account for \"$domain\""; - } - - my @svc_acct = qsearchs('svc_acct', { 'username' => $user, - 'domsvc' => $svc_domain[0]->svcnum }); - if (scalar(@svc_acct) != 1) { - die "Nonexistant or duplicate service account for \"$user\""; - } - - my @svc_acct_admin = qsearch('svc_acct_admin', {'adminsvc' => $svc_acct[0]->getfield('svcnum') }); - die "Nonexistant or duplicate customer service for \"$user\"" unless scalar(@svc_acct_admin); - - foreach my $svc_acct_admin (@svc_acct_admin) { - my @cust_svc = qsearchs('cust_svc', { 'svcnum' => $svc_acct_admin->getfield('svcnum') }); - if (scalar(@cust_svc) != 1 ) { - die "Nonexistant or duplicate customer service for admin \"$svc_acct_admin->getfield('svcnum')\""; - } - - my @cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $cust_svc[0]->getfield('pkgnum') }); - if (scalar(@cust_pkg) != 1) { - die "Nonexistant or duplicate customer package for admin \"$user\""; - } - - push @packages, $cust_pkg[0] unless $cust_pkg[0]->getfield('cancel'); - - } - (@packages); -} - -sub check_administrator { - my ($allowed_packages_aref, $svc_acct_ref) = @_; - - my $error = ''; - my $found = 0; - - { - my @cust_svc = qsearchs('cust_svc', { 'svcnum' => $svc_acct_ref->getfield('svcnum') }); - if (scalar(@cust_svc) != 1 ) { - warn "Nonexistant or duplicate customer service for \"$svc_acct_ref->getfield('username')\""; - last; - } - - my @cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $cust_svc[0]->getfield('pkgnum') }); - if (scalar(@cust_pkg) != 1) { - warn "Nonexistant or duplicate customer package for \"$svc_acct_ref->getfield('username')\""; - last; - } - - foreach my $package (@$allowed_packages_aref) { - if ($package->getfield('pkgnum') eq $cust_pkg[0]->getfield('pkgnum')) { - $found = 1; - last; - } - } - } - - $found; -} - -sub check_add { - my ($allowed_packages_aref, $target_package) = @_; - - my $error = ''; - my $found = 0; - - foreach my $package (@$allowed_packages_aref) { - if ($package->getfield('pkgnum') eq $target_package) { - $found = 1; - last; - } - } - - $found; -} - diff --git a/fs_selfservice/DEPLOY b/fs_selfservice/DEPLOY deleted file mode 100755 index c93ed0fea..000000000 --- a/fs_selfservice/DEPLOY +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -#this is a quick hack for my dev machine. do not use it. -# see the "make install-selfservice" and "make update-selfservice" makefile -# targets to properly install this stuff. - -#kill `cat /var/run/freeside-selfservice-server.fs_selfservice.pid` - -cd FS-SelfService -perl Makefile.PL && make && make install -cd .. - -( cd ..; make deploy; cd fs_selfservice ) - -#cp /home/ivan/freeside/fs_selfservice/FS-SelfService/cgi/* /var/www/MyAccount -#chown freeside /var/www/MyAccount/*.cgi -#chmod 755 /var/www/MyAccount/*.cgi -#ln -s /var/www/MyAccount/selfservice.cgi /var/www/MyAccount/index.cgi || true - - #cp /home/ivan/freeside/fs_signup/FS-SignupClient/cgi/* /var/www/signup/ - ##mv /var/www/signup/signup-snarf.html /var/www/signup/signup.html #!!!!! - ##mv /var/www/signup/signup-billaddress.html /var/www/signup/signup.html #!!!!! - ##mv /var/www/signup/signup-freeoption.html /var/www/signup/signup.html #!!!!! - #chown freeside /var/www/signup/signup.cgi - #chmod 755 /var/www/signup/signup.cgi - #ln -s /var/www/signup/signup.cgi /var/www/signup/index.cgi || true - - -chmod 755 /var/www/selfservice/*.cgi diff --git a/fs_selfservice/FS-SelfService/Changes b/fs_selfservice/FS-SelfService/Changes deleted file mode 100644 index b9e26b7dc..000000000 --- a/fs_selfservice/FS-SelfService/Changes +++ /dev/null @@ -1,6 +0,0 @@ -Revision history for Perl extension FS::SelfService. - -0.01 Tue May 28 16:49:41 2002 - - original version; created by h2xs 1.21 with options - -A -X -n FS::SelfService - diff --git a/fs_selfservice/FS-SelfService/MANIFEST b/fs_selfservice/FS-SelfService/MANIFEST deleted file mode 100644 index a619b2b6c..000000000 --- a/fs_selfservice/FS-SelfService/MANIFEST +++ /dev/null @@ -1,8 +0,0 @@ -Changes -Makefile.PL -MANIFEST -SelfService.pm -SelfService/XMLRPC.pm -test.pl -freeside-selfservice-clientd -freeside-selfservice-xmlrpc-server diff --git a/fs_selfservice/FS-SelfService/Makefile.PL b/fs_selfservice/FS-SelfService/Makefile.PL deleted file mode 100644 index c078f0865..000000000 --- a/fs_selfservice/FS-SelfService/Makefile.PL +++ /dev/null @@ -1,20 +0,0 @@ -use ExtUtils::MakeMaker; -# See lib/ExtUtils/MakeMaker.pm for details of how to influence -# the contents of the Makefile that is written. -WriteMakefile( - 'NAME' => 'FS::SelfService', - 'VERSION_FROM' => 'SelfService.pm', # finds $VERSION - 'EXE_FILES' => [ 'freeside-selfservice-clientd', - 'freeside-selfservice-xmlrpc-server', - ], - 'INSTALLSCRIPT' => '/usr/local/sbin', - 'INSTALLSITEBIN' => '/usr/local/sbin', - 'INSTALLSITESCRIPT' => '/usr/local/sbin', #recent deb users this... - 'PERM_RWX' => '750', - 'PREREQ_PM' => { - 'Storable' => 2.09, - }, # e.g., Module::Name => 1.1 - ($] >= 5.005 ? ## Add these new keywords supported since 5.005 - (ABSTRACT_FROM => 'SelfService.pm', # retrieve abstract from module - AUTHOR => 'Ivan Kohler ') : ()), -); diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm deleted file mode 100644 index ec4668fe8..000000000 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ /dev/null @@ -1,1467 +0,0 @@ -package FS::SelfService; - -use strict; -use vars qw($VERSION @ISA @EXPORT_OK $DEBUG $dir $socket %autoload $tag); -use Exporter; -use Socket; -use FileHandle; -#use IO::Handle; -use IO::Select; -use Storable 2.09 qw(nstore_fd fd_retrieve); - -$VERSION = '0.03'; - -@ISA = qw( Exporter ); - -$DEBUG = 0; - -$dir = "/usr/local/freeside"; -$socket = "$dir/selfservice_socket"; -$socket .= '.'.$tag if defined $tag && length($tag); - -#maybe should ask ClientAPI for this list -%autoload = ( - 'passwd' => 'passwd/passwd', - 'chfn' => 'passwd/passwd', - 'chsh' => 'passwd/passwd', - 'login' => 'MyAccount/login', - 'logout' => 'MyAccount/logout', - 'customer_info' => 'MyAccount/customer_info', - 'edit_info' => 'MyAccount/edit_info', #add to ss cgi! - 'invoice' => 'MyAccount/invoice', - 'invoice_logo' => 'MyAccount/invoice_logo', - 'list_invoices' => 'MyAccount/list_invoices', #? - 'cancel' => 'MyAccount/cancel', #add to ss cgi! - 'payment_info' => 'MyAccount/payment_info', - 'process_payment' => 'MyAccount/process_payment', - 'process_payment_order_pkg' => 'MyAccount/process_payment_order_pkg', - 'process_prepay' => 'MyAccount/process_prepay', - 'list_pkgs' => 'MyAccount/list_pkgs', #add to ss (added?) - 'list_svcs' => 'MyAccount/list_svcs', #add to ss (added?) - 'list_svc_usage' => 'MyAccount/list_svc_usage', - 'list_support_usage' => 'MyAccount/list_support_usage', - 'order_pkg' => 'MyAccount/order_pkg', #add to ss cgi! - 'change_pkg' => 'MyAccount/change_pkg', - 'order_recharge' => 'MyAccount/order_recharge', - 'cancel_pkg' => 'MyAccount/cancel_pkg', #add to ss cgi! - 'charge' => 'MyAccount/charge', #? - 'part_svc_info' => 'MyAccount/part_svc_info', - 'provision_acct' => 'MyAccount/provision_acct', - 'provision_external' => 'MyAccount/provision_external', - 'unprovision_svc' => 'MyAccount/unprovision_svc', - 'myaccount_passwd' => 'MyAccount/myaccount_passwd', - 'signup_info' => 'Signup/signup_info', - 'domain_select_hash' => 'Signup/domain_select_hash', # expose? - 'new_customer' => 'Signup/new_customer', - 'agent_login' => 'Agent/agent_login', - 'agent_logout' => 'Agent/agent_logout', - 'agent_info' => 'Agent/agent_info', - 'agent_list_customers' => 'Agent/agent_list_customers', -); -@EXPORT_OK = ( keys(%autoload), qw( regionselector expselect popselector domainselector) ); - -$ENV{'PATH'} ='/usr/bin:/usr/ucb:/bin'; -$ENV{'SHELL'} = '/bin/sh'; -$ENV{'IFS'} = " \t\n"; -$ENV{'CDPATH'} = ''; -$ENV{'ENV'} = ''; -$ENV{'BASH_ENV'} = ''; - -my $freeside_uid = scalar(getpwnam('freeside')); -die "not running as the freeside user\n" if $> != $freeside_uid; - --e $dir or die "FATAL: $dir doesn't exist!"; --d $dir or die "FATAL: $dir isn't a directory!"; --r $dir or die "FATAL: Can't read $dir as freeside user!"; --x $dir or die "FATAL: $dir not searchable (executable) as freeside user!"; - -foreach my $autoload ( keys %autoload ) { - - my $eval = - "sub $autoload { ". ' - my $param; - if ( ref($_[0]) ) { - $param = shift; - } else { - #warn scalar(@_). ": ". join(" / ", @_); - $param = { @_ }; - } - - $param->{_packet} = \''. $autoload{$autoload}. '\'; - - simple_packet($param); - }'; - - eval $eval; - die $@ if $@; - -} - -sub simple_packet { - my $packet = shift; - warn "sending ". $packet->{_packet}. " to server" - if $DEBUG; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($socket)) or die "connect to $socket: $!"; - nstore_fd($packet, \*SOCK) or die "can't send packet: $!"; - SOCK->flush; - - #shoudl trap: Magic number checking on storable file failed at blib/lib/Storable.pm (autosplit into blib/lib/auto/Storable/fd_retrieve.al) line 337, at /usr/local/share/perl/5.6.1/FS/SelfService.pm line 71 - - #block until there is a message on socket -# my $w = new IO::Select; -# $w->add(\*SOCK); -# my @wait = $w->can_read; - - warn "reading message from server" - if $DEBUG; - - my $return = fd_retrieve(\*SOCK) or die "error reading result: $!"; - die $return->{'_error'} if defined $return->{_error} && $return->{_error}; - - warn "returning message to client" - if $DEBUG; - - $return; -} - -=head1 NAME - -FS::SelfService - Freeside self-service API - -=head1 SYNOPSIS - - # password and shell account changes - use FS::SelfService qw(passwd chfn chsh); - - # "my account" functionality - use FS::SelfService qw( login customer_info invoice cancel payment_info process_payment ); - - my $rv = login( { 'username' => $username, - 'domain' => $domain, - 'password' => $password, - } - ); - - if ( $rv->{'error'} ) { - #handle login error... - } else { - #successful login - my $session_id = $rv->{'session_id'}; - } - - my $customer_info = customer_info( { 'session_id' => $session_id } ); - - #payment_info and process_payment are available in 1.5+ only - my $payment_info = payment_info( { 'session_id' => $session_id } ); - - #!!! process_payment example - - #!!! list_pkgs example - - #!!! order_pkg example - - #!!! cancel_pkg example - - # signup functionality - use FS::SelfService qw( signup_info new_customer ); - - my $signup_info = signup_info; - - $rv = new_customer( { - 'first' => $first, - 'last' => $last, - 'company' => $company, - 'address1' => $address1, - 'address2' => $address2, - 'city' => $city, - 'state' => $state, - 'zip' => $zip, - 'country' => $country, - 'daytime' => $daytime, - 'night' => $night, - 'fax' => $fax, - 'payby' => $payby, - 'payinfo' => $payinfo, - 'paycvv' => $paycvv, - 'paystart_month' => $paystart_month - 'paystart_year' => $paystart_year, - 'payissue' => $payissue, - 'payip' => $payip - 'paydate' => $paydate, - 'payname' => $payname, - 'invoicing_list' => $invoicing_list, - 'referral_custnum' => $referral_custnum, - 'pkgpart' => $pkgpart, - 'username' => $username, - '_password' => $password, - 'popnum' => $popnum, - 'agentnum' => $agentnum, - } - ); - - my $error = $rv->{'error'}; - if ( $error eq '_decline' ) { - print_decline(); - } elsif ( $error ) { - reprint_signup(); - } else { - print_success(); - } - -=head1 DESCRIPTION - -Use this API to implement your own client "self-service" module. - -If you just want to customize the look of the existing "self-service" module, -see XXXX instead. - -=head1 PASSWORD, GECOS, SHELL CHANGING FUNCTIONS - -=over 4 - -=item passwd - -=item chfn - -=item chsh - -=back - -=head1 "MY ACCOUNT" FUNCTIONS - -=over 4 - -=item login HASHREF - -Creates a user session. Takes a hash reference as parameter with the -following keys: - -=over 4 - -=item username - -Username - -=item domain - -Domain - -=item password - -Password - -=back - -Returns a hash reference with the following keys: - -=over 4 - -=item error - -Empty on success, or an error message on errors. - -=item session_id - -Session identifier for successful logins - -=back - -=item customer_info HASHREF - -Returns general customer information. - -Takes a hash reference as parameter with a single key: B - -Returns a hash reference with the following keys: - -=over 4 - -=item name - -Customer name - -=item balance - -Balance owed - -=item open - -Array reference of hash references of open inoices. Each hash reference has -the following keys: invnum, date, owed - -=item small_custview - -An HTML fragment containing shipping and billing addresses. - -=item The following fields are also returned - -first last company address1 address2 city county state zip country daytime night fax ship_first ship_last ship_company ship_address1 ship_address2 ship_city ship_state ship_zip ship_country ship_daytime ship_night ship_fax payby payinfo payname month year invoicing_list postal_invoicing - -=back - -=item edit_info HASHREF - -Takes a hash reference as parameter with any of the following keys: - -first last company address1 address2 city county state zip country daytime night fax ship_first ship_last ship_company ship_address1 ship_address2 ship_city ship_state ship_zip ship_country ship_daytime ship_night ship_fax payby payinfo paycvv payname month year invoicing_list postal_invoicing - -If a field exists, the customer record is updated with the new value of that -field. If a field does not exist, that field is not changed on the customer -record. - -Returns a hash reference with a single key, B, empty on success, or an -error message on errors - -=item invoice HASHREF - -Returns an invoice. Takes a hash reference as parameter with two keys: -session_id and invnum - -Returns a hash reference with the following keys: - -=over 4 - -=item error - -Empty on success, or an error message on errors - -=item invnum - -Invoice number - -=item invoice_text - -Invoice text - -=back - -=item list_invoices HASHREF - -Returns a list of all customer invoices. Takes a hash references with a single -key, session_id. - -Returns a hash reference with the following keys: - -=over 4 - -=item error - -Empty on success, or an error message on errors - -=item invoices - -Reference to array of hash references with the following keys: - -=over 4 - -=item invnum - -Invoice ID - -=item _date - -Invoice date, in UNIX epoch time - -=back - -=back - -=item cancel HASHREF - -Cancels this customer. - -Takes a hash reference as parameter with a single key: B - -Returns a hash reference with a single key, B, which is empty on -success or an error message on errors. - -=item payment_info HASHREF - -Returns information that may be useful in displaying a payment page. - -Takes a hash reference as parameter with a single key: B. - -Returns a hash reference with the following keys: - -=over 4 - -=item error - -Empty on success, or an error message on errors - -=item balance - -Balance owed - -=item payname - -Exact name on credit card (CARD/DCRD) - -=item address1 - -Address line one - -=item address2 - -Address line two - -=item city - -City - -=item state - -State - -=item zip - -Zip or postal code - -=item payby - -Customer's current default payment type. - -=item card_type - -For CARD/DCRD payment types, the card type (Visa card, MasterCard, Discover card, American Express card, etc.) - -=item payinfo - -For CARD/DCRD payment types, the card number - -=item month - -For CARD/DCRD payment types, expiration month - -=item year - -For CARD/DCRD payment types, expiration year - -=item cust_main_county - -County/state/country data - array reference of hash references, each of which has the fields of a cust_main_county record (see L). Note these are not FS::cust_main_county objects, but hash references of columns and values. - -=item states - -Array reference of all states in the current default country. - -=item card_types - -Hash reference of card types; keys are card types, values are the exact strings -passed to the process_payment function - -=item paybatch - -Unique transaction identifier (prevents multiple charges), passed to the -process_payment function - -=back - -=item process_payment HASHREF - -Processes a payment and possible change of address or payment type. Takes a -hash reference as parameter with the following keys: - -=over 4 - -=item session_id - -Session identifier - -=item amount - -Amount - -=item save - -If true, address and card information entered will be saved for subsequent -transactions. - -=item auto - -If true, future credit card payments will be done automatically (sets payby to -CARD). If false, future credit card payments will be done on-demand (sets -payby to DCRD). This option only has meaning if B is set true. - -=item payname - -Name on card - -=item address1 - -Address line one - -=item address2 - -Address line two - -=item city - -City - -=item state - -State - -=item zip - -Zip or postal code - -=item payinfo - -Card number - -=item month - -Card expiration month - -=item year - -Card expiration year - -=item paybatch - -Unique transaction identifier, returned from the payment_info function. -Prevents multiple charges. - -=back - -Returns a hash reference with a single key, B, empty on success, or an -error message on errors - -=item list_pkgs - -Returns package information for this customer. For more detail on services, -see L. - -Takes a hash reference as parameter with a single key: B - -Returns a hash reference containing customer package information. The hash reference contains the following keys: - -=over 4 - -=item custnum - -Customer number - -=item cust_pkg HASHREF - -Array reference of hash references, each of which has the fields of a cust_pkg -record (see L) as well as the fields below. Note these are not -the internal FS:: objects, but hash references of columns and values. - -=over 4 - -=item part_pkg fields - -All fields of part_pkg for this specific cust_pkg (be careful with this -information - it may reveal more about your available packages than you would -like users to know in aggregate) - -=cut - -#XXX pare part_pkg fields down to a more secure subset - -=item part_svc - -An array of hash references indicating information on unprovisioned services -available for provisioning for this specific cust_pkg. Each has the following -keys: - -=over 4 - -=item part_svc fields - -All fields of part_svc (be careful with this information - it may reveal more -about your available packages than you would like users to know in aggregate) - -=cut - -#XXX pare part_svc fields down to a more secure subset - -=back - -=item cust_svc - -An array of hash references indicating information on the customer services -already provisioned for this specific cust_pkg. Each has the following keys: - -=over 4 - -=item label - -Array reference with three elements: - -=over 4 - -=item Name of this service - -=item Meaningful user-specific identifier for the service (i.e. username, domain or mail alias) - -=item Table name of this service - -=back - -=item svcnum - -Primary key for this service - -=item svcpart - -Service definition (part_pkg) - -=item pkgnum - -Customer package (cust_pkg) - -=item overlimit - -Blank if the service is not over limit, or the date the service exceeded its usage limit (as a UNIX timestamp). - -=back - -=back - -=item error - -Empty on success, or an error message on errors. - -=back - -=item list_svcs - -Returns service information for this customer. - -Takes a hash reference as parameter with a single key: B - -Returns a hash reference containing customer package information. The hash reference contains the following keys: - -=over 4 - -=item custnum - -Customer number - -=item svcs - -An array of hash references indicating information on all of this customer's -services. Each has the following keys: - -=over 4 - -=item svcnum - -Primary key for this service - -=item label - -Name of this service - -=item value - -Meaningful user-specific identifier for the service (i.e. username, domain, or -mail alias). - -=back - -Account (svc_acct) services also have the following keys: - -=item username - -Username - -=item email - -username@domain - -=item seconds - -Seconds remaining - -=item upbytes - -Upload bytes remaining - -=item downbytes - -Download bytes remaining - -=item totalbytes - -Total bytes remaining - -=item recharge_amount - -Cost of a recharge - -=item recharge_seconds - -Number of seconds gained by recharge - -=item recharge_upbytes - -Number of upload bytes gained by recharge - -=item recharge_downbytes - -Number of download bytes gained by recharge - -=item recharge_totalbytes - -Number of total bytes gained by recharge - -=back - -=back - -=item order_pkg - -Orders a package for this customer. - -Takes a hash reference as parameter with the following keys: - -=over 4 - -=item session_id - -Session identifier - -=item pkgpart - -pkgpart of package to order - -=item svcpart - -optional svcpart, required only if the package definition does not contain -one svc_acct service definition with quantity 1 (it may contain others with -quantity >1) - -=item username - -Username - -=item _password - -Password - -=item sec_phrase - -Optional security phrase - -=item popnum - -Optional Access number number - -=back - -Returns a hash reference with a single key, B, empty on success, or an -error message on errors. The special error '_decline' is returned for -declined transactions. - -=item cancel_pkg - -Cancels a package for this customer. - -Takes a hash reference as parameter with the following keys: - -=over 4 - -=item session_id - -Session identifier - -=item pkgpart - -pkgpart of package to cancel - -=back - -Returns a hash reference with a single key, B, empty on success, or an -error message on errors. - -=back - -=head1 SIGNUP FUNCTIONS - -=over 4 - -=item signup_info HASHREF - -Takes a hash reference as parameter with the following keys: - -=over 4 - -=item session_id - Optional agent/reseller interface session - -=back - -Returns a hash reference containing information that may be useful in -displaying a signup page. The hash reference contains the following keys: - -=over 4 - -=item cust_main_county - -County/state/country data - array reference of hash references, each of which has the fields of a cust_main_county record (see L). Note these are not FS::cust_main_county objects, but hash references of columns and values. - -=item part_pkg - -Available packages - array reference of hash references, each of which has the fields of a part_pkg record (see L). Each hash reference also has an additional 'payby' field containing an array reference of acceptable payment types specific to this package (see below and L). Note these are not FS::part_pkg objects, but hash references of columns and values. Requires the 'signup_server-default_agentnum' configuration value to be set, or -an agentnum specified explicitly via reseller interface session_id in the -options. - -=item agent - -Array reference of hash references, each of which has the fields of an agent record (see L). Note these are not FS::agent objects, but hash references of columns and values. - -=item agentnum2part_pkg - -Hash reference; keys are agentnums, values are array references of available packages for that agent, in the same format as the part_pkg arrayref above. - -=item svc_acct_pop - -Access numbers - array reference of hash references, each of which has the fields of an svc_acct_pop record (see L). Note these are not FS::svc_acct_pop objects, but hash references of columns and values. - -=item security_phrase - -True if the "security_phrase" feature is enabled - -=item payby - -Array reference of acceptable payment types for signup - -=over 4 - -=item CARD - -credit card - automatic - -=item DCRD - -credit card - on-demand - version 1.5+ only - -=item CHEK - -electronic check - automatic - -=item DCHK - -electronic check - on-demand - version 1.5+ only - -=item LECB - -Phone bill billing - -=item BILL - -billing, not recommended for signups - -=item COMP - -free, definitely not recommended for signups - -=item PREPAY - -special billing type: applies a credit (see FS::prepay_credit) and sets billing type to BILL - -=back - -=item cvv_enabled - -True if CVV features are available (1.5+ or 1.4.2 with CVV schema patch) - -=item msgcat - -Hash reference of message catalog values, to support error message customization. Currently available keys are: passwords_dont_match, invalid_card, unknown_card_type, and not_a (as in "Not a Discover card"). Values are configured in the web interface under "View/Edit message catalog". - -=item statedefault - -Default state - -=item countrydefault - -Default country - -=back - -=item new_customer HASHREF - -Creates a new customer. Takes a hash reference as parameter with the -following keys: - -=over 4 - -=item first - -first name (required) - -=item last - -last name (required) - -=item ss - -(not typically collected; mostly used for ACH transactions) - -=item company - -Company name - -=item address1 (required) - -Address line one - -=item address2 - -Address line two - -=item city (required) - -City - -=item county - -County - -=item state (required) - -State - -=item zip (required) - -Zip or postal code - -=item daytime - -Daytime phone number - -=item night - -Evening phone number - -=item fax - -Fax number - -=item payby - -CARD, DCRD, CHEK, DCHK, LECB, BILL, COMP or PREPAY (see L (required) - -=item payinfo - -Card number for CARD/DCRD, account_number@aba_number for CHEK/DCHK, prepaid "pin" for PREPAY, purchase order number for BILL - -=item paycvv - -Credit card CVV2 number (1.5+ or 1.4.2 with CVV schema patch) - -=item paydate - -Expiration date for CARD/DCRD - -=item payname - -Exact name on credit card for CARD/DCRD, bank name for CHEK/DCHK - -=item invoicing_list - -comma-separated list of email addresses for email invoices. The special value 'POST' is used to designate postal invoicing (it may be specified alone or in addition to email addresses), - -=item referral_custnum - -referring customer number - -=item pkgpart - -pkgpart of initial package - -=item username - -Username - -=item _password - -Password - -=item sec_phrase - -Security phrase - -=item popnum - -Access number (index, not the literal number) - -=item agentnum - -Agent number - -=back - -Returns a hash reference with the following keys: - -=over 4 - -=item error - -Empty on success, or an error message on errors. The special error '_decline' is returned for declined transactions; other error messages should be suitable for display to the user (and are customizable in under Configuration | View/Edit message catalog) - -=back - -=item regionselector HASHREF | LIST - -Takes as input a hashref or list of key/value pairs with the following keys: - -=over 4 - -=item selected_county - -Currently selected county - -=item selected_state - -Currently selected state - -=item selected_country - -Currently selected country - -=item prefix - -Specify a unique prefix string if you intend to use the HTML output multiple time son one page. - -=item onchange - -Specify a javascript subroutine to call on changes - -=item default_state - -Default state - -=item default_country - -Default country - -=item locales - -An arrayref of hash references specifying regions. Normally you can just pass the value of the I field returned by B. - -=back - -Returns a list consisting of three HTML fragments for county selection, -state selection and country selection, respectively. - -=cut - -#false laziness w/FS::cust_main_county (this is currently the "newest" version) -sub regionselector { - my $param; - if ( ref($_[0]) ) { - $param = shift; - } else { - $param = { @_ }; - } - $param->{'selected_country'} ||= $param->{'default_country'}; - $param->{'selected_state'} ||= $param->{'default_state'}; - - my $prefix = exists($param->{'prefix'}) ? $param->{'prefix'} : ''; - - my $countyflag = 0; - - my %cust_main_county; - -# unless ( @cust_main_county ) { #cache - #@cust_main_county = qsearch('cust_main_county', {} ); - #foreach my $c ( @cust_main_county ) { - foreach my $c ( @{ $param->{'locales'} } ) { - #$countyflag=1 if $c->county; - $countyflag=1 if $c->{county}; - #push @{$cust_main_county{$c->country}{$c->state}}, $c->county; - #$cust_main_county{$c->country}{$c->state}{$c->county} = 1; - $cust_main_county{$c->{country}}{$c->{state}}{$c->{county}} = 1; - } -# } - $countyflag=1 if $param->{selected_county}; - - my $script_html = < - function opt(what,value,text) { - var optionName = new Option(text, value, false, false); - var length = what.length; - what.options[length] = optionName; - } - function ${prefix}country_changed(what) { - country = what.options[what.selectedIndex].text; - for ( var i = what.form.${prefix}state.length; i >= 0; i-- ) - what.form.${prefix}state.options[i] = null; -END - #what.form.${prefix}state.options[0] = new Option('', '', false, true); - - foreach my $country ( sort keys %cust_main_county ) { - $script_html .= "\nif ( country == \"$country\" ) {\n"; - foreach my $state ( sort keys %{$cust_main_county{$country}} ) { - my $text = $state || '(n/a)'; - $script_html .= qq!opt(what.form.${prefix}state, "$state", "$text");\n!; - } - $script_html .= "}\n"; - } - - $script_html .= <= 0; i-- ) - what.form.${prefix}county.options[i] = null; -END - - foreach my $country ( sort keys %cust_main_county ) { - $script_html .= "\nif ( country == \"$country\" ) {\n"; - foreach my $state ( sort keys %{$cust_main_county{$country}} ) { - $script_html .= "\nif ( state == \"$state\" ) {\n"; - #foreach my $county ( sort @{$cust_main_county{$country}{$state}} ) { - foreach my $county ( sort keys %{$cust_main_county{$country}{$state}} ) { - my $text = $county || '(n/a)'; - $script_html .= - qq!opt(what.form.${prefix}county, "$county", "$text");\n!; - } - $script_html .= "}\n"; - } - $script_html .= "}\n"; - } - } - - $script_html .= < -END - - my $county_html = $script_html; - if ( $countyflag ) { - $county_html .= qq!'; - } else { - $county_html .= - qq!!; - } - - my $state_html = qq!'; - - $state_html .= ''; - - my $country_html = qq!'; - - ($county_html, $state_html, $country_html); - -} - -#=item expselect HASHREF | LIST -# -#Takes as input a hashref or list of key/value pairs with the following keys: -# -#=over 4 -# -#=item prefix - Specify a unique prefix string if you intend to use the HTML output multiple time son one page. -# -#=item date - current date, in yyyy-mm-dd or m-d-yyyy format -# -#=back - -=item expselect PREFIX [ DATE ] - -Takes as input a unique prefix string and the current expiration date, in -yyyy-mm-dd or m-d-yyyy format - -Returns an HTML fragments for expiration date selection. - -=cut - -sub expselect { - #my $param; - #if ( ref($_[0]) ) { - # $param = shift; - #} else { - # $param = { @_ }; - #my $prefix = $param->{'prefix'}; - #my $prefix = exists($param->{'prefix'}) ? $param->{'prefix'} : ''; - #my $date = exists($param->{'date'}) ? $param->{'date'} : ''; - my $prefix = shift; - my $date = scalar(@_) ? shift : ''; - - my( $m, $y ) = ( 0, 0 ); - if ( $date =~ /^(\d{4})-(\d{2})-\d{2}$/ ) { #PostgreSQL date format - ( $m, $y ) = ( $2, $1 ); - } elsif ( $date =~ /^(\d{1,2})-(\d{1,2}-)?(\d{4}$)/ ) { - ( $m, $y ) = ( $1, $3 ); - } - my $return = qq!!; - my @t = localtime; - my $thisYear = $t[5] + 1900; - for ( ($thisYear > $y && $y > 0 ? $y : $thisYear) .. ($thisYear+10) ) { - $return .= qq!


    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/agent.cgi b/fs_selfservice/FS-SelfService/cgi/agent.cgi deleted file mode 100644 index 6e8de619a..000000000 --- a/fs_selfservice/FS-SelfService/cgi/agent.cgi +++ /dev/null @@ -1,458 +0,0 @@ -#!/usr/bin/perl -T -#!/usr/bin/perl -Tw - -#some false laziness w/selfservice.cgi - -use strict; -use vars qw($DEBUG $me $cgi $session_id $form_max $template_dir); -use subs qw(do_template); -use CGI; -use CGI::Carp qw(fatalsToBrowser); -use Business::CreditCard; -use Text::Template; -#use HTML::Entities; -use FS::SelfService qw( agent_login agent_logout agent_info - agent_list_customers - signup_info new_customer - customer_info list_pkgs order_pkg - part_svc_info provision_acct provision_external - unprovision_svc - ); - -$DEBUG = 0; -$me = 'agent.cgi:'; - -$template_dir = '.'; - -$form_max = 255; - -warn "$me starting\n" if $DEBUG; - -warn "$me initializing CGI\n" if $DEBUG; -$cgi = new CGI; - -unless ( defined $cgi->param('session') ) { - warn "$me no session defined, sending login page\n" if $DEBUG; - do_template('agent_login',{}); - exit; -} - -if ( $cgi->param('session') eq 'login' ) { - - warn "$me processing login\n" if $DEBUG; - - $cgi->param('username') =~ /^\s*([a-z0-9_\-\.\&]{0,$form_max})\s*$/i - or die "illegal username"; - my $username = $1; - - $cgi->param('password') =~ /^(.{0,$form_max})$/ - or die "illegal password"; - my $password = $1; - - my $rv = agent_login( - 'username' => $username, - 'password' => $password, - ); - if ( $rv->{error} ) { - do_template('agent_login', { - 'error' => $rv->{error}, - 'username' => $username, - } ); - exit; - } else { - $cgi->param('session' => $rv->{session_id} ); - $cgi->param('action' => 'agent_main' ); - } -} - -$session_id = $cgi->param('session'); - -warn "$me checking action\n" if $DEBUG; -$cgi->param('action') =~ - /^(agent_main|signup|process_signup|list_customers|view_customer|agent_provision|provision_svc|process_svc_acct|process_svc_external|delete_svc|agent_order_pkg|process_order_pkg|logout)$/ - or die "unknown action ". $cgi->param('action'); -my $action = $1; - -warn "$me running $action\n" if $DEBUG; -my $result = eval "&$action();"; -die $@ if $@; - -if ( $result->{error} eq "Can't resume session" ) { #ick - do_template('agent_login',{}); - exit; -} - -warn "$me processing template $action\n" if $DEBUG; -do_template($action, { - 'session_id' => $session_id, - %{$result} -}); -warn "$me done processing template $action\n" if $DEBUG; - -#-- - -sub logout { - $action = 'agent_logout'; - agent_logout( 'session_id' => $session_id ); -} - -sub agent_main { agent_info( 'session_id' => $session_id ); } - -sub signup { signup_info( 'session_id' => $session_id ); } - -sub process_signup { - - my $init_data = signup_info( 'session_id' => $session_id ); - if ( $init_data->{'error'} ) { - if ( $init_data->{'error'} eq "Can't resume session" ) { #ick - do_template('agent_login',{}); - exit; - } else { #? - die $init_data->{'error'}; - } - } - - my $error = ''; - - #false laziness w/signup.cgi, identical except for agentnum vs session_id - my $payby = $cgi->param('payby'); - if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) { - #$payinfo = join('@', map { $cgi->param( $payby. "_payinfo$_" ) } (1,2) ); - $cgi->param('payinfo' => $cgi->param($payby. '_payinfo1'). '@'. - $cgi->param($payby. '_payinfo2') - ); - } else { - $cgi->param('payinfo' => $cgi->param( $payby. '_payinfo' ) ); - } - $cgi->param('paydate' => $cgi->param( $payby. '_month' ). '-'. - $cgi->param( $payby. '_year' ) - ); - $cgi->param('payname' => $cgi->param( $payby. '_payname' ) ); - $cgi->param('paycvv' => defined $cgi->param( $payby. '_paycvv' ) - ? $cgi->param( $payby. '_paycvv' ) - : '' - ); - - if ( $cgi->param('invoicing_list') ) { - $cgi->param('invoicing_list' => $cgi->param('invoicing_list'). ', POST') - if $cgi->param('invoicing_list_POST'); - } else { - $cgi->param('invoicing_list' => 'POST' ); - } - - if ( $cgi->param('_password') ne $cgi->param('_password2') ) { - $error = $init_data->{msgcat}{passwords_dont_match}; #msgcat - $cgi->param('_password', ''); - $cgi->param('_password2', ''); - } - - if ( $payby =~ /^(CARD|DCRD)$/ && $cgi->param('CARD_type') ) { - my $payinfo = $cgi->param('payinfo'); - $payinfo =~ s/\D//g; - - $payinfo =~ /^(\d{13,16})$/ - or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; - $payinfo = $1; - validate($payinfo) - or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; - cardtype($payinfo) eq $cgi->param('CARD_type') - or $error ||= $init_data->{msgcat}{not_a}. $cgi->param('CARD_type'); - } - - unless ( $error ) { - my $rv = new_customer ( { - 'session_id' => $session_id, - map { $_ => scalar($cgi->param($_)) } - qw( last first ss company - address1 address2 city county state zip country - daytime night fax - - ship_last ship_first ship_company - ship_address1 ship_address2 ship_city ship_county ship_state - ship_zip ship_country - ship_daytime ship_night ship_fax - - payby payinfo paycvv paydate payname invoicing_list - referral_custnum promo_code reg_code - pkgpart username sec_phrase _password popnum refnum - ), - grep { /^snarf_/ } $cgi->param - } ); - $error = $rv->{'error'}; - } - #eslaf - - if ( $error ) { - $action = 'signup'; - my $r = { - $cgi->Vars, - %{$init_data}, - 'error' => $error, - }; - #warn join('\n', map "$_ => $r->{$_}", keys %$r )."\n"; - $r; - } else { - $action = 'agent_main'; - my $agent_info = agent_info( 'session_id' => $session_id ); - $agent_info->{'message'} = 'Signup successful'; - $agent_info; - } - -} - -sub list_customers { - - my $results = - agent_list_customers( 'session_id' => $session_id, - map { $_ => $cgi->param($_) } - grep defined($cgi->param($_)), - qw(prospect active susp cancel), - 'search', - ); - - if ( scalar( @{$results->{'customers'}} ) == 1 ) { - $action = 'view_customer'; - customer_info ( - 'agent_session_id' => $session_id, - 'custnum' => $results->{'customers'}[0]{'custnum'}, - ); - } else { - $results; - } - -} - -sub view_customer { - - #my $init_data = signup_info( 'session_id' => $session_id ); - #if ( $init_data->{'error'} ) { - # if ( $init_data->{'error'} eq "Can't resume session" ) { #ick - # do_template('agent_login',{}); - # exit; - # } else { #? - # die $init_data->{'error'}; - # } - #} - # - #my $customer_info = - customer_info ( - 'agent_session_id' => $session_id, - 'custnum' => $cgi->param('custnum'), - ); - # - #return { - # ( map { $_ => $init_data->{$_} } - # qw( part_pkg security_phrase svc_acct_pop ), - # ), - # %$customer_info, - #}; -} - -sub agent_order_pkg { - - my $init_data = signup_info( 'session_id' => $session_id ); - if ( $init_data->{'error'} ) { - if ( $init_data->{'error'} eq "Can't resume session" ) { #ick - do_template('agent_login',{}); - exit; - } else { #? - die $init_data->{'error'}; - } - } - - my $customer_info = customer_info ( - 'agent_session_id' => $session_id, - 'custnum' => $cgi->param('custnum'), - ); - - return { - ( map { $_ => $init_data->{$_} } - qw( part_pkg security_phrase svc_acct_pop ), - ), - %$customer_info, - }; - -} - -sub agent_provision { - my $result = list_pkgs( - 'agent_session_id' => $session_id, - 'custnum' => $cgi->param('custnum'), - ); - die $result->{'error'} if exists $result->{'error'} && $result->{'error'}; - $result; -} - -sub provision_svc { - - my $result = part_svc_info( - 'agent_session_id' => $session_id, - map { $_ => $cgi->param($_) } qw( pkgnum svcpart custnum ), - ); - die $result->{'error'} if exists $result->{'error'} && $result->{'error'}; - - $result->{'svcdb'} =~ /^svc_(.*)$/ - #or return { 'error' => 'Unknown svcdb '. $result->{'svcdb'} }; - or die 'Unknown svcdb '. $result->{'svcdb'}; - $action .= "_$1"; - $action = "agent_$action"; - - $result; -} - -sub process_svc_acct { - - my $result = provision_acct ( - 'agent_session_id' => $session_id, - map { $_ => $cgi->param($_) } qw( - custnum pkgnum svcpart username _password _password2 sec_phrase popnum ) - ); - - if ( exists $result->{'error'} && $result->{'error'} ) { - #warn "$result $result->{'error'}"; - $action = 'provision_svc_acct'; - $action = "agent_$action"; - return { - $cgi->Vars, - %{ part_svc_info( 'agent_session_id' => $session_id, - map { $_ => $cgi->param($_) } qw(pkgnum svcpart custnum) - ) - }, - 'error' => $result->{'error'}, - }; - } else { - #warn "$result $result->{'error'}"; - $action = 'agent_provision'; - return { - %{agent_provision()}, - 'message' => $result->{'svc'}. ' setup successfully.', - }; - } - -} - -sub process_svc_external { - - my $result = provision_external ( - 'agent_session_id' => $session_id, - map { $_ => $cgi->param($_) } qw( custnum pkgnum svcpart ) - ); - - #warn "$result $result->{'error'}"; - $action = 'agent_provision'; - return { - %{agent_provision()}, - 'message' => $result->{'error'} - ? ''. $result->{'error'}. '' - : $result->{'svc'}. ' setup successfully'. - ': serial number '. - sprintf('%010d', $result->{'id'}). '-'. $result->{'title'} - }; - -} - -sub delete_svc { - my $result = unprovision_svc( - 'agent_session_id' => $session_id, - 'custnum' => $cgi->param('custnum'), - 'svcnum' => $cgi->param('svcnum'), - ); - - $action = 'agent_provision'; - - return { - %{agent_provision()}, - 'message' => $result->{'error'} - ? ''. $result->{'error'}. '' - : $result->{'svc'}. ' removed.' - }; - -} - -sub process_order_pkg { - - my $results = ''; - - unless ( length($cgi->param('_password')) ) { - my $init_data = signup_info( 'session_id' => $session_id ); - #die $init_data->{'error'} if $init_data->{'error'}; - $results = { 'error' => $init_data->{msgcat}{empty_password} }; - } - if ( $cgi->param('_password') ne $cgi->param('_password2') ) { - my $init_data = signup_info( 'session_id' => $session_id ); - $results = { 'error' => $init_data->{msgcat}{passwords_dont_match} }; - $cgi->param('_password', ''); - $cgi->param('_password2', ''); - } - - $results ||= order_pkg ( - 'agent_session_id' => $session_id, - map { $_ => $cgi->param($_) } - qw( custnum pkgpart username _password _password2 sec_phrase popnum ) - ); - - if ( $results->{'error'} ) { - $action = 'agent_order_pkg'; - return { - $cgi->Vars, - %{agent_order_pkg()}, - #'message' => ''. $results->{'error'}. '', - 'error' => ''. $results->{'error'}. '', - }; - } else { - $action = 'view_customer'; - #$cgi->delete( grep { $_ ne 'custnum' } $cgi->param ); - return { - %{view_customer()}, - 'message' => 'Package order successful.', - }; - } - -} - -#-- - -sub do_template { - my $name = shift; - my $fill_in = shift; - #warn join(' / ', map { "$_=>".$fill_in->{$_} } keys %$fill_in). "\n"; - - $cgi->delete_all(); - $fill_in->{'selfurl'} = $cgi->self_url; #OLD - $fill_in->{'self_url'} = $cgi->self_url; - $fill_in->{'cgi'} = \$cgi; - - my $template = new Text::Template( TYPE => 'FILE', - SOURCE => "$template_dir/$name.html", - DELIMITERS => [ '<%=', '%>' ], - UNTAINT => 1, ) - or die $Text::Template::ERROR; - - local $^W = 0; - print $cgi->header( '-expires' => 'now' ), - $template->fill_in( PACKAGE => 'FS::SelfService::_agentcgi', - HASH => $fill_in - ); -} - -package FS::SelfService::_agentcgi; - -use HTML::Entities; -use FS::SelfService qw(regionselector expselect popselector); - -#false laziness w/selfservice.cgi -sub include { - my $name = shift; - my $template = new Text::Template( TYPE => 'FILE', - SOURCE => "$main::template_dir/$name.html", - DELIMITERS => [ '<%=', '%>' ], - UNTAINT => 1, - ) - or die $Text::Template::ERROR; - - $template->fill_in( PACKAGE => 'FS::SelfService::_agentcgi', - #HASH => $fill_in - ); - -} - diff --git a/fs_selfservice/FS-SelfService/cgi/agent_customer_menu.html b/fs_selfservice/FS-SelfService/cgi/agent_customer_menu.html deleted file mode 100644 index 603fc0bd2..000000000 --- a/fs_selfservice/FS-SelfService/cgi/agent_customer_menu.html +++ /dev/null @@ -1,7 +0,0 @@ -<%= $url = "$selfurl?session=$session_id;custnum=$custnum;action="; ''; %> - -Setup services

    -Purchase additional package

    - - - diff --git a/fs_selfservice/FS-SelfService/cgi/agent_delete_svc.html b/fs_selfservice/FS-SelfService/cgi/agent_delete_svc.html deleted file mode 100644 index 7a2b75071..000000000 --- a/fs_selfservice/FS-SelfService/cgi/agent_delete_svc.html +++ /dev/null @@ -1,19 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -<%= $small_custview %> -
    -<%= if ( $error ) { - - $OUT .= qq!Error: $error!; -} else { - $OUT .= "$svc removed."; -} %> - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/agent_login.html b/fs_selfservice/FS-SelfService/cgi/agent_login.html deleted file mode 100644 index 4b0778ec5..000000000 --- a/fs_selfservice/FS-SelfService/cgi/agent_login.html +++ /dev/null @@ -1,22 +0,0 @@ -Reseller Login -Reseller Login

    -<%= $error %> -
    - - - - - - - - - - -
    Username - -
    Password - -
    -

    -
    - diff --git a/fs_selfservice/FS-SelfService/cgi/agent_logout.html b/fs_selfservice/FS-SelfService/cgi/agent_logout.html deleted file mode 100644 index 98094679a..000000000 --- a/fs_selfservice/FS-SelfService/cgi/agent_logout.html +++ /dev/null @@ -1,5 +0,0 @@ -Reseller -Reseller

    -You have been logged out. - - diff --git a/fs_selfservice/FS-SelfService/cgi/agent_main.html b/fs_selfservice/FS-SelfService/cgi/agent_main.html deleted file mode 100644 index 9dd338382..000000000 --- a/fs_selfservice/FS-SelfService/cgi/agent_main.html +++ /dev/null @@ -1,37 +0,0 @@ -Reseller -Reseller

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> - -<%= include('agent_menu') %> -
    - -<%= $message - ? "$message" - : "Hello $agent!" -%>

    - - - -
    Customer summary
    - - <%= $num_prospect %> - <%= $num_prospect ? qq!! : '' %>prospects - -
    <%= $num_active %> - <%= $num_active ? qq!! : '' %>active - -
    <%= $num_susp %> - <%= $num_susp ? qq!! : '' %>suspended - -
    <%= $num_cancel %> - <%= $num_cancel ? qq!! : '' %>cancelled - -
    - -
    -
    -powered by freeside - - - - diff --git a/fs_selfservice/FS-SelfService/cgi/agent_menu.html b/fs_selfservice/FS-SelfService/cgi/agent_menu.html deleted file mode 100644 index 84a295304..000000000 --- a/fs_selfservice/FS-SelfService/cgi/agent_menu.html +++ /dev/null @@ -1,15 +0,0 @@ -<%= $url = "$selfurl?session=$session_id;action="; ''; %> - - -Overview

    -New customer

    -
    - - -
    -cust #, last name, or company
    -
    -
    -Logout

    - - diff --git a/fs_selfservice/FS-SelfService/cgi/agent_order_pkg.html b/fs_selfservice/FS-SelfService/cgi/agent_order_pkg.html deleted file mode 100644 index 0a665c99e..000000000 --- a/fs_selfservice/FS-SelfService/cgi/agent_order_pkg.html +++ /dev/null @@ -1,19 +0,0 @@ -Reseller -Reseller

    -<%= $url = "$selfurl?session=$session_id;custnum=$custnum;action="; ''; %> - -<%= include('agent_menu') %> -
    -<%= $small_custview %> -
    - - -<%= include('agent_customer_menu') %> -
    -<%= include('order_pkg') %> -
    - -
    -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/agent_provision.html b/fs_selfservice/FS-SelfService/cgi/agent_provision.html deleted file mode 100644 index 8770e2f9e..000000000 --- a/fs_selfservice/FS-SelfService/cgi/agent_provision.html +++ /dev/null @@ -1,25 +0,0 @@ -Reseller -Reseller

    -<%= $url = "$selfurl?session=$session_id;custnum=$custnum;action="; ''; %> - -<%= include('agent_menu') %> -
    - -<%= $message - ? "$message

    " - : '' -%> - -<%= $small_custview %> -
    - - -<%= include('agent_customer_menu') %> -
    -<%= include('provision_list') %> -
    - -
    -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/agent_provision_svc_acct.html b/fs_selfservice/FS-SelfService/cgi/agent_provision_svc_acct.html deleted file mode 100644 index 8d299cdc5..000000000 --- a/fs_selfservice/FS-SelfService/cgi/agent_provision_svc_acct.html +++ /dev/null @@ -1,19 +0,0 @@ -Reseller -Reseller

    -<%= $url = "$selfurl?session=$session_id;custnum=$custnum;action="; ''; %> - -<%= include('agent_menu') %> -
    -<%= $small_custview %> -
    - -<%= include('agent_customer_menu') %> -
    -<%= include('svc_acct') %> -
    - -
    -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/bill.html b/fs_selfservice/FS-SelfService/cgi/bill.html deleted file mode 100644 index bbdf1f210..000000000 --- a/fs_selfservice/FS-SelfService/cgi/bill.html +++ /dev/null @@ -1,7 +0,0 @@ - - P.O. number - - - Attention - - diff --git a/fs_selfservice/FS-SelfService/cgi/card.html b/fs_selfservice/FS-SelfService/cgi/card.html deleted file mode 100644 index cf6d20d8d..000000000 --- a/fs_selfservice/FS-SelfService/cgi/card.html +++ /dev/null @@ -1,73 +0,0 @@ - - Card number - - - - - - - - - -
    - Exp. - - / - -
    - - -<%= - if ( $withcvv ) { - $OUT .= qq!!; - $OUT .= qq!CVV2 (help)!; - $OUT .= qq!!; - $OUT .= qq!!; - } - ''; -%> - - Exact name on card - - - Card billing address - - - - - Address line 2 - - - - - City - - - - - - - - - -
    - - State - - Zip - -
    - - diff --git a/fs_selfservice/FS-SelfService/cgi/change_bill.html b/fs_selfservice/FS-SelfService/cgi/change_bill.html deleted file mode 100755 index 0bc47d069..000000000 --- a/fs_selfservice/FS-SelfService/cgi/change_bill.html +++ /dev/null @@ -1,25 +0,0 @@ -MyAccount - -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -Edit billing address

    -<%= if ( $error ) { - $OUT .= qq!Error: $error

    !; -} ''; %> - -
    - - - - -<%= $r=qq!* !; include('contact') %> - -"> -
    - -
    -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/change_password.html b/fs_selfservice/FS-SelfService/cgi/change_password.html deleted file mode 100644 index af7b45313..000000000 --- a/fs_selfservice/FS-SelfService/cgi/change_password.html +++ /dev/null @@ -1,53 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Change password

    - -<%= if ( $error ) { - $OUT .= qq!$error

    !; -} ''; %> - -
    - - - - - - - - - - - - - - - - - - - - -
    Change password for account: - -
    New password:
    Re-enter new password:
    -
    - - - -
    - - -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/change_pay.html b/fs_selfservice/FS-SelfService/cgi/change_pay.html deleted file mode 100644 index d26abfa7a..000000000 --- a/fs_selfservice/FS-SelfService/cgi/change_pay.html +++ /dev/null @@ -1,75 +0,0 @@ -MyAccount - - -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -Change payment information

    -<%= if ( $error ) { - $OUT .= qq!Error: $error

    !; - } ''; %> - -
    -<%= - use Tie::IxHash; - use HTML::Widgets::SelectLayers; - - my $preauto = '). - qq(). - qq(
    ). - qq( ). - qq(); - - - my %paybychecked = ( - 'BILL' => include('bill'), - 'CARD' => include('card')."$preauto CHECKED $postauto", - 'DCRD' => include('card')."$preauto $postauto", - 'CHEK' => include('check')."$preauto CHECKED $postauto", - 'DCHK' => include('check')."$preauto $postauto", - ); - my %payby_index = ( 'CARD' => qq/Credit Card/, - 'DCRD' => qq/Credit Card/, - 'CHEK' => qq/Check/, - 'DCHK' => qq/Check/, - 'LECB' => qq/Phone Bill Billing/, - 'BILL' => qq/Billing/, - 'COMP' => qq/Complimentary/, - 'PREPAY' => qq/Prepaid Card/, - ); - tie my %options, 'Tie::IxHash', (); - foreach my $payby_option ( @paybys ) { - $options{$payby_option} = $payby_index{$payby_option}; - } - $options{$payby} = $payby_index{$payby} - unless exists($options{$payby}); - - HTML::Widgets::SelectLayers->new( - options => \%options, - selected_layer => $payby, -# form_name => 'dummy', -# form_action => 'dummy.cgi', - layer_callback => sub { my $layer = shift; return ''.$paybychecked{$layer}.qq!$tail!; }, - )->html; - -%> -
    -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/change_pkg.html b/fs_selfservice/FS-SelfService/cgi/change_pkg.html deleted file mode 100644 index a841308a5..000000000 --- a/fs_selfservice/FS-SelfService/cgi/change_pkg.html +++ /dev/null @@ -1,37 +0,0 @@ - -Purchase replacement package for "<%= $pkg; %>"

    -<%= if ( $error ) { - $OUT .= qq!$error

    !; -} ''; %> - - - - - - - - - -
    - -
    - diff --git a/fs_selfservice/FS-SelfService/cgi/change_ship.html b/fs_selfservice/FS-SelfService/cgi/change_ship.html deleted file mode 100755 index 1a3b85d6d..000000000 --- a/fs_selfservice/FS-SelfService/cgi/change_ship.html +++ /dev/null @@ -1,104 +0,0 @@ -MyAccount - -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -Edit service address

    -<%= if ( $error ) { - $OUT .= qq!Error: $error

    !; -} ''; %> - -
    - - - - -<%= - foreach ( - qw( last first company address1 address2 city county state zip country - daytime night fax ) - ) { - $OUT .= qq!!; - }; - ''; -%> - -(param('same') eq 'Y') ? 'CHECKED' : '' %> - >same as billing address) -<%= $r=qq!* !; - if (!$ship_last || $cgi->param('same') eq 'Y') { - $disabled = 'DISABLED STYLE="background-color: #dddddd"'; - foreach ( qw( last first company address1 address2 city county state - zip country daytime night fax ) - ) { - ${"ship_$_"} = ${$_}; - } - }else{ - $disabled = ''; - } - $pre = 'ship_'; - include('contact'); -%> - -"> -
    - -
    -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/check.html b/fs_selfservice/FS-SelfService/cgi/check.html deleted file mode 100644 index 68753fe08..000000000 --- a/fs_selfservice/FS-SelfService/cgi/check.html +++ /dev/null @@ -1,54 +0,0 @@ - - Account type - - - - - Account number - - - ABA/Routing number - - - Bank name - - - <%= - $OUT = ''; - if ($show_paystate) { - $OUT .= qq!Bank state'; - } - %> - <%= - $OUT = ''; - if ($show_ss) { - $OUT .= 'Account holder
    Social '; - $OUT .= 'security or tax ID #'; - $OUT .= qq!!; - $OUT .= ''; - } - %> - <%= - $OUT = ''; - if ($show_stateid) { - $OUT .= ''; - $OUT .= qq!Account holder
    $stateid_label!; - $OUT .= qq!!; - $OUT .= qq!$stateid_state_label!; - $OUT .= ''; - } - %> - diff --git a/fs_selfservice/FS-SelfService/cgi/contact.html b/fs_selfservice/FS-SelfService/cgi/contact.html deleted file mode 100644 index 20c15df78..000000000 --- a/fs_selfservice/FS-SelfService/cgi/contact.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - <%= - ($county_html, $state_html, $country_html) = - FS::SelfService::regionselector( { - prefix => $pre, - selected_county => ${$pre.'county'}, - selected_state => ${$pre.'state'}, - selected_country => ${$pre.'country'}, - default_state => $statedefault, - default_country => $countrydefault, - locales => \@cust_main_county, - } ); - - $OUT .= qq!!; - $OUT .= qq!!; - $OUT .= qq!!; - $OUT .= qq!!; - $OUT .= qq!!; - $OUT .= qq!!; - $OUT .= qq!!; - $OUT .= qq!!; - %> - - - - - - - - - - - - - - - - - - - -
    <%=$r%>Contact name
    (last, first)
    - > , - > -
    Company - > -
    <%=$r%>Address - > -
    - <%= - my $style = - ( $disabled - || !$require_address2 - || ( !$pre && $ship_last ) - ) - ? 'visibility:hidden' - : ''; - - $OUT .= qq!* Unit #!; - %> - - > -
    <%=$r%>City - > - ${r}State/County$county_html $state_html${r}Zip
    ${r}Country$country_html
    Day Phone - > -
    Night Phone - > -
    Fax - > -
    -<%=$r%>required fields
    - - diff --git a/fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi b/fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi deleted file mode 100644 index 5f344a32e..000000000 --- a/fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/perl -T -#!/usr/bin/perl -Tw - -use strict; -use CGI; -use FS::SelfService qw( invoice_logo ); - -my $cgi = new CGI; - -my($query) = $cgi->keywords; -$query =~ /^([^\.\/]*)$/ or '' =~ /^()$/; -my $templatename = $1; -my $hashref = invoice_logo('templatename' => $templatename); - -print $cgi->header( '-type' => $hashref->{'content_type'}, - '-expires' => 'now', - ). - $hashref->{'logo'}; - diff --git a/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html b/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html deleted file mode 100644 index d08ab9679..000000000 --- a/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html +++ /dev/null @@ -1,10 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -<%= include('change_pkg') %> - -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html b/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html deleted file mode 100755 index c01b6b384..000000000 --- a/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html +++ /dev/null @@ -1,10 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -<%= include('order_pkg') %> - -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/cvv2.html b/fs_selfservice/FS-SelfService/cgi/cvv2.html deleted file mode 100644 index b178c8513..000000000 --- a/fs_selfservice/FS-SelfService/cgi/cvv2.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - CVV2 information - - - - The CVV2 number (also called CVC2 or CID) is a three- or four-digit - security code used to reduce credit card fraud.

    - - - - - - - - -
    Visa / MasterCard / DiscoverAmerican Express
    - Visa/MasterCard/Discover - - American Express -
    -
    (close window)
    - - diff --git a/fs_selfservice/FS-SelfService/cgi/cvv2.png b/fs_selfservice/FS-SelfService/cgi/cvv2.png deleted file mode 100644 index 4610dcbe62aa30a493a84265090f59ade25d83f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3854 zcmV+p5ApDcP)hSy0&HUls$0#&E00001VoOIv0Eh)0NB{r;32;bRa{vGf5&!@T5&_cP ze*6Fc00(qQO+^RO3K#`2G=Ey7T>ti^$cszvo3OB0od2oo{BR`v@TWZasJuN0 zyGD27j7npehVzYXvL@nR(xkOJ2s?ED^g)=_x^3ax>Q*_qb`Rv`IE(=W@{EqJ{YLrk z=xC91I&r3+xooeM`=K-Iyj))hJE6M_;aV7R$zQ4x--TVMFbKQG4@bg}AEMjsYiV|2s?5ca}YM5jG{TgYHAnk*~Kp^o}A|E~Yo<$m~SjsHh~wOZk28%kWO9sVsh z-*^q3(O=2FcjijD@wKGy# z@|VFY+Gp`sbekd%2$%uRhvBd?m8iciD!5-M}hpjN7* zZi0vBe3afLH0Uz;dN7*1kBy9?zEY)(eu+o)J-6~*Oq_(Kl)7wu)}6UP#T`$_$pz~(L3p0PN~|l+p_IJY+HM?WxYS8%C>FWeRt z&r@--8GWC&nUB&F=HhK_KM6T^m6w^XZkUTy+^_OjD9Vst&K9G5i_Vu8!NvnZk+Es4BQ;Nk~u$MJK=S16d$$o3A0?CrtF;WiDd+q6Y|h(I~EXF#?VQ3+kiN| z3)%!0A7be9&K%4w-NGw{NIH4fWzzi5*ShJM2TLMh+YBy=M8bdGr3MO%WXi3M>w9@U z;7p#TweR3{B;=fTEY^&YjcRqB+e6h@PEo$)#R82a(`q#c{rF!GB>*y%wyw?M(Q1yW zbZhLO+V*B%Eyut-J_Il;nS~&xRTb@8k<^&Opgad=zRoPXLQLyhvukDk|2AIj`DcgO z%NvSodE((-_I_y+_ySYYgkH!3BHU*FQt^O`j4We?5s+y54(@ z6X5i7w^&>cf1+HuG_%RDJM$`ed4ramQ-`hq*XD(?xv2~bxBTywyb6oWuCV2s&2OA@ zn3dP-Cpg^0I_HPf&2!GB%*l%zsfC+~m)$<5HG2@)+`Ja^%sG5`eRzF%eRw^@tGQcq ze($gOPukuOueau9gG{qp7Mh~Ww9-mN3YeQ^!I(U*q3dLcI>D!|qQHtch|?@aD0_V7NU@ZQi{SAb0J=?K!{a|pZDv->&yHN+-4SDh0Pho!}EEK zvr=D?9rDU&W^eoKwmKvoIWXofz=wLBDeI_1(0m<2NLw8{_UpV}8?Uzs;pSik(M`Oz zP0)>ZohI#|R`8*5(0lNG)Sk}?RuZIB>IP9eYy#=7gR#WjygZ5K!aJw6b6)fpVsycP zI!cbi_@<|Z5;ysb)8vM8$YJ;M3Y=b1lmJfWu!IcB^EtrOW6S>hmzz!pue&~MmVMu3 z-R#!|-^@$*x?wC_0GbO4*C?Qd^Nr=v)b%7QulT{yzyXxl+Ja?)bvVpR!sRVBxNS*}{+e0%dV9FS(Vr2z7{ zWFN&f$nz@!xUqT|23=!iC-_k<)XltdJDjg`w^jL5kJt4nW;0*EY~~vSG&Axt-Hg2E z8%JGLfnDOo@<7_!2-zwW`2$+XXhlGX_T*qL0GAS_?VtKa~fe}D&Lg_rSS>1vI|6uZK9W7aP$uVsOQ zt0l0R-?{eS54s6f@8(k0zsL>!7g%qO=wwAog*B+ZJN#;An*z)IEm%B`cXL{P z&8Kc)Tz?YQYJ!!T_jhR$P$pPm@%}D!A6Oq)A6Oq)A6Oq)A6Oq)Gr>|_=idFNzK#k1 z)Cm3q>jUcp>%WB+h#-2_Rkq1vlP8~KnQ2iY2P<2@VtpzF_(2)VM4q64g}*Orbd{wQ z6tYovm0+@9%Q{@ykQd9*I0{E*f+Pe!GKrVe;pv|Ui&+NR!4H zgHy?@SOLqHpQ7cKEki{muBJuBR1%RZTfob456k-ad|3Q|@%+BRs--1b`U1dIAfpso}}Vav3AvgvVqjSfMOA5Zi07_Pgai1y-sL5S42soBf@@;!L6P z#ghH<PWwt23Zb$qzal?YLiR43`=XYus8sk77VOAl+4@XyJ-ZTqTEY*k53Iil zD~T!oruj>-1QAw~2)6V$V4Wa2yJOOgu%5KQ`#FomPqwF78?!sVUCq;ACG79YL$^K= z|Mir%K{lAhc?+tGMhJY~mi=c_NU7)exYu3cPCLUqp~v$5j^knTr-nWC#=tZ} z!=J<9&$u?Pg#{csbbM}@T};fs@$kku01xMRtNWz&Hpx=w4&N(1RhoaOt3WQE_m$WJIL2Mka@|i=IrT) zYW6v&JS?Vwh1`v2toS|ycBs$VMZW2}NLw#98T`Z;(8jEF7xAcKU+DA8VS!CRO_U1Q zM6P)9ILkSa0~*dApHu3jbj6E{Gi_Z%IdVK%2TwxecnrDieIxN)v*pN3U_ez5NP=OL zTfVvy&fzvEWrMd(zdtPfk2|fY>BHtV7dP(uIjp|!|NLXuBdPv0?a3p9%dQMD1K&p6Or01J2M)yDD?X2uq>*{aAV`f+4F~S^N-rhr7_>cxE+@JHLf$}yC`ocZ>5{W z#eGrdIUBh7v=%E1ebvKqEA03geG|JVAhqj@lg4iLw4i@+oyGT*$RLe_T78QvX z6@Yk&>Y!+Td@Nr-j6ywzj|veAH4#yf*ioxO3uEL{LSt+SuPZIF%nW6x^$C_LyW?64 zP!=7+Qpd2k2qswg_=`#_D8^#Zj&U6*&kR}?MaB@UPJ^v{LVO`C`To-i8yR^u!BVS9 z`NY}4Zt{RtBZ;04J04YPghx5Zen{mYIv?yLWTjFv9XIXR2Z>YRN=U`T_WhfT$2zPd zSpDB=+DBAk&^r8?rd{;8Xi1Aj&~HO!9;U^HX84w6wcoP8YJB@BX%LIxaA20!!z=y* z7mRs?Y%+5W{fQA_-$eTFoiUHo#-{(Jwvpym!`Qbn`P@7Q)h~m!xp7bPH-oj@Esn;M1&07*qoM6N<$f(|>W{Qv*} diff --git a/fs_selfservice/FS-SelfService/cgi/cvv2_amex.png b/fs_selfservice/FS-SelfService/cgi/cvv2_amex.png deleted file mode 100644 index 21c36a0ab5eb9f9fe56bb994007ac2d5284d55c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4573 zcmV<35hCu1P)*o-EDr}kT#=yR#rOZF?>5k^ z)U>nvU(b77c`CyEIUHjfBrfwwT#9BoRYqJ?DJD}{h|5eC~^GtgwE~1!gE~S~x6DhAasKR+; zf+-MFVT!saKs+zEChvv~6M1qv53YG$sB50h#X^+*;Y~StZG(EqgFerDe{H;v_Y$vd zqR(?kTv@t>C)jnLCsjF}imCQ;O#cq|eAoKgBp&kcdm81LVqZ3 z@KmgA@xw{9!r}%z?)ZETT8o>;Lx&t26*C4Q8bql~aW)c#8yyMU76(&Uh;*Xp@cb>c z7jN=0VY>j>SWNZ_?iz_+DkiUKOdW-tTUl&GZ-!beEaZ30bF0U<$zADL?^a_QzuJ$F z1V~ILk!u6Ks)=57e2;ED1LzJXY26eHNgPnUV1+BK^+=LW&lPJ(imT<1@~TgGF~7s+ z{5+k;2iSm@#QLI!u$)f%+N*3R_9C^}Qq@KQBv}9zU9%|_*vnOg+A6k?X9czpzd;<> zvaF&g&ZXKUMSN+w6l@eeLn$D+h*Hq9fHX;7lGtqXmp(>xVC<+=B-vQtDUytQKp#JAF!}V`V$^6||ibW1=D>Wta zQGOqf3#F!nY0@UdaZRZ!wW9^A0v4VtHQ7&Sz;*`=okhFz!RZp?BiYiHYr z4@o^mWWEkWEPAJ`qi5l6No{OV>s#+bgSsgd>cG(G9-X7dh23S4e&J2AGhmRZV#%bxeyoWWQNc*_Jx$^jVK$MV58h zccfHxLCOKrI@6IAZ%bVLh!zO(R$@OvtMly)Eo>(jBa*^qimEcMs0$D0BB^w6pp8lT zoZt)SfVQsiO;H`_!dRJD_-Kel-7K!QILE@ZOb9=nL0YDe9aiCs^TA?02i5^IExZ7w zaA9zWZ4?%eHkCB2U=rDRT1jj5^v|Md!DIV2pAfd|wOShRQzg*mTyN>}Y$r%(JG`L9 z5(tKS2vM5a<;w`Bqx;Mlq8M_%x^E%e3H@5`&w>rbp_beu>ruscDmj7PS+u z7S7pVllf*du1Qi+PSCQXouV#hQKfr@mYhiw<0c)~JwvE#k6M3?-+aJED?DPo+q+si z{_jv#r9D8V;V1#sS$t~vwRH`mKCWsTRF1S)R)YB;okd!nX&^0|Y*tRW^bi3Otvc(z z?6i2^<`Wdeq_8X=s4Ff4<`9>1E{!Z4?SN#%A70`Z7Z5I8yYIYTv;3NB^xuA$CrN=^ ze7|OC0gn@v@P05Jl4uA4AlUqV`83>AIED;EJG67naGqAcC(fgmQuG5GpurLH%r)s{ z4l0t>RN{b1sw6jD5Nd2N>RaF5@^Ips<8d!J551g^Gjjf@SIYSS_-1+G)5zHlLvkEG zDtyA$+d2)c1Bst0J8jg@`xKSkK$h+n?0DR7=@9W)W*%Fk*>eahT6?zVU1?>z;~u@e zo-{aOs+bn4SJh5K2c_Ftt7wtNupXh6%??S=oIkU+7}HqK?2`0Srr&j3sejoR_B$~0 zfM1_i!1@j?P2Nee5uEkc8d4wf41YhZ=nn5SZXC?vRiE=KDGauhA~tVKB~hpt*VUNv zuA~kOOoaE7VzUj|h^R|>yNRf5kXA*s7?yh1hb z3z8o76SREj=4iFa;N<%V6xvt{JR#$fO$MkGnvyPVJ=vc;@MZ0gOVM<=ha2n79IXo( z(6STuTtsP#b48{z)%l{xzFKi+hpP~L!J%+$@RNmcxElbk3uKSOlYt$uGqk#F4CL4R zfD|kl`S3);=aC@!Zx7_h#bFCxfS|Y%cKtR*R|E>HY3Wv5D$>oTghVXgEG3%t>@DLevg*vg4{ z2g)!^D_u|_YT#O3$|~qo3K)tDw6ZNS*(v+Rk&KhnIKWc|H=M3-9Cq-8v(R*2 z*sik+wBFS4|7iXH(1Hj*LJP9bS<1K5lD%m;BD%NIf*U*RT0{0rv;g7?%W|@)aDvxq z#kk6hjg*p|2-pJq5-ka9jJ?^$J2H5@Kx@ioK4Ha1GfKugBeZU--F0MBunFXECb?Y$9!0Vn~1jDtJ!Yw{s}w;j&0 zYbqq?n5o4l?^m7N6qW*L_#mJ4Kqh7BoMj&ey8+lIkjselP5u#ACAslbM%lb6`&g^| zB0Cwd`k{q{$Z^0-3t2-`B!CK0Y)^M%w4A5KQ0R-}qyd+z$$=6Q6b|k33Q1*J0Q?L{ zG?(~Si#o2OC2WowE9+78k)WU~l@NJ)ijI*Db5D}nfN0@U6i(YUv=|D}N`9#;zakm` zea&n_qP3J|kBbAX$NciT`%a%S+YaMX6Z1RYukX`ZEjJ$gL@&rgc-8$iMN3)^rKfEl z2nc-2k{6|SN!iro{XooG5Q{#kNnC+nM?g|_E{-n_zGmRa!;#y2-{6OiIo!Fw9-I$z zv}_+xpHmRZCof8Bi9WE1k{18_9O7A92TT61DOy-0D3PNp2U-Cs)#RCG@0W6x9I;Zl zLEi}M9$)aOyrf4xG><7g>e1Ksnl2jQxyq*Z(y_-*M3^LX+>I7h-&2Zfoo$n}u(hF@ zP_rWs8+sP|mIHBVN{scwfd}E8!1ieUN+043EoG@$DWc_b+d`5Kpr#f_u3gGQxfJl8 zHuw;4?1y<2Lh-iFrl{f^JWJgm8BM_xL{E97Bu%?3K~EbiA81`2uaG3xweL(0bYSPG z?Sq_Q9jtr%;Xah^Oy%(<5vvVoc^`-!Su+{-ggYDp%(Ji*GF!+DRS=Q1jCFlWEsVINoaqAz>oLyX@} zm0rl(*SEQK0iex$FR(GiqEed>3k0> zx*lxPsPZ$DQcZbId@%`Dl~MVo{OqKfL&C+Hp-CLhr$wmiCZ5B zi?pUiSRcu))(3CRHg0vvCE4LQ6J<0_(@FdX#^X_p(pZyh2=u@@kN-W0&e%gG>5Mnz zd%a?SstraJ8$Ma7222;v2fSRg##ZMF$x%ce#er?% zmZh1uY^7>N$JcNNhh=c5PD(R{wROq7bl`q42R-8s7so3D((Mi@(hSeDgO4swH8kdu zH3Q?*1vH9m;hAx|`$n@d|ot7pfo@z!NI{PP3g`fBn{PhV{p- zKW_bT>+`t9!2&VI48VVaTNwv{jQuJP@CIx@$}Nh6fyr3G4RO@Jja%2XKc^~9wLSMVD%s3mYj`!yo*C$iR-8} z%%S}`Zb`8U)m*&R1S$$l43Aoimqf;H+}g-23MhqjvQUfd0)CcT0KF>L@AV6K4LLX0(&M+o zJzG0E=#OpQ>({@Lk97K-@rhTuW3>c}R&)iAJG@R5ALg78?yg1o6s7ag^GpQq`1Ygg zF$4sq0!LAMH}uMaqoDr7)f_pt31uWTUbTLArdT>wYl@S zg+)t+$qXy>u;dsPv56L5idR@EtQl%b99SDT!W1Zmo!8wW5-!2gI_{>yLuL=;^}{&I zmV(M3*ONnTk;HJ6IFg+f;IasdQkqG^t4T##>d9xYSDC?!VNyfp>hEDSoz|t>NrQ)h zTTthwj?IGU+PhyUpjK&p5`;eV8;0f6djA9Cf*N3rL?Jao>}^G=9v=|HqEKmWgrpXB z|7g4w$DMJURddHnX028XkNRd?l^ z^#s*gZb2JzA1Qb`hz&Fe$XR;fx%5f@(FlfT@JkG16X8L^|9~GNG&JrUH%;uxr6X9tDkX^*^t|s}e?3 zGL(%j203206>9)t?Ke=Zez%|`NZwwj%OtvYuoOe1$-vuP=FBty#;Oav6z1%F*wyCGS@rgx+2AAHdYqb1yxu~%3e^T~*=)nI z>E|{^YVE@dX7dDa=->(wPoN|76qwBlh z5J|IIeJ%3x2sj$_>E{md2#+nzImg}$MY|%1bX8c5>bR%J1joXG#jZ^qEp|UgA{|pP#5zg2E3cl!6Ye%KbDwnFi0T2>V!g%UTrJCQuv$oWF%VSneW7Fh|G3_;tB~%K0QMHS?`w4X;_3{1eW3L0PIf^ep31$v#dJZsY!q+00000NkvXX Hu0mjf_HDMR diff --git a/fs_selfservice/FS-SelfService/cgi/decline.html b/fs_selfservice/FS-SelfService/cgi/decline.html deleted file mode 100644 index a37ba3ab6..000000000 --- a/fs_selfservice/FS-SelfService/cgi/decline.html +++ /dev/null @@ -1,5 +0,0 @@ -Processing error -Processing error

    -There has been an error processing your account. Please contact customer -support. - diff --git a/fs_selfservice/FS-SelfService/cgi/delete_svc.html b/fs_selfservice/FS-SelfService/cgi/delete_svc.html deleted file mode 100644 index 8468deb4b..000000000 --- a/fs_selfservice/FS-SelfService/cgi/delete_svc.html +++ /dev/null @@ -1,17 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -<%= if ( $error ) { - $OUT .= qq!Error: $error!; -} else { - $OUT .= "$svc removed."; -} %> - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/list_customers.html b/fs_selfservice/FS-SelfService/cgi/list_customers.html deleted file mode 100644 index 858e5e9ba..000000000 --- a/fs_selfservice/FS-SelfService/cgi/list_customers.html +++ /dev/null @@ -1,39 +0,0 @@ -Reseller -Reseller

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> - -<%= include('agent_menu') %> -
    - -<%= - if ( @customers ) { - $OUT .= ''. - ''. - "$td{'statuscolor'}. '">'. - ucfirst($customer->{'status'}). "". "$td". - "$td$a". $customer->{'name'}. "". - ''; - #"$td". - $col = $col eq $col1 ? $col2 : $col1; - } - $OUT .= '
    Customers'; - my $col1 = "ffffff"; - my $col2 = "dddddd"; - my $col = $col1; - - foreach my $customer ( @customers ) { - my $td = qq!!; - my $a = qq!'; - $OUT .= - '
    '; - } else { - $OUT .= 'No customers.

    '; - } -%> - -
    -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/login.html b/fs_selfservice/FS-SelfService/cgi/login.html deleted file mode 100644 index 5607de783..000000000 --- a/fs_selfservice/FS-SelfService/cgi/login.html +++ /dev/null @@ -1,29 +0,0 @@ -Login -Login

    -<%= $error %> -
    - - - - - - - - - - - - - - - -
    Username - -
    Domain - -
    Password - -
    -

    -
    - diff --git a/fs_selfservice/FS-SelfService/cgi/logout.html b/fs_selfservice/FS-SelfService/cgi/logout.html deleted file mode 100644 index 0e774e9eb..000000000 --- a/fs_selfservice/FS-SelfService/cgi/logout.html +++ /dev/null @@ -1,5 +0,0 @@ -MyAccount -MyAccount

    -You have been logged out. - - diff --git a/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html b/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html deleted file mode 100644 index f80142325..000000000 --- a/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html +++ /dev/null @@ -1,61 +0,0 @@ -MyAccount - - -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -Make a payment

    -
    - - - - - - - - - - - -<%= include('check') %> - - - - - -
    Amount Due -
    - $<%=sprintf("%.2f",$balance)%> -
    -
    Payment amount -
    - $"> -
    -
    - - Remember this information -
    - NAME="auto" VALUE="1" onClick="if (this.checked) { document.OneTrueForm.save.checked=true; }"> - Charge future payments to this account automatically -
    -
    - - -
    - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/make_payment.html b/fs_selfservice/FS-SelfService/cgi/make_payment.html deleted file mode 100644 index 89239c06b..000000000 --- a/fs_selfservice/FS-SelfService/cgi/make_payment.html +++ /dev/null @@ -1,71 +0,0 @@ -MyAccount - - -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -Make a payment

    -
    - - - - - - - - - - - - - - -<%= include('card') %> - - - - - -
    Amount Due -
    - $<%=sprintf("%.2f",$balance)%> -
    -
    Payment amount -
    - $"> -
    -
    Card type - -
    - - Remember this information -
    - NAME="auto" VALUE="1" onClick="if (this.checked) { document.OneTrueForm.save.checked=true; }"> - Charge future payments to this card automatically -
    -
    - - -
    - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/map.gif b/fs_selfservice/FS-SelfService/cgi/map.gif deleted file mode 100644 index ef884d8f948db2b04cd43dac72600b3d6ff7cd85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8181 zcmV}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{ za7Zi~kI1BQ$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-#z&2D1@0zn`!gwNghJZL@# z`2Tc30e^9PdWVP-0)LEvf{lc7fr*rPgOH4qGj|V{n2eH|m7^(f0t;{ob_;Pbi=Td{ zHH)IEu%CsTq`M-H1d9r^3w|-4x3w;wqQ& z!{tnYavBb8WGWO)omAWrz$PqU(3KXJLMnQ+D?4LJk2cK-m1I5$Mv2PvIy0;{woJ#K zEn7*JgtTgt!KGQx?Ot3sAJWxxwG+dqBk=x(WD}6q#q$Cq9_$5U1c!t|0&vKO9t*sZ z09^_#`mvvyrXk;wE12>ZmX}$bM#;d~#VV@M^W6z^+4swRcT^=?ET3Tq-zlE;mI`RV4d|hO1A^#`E}FsS zg>##M6O#j%1QQ5L!o;Uvh482{ReSjH_F^-QIp!gNB61g`I5!#Sgn3d)h{9E`1arzD z?zz`c3&FKFh+VIwmm@4ap7!659Std*m^2;8PL2#HxuS0t)f44@SUQE^hzm`|fJ)ZklUIPO-`sz3!xo>Vyb;d(>?Kr*X%gqt-V= zLIyLWDVG*+Ma`kDI8ZWUrlt9wb!V=_W5S2ERH?=!d&%Q0daf+c$Oh5e6PhQ#{1?RQ z;rC`YmR39<#xs^7r9n&|Q$s-xPfDzqa`Rw7+sU?&Z}-&_c~5AT*-$`(IB=@}*qM^~ z-Wov+<4i7wF1FWO*`phxGE<6Oy9?Wtb=MnFz%hcIkasP^m(wRX%ebJ%)D5Kf$C>7v zrH1q;PAWb2;9eDu{Kz|6$>{3!Oc=dy7#3N9Q6{1?syIS$*gI1-+0gbvg9aD!rH+jL zm-7RSthy%0pH@Ac&|W$Ae5#N$9q#B0f@zdBJ5b!Wk z#3*?Mv(h4NMJu26DhCAuN2q%AK^H) z;g;Mnh7G}lK(QDjbYM%{q4uXjd^E8u<1hlPMo6`o@oa??6e1S?sU^W6wrOok zv!a{Qq9E@erwCsX5d8X3LK*>)j798J9B0y_28I!3nc&dy_;$uL^(zOQqG9j;=*AXm z<%wJTNDEKGL?u43JDzG-c?>8!C-R_vq5%nXe8?*-A~KKbv(+4j6UUGZ%27hOAt$YM zuuKf4jr75ypSt$RL}uoVCk$mCqc(w^9gr`Ov>ObDNJnpBQeNMa*D-sS%idISH8@C^ ze}V=}>3EV^x&%|h!~>p5?kjj+eAvyNX*Kf|GlH8k&)wcglTnT-KHc1=-sVZqeT|Zh z7MRlw=y=42NN$yHV+d?|WSo4_ES$Cs=AYvEon?ZAhjTktXoh$HOPH*!KRBpYCV#~$ zpk1jms9cMu`sW+zH85xVOz2C9`L4Dhv?oYX94AQF$L0uZpAmZ`f998^_9T;+CR|9- zP;xW8)UrSPJ@IJZHiE)s>%xe(YkG^2T- zq86O0<_QuK5E;64fAI6AUO9kGJkb?x`&(eKLQB5L6ry2|1?dKjmsEk8HAptH)0U$8 zJJ6PkT3m^r6_aa!a5q?SCkGwad379=Z)v9YyH zSpx!?4a#Y15^C#hW{tB;$!Z{B8njehdt1eCfk%O=dG8$(`C6AuuTHQ@=0sV<-2|=j zOIE=ng_!YH>FLa90BugI*d!%c!0|`fq~l?}u|bMX*oe+JS<^J}57#*$t{2+v2fP(v z)eX22sq-m;=#gNRK@oz|)giY6c_CJ537bNTaE2QYS(mAkU}YT^V;r&B5zF#_HnwoL zW{ea(Z7@flLrRWgykj5Fi()_KY*|0);eZs9TR#ojeniaPAv1ZT7Yc8#%6wcSQrWRQ z#%-A|=gwG-C{bTV*6|t)W#*Y#&vM4zYy&(g1kwZlR1Xknn8~~W(hU%ryHQd9_UGD`#oYnT6GvCq>Cl6M561qH?e1 zC@yb_glX_no4JPZ85zkc)*!L8r`rr@PvH(fPvSJLMYX#?LEvaV?2l76xk+lCRH z6t=cNiF~-8E+zpK<4@UeMo(P!MoN&1=42xO|L}IrGfs-%1$_ih`Ra(6?}&~jB$E3T zk7E8>)?mik5twTd`K*mdjYg{|gf2*B!;)}&`5bP&&d{zc7L*g~&A$o9>AtHxi5bt9 z$FurzG{@979`QkzwKXL(uy-4FsSw@+@1oF73};^HRB?7MoOq5>4;l5T4h-FYG7U^n zNQRpQZ)(I7-KZCF{o)v?u+lH45p-Q9I;NsURdgnAYCEx@ZhHBjxnv*y1QQV3W;a49}doMny^P} zi^(z7zOT5O(MK;oz8(t44lCjU63L$bahEvh>1r)~y5}dcWmmNZEL$XV?IlnYzx7L#!*!eAcy^I?$jeauC0wpV^*h9w24Lktyq@nwG3H+me%g0&-i za<>k&wM2LWeZ7=VO!6L50eSAEV|oWp9@8R(7Bd@1Pey2jO&20GBQ5Gz0Zj84CliHi zrA4SWYA@h$b@qc6gES^)Tr-GNnR9|C*ct3_XkVdw2c~VDQFF&fPO@e;t8gcSFoZo* zfh;0vE@oIll5}a+LVU7q4g+_hwR5;<3Ry>UQ$-+VqhNLtWg}vL5g>iS)q#8>QGB?2 zqSQt6_k4wya^Tj4>!%dW;3PKx*ME;VaR7IPeWHS*7a0X*Dob@_-A8|ZQ*BmbOry3r z8$%WrxI5NzH9!`3D4W+~EqHryQheU6kC?u?Cd~*^~QWj{*^$kAvhR1l02n9>4hB;*Ohwg%m({^M9GB(lH zjRUc1kdlp~q>q_#QrO31cqoBTbdI<5Zn1cPNFz9k1z?B45}P+fFZC^U&@&5&d}HA~ zIFX1AS&8}RkPEj(%SDl#U{Dvy4!|-;!N`$5MMF~|6unf2J<%8eH;sr@i6vu@=*Um@ z;wARBZ|O*k0I5)5xR2rgqH7ydDG23LCN~l&QW4v;7v&g_B_oJo(l!eACZuqTP+mq7Tam&l?^HnMz;h=K_y9JUB7zQ!>ml_OJQN294H z8Z?L{XCtgom2)YWKjDU~XOfzkiHdSI5%Pe>V}8p;g`{b7f|)pWw2{vMFspfBNg;1H z$aYpynOR9Va28=U0ZvLvVG};gt>5nG3X01(xAT;p2^01Tw*UHC}Qf9bVSK<^gqYO`$idm-u2sD^~!g;~D9YTqeX-X6>DtuIWA0t;|$p&?(IW|Ct zX<740VXYT1f{^J>LNrq+a)5QeCsx|yKbil&vM z+@w7jbCj+$r{nZdC0T^RIg>!e92S@Y=cB6-C#uZIt0Ov3-|2W4vBd+cAlI_}MJefq-R;JKe zVJa7cdFl`7=9r>6s&2}w;uw#HDP_kZQGGyf;-@tXlX%4TthJhlFVj%6BXtBiihZd# z4&stqf#XZ0>6LmTL}Q|`E650S3mD1l9K6V8{LCi7WOCWN86vYL2=^=ggl zm@J_GwuQ6+V3_9~VC0>kV++?XsO7?ed4+Zxa8U75S!i=J7&)zPTCHLj9!Q(C7aA@n zv`pmHkHFx2BZEYw!zg+6LA%CoW@nf2cd*a1TSet(@L0C1(?19Ke)rmTXDc502|h5} zWcOmJ39?wh2t#LzM1bS5(+F*I*|lM3ICKYej8|Ggv!miMK5kq3s~b_F6yBSYqDxXglV_5lx9QO z1TGs{hMTwqb6LeogsBqd!XpHEMJ8Okgr5Rj{z8p!o@e`-eOO_c{zm9UhD#>eYv!>vZ z3T{oG z1?;=Slr0)*6r#Ik$aXxy2y3momxvZ>q$+gh6W@lGq)T4~`MxXqu>QJlLy=d{vW*#Pz;Y~7;S#YoQ!TaYLv6PriBYI znLEd?OeI+OsQ^OEY|1R6vy;;Gq}u{7GfEY~h*j*BJyY9EhzpJW<3C&_nl7b+&U~bs zJis-i%X!o~Vl!rC+=oSyJ*C%3`@%z=ue@wFklMhqtYE04ArHND zkZU!AA;MWRX8?;;h=OBI6yf0dK zTpY~IT0DxIy)k*rIo-+v>>#yC5CC16<~YL)yy~sB)vM;NJ^c=X?jdeqooVjMV-$xxm=&OoQR0G8qE(nsn>fQ z($s>6Z7RJ9r47o5V7z5tXmehvm3 zhpe(`x>}O4AFz#Fv3b|$%Sc@f(qH{E*!rLITCFO@*^Sgw-owUI8lwH_qifoyw(*QR zm({j)zH{p^^=M@;3v=<5wuDup_WCNB&CU%6$cZ_)FP3zjLn~qbS$%M_KRARIj|`nZ z@pr5yJcDeMU;M`nCtv2>iQR;&n?0%oS9PH0#OX{_Gp%2L^g#=m6&Q8jw3=D7G}64? zO$V+w+4_*pÐ{m%5016l=>uD~!xF!ogitCQS(O(8l5;)bS1C=FLzMsf3^)4)Rpm zUkS~;NgbA)bI7dIzynPM(V4>Od1!33)v4nl&f_0ydHLpc%`{w7fjCD#c(Kt5(Zu9F zJBNB4DrrX2>z$z3@zMq!;@>vn7X8eGSg$F#G6L$C1+zW-om<-=LSdYQDE1@_{?}9u zVGI=?O6u2Iu7p1Gd(?2-)pi?sE8{9`GGp1iN%7kXPDCXCT`V8%USMjJN-NBm@jCTG z&wsb>=9@st zR=XwlY(P-z9l94({5^p?${Cr-!V8kf%l?2M0s*O z4q)8xNsc0IWdaV#!~?Bv2G8+-GIHn4$TT>Na(!pjh~hq*D*L^II>@8{6(YnN%RkcY za~@m}y>^UnVeM4bC_kM%3N^q5(htdy-cdIG9EXcC-hYo4dCbhOc-HY#DfAx+ne8({D zj!uTBCGZs63h@6-iAMS=jt?1?B&AU~S&(0bvMn7{Iu-LPM@wOf=t+Rg=i*)H7FiK1!$ zzOSsy`ku$izWwcPi>fL;i_jn5mM+*POR1Uvp83y{u+Zpj<;VMuRil=R0HDhqy#$$0 z1tKh|?uj3SR|s;@$pjh70wF4d6fmvlgy;Is_xR-t3Wvm=t%Xb-Pm)=qxjdm#G5+O%Qvk{|LhKN}BEBs6A z84IE6*2cNVypSw|#Y?hPE9+3KCApew&A6L80yGDPdTrr62^N#X!A`LfJWM1rZ*O@1 zWXmEkTJ2}&*bM@7s+7@W=3kn87P3YEaF{0wkQ}7|e({u!U%6{B_$c}i>YgBZB1`Vb zs4?BdEWQ>AL`Kk;8%!P)-eEWkC&P^jAXVgM^Cb$N7$L$S>cym>l{FAH9q|E#QX)pb zWb}FPOdMEOWBQV|$0j3`L#ygk;@}^tRcFvHLK=|lQModw29eiB*{YCs3GK|Ib{7w> zNxh!hThN)%h-c3&zD5_W9m#Ly_NA&L0#-~;F7u$vz-wd1qh&p=1-kKRmvmRBNo{qq zXCX{ObKoq7sb|=(OH(d=li@Uwz}5LS+q-PzUTJ0z32lK+PTX5a_Jz&7xN_}YlFt=E zoVx<=EkwW7`TH#`>&|`jTro5M{tWhZ^JN!*3x5*w{HE>G&R=k{z?PqClC_7AE(L)# zkv8qAU=|JfjWwYo5q9Tac%u=B%{k_slU`gyAvj1+2CP;-SQ(nEIx1_j6C8L;%FuO2cm&Fp4DU?e-w#jmO7~LqLLM+ zp<_N##X)A7Wm+L4I_~WA4hd?AkOERkwz(0UU&N!EmU=#zq?ccQ@+S-}4oc{l(NOt} z7+?9p3kGTk*~T2lXw^+1cVMw+ray+s(ULoH8t5LwiOInaK_Vn78iCxV%$*HL65d3T z)}v{y2zshss2%EBTu1r;ctwGumSjLdIcPlM6=KbV#YwPuTi(bnxKWE0 z^w3%#QnW@6tDH1zGm@nt$~y`Q;?`>4!?4*pfgSc_W81i7*D$P&w>_Y`&1BrwlFAU= z-5pI|-iFf_rrpc``Hho?#t_)*U%nkqIU;r|jws{y5y&~Gn1@w)=!0O#L>Okah>_-i zJJvasM`tZMmb6Y4p{f-_XoWk5nn@<1M>`y#-EQ+8RqVFv@y^0V9Rqvh7(QvS>ZXw{ zoTogB)4cKT5;eO?;K3|liauB?{Z87NZT*EH8LNGfP>%JZ%P;RpRrwCTkJ{T}PRvQ6 zafo7r?6t2XWD}rsx_1}*(TiG`%gCTkXNEEPr*|OX1t11^E6C)Hd9{ zD#ipe3=|9hdx$tX*r|F?+>;QmAv0Ep<%o+g1MgU5oB{z4iX!2IlNvR&D|#Y}s|r+a z&Sb)zIAUjXs8NNgNXC;)NGc^$qaCuis6XASM{synG0f8u5qzeJF~lEW@;D4Xrix^e ztON-qQK3PG#)y`JLl~N|l=A%GLXaHB?<%3NO0pn};@F~ikOD}V%*qtJYgrXtA&&?Z zu9OM<6CPEh%7I*vV8N85xT4^!p&;ox<3XcehR92AHJ%+u)=h##ekhz z&yqY-jtHC5S^_*O=o6@FO|GC*TmR@$KBxk$W$h>kTg63@J~(!ugdI;v_d0~n5%oG{ z-Rd!6CfUi-b8O6EQxoADttEW*u0dt$Gnu9t(Fk^|5L%b4D^& zu#!JA^||`6Zdn~uT*ZK+8m;WgPM_2D=C~;tgFA8a!r(0Cu+2IDQ%*@p z1p7=I*4g>abM2v=_2e{RgbcQ#eGX0s4d&mbP?1Zr(Vl-HWkvTiCXjlf`XEhcgyk`D z1iCaaHvJ29ol4Y!W*MmEY3i+^$A~tKb(T_*n+iYr)x7SfeYVKt0oQ7=K=MTeIxS6C z_j=hcon9=10Sa4VY0*7R^mk3eYywtUQ|dD?I=3XLVjYg!PrK!=vyJI(I~0ujF$fO{ z+6+^4IcwxLkL7aMVRY+z7h!g{gVKt-BDX_N#MY8gCB5%#C-EfmCYsHHt8R!NueRS# zxW13INPDDf%i^Ojlp=2N_TliIv8z3;ss-xHUD5TmuQ!fTOxWy}8NWNoUGBR3Uzh8GcM^5MyL%VA zBG-m6S_+;>h0l82wH++JKIq?#4?34C7v)6psq&65rPDbN`d&{V^rRoOKjvHd)Gzt+ bs&BpPUl04(%YOE>uf6SWkNe!KJ^=tbEHr(M diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount.html b/fs_selfservice/FS-SelfService/cgi/myaccount.html deleted file mode 100644 index d1f567187..000000000 --- a/fs_selfservice/FS-SelfService/cgi/myaccount.html +++ /dev/null @@ -1,99 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Hello <%= $name %>!

    -<%= $small_custview %> -
    -<%= if ( $balance > 0 ) { - $OUT .= qq! Make a payment

    !; -} %> -<%= - if ( @open_invoices ) { - $OUT .= ''. - ''; - my $link = qq!!; - my $a=qq!'; - $OUT .= - "$td${a}Invoice #". $invoice->{'invnum'}. "$td". - "$td$a". $invoice->{'date'}. "$td". - qq!'. - ''; - $col = $col eq $col1 ? $col2 : $col1; - } - $OUT .= '
    Open Invoices
    $a\$!. $invoice->{'owed'}. - '

    '; - } else { - $OUT .= 'You have no outstanding invoices.

    '; - } -%> - -<%= - if ( @support_services ) { - $OUT .= ''. - ''. - ''. - ''; - my $col1 = "ffffff"; - my $col2 = "dddddd"; - my $col = $col1; - - foreach my $support ( @support_services ) { - my $td = qq!$td$a". $support->{'pkgnum'}. "". - $td.$a. $support->{'pkg'}. "". - $td.$a. $support->{'time'}. "". - ''; - $col = $col eq $col1 ? $col2 : $col1; - } - $OUT .= '
    Support Time Remaining
    #PackageTime Remaining
    !; - my $a = qq!'; - $OUT .= - "

    '; - } else { - $OUT .= ''; - } -%> - -<%= - if ( @tickets ) { - $OUT .= ''. - ''. - ''. - ''; - my $col1 = "ffffff"; - my $col2 = "dddddd"; - my $col = $col1; - - foreach my $ticket ( @tickets ) { - my $td = qq!$td". $ticket->{'id'}. "". - $td. $ticket->{'subject'}. "". - $td. ($ticket->{'content'} || $ticket->{'priority'}). "". - $td. $ticket->{'queue'}. "". - $td. $ticket->{'status'}. "". - ''; - $col = $col eq $col1 ? $col2 : $col1; - } - $OUT .= '
    Open Tickets
    #SubjectPriorityQueueStatus
    !; - $OUT .= - "
    '; - } else { - $OUT .= ''; - } -%> - - -
    -powered by freeside - - - - diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html deleted file mode 100644 index ec5a8fa42..000000000 --- a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html +++ /dev/null @@ -1,94 +0,0 @@ -<%= $url = "$selfurl?session=$session_id;action="; ''; %> - - diff --git a/fs_selfservice/FS-SelfService/cgi/order_pkg.html b/fs_selfservice/FS-SelfService/cgi/order_pkg.html deleted file mode 100644 index 9cdd4cd6c..000000000 --- a/fs_selfservice/FS-SelfService/cgi/order_pkg.html +++ /dev/null @@ -1,75 +0,0 @@ - -Purchase additional package

    -<%= if ( $error ) { - $OUT .= qq!$error

    !; -} ''; %> - - - - -
    - - - -<%= - -my @menu = ( -{ title=>' ' }, -{ title=>'Overview', url=>'myaccount', size=>'+1', }, -{ title=>' ' }, - -{ title=>'Purchase', size=>'+1', }, - { title=>'Purchase additional package', - url=>'customer_order_pkg', 'indent'=>2 }, -); - -if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eventually per-pkg or something really fancy - - push @menu, ( - { title=>'Recharge my account with a credit card', - url=>'make_payment', indent=>2 }, - { title=>'Recharge my account with a check', - url=>'make_ach_payment', indent=>2 }, - { title=>'Recharge my account with a prepaid card', - url=>'recharge_prepay', indent=>2 }, - ); - -} - -push @menu, ( - -{ title=>' ' }, - -{ title=>'View my usage', url=>'view_usage', size=>'+1', }, -{ title=>'Setup my services', url=>'provision', size=>'+1', }, - -{ title=>' ' }, - -{ title=>'Change my information', size=>'+1', }, - { title=>'Change billing address', url=>'change_bill', indent=>2 }, - { title=>'Change service address', url=>'change_ship', indent=>2 }, - { title=>'Change payment information', url=>'change_pay', indent=>2 }, - { title=>'Change password(s)', url=>'change_password', indent=>2 }, - -{ title=>' ' }, - -{ title=>'Logout', url=>'logout', size=>'+1', }, - -); - -foreach my $item ( @menu ) { - - $OUT .= '{'url'} && $action eq $item->{'url'} ) { - $OUT .= ' BGCOLOR="#eeeeee" '. - ' STYLE="border-top: 1px solid black;'. - ' border-left: 1px solid black;'. - ' border-bottom: 1px solid black"'; - } else { - $OUT .= ' STYLE="border-right: 1px solid black"'; - } - $OUT.='>'; - - $OUT .= '' - if exists $item->{'size'}; - - $OUT .= ' ' x $item->{'indent'} - if exists $item->{'indent'}; - - $OUT .= '' - if exists $item->{'url'} && $action ne $item->{'url'}; - - $item->{'title'} =~ s/ / /g; - $OUT .= $item->{'title'}; - - $OUT .= '' - if exists $item->{'size'}; - - $OUT .= '' - if exists $item->{'url'} && $action ne $item->{'url'}; - - $OUT .= ''; - -} - -%> - - - -




    - -
    - - - - - - - - - - - - - - - -<%= - if ( $security_phrase ) { - $OUT .= < - - - -ENDOUT - } else { - $OUT .= ''; - } -%> -<%= - if ( @svc_acct_pop ) { - $OUT .= ''; - } else { - $OUT .= popselector(popnum=>$popnum, pops=>\@svc_acct_pop); - } -%> -
    Username
    Password
    Re-enter Password
    Security Phrase -
    Access number'. - popselector( 'popnum' => $popnum, - 'pops' => \@svc_acct_pop, - 'init_popstate' => $init_popstate, - 'popac' => $popac, - 'acstate' => $acstate, - ). - '
    - - - diff --git a/fs_selfservice/FS-SelfService/cgi/passwd.cgi b/fs_selfservice/FS-SelfService/cgi/passwd.cgi deleted file mode 100755 index 87e5e6843..000000000 --- a/fs_selfservice/FS-SelfService/cgi/passwd.cgi +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/perl -T -#!/usr/bin/perl -Tw - -use strict; -use Getopt::Std; -use FS::SelfService qw(passwd); -use CGI; -use CGI::Carp qw(fatalsToBrowser); - -my $freeside_uid = scalar(getpwnam('freeside')); - -$ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin'; -$ENV{'SHELL'} = '/bin/sh'; -$ENV{'IFS'} = " \t\n"; -$ENV{'CDPATH'} = ''; -$ENV{'ENV'} = ''; -$ENV{'BASH_ENV'} = ''; - -die "passwd.cgi isn't running as freeside user\n" if $> != $freeside_uid; - -my $cgi = new CGI; - -$cgi->param('username') =~ /^([^\n]{0,255}$)/ or die "Illegal username"; -my $me = $1; - -$cgi->param('domain') =~ /^([^\n]{0,255}$)/ or die "Illegal domain"; -my $domain = $1; - -$cgi->param('old_password') =~ /^([^\n]{0,255}$)/ or die "Illegal old_password"; -my $old_password = $1; - -$cgi->param('new_password') =~ /^([^\n]{0,255}$)/ or die "Illegal new_password"; -my $new_password = $1; - -die "New passwords don't match" - unless $new_password eq $cgi->param('new_password2'); - -my $rv = passwd( - 'username' => $me, - 'domain' => $domain, - 'old_password' => $old_password, - 'new_password' => $new_password, -); - -my $error = $rv->{error}; - -if ($error) { - die $error; -} else { - print $cgi->header(), < - - Password changed - - -

    Password changed

    -
    Your password has been changed. - - -END -} diff --git a/fs_selfservice/FS-SelfService/cgi/passwd.html b/fs_selfservice/FS-SelfService/cgi/passwd.html deleted file mode 100644 index 459c96aa8..000000000 --- a/fs_selfservice/FS-SelfService/cgi/passwd.html +++ /dev/null @@ -1,28 +0,0 @@ - - - Change password - - -

    Change password

    -
    - - - - - - - - - - - - - - - - -
    Username
    Domain
    Current password
    New password
    Re-enter new password
    -
    - - - diff --git a/fs_selfservice/FS-SelfService/cgi/payment_results.html b/fs_selfservice/FS-SelfService/cgi/payment_results.html deleted file mode 100644 index 9fe400faf..000000000 --- a/fs_selfservice/FS-SelfService/cgi/payment_results.html +++ /dev/null @@ -1,16 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -Payment results

    -<%= if ( $error ) { - $OUT .= qq!Error processing your payment: $error!; -} else { - $OUT .= 'Your payment was processed successfully. Thank you.'; -} %> - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_bill.html b/fs_selfservice/FS-SelfService/cgi/process_change_bill.html deleted file mode 100644 index 66a71e6e8..000000000 --- a/fs_selfservice/FS-SelfService/cgi/process_change_bill.html +++ /dev/null @@ -1,13 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Information updated successfully. - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_password.html b/fs_selfservice/FS-SelfService/cgi/process_change_password.html deleted file mode 100644 index 4fdee79f3..000000000 --- a/fs_selfservice/FS-SelfService/cgi/process_change_password.html +++ /dev/null @@ -1,13 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Password changed for <%= $value %> <%= $label %>. - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_pay.html b/fs_selfservice/FS-SelfService/cgi/process_change_pay.html deleted file mode 100644 index 66a71e6e8..000000000 --- a/fs_selfservice/FS-SelfService/cgi/process_change_pay.html +++ /dev/null @@ -1,13 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Information updated successfully. - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html b/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html deleted file mode 100644 index 9347434ba..000000000 --- a/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html +++ /dev/null @@ -1,13 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Package change successful. - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_ship.html b/fs_selfservice/FS-SelfService/cgi/process_change_ship.html deleted file mode 100644 index 66a71e6e8..000000000 --- a/fs_selfservice/FS-SelfService/cgi/process_change_ship.html +++ /dev/null @@ -1,13 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Information updated successfully. - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html b/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html deleted file mode 100755 index 79be5eba5..000000000 --- a/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html +++ /dev/null @@ -1,13 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Package order successful. - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html b/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html deleted file mode 100644 index 851bbed44..000000000 --- a/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html +++ /dev/null @@ -1,13 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -<%= $svc %> recharged successfully. - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html b/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html deleted file mode 100644 index 3b812919a..000000000 --- a/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html +++ /dev/null @@ -1,13 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -<%= $svc %> setup successfully. - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/process_svc_external.html b/fs_selfservice/FS-SelfService/cgi/process_svc_external.html deleted file mode 100644 index 19fec737f..000000000 --- a/fs_selfservice/FS-SelfService/cgi/process_svc_external.html +++ /dev/null @@ -1,15 +0,0 @@ -<%= $error ? 'MyAccount' : sprintf("Your serial number is %010d-$title", $id) %> -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -<%= $svc %> setup successfully. - -

    Your serial number is <%= sprintf("%010d-$title", $id) %> - - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/promocode.html b/fs_selfservice/FS-SelfService/cgi/promocode.html deleted file mode 100644 index f8ee7f6eb..000000000 --- a/fs_selfservice/FS-SelfService/cgi/promocode.html +++ /dev/null @@ -1,14 +0,0 @@ -ISP Signup -ISP Signup - promotional code

    - - -Enter promotional code - - -
    - - diff --git a/fs_selfservice/FS-SelfService/cgi/provision.html b/fs_selfservice/FS-SelfService/cgi/provision.html deleted file mode 100644 index d31e6070b..000000000 --- a/fs_selfservice/FS-SelfService/cgi/provision.html +++ /dev/null @@ -1,10 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -<%= include('provision_list') %> - -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/provision_list.html b/fs_selfservice/FS-SelfService/cgi/provision_list.html deleted file mode 100644 index 88d1c848b..000000000 --- a/fs_selfservice/FS-SelfService/cgi/provision_list.html +++ /dev/null @@ -1,92 +0,0 @@ -Setup services

    - - - - - -<%= foreach my $pkg ( - grep { scalar(@{$_->{part_svc}}) - || scalar(@{$_->{cust_svc}}) - } @cust_pkg - ) { - - $OUT .= #'
    '. - ''; - - my $col1 = "ffffff"; - my $col2 = "dddddd"; - my $col = $col1; - - foreach my $cust_svc ( @{ $pkg->{cust_svc} } ) { - my $td = qq!'. - "$td>". $cust_svc->{label}[1]. ''; - $OUT .= '
    password: '. encode_entities($cust_svc->{_password}). '' - if exists($cust_svc->{_password}); - $OUT .= ''. - "$td>"; - - #if ( $cust_svc->{label}[2] eq 'svc_acct' ) { - # $OUT .= qq!(!. - # 'change pw) '; - #} - - unless ( $cust_svc->{'svcnum'} == $svcnum ) { - $OUT .= qq!(!. - 'delete)'; - - } - $OUT .= ''; - $col = $col eq $col1 ? $col2 : $col1; - } - - $OUT .= '' - if scalar(@{$pkg->{part_svc}}) && scalar(@{$pkg->{cust_svc}}); - - $col = $col1; - - foreach my $part_svc ( @{ $pkg->{part_svc} } ) { - - my $td = qq!$td COLSPAN=3 ALIGN=center>". - qq!!. 'Setup '. $part_svc->{'svc'}. ' '. - '('. $part_svc->{'num_avail'}. ' available)'. - '' - #self-service only supports these services so far - if grep { $part_svc->{'svcdb'} eq $_ } qw( svc_acct svc_external ); - - $col = $col eq $col1 ? $col2 : $col1; - } - - #$OUT .= '
    '. - $pkg->{'pkg'}. '' . - qq!(! . - 'change)
    ". $cust_svc->{label}[0]. ':
    {'svcdb'} eq 'svc_external' - #&& $conf->exists('svc_external-skip_manual') - ) { - $link = "${url}process_svc_external;". - "pkgnum=$pkg->{'pkgnum'};". - "svcpart=$part_svc->{'svcpart'}"; - } else { - $link = "${url}provision_svc;". - "pkgnum=$pkg->{'pkgnum'};". - "svcpart=$part_svc->{'svcpart'}"; - } - - $OUT .= "

    '; - $OUT .= ' '; - -} %> - - diff --git a/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html b/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html deleted file mode 100644 index 50540742a..000000000 --- a/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html +++ /dev/null @@ -1,11 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -<%= include('svc_acct') %> - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html b/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html deleted file mode 100644 index f8584597a..000000000 --- a/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html +++ /dev/null @@ -1,36 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -Recharge with prepaid card

    -
    - - - - - - - - -
    Prepaid card number - -
    -
    - - -
    - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/recharge_results.html b/fs_selfservice/FS-SelfService/cgi/recharge_results.html deleted file mode 100644 index b1eb7cb7a..000000000 --- a/fs_selfservice/FS-SelfService/cgi/recharge_results.html +++ /dev/null @@ -1,24 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - -Recharge results

    -<%= if ( $error ) { - $OUT .= qq!Error processing your prepaid card: $error!; -} else { - $OUT .= 'Prepaid card recharge successful!

    '; - - $OUT .= '$'. sprintf('%.2f', $amount). ' added to your account.

    ' - if $amount; - - $OUT .= $duration. ' added to your account.

    ' - if $seconds; - - $OUT .= 'Thank you.'; -} %> - -
    -powered by freeside - - diff --git a/fs_selfservice/FS-SelfService/cgi/regcode.html b/fs_selfservice/FS-SelfService/cgi/regcode.html deleted file mode 100644 index e639b9b53..000000000 --- a/fs_selfservice/FS-SelfService/cgi/regcode.html +++ /dev/null @@ -1,14 +0,0 @@ -ISP Signup -ISP Signup - registration code

    - -
    -Enter registration code - - -
    - - diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi deleted file mode 100644 index 36557b662..000000000 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ /dev/null @@ -1,647 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use vars qw($DEBUG $cgi $session_id $form_max $template_dir); -use subs qw(do_template); -use CGI; -use CGI::Carp qw(fatalsToBrowser); -use Text::Template; -use HTML::Entities; -use Date::Format; -use Number::Format 1.50; -use FS::SelfService qw( login customer_info edit_info invoice - payment_info process_payment - process_prepay - list_pkgs order_pkg signup_info order_recharge - part_svc_info provision_acct provision_external - unprovision_svc change_pkg domainselector - list_svcs list_svc_usage list_support_usage - myaccount_passwd - ); - -$template_dir = '.'; - -$DEBUG = 1; - -$form_max = 255; - -$cgi = new CGI; - -unless ( defined $cgi->param('session') ) { - do_template('login',{}); - exit; -} - -if ( $cgi->param('session') eq 'login' ) { - - $cgi->param('username') =~ /^\s*([a-z0-9_\-\.\&]{0,$form_max})\s*$/i - or die "illegal username"; - my $username = $1; - - $cgi->param('domain') =~ /^\s*([\w\-\.]{0,$form_max})\s*$/ - or die "illegal domain"; - my $domain = $1; - - $cgi->param('password') =~ /^(.{0,$form_max})$/ - or die "illegal password"; - my $password = $1; - - my $rv = login( - 'username' => $username, - 'domain' => $domain, - 'password' => $password, - ); - if ( $rv->{error} ) { - do_template('login', { - 'error' => $rv->{error}, - 'username' => $username, - 'domain' => $domain, - } ); - exit; - } else { - $cgi->param('session' => $rv->{session_id} ); - $cgi->param('action' => 'myaccount' ); - } -} - -$session_id = $cgi->param('session'); - -#order|pw_list XXX ??? -$cgi->param('action') =~ - /^(myaccount|view_invoice|make_payment|make_ach_payment|payment_results|ach_payment_results|recharge_prepay|recharge_results|logout|change_bill|change_ship|change_pay|process_change_bill|process_change_ship|process_change_pay|customer_order_pkg|process_order_pkg|customer_change_pkg|process_change_pkg|process_order_recharge|provision|provision_svc|process_svc_acct|process_svc_external|delete_svc|view_usage|view_usage_details|view_support_details|change_password|process_change_password)$/ - or die "unknown action ". $cgi->param('action'); -my $action = $1; - -warn "calling $action sub\n" - if $DEBUG; -$FS::SelfService::DEBUG = $DEBUG; -my $result = eval "&$action();"; -die $@ if $@; - -if ( $result->{error} eq "Can't resume session" - || $result->{error} eq "Expired session" ) { #ick - - do_template('login',{}); - exit; -} - -#warn $result->{'open_invoices'}; -#warn scalar(@{$result->{'open_invoices'}}); - -warn "processing template $action\n" - if $DEBUG; -do_template($action, { - 'session_id' => $session_id, - 'action' => $action, #so the menu knows what tab we're on... - %{$result} -}); - -#-- - -sub myaccount { customer_info( 'session_id' => $session_id ); } - -sub change_bill { my $payment_info = - payment_info( 'session_id' => $session_id ); - return $payment_info if ( $payment_info->{'error'} ); - my $customer_info = - customer_info( 'session_id' => $session_id ); - return { - %$payment_info, - %$customer_info, - }; - } -sub change_ship { change_bill(@_); } -sub change_pay { change_bill(@_); } - -sub _process_change_info { - my ($erroraction, @fields) = @_; - - my $results = ''; - - $results ||= edit_info ( - 'session_id' => $session_id, - map { ($_ => $cgi->param($_)) } grep { defined($cgi->param($_)) } @fields, - ); - - - if ( $results->{'error'} ) { - no strict 'refs'; - $action = $erroraction; - return { - $cgi->Vars, - %{&$action()}, - 'error' => ''. $results->{'error'}. '', - }; - } else { - return $results; - } -} - -sub process_change_bill { - _process_change_info( 'change_bill', - qw( first last company address1 address2 city state - county state zip country daytime night fax ) - ); -} - -sub process_change_ship { - my @list = map { "ship_$_" } - qw( first last company address1 address2 city state - county zip country daytime night fax - ); - if ($cgi->param('same') eq 'Y') { - foreach (@list) { $cgi->param($_, '') } - } - - _process_change_info( 'change_ship', @list ); -} - -sub process_change_pay { - _process_change_info( 'change_pay', - qw( payby payinfo payinfo1 payinfo2 month year payname - address1 address2 city county state zip country auto paytype - paystate ss stateid stateid_state ) - ); -} - -sub view_invoice { - - $cgi->param('invnum') =~ /^(\d+)$/ or die "illegal invnum"; - my $invnum = $1; - - invoice( 'session_id' => $session_id, - 'invnum' => $invnum, - ); - -} - -sub customer_order_pkg { - my $init_data = signup_info( 'customer_session_id' => $session_id ); - return $init_data if ( $init_data->{'error'} ); - - my $customer_info = customer_info( 'session_id' => $session_id ); - return $customer_info if ( $customer_info->{'error'} ); - - return { - ( map { $_ => $init_data->{$_} } - qw( part_pkg security_phrase svc_acct_pop ), - ), - %$customer_info, - }; -} - -sub customer_change_pkg { - my $init_data = signup_info( 'customer_session_id' => $session_id ); - return $init_data if ( $init_data->{'error'} ); - - my $customer_info = customer_info( 'session_id' => $session_id ); - return $customer_info if ( $customer_info->{'error'} ); - - return { - ( map { $_ => $init_data->{$_} } - qw( part_pkg security_phrase svc_acct_pop ), - ), - ( map { $_ => $cgi->param($_) } - qw( pkgnum pkg ) - ), - %$customer_info, - }; -} - -sub process_order_pkg { - - my $results = ''; - - unless ( length($cgi->param('_password')) ) { - my $init_data = signup_info( 'customer_session_id' => $session_id ); - $results = { 'error' => $init_data->{msgcat}{empty_password} }; - $results = { 'error' => $init_data->{error} } if($init_data->{error}); - } - if ( $cgi->param('_password') ne $cgi->param('_password2') ) { - my $init_data = signup_info( 'customer_session_id' => $session_id ); - $results = { 'error' => $init_data->{msgcat}{passwords_dont_match} }; - $results = { 'error' => $init_data->{error} } if($init_data->{error}); - $cgi->param('_password', ''); - $cgi->param('_password2', ''); - } - - $results ||= order_pkg ( - 'session_id' => $session_id, - map { $_ => $cgi->param($_) } - qw( custnum pkgpart username _password _password2 sec_phrase popnum ) - ); - - - if ( $results->{'error'} ) { - $action = 'customer_order_pkg'; - return { - $cgi->Vars, - %{customer_order_pkg()}, - 'error' => ''. $results->{'error'}. '', - }; - } else { - return $results; - } - -} - -sub process_change_pkg { - - my $results = ''; - - $results ||= change_pkg ( - 'session_id' => $session_id, - map { $_ => $cgi->param($_) } - qw( pkgpart pkgnum ) - ); - - - if ( $results->{'error'} ) { - $action = 'customer_change_pkg'; - return { - $cgi->Vars, - %{customer_change_pkg()}, - 'error' => ''. $results->{'error'}. '', - }; - } else { - return $results; - } - -} - -sub process_order_recharge { - - my $results = ''; - - $results ||= order_recharge ( - 'session_id' => $session_id, - map { $_ => $cgi->param($_) } - qw( svcnum ) - ); - - - if ( $results->{'error'} ) { - $action = 'view_usage'; - if ($results->{'error'} eq '_decline') { - $results->{'error'} = "There has been an error processing your account. Please contact customer support." - } - return { - $cgi->Vars, - %{view_usage()}, - 'error' => ''. $results->{'error'}. '', - }; - } else { - return $results; - } - -} - -sub make_payment { - payment_info( 'session_id' => $session_id ); -} - -sub payment_results { - - use Business::CreditCard; - - #we should only do basic checking here for DoS attacks and things - #that couldn't be constructed by the web form... let process_payment() do - #the rest, it gives better error messages - - $cgi->param('amount') =~ /^\s*(\d+(\.\d{2})?)\s*$/ - or die "Illegal amount: ". $cgi->param('amount'); #!!! - my $amount = $1; - - my $payinfo = $cgi->param('payinfo'); - $payinfo =~ s/\D//g; - $payinfo =~ /^(\d{13,16})$/ - #or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; - or die "illegal card"; #!!! - $payinfo = $1; - validate($payinfo) - #or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; - or die "invalid card"; #!!! - - if ( $cgi->param('card_type') ) { - cardtype($payinfo) eq $cgi->param('card_type') - #or $error ||= $init_data->{msgcat}{not_a}. $cgi->param('CARD_type'); - or die "not a ". $cgi->param('card_type'); - } - - $cgi->param('paycvv') =~ /^\s*(.{0,4})\s*$/ or die "illegal CVV2"; - my $paycvv = $1; - - $cgi->param('month') =~ /^(\d{2})$/ or die "illegal month"; - my $month = $1; - $cgi->param('year') =~ /^(\d{4})$/ or die "illegal year"; - my $year = $1; - - $cgi->param('payname') =~ /^(.{0,80})$/ or die "illegal payname"; - my $payname = $1; - - $cgi->param('address1') =~ /^(.{0,80})$/ or die "illegal address1"; - my $address1 = $1; - - $cgi->param('address2') =~ /^(.{0,80})$/ or die "illegal address2"; - my $address2 = $1; - - $cgi->param('city') =~ /^(.{0,80})$/ or die "illegal city"; - my $city = $1; - - $cgi->param('state') =~ /^(.{2})$/ or die "illegal state"; - my $state = $1; - - $cgi->param('zip') =~ /^(.{0,10})$/ or die "illegal zip"; - my $zip = $1; - - my $save = 0; - $save = 1 if $cgi->param('save'); - - my $auto = 0; - $auto = 1 if $cgi->param('auto'); - - $cgi->param('paybatch') =~ /^([\w\-\.]+)$/ or die "illegal paybatch"; - my $paybatch = $1; - - process_payment( - 'session_id' => $session_id, - 'payby' => 'CARD', - 'amount' => $amount, - 'payinfo' => $payinfo, - 'paycvv' => $paycvv, - 'month' => $month, - 'year' => $year, - 'payname' => $payname, - 'address1' => $address1, - 'address2' => $address2, - 'city' => $city, - 'state' => $state, - 'zip' => $zip, - 'save' => $save, - 'auto' => $auto, - 'paybatch' => $paybatch, - ); - -} - -sub make_ach_payment { - payment_info( 'session_id' => $session_id ); -} - -sub ach_payment_results { - - #we should only do basic checking here for DoS attacks and things - #that couldn't be constructed by the web form... let process_payment() do - #the rest, it gives better error messages - - $cgi->param('amount') =~ /^\s*(\d+(\.\d{2})?)\s*$/ - or die "illegal amount"; #!!! - my $amount = $1; - - my $payinfo1 = $cgi->param('payinfo1'); - $payinfo1=~ /^(\d+)$/ - or die "illegal account"; #!!! - $payinfo1= $1; - - my $payinfo2 = $cgi->param('payinfo2'); - $payinfo2=~ /^(\d+)$/ - or die "illegal ABA/routing code"; #!!! - $payinfo2= $1; - - $cgi->param('payname') =~ /^(.{0,80})$/ or die "illegal payname"; - my $payname = $1; - - $cgi->param('paystate') =~ /^(.{0,2})$/ or die "illegal paystate"; - my $paystate = $1; - - $cgi->param('paytype') =~ /^(.{0,80})$/ or die "illegal paytype"; - my $paytype = $1; - - $cgi->param('ss') =~ /^(.{0,80})$/ or die "illegal ss"; - my $ss = $1; - - $cgi->param('stateid') =~ /^(.{0,80})$/ or die "illegal stateid"; - my $stateid = $1; - - $cgi->param('stateid_state') =~ /^(.{0,2})$/ or die "illegal stateid_state"; - my $stateid_state = $1; - - my $save = 0; - $save = 1 if $cgi->param('save'); - - my $auto = 0; - $auto = 1 if $cgi->param('auto'); - - $cgi->param('paybatch') =~ /^([\w\-\.]+)$/ or die "illegal paybatch"; - my $paybatch = $1; - - process_payment( - 'session_id' => $session_id, - 'payby' => 'CHEK', - 'amount' => $amount, - 'payinfo1' => $payinfo1, - 'payinfo2' => $payinfo2, - 'month' => '12', - 'year' => '2037', - 'payname' => $payname, - 'paytype' => $paytype, - 'paystate' => $paystate, - 'ss' => $ss, - 'stateid' => $stateid, - 'stateid_state' => $stateid_state, - 'save' => $save, - 'auto' => $auto, - 'paybatch' => $paybatch, - ); - -} - -sub recharge_prepay { - customer_info( 'session_id' => $session_id ); -} - -sub recharge_results { - - my $prepaid_cardnum = $cgi->param('prepaid_cardnum'); - $prepaid_cardnum =~ s/\W//g; - $prepaid_cardnum =~ /^(\w*)$/ or die "illegal prepaid card number"; - $prepaid_cardnum = $1; - - process_prepay ( 'session_id' => $session_id, - 'prepaid_cardnum' => $prepaid_cardnum, - ); -} - -sub logout { - FS::SelfService::logout( 'session_id' => $session_id ); -} - -sub provision { - my $result = list_pkgs( 'session_id' => $session_id ); - die $result->{'error'} if exists $result->{'error'} && $result->{'error'}; - $result; -} - -sub provision_svc { - - my $result = part_svc_info( - 'session_id' => $session_id, - map { $_ => $cgi->param($_) } qw( pkgnum svcpart ), - ); - die $result->{'error'} if exists $result->{'error'} && $result->{'error'}; - - $result->{'svcdb'} =~ /^svc_(.*)$/ - #or return { 'error' => 'Unknown svcdb '. $result->{'svcdb'} }; - or die 'Unknown svcdb '. $result->{'svcdb'}; - $action .= "_$1"; - - $result; -} - -sub process_svc_acct { - - my $result = provision_acct ( - 'session_id' => $session_id, - map { $_ => $cgi->param($_) } qw( - pkgnum svcpart username domsvc _password _password2 sec_phrase popnum ) - ); - - if ( exists $result->{'error'} && $result->{'error'} ) { - #warn "$result $result->{'error'}"; - $action = 'provision_svc_acct'; - return { - $cgi->Vars, - %{ part_svc_info( 'session_id' => $session_id, - map { $_ => $cgi->param($_) } qw( pkgnum svcpart ) - ) - }, - 'error' => $result->{'error'}, - }; - } else { - #warn "$result $result->{'error'}"; - return $result; - } - -} - -sub process_svc_external { - provision_external ( - 'session_id' => $session_id, - map { $_ => $cgi->param($_) } qw( pkgnum svcpart ) - ); -} - -sub delete_svc { - unprovision_svc( - 'session_id' => $session_id, - 'svcnum' => $cgi->param('svcnum'), - ); -} - -sub view_usage { - list_svcs( - 'session_id' => $session_id, - 'svcdb' => 'svc_acct', - 'ncancelled' => 1, - ); -} - -sub view_usage_details { - list_svc_usage( - 'session_id' => $session_id, - 'svcnum' => $cgi->param('svcnum'), - 'beginning' => $cgi->param('beginning') || '', - 'ending' => $cgi->param('ending') || '', - ); -} - -sub view_support_details { - list_support_usage( - 'session_id' => $session_id, - 'svcnum' => $cgi->param('svcnum'), - 'beginning' => $cgi->param('beginning') || '', - 'ending' => $cgi->param('ending') || '', - ); -} - -sub change_password { - list_svcs( - 'session_id' => $session_id, - 'svcdb' => 'svc_acct', - ); -}; - -sub process_change_password { - - my $result = myaccount_passwd( - 'session_id' => $session_id, - map { $_ => $cgi->param($_) } qw( svcnum new_password new_password2 ) - ); - - if ( exists $result->{'error'} && $result->{'error'} ) { - - $action = 'change_password'; - return { - $cgi->Vars, - %{ list_svcs( 'session_id' => $session_id, - 'svcdb' => 'svc_acct', - ) - }, - #'svcnum' => $cgi->param('svcnum'), - 'error' => $result->{'error'} - }; - - } else { - - return $result; - - } - -} - -#-- - -sub do_template { - my $name = shift; - my $fill_in = shift; - - $cgi->delete_all(); - $fill_in->{'selfurl'} = $cgi->self_url; - $fill_in->{'cgi'} = \$cgi; - - my $template = new Text::Template( TYPE => 'FILE', - SOURCE => "$template_dir/$name.html", - DELIMITERS => [ '<%=', '%>' ], - UNTAINT => 1, ) - or die $Text::Template::ERROR; - - print $cgi->header( '-expires' => 'now' ), - $template->fill_in( PACKAGE => 'FS::SelfService::_selfservicecgi', - HASH => $fill_in - ); -} - -#*FS::SelfService::_selfservicecgi::include = \&Text::Template::fill_in_file; - -package FS::SelfService::_selfservicecgi; - -#use FS::SelfService qw(regionselector expselect popselector); -use HTML::Entities; -use FS::SelfService qw(regionselector popselector domainselector); - -#false laziness w/agent.cgi -sub include { - my $name = shift; - my $template = new Text::Template( TYPE => 'FILE', - SOURCE => "$main::template_dir/$name.html", - DELIMITERS => [ '<%=', '%>' ], - UNTAINT => 1, - ) - or die $Text::Template::ERROR; - - $template->fill_in( PACKAGE => 'FS::SelfService::_selfservicecgi', - #HASH => $fill_in - ); - -} - diff --git a/fs_selfservice/FS-SelfService/cgi/signup-agentselect.html b/fs_selfservice/FS-SelfService/cgi/signup-agentselect.html deleted file mode 100755 index 7851c5601..000000000 --- a/fs_selfservice/FS-SelfService/cgi/signup-agentselect.html +++ /dev/null @@ -1,195 +0,0 @@ -ISP Signup form -ISP Signup form

    -<%= $error %> -
    - - - -Agent

    -Contact Information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    *Contact name
    (last, first)
    , -
    Company
    *Address
     
    *City*State/Country - <%= - ($county_html, $state_html, $country_html) = - regionselector( $county, $state, $country ); - - "$county_html $state_html"; - %> - *Zip
    *Country<%= $country_html %>
    Day Phone
    Night Phone
    Fax
    * required fields
    -
    Billing information - - -<%= scalar(@payby) > 1 ? '' : '' %> -
    - - <%= - $OUT .= ' - - Postal mail invoice -
    Email invoice -
    Billing type
    - - - - <%= - - my $cardselect = ''; - - my %payby = ( - 'CARD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("CARD"). qq!
    *Name on card
    !, - 'DCRD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("DCRD"). qq!
    *Name on card
    !, - 'CHEK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'DCHK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'LECB' => qq!Phone bill billing
    ${r}Phone number !, - 'BILL' => qq!Billing
    P.O.
    *Exp !. expselect("BILL", "12-2037"). qq!
    *Attention
    !, - 'COMP' => qq!Complimentary
    *Approved by
    *Exp !. expselect("COMP"), - 'PREPAY' => qq!Prepaid card
    *!, - ); - - my( $account, $aba ) = split('@', $payinfo); - my %paybychecked = ( - 'CARD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("CARD", $paydate). qq!
    *Name on card
    !, - 'DCRD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("DCRD", $paydate). qq!
    *Name on card
    !, - 'CHEK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'DCHK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'LECB' => qq!Phone bill billing
    ${r}Phone number !, - 'BILL' => qq!Billing
    P.O.
    *Exp !. expselect("BILL", $paydate). qq!
    *Attention
    !, - 'COMP' => qq!Complimentary
    *Approved by
    *Exp !. expselect("COMP", $paydate), - 'PREPAY' => qq!Prepaid card
    *!, - ); - - for (@payby) { - if ( scalar(@payby) == 1) { - $OUT .= '"; - } else { - $OUT .= qq!!; - } else { - $OUT .= qq!> $payby{$_}!; - } - - } - } - %> - -
    '. - qq!!. - "$paybychecked{$_} $paybychecked{$_}
    * required fields for each billing type -

    First package - - - - - - - - - - - - - - - - -<%= - if ( $init_data->{'security_phrase'} ) { - $OUT .= < - - - -ENDOUT - } else { - $OUT .= ''; - } -%> -<%= - if ( scalar(@$pops) ) { - $OUT .= ''; - } else { - $OUT .= popselector($popnum); - } -%> -
    Username
    Password
    Re-enter Password
    Security Phrase -
    Access number'. - popselector($popnum). '
    -

    -
    diff --git a/fs_selfservice/FS-SelfService/cgi/signup-alternate.html b/fs_selfservice/FS-SelfService/cgi/signup-alternate.html deleted file mode 100755 index 490cefa5e..000000000 --- a/fs_selfservice/FS-SelfService/cgi/signup-alternate.html +++ /dev/null @@ -1,218 +0,0 @@ -ISP Signup form -ISP Signup form

    -<%= $error %> -
    - - - - -Contact Information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    *Contact name
    (last, first)
    , -
    Company
    *Address
     
    *City*State/Country*Zip
    Day Phone
    Night Phone
    Fax
    * required fields
    - -

    - - - - - - - - - - - - - - -<%= if ( $init_data->{'security_phrase'} ) { - < - - - -ENDOUT - } else { - ''; - } -%> - -<%= if ( scalar(@$pops) ) { - ''; - } else { - popselector($popnum); - } -%> - -
    *Username
    *Password
    *Re-enter Password
    Security Phrase -
    Access number'. - popselector($popnum). '
    * required fields - -

    First package - - <%= use Tie::IxHash; - my %pkgpart2payby = map { $_->{pkgpart} => $_->{payby}[0] } @{$packages}; - tie my %options, 'Tie::IxHash', - '' => '(none)', - map { $_->{pkgpart} => $_->{pkg} } - sort { $a->{recur} <=> $b->{recur} } - @{$packages} - ; - - use HTML::Widgets::SelectLayers 0.02; - my @form_text = qw( magic ref ss agentnum - last first company address1 address2 - city zip daytime night fax - username _password _password2 sec_phrase ); - my @form_select = qw( state ); #county country - if ( scalar(@$pops) == 0 or scalar(@$pops) == 1 ) { - push @form_text, 'popnum', - } else { - push @form_select, 'popnum', - } - my $widget = new HTML::Widgets::SelectLayers( - options => \%options, - selected_layer => $pkgpart, - form_name => 'dummy', - form_action => $self_url, - form_text => \@form_text, - form_select => \@form_select, - layer_callback => sub { - my $layer = shift; - my $html = qq( ); - - if ( $pkgpart2payby{$layer} eq 'BILL' ) { - $html .= < - - - - - -

    -ENDOUT - } elsif ( $pkgpart2payby{$layer} eq 'CARD' ) { - my $postal_checked = ''; - my @invoicing_list = split(', ', $invoicing_list ); - $postal_checked = 'CHECKED' - if ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list; - - $invoicing_list= join(', ', grep { $_ ne 'POST' } @invoicing_list ); - - my $expselect = expselect("CARD", $paydate); - - my $cardselect = ''; - - $html .= < -

    Billing information - - - - - - - - - - - - - - - - - - - - - - -
    Email statement to
    *Credit card type$cardselect
    *Card number
    **Exp$expselect
    *Name on card
    -* required fields -

    -ENDOUT - } else { - $html = <Please select a package.
    -ENDOUT - - } - - $html; - - }, - ); - - $widget->html; - - - %> - diff --git a/fs_selfservice/FS-SelfService/cgi/signup-billaddress.html b/fs_selfservice/FS-SelfService/cgi/signup-billaddress.html deleted file mode 100755 index 3cf9d2505..000000000 --- a/fs_selfservice/FS-SelfService/cgi/signup-billaddress.html +++ /dev/null @@ -1,307 +0,0 @@ -ISP Signup form - - -ISP Signup form

    -<%= $error %> - - - - -Where did you hear about our service?

    -Billing Address (where credit card statement is sent) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    *Exact name on card
    (last, first)
    , -
    Company
    *Address
     
    *City*State/Country - <%= - ($county_html, $state_html, $country_html) = - regionselector( $county, $state, $country, '', 'changed(this)' ); - - "$county_html $state_html"; - %> - *Zip
    *Country<%= $country_html %>
    Day Phone
    Night Phone
    Fax
    - - - -

    -Service Address -(>same as billing address)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    *Contact name
    (last, first)
    , -
    Company
    *Address
     
    *City*State/Country - <%= - ($ship_county_html, $ship_state_html, $ship_country_html) = - regionselector( $ship_county, - $ship_state, - $ship_country, - 'ship_', - 'changed(this)', - ); - - "$ship_county_html $ship_state_html"; - %> - *Zip
    *Country<%= $ship_country_html %>
    Day Phone
    Night Phone
    Fax
    - -* required fields
    - -
    Billing information - - -<%= scalar(@payby) > 1 ? '' : '' %> -
    - - <%= - $OUT .= ' - - Postal mail invoice -
    Email invoice -
    Billing type
    - - - - <%= - - my $cardselect = ''; - - my %payby = ( - 'CARD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("CARD"), #. qq!
    *Name on card
    !, - 'DCRD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("DCRD"), #. qq!
    *Name on card
    !, - 'CHEK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'DCHK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'LECB' => qq!Phone bill billing
    ${r}Phone number !, - 'BILL' => qq!Billing
    P.O.
    *Exp !. expselect("BILL", "12-2037"). qq!
    *Attention
    !, - 'COMP' => qq!Complimentary
    *Approved by
    *Exp !. expselect("COMP"), - 'PREPAY' => qq!Prepaid card
    *!, - ); - - if ( $init_data->{'cvv_enabled'} ) { - foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5 - $payby{$payby} .= qq!
    CVV2 (help!; - } - } - - my( $account, $aba ) = split('@', $payinfo); - my %paybychecked = ( - 'CARD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("CARD", $paydate), #. qq!
    *Name on card
    !, - 'DCRD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("DCRD", $paydate), #. qq!
    *Name on card
    !, - 'CHEK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'DCHK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'LECB' => qq!Phone bill billing
    ${r}Phone number !, - 'BILL' => qq!Billing
    P.O.
    *Exp !. expselect("BILL", $paydate). qq!
    *Attention
    !, - 'COMP' => qq!Complimentary
    *Approved by
    *Exp !. expselect("COMP", $paydate), - 'PREPAY' => qq!Prepaid card
    *!, - ); - - if ( $init_data->{'cvv_enabled'} ) { - foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5 - $paybychecked{$payby} .= qq!
    CVV2 (help!; - } - } - - for (@payby) { - if ( scalar(@payby) == 1) { - $OUT .= '"; - } else { - $OUT .= qq!!; - } else { - $OUT .= qq!> $payby{$_}!; - } - - } - } - %> - -
    '. - qq!!. - "$paybychecked{$_} $paybychecked{$_}
    * required fields for each billing type -

    First package - - - - - - - - - - - - - - - - - -<%= - if ( $init_data->{'security_phrase'} ) { - $OUT .= < - - - -ENDOUT - } else { - $OUT .= ''; - } -%> -<%= - if ( scalar(@$pops) ) { - $OUT .= ''; - } else { - $OUT .= popselector($popnum); - } -%> -
    Username
    Password
    Re-enter Password
    Security Phrase -
    Access number'. - popselector($popnum). '
    -

    - diff --git a/fs_selfservice/FS-SelfService/cgi/signup-freeoption.html b/fs_selfservice/FS-SelfService/cgi/signup-freeoption.html deleted file mode 100755 index 40ad03c0b..000000000 --- a/fs_selfservice/FS-SelfService/cgi/signup-freeoption.html +++ /dev/null @@ -1,262 +0,0 @@ -ISP Signup form - - -ISP Signup form

    -<%= $error %> -
    - - - -Where did you hear about our service?

    -Contact Information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    *Contact name
    (last, first)
    , -
    Company
    *Address
     
    *City*State/Country - <%= - ($county_html, $state_html, $country_html) = - regionselector( $county, $state, $country ); - - "$county_html $state_html"; - %> - *Zip
    *Country<%= $country_html %>
    Day Phone
    Night Phone
    Fax
    * required fields
    -
    -<%= - my $first_payby = $packages->[0]{'payby'}[0]; - unless ( grep { scalar( @{$_->{'payby'}} ) > 1 - || $_->{'payby'}->[0] ne $first_payby - } @$packages - ) { - @payby = ( $first_payby ); - } - - unless ( scalar(@payby) == 1 && $payby[0] eq 'BILL' ) { - - $OUT .= ' Billing information - - '; - - $OUT .= '' - if scalar(@payby) > 1; - - $OUT .= '
    -
    Billing type
    '; - - } else { - $OUT .= ' - '; - } - -%> - - - - - <%= - - my $cardselect = ''; - - my %payby = ( - 'CARD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("CARD"). qq!
    *Name on card
    !, - 'DCRD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("DCRD"). qq!
    *Name on card
    !, - 'CHEK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'DCHK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'LECB' => qq!Phone bill billing
    ${r}Phone number !, - 'BILL' => <<'END', - - - - -END - 'COMP' => qq!Complimentary
    *Approved by
    *Exp !. expselect("COMP"), - 'PREPAY' => qq!Prepaid card
    *!, - ); - - if ( $init_data->{'cvv_enabled'} ) { - foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5 - $payby{$payby} .= qq!
    CVV2 (help!; - } - } - - my( $account, $aba ) = split('@', $payinfo); - my %paybychecked = ( - 'CARD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("CARD", $paydate). qq!
    *Name on card
    !, - 'DCRD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("DCRD", $paydate). qq!
    *Name on card
    !, - 'CHEK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'DCHK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'LECB' => qq!Phone bill billing
    ${r}Phone number !, - 'BILL' => <<'END', - - - - -END - - 'COMP' => qq!Complimentary
    *Approved by
    *Exp !. expselect("COMP", $paydate), - 'PREPAY' => qq!Prepaid card
    *!, - ); - - if ( $init_data->{'cvv_enabled'} ) { - foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5 - $paybychecked{$payby} .= qq!
    CVV2 (help!; - } - } - - for (@payby) { - if ( scalar(@payby) == 1) { - $OUT .= '"; - } else { - $OUT .= qq!!; - } else { - $OUT .= qq!> $payby{$_}!; - } - - } - } - %> - -
    '. - qq!!. - "$paybychecked{$_} $paybychecked{$_}
    -<%= unless ( scalar(@payby) == 1 && $payby[0] eq 'BILL' ) { - $OUT .= '* required fields for each billing type'; - } - ''; -%> -

    First package - - - - - - - - - - - - - - - - -<%= - if ( $init_data->{'security_phrase'} ) { - $OUT .= < - - - -ENDOUT - } else { - $OUT .= ''; - } -%> -<%= - if ( scalar(@$pops) ) { - $OUT .= ''; - } else { - $OUT .= popselector($popnum); - } -%> -
    Username
    Password
    Re-enter Password
    Security Phrase -
    Access number'. - popselector($popnum). '
    -

    -
    diff --git a/fs_selfservice/FS-SelfService/cgi/signup-snarf.html b/fs_selfservice/FS-SelfService/cgi/signup-snarf.html deleted file mode 100755 index d167efbf9..000000000 --- a/fs_selfservice/FS-SelfService/cgi/signup-snarf.html +++ /dev/null @@ -1,228 +0,0 @@ -ISP Signup form - - -ISP Signup form

    -<%= $error %> -
    - - - -Contact Information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    *Contact name
    (last, first)
    , -
    Company
    *Address
     
    *City*State/Country - <%= - ($county_html, $state_html, $country_html) = - regionselector( $county, $state, $country ); - - "$county_html $state_html"; - %> - *Zip
    *Country<%= $country_html %>
    Day Phone
    Night Phone
    Fax
    * required fields
    -
    Billing information - - -<%= scalar(@payby) > 1 ? '' : '' %> -
    - - <%= - $OUT .= ' - - Postal mail invoice -
    Email invoice -
    Billing type
    - - - - <%= - - my $cardselect = ''; - - my %payby = ( - 'CARD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("CARD"). qq!
    *Name on card
    !, - 'DCRD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("DCRD"). qq!
    *Name on card
    !, - 'CHEK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'DCHK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'LECB' => qq!Phone bill billing
    ${r}Phone number !, - 'BILL' => qq!Billing
    P.O.
    *Exp !. expselect("BILL", "12-2037"). qq!
    *Attention
    !, - 'COMP' => qq!Complimentary
    *Approved by
    *Exp !. expselect("COMP"), - 'PREPAY' => qq!Prepaid card
    *!, - ); - - if ( $init_data->{'cvv_enabled'} ) { - foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5 - $payby{$payby} .= qq!
    CVV2 (help!; - } - } - - my( $account, $aba ) = split('@', $payinfo); - my %paybychecked = ( - 'CARD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("CARD", $paydate). qq!
    *Name on card
    !, - 'DCRD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("DCRD", $paydate). qq!
    *Name on card
    !, - 'CHEK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'DCHK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code
    ${r}Bank name !, - 'LECB' => qq!Phone bill billing
    ${r}Phone number !, - 'BILL' => qq!Billing
    P.O.
    *Exp !. expselect("BILL", $paydate). qq!
    *Attention
    !, - 'COMP' => qq!Complimentary
    *Approved by
    *Exp !. expselect("COMP", $paydate), - 'PREPAY' => qq!Prepaid card
    *!, - ); - - if ( $init_data->{'cvv_enabled'} ) { - foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5 - $paybychecked{$payby} .= qq!
    CVV2 (help!; - } - } - - for (@payby) { - if ( scalar(@payby) == 1) { - $OUT .= '"; - } else { - $OUT .= qq!!; - } else { - $OUT .= qq!> $payby{$_}!; - } - - } - } - %> - -
    '. - qq!!. - "$paybychecked{$_} $paybychecked{$_}
    * required fields for each billing type -

    First package - - - - - - - - - - - - - - - - -<%= - if ( $init_data->{'security_phrase'} ) { - $OUT .= < - - - -ENDOUT - } else { - $OUT .= ''; - } -%> -<%= - if ( scalar(@$pops) ) { - $OUT .= ''; - } else { - $OUT .= popselector($popnum); - } -%> -
    Username
    Password
    Re-enter Password
    Security Phrase -
    Access number'. - popselector($popnum). '
    -

    Enter up to ten external accounts from which to retrieve email - - - - - - -<%= - for my $num ( 1..10 ) { - no strict 'vars'; - $OUT .= qq!!. - qq!!. - qq!!. - qq!!. - qq!!; - } -%> -
    Mail serverUsernamePassword
    - -

    -
    diff --git a/fs_selfservice/FS-SelfService/cgi/signup.cgi b/fs_selfservice/FS-SelfService/cgi/signup.cgi deleted file mode 100755 index e07b6ee5a..000000000 --- a/fs_selfservice/FS-SelfService/cgi/signup.cgi +++ /dev/null @@ -1,349 +0,0 @@ -#!/usr/bin/perl -T -#!/usr/bin/perl -Tw - -use strict; -use vars qw( @payby $cgi $init_data - $self_url $error $agentnum - - $ieak_file $ieak_template - $signup_html $signup_template - $success_html $success_template - $decline_html $decline_template - ); - -use subs qw( print_form print_okay print_decline - success_default decline_default - ); -use CGI; -#use CGI::Carp qw(fatalsToBrowser); -use Text::Template; -use Business::CreditCard; -use HTTP::BrowserDetect; -use FS::SelfService qw( signup_info new_customer ); - -#acceptable payment methods -# -#@payby = qw( CARD BILL COMP ); -#@payby = qw( CARD BILL ); -#@payby = qw( CARD ); -@payby = qw( CARD PREPAY ); - -$ieak_file = '/usr/local/freeside/ieak.template'; -$signup_html = -e 'signup.html' - ? 'signup.html' - : '/usr/local/freeside/signup.html'; -$success_html = -e 'success.html' - ? 'success.html' - : '/usr/local/freeside/success.html'; -$decline_html = -e 'decline.html' - ? 'decline.html' - : '/usr/local/freeside/decline.html'; - - -if ( -e $ieak_file ) { - my $ieak_txt = Text::Template::_load_text($ieak_file) - or die $Text::Template::ERROR; - $ieak_txt =~ /^(.*)$/s; #untaint the template source - it's trusted - $ieak_txt = $1; - $ieak_txt =~ s/\r//g; # don't double \r on old templates - $ieak_txt =~ s/\n/\r\n/g; - $ieak_template = new Text::Template ( TYPE => 'STRING', SOURCE => $ieak_txt ) - or die $Text::Template::ERROR; -} else { - $ieak_template = ''; -} - -$agentnum = ''; -if ( -e $signup_html ) { - my $signup_txt = Text::Template::_load_text($signup_html) - or die $Text::Template::ERROR; - $signup_txt =~ /^(.*)$/s; #untaint the template source - it's trusted - $signup_txt = $1; - $signup_template = new Text::Template ( TYPE => 'STRING', - SOURCE => $signup_txt, - DELIMITERS => [ '<%=', '%>' ] - ) - or die $Text::Template::ERROR; - if ( $signup_txt =~ - /<\s*INPUT TYPE="?hidden"?\s+NAME="?agentnum"?\s+VALUE="?(\d+)"?\s*>/si - ) { - $agentnum = $1; - } -} else { - #too much maintenance hassle to keep in this file - die "can't find ./signup.html or /usr/local/freeside/signup.html"; - #$signup_template = new Text::Template ( TYPE => 'STRING', - # SOURCE => &signup_default, - # DELIMITERS => [ '<%=', '%>' ] - # ) - # or die $Text::Template::ERROR; -} - -if ( -e $success_html ) { - my $success_txt = Text::Template::_load_text($success_html) - or die $Text::Template::ERROR; - $success_txt =~ /^(.*)$/s; #untaint the template source - it's trusted - $success_txt = $1; - $success_template = new Text::Template ( TYPE => 'STRING', - SOURCE => $success_txt, - DELIMITERS => [ '<%=', '%>' ], - ) - or die $Text::Template::ERROR; -} else { - $success_template = new Text::Template ( TYPE => 'STRING', - SOURCE => &success_default, - DELIMITERS => [ '<%=', '%>' ], - ) - or die $Text::Template::ERROR; -} - -if ( -e $decline_html ) { - my $decline_txt = Text::Template::_load_text($decline_html) - or die $Text::Template::ERROR; - $decline_txt =~ /^(.*)$/s; #untaint the template source - it's trusted - $decline_txt = $1; - $decline_template = new Text::Template ( TYPE => 'STRING', - SOURCE => $decline_txt, - DELIMITERS => [ '<%=', '%>' ], - ) - or die $Text::Template::ERROR; -} else { - $decline_template = new Text::Template ( TYPE => 'STRING', - SOURCE => &decline_default, - DELIMITERS => [ '<%=', '%>' ], - ) - or die $Text::Template::ERROR; -} - -$cgi = new CGI; - -$init_data = signup_info( 'agentnum' => $agentnum, - 'promo_code' => scalar($cgi->param('promo_code')), - 'reg_code' => uc(scalar($cgi->param('reg_code'))), - ); - -if ( ( defined($cgi->param('magic')) && $cgi->param('magic') eq 'process' ) - || ( defined($cgi->param('action')) && $cgi->param('action') eq 'process_signup' ) - ) { - - $error = ''; - - $cgi->param('agentnum', $agentnum) if $agentnum; - $cgi->param('reg_code', uc(scalar($cgi->param('reg_code'))) ); - - #false laziness w/agent.cgi, identical except for agentnum - my $payby = $cgi->param('payby'); - if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) { - #$payinfo = join('@', map { $cgi->param( $payby. "_payinfo$_" ) } (1,2) ); - $cgi->param('payinfo' => $cgi->param($payby. '_payinfo1'). '@'. - $cgi->param($payby. '_payinfo2') - ); - } else { - $cgi->param('payinfo' => $cgi->param( $payby. '_payinfo' ) ); - } - $cgi->param('paydate' => $cgi->param( $payby. '_month' ). '-'. - $cgi->param( $payby. '_year' ) - ); - $cgi->param('payname' => $cgi->param( $payby. '_payname' ) ); - $cgi->param('paycvv' => defined $cgi->param( $payby. '_paycvv' ) - ? $cgi->param( $payby. '_paycvv' ) - : '' - ); - $cgi->param('paytype' => defined $cgi->param( $payby. '_paytype' ) - ? $cgi->param( $payby. '_paytype' ) - : '' - ); - $cgi->param('paystate' => defined $cgi->param( $payby. '_paystate' ) - ? $cgi->param( $payby. '_paystate' ) - : '' - ); - - if ( $cgi->param('invoicing_list') ) { - $cgi->param('invoicing_list' => $cgi->param('invoicing_list'). ', POST') - if $cgi->param('invoicing_list_POST'); - } else { - $cgi->param('invoicing_list' => 'POST' ); - } - - if ( $cgi->param('_password') ne $cgi->param('_password2') ) { - $error = $init_data->{msgcat}{passwords_dont_match}; #msgcat - $cgi->param('_password', ''); - $cgi->param('_password2', ''); - } - - if ( $payby =~ /^(CARD|DCRD)$/ && $cgi->param('CARD_type') ) { - my $payinfo = $cgi->param('payinfo'); - $payinfo =~ s/\D//g; - - $payinfo =~ /^(\d{13,16})$/ - or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; - $payinfo = $1; - validate($payinfo) - or $error ||= $init_data->{msgcat}{invalid_card}; #. $self->payinfo; - cardtype($payinfo) eq $cgi->param('CARD_type') - or $error ||= $init_data->{msgcat}{not_a}. $cgi->param('CARD_type'); - } - - if ($init_data->{emailinvoiceonly} && (length $cgi->param('invoicing_list') < 1)) { - $error ||= $init_data->{msgcat}{illegal_or_empty_text}; - } - - unless ( $error ) { - my $rv = new_customer( { - ( map { $_ => scalar($cgi->param($_)) } - qw( last first ss company - address1 address2 city county state zip country - daytime night fax stateid stateid_state - - ship_last ship_first ship_company - ship_address1 ship_address2 ship_city ship_county ship_state - ship_zip ship_country - ship_daytime ship_night ship_fax - - payby payinfo paycvv paydate payname paystate paytype - invoicing_list referral_custnum promo_code reg_code - pkgpart username sec_phrase _password popnum refnum - agentnum - ), - grep { /^snarf_/ } $cgi->param - ), - 'payip' => $cgi->remote_host(), - } ); - $error = $rv->{'error'}; - } - #eslaf - - if ( $error eq '_decline' ) { - print_decline(); - } elsif ( $error ) { - #fudge the snarf info - no strict 'refs'; - ${$_} = $cgi->param($_) foreach grep { /^snarf_/ } $cgi->param; - print_form(); - } else { - print_okay( - 'pkgpart' => scalar($cgi->param('pkgpart')), - ); - } - -} else { - $error = ''; - print_form; -} - -sub print_form { - - $error = "Error: $error" if $error; - - my $r = { - $cgi->Vars, - %{$init_data}, - 'error' => $error, - }; - - $r->{pkgpart} ||= $r->{default_pkgpart}; - - $r->{referral_custnum} = $r->{'ref'}; - #$cgi->delete('ref'); - #$cgi->delete('init_popstate'); - $r->{self_url} = $cgi->self_url; - - print $cgi->header( '-expires' => 'now' ), - $signup_template->fill_in( PACKAGE => 'FS::SelfService::_signupcgi', - HASH => $r - ); -} - -sub print_decline { - print $cgi->header( '-expires' => 'now' ), - $decline_template->fill_in(); -} - -sub print_okay { - my %param = @_; - my $user_agent = new HTTP::BrowserDetect $ENV{HTTP_USER_AGENT}; - - $cgi->param('username') =~ /^(.+)$/ - or die "fatal: invalid username got past FS::SelfService::new_customer"; - my $username = $1; - $cgi->param('_password') =~ /^(.+)$/ - or die "fatal: invalid password got past FS::SelfService::new_customer"; - my $password = $1; - ( $cgi->param('first'). ' '. $cgi->param('last') ) =~ /^(.*)$/ - or die "fatal: invalid email_name got past FS::SelfService::new_customer"; - my $email_name = $1; #global for template - - #my %pop = (); - my %popnum2pop = (); - foreach ( @{ $init_data->{'svc_acct_pop'} } ) { - #push @{ $pop{ $_->{state} }->{ $_->{ac} } }, $_; - $popnum2pop{$_->{popnum}} = $_; - } - - my( $ac, $exch, $loc); - my $pop = $popnum2pop{$cgi->param('popnum')}; - #or die "fatal: invalid popnum got past FS::SelfService::new_customer"; - if ( $pop ) { - ( $ac, $exch, $loc ) = ( $pop->{'ac'}, $pop->{'exch'}, $pop->{'loc'} ); - } else { - ( $ac, $exch, $loc ) = ( '', '', ''); #presumably you're not using them. - } - - #global for template - my $part_pkg = ( grep { $_->{'pkgpart'} eq $param{'pkgpart'} } - @{ $init_data->{'part_pkg'} } - )[0]; - my $pkg = $part_pkg->{'pkg'}; - - if ( $ieak_template && $user_agent->windows && $user_agent->ie ) { - #send an IEAK config - print $cgi->header('application/x-Internet-signup'), - $ieak_template->fill_in(); - } else { #send a simple confirmation - print $cgi->header( '-expires' => 'now' ), - $success_template->fill_in( HASH => { - username => $username, - password => $password, - _password => $password, - email_name => $email_name, - ac => $ac, - exch => $exch, - loc => $loc, - pkg => $pkg, - part_pkg => \$part_pkg, - }); - } -} - -sub success_default { #html to use if you don't specify a success file - <<'END'; -Signup successful -Signup successful

    -Thanks for signing up! -

    -Signup information for <%= $email_name %>: -

    -Username: <%= $username %>
    -Password: <%= $password %>
    -Access number: (<%= $ac %>) / <%= $exch %> - <%= $local %>
    -Package: <%= $pkg %>
    - -END -} - -sub decline_default { #html to use if there is a decline - <<'END'; -Processing error -Processing error

    -There has been an error processing your account. Please contact customer -support. - -END -} - -# subs for the templates... - -package FS::SelfService::_signupcgi; -use HTML::Entities; -use FS::SelfService qw(regionselector expselect popselector); - diff --git a/fs_selfservice/FS-SelfService/cgi/signup.html b/fs_selfservice/FS-SelfService/cgi/signup.html deleted file mode 100755 index 42334eade..000000000 --- a/fs_selfservice/FS-SelfService/cgi/signup.html +++ /dev/null @@ -1,382 +0,0 @@ -<%= $agent || 'ISP' %> Signup form - - -<%= $agent || 'ISP' %> Signup form

    -<%= $error %> -
    - - - - - -<%= - $OUT = join("\n",map { my $method = $_ ; map { qq|| } qw / payinfo payinfo1 payinfo2 payname paystate paytype paycvv month year type / } @payby); -%> - -<%= - $OUT = join("\n", map { qq|| } qw / promo_code reg_code pkgpart username _password _password2 sec_phrase popnum / ); -%> - -Where did you hear about our service?

    -Contact Information - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<%= - $OUT = ''; - if ( $stateid_enabled ) { - my ($county_html, $state_html, $country_html) = - regionselector( { - prefix => 'stateid_', - default_state => $statedefault, - default_country => $countrydefault, - locales => \@cust_main_county, - } ); - $OUT .= qq!'; - $OUT .= qq!!; - $OUT .= qq!'; - $OUT .=""; - } -%> -
    *Contact name
    (last, first)
    , -
    Company
    *Address
     
    *City*State/Country - <%= - ($county_html, $state_html, $country_html) = - regionselector( { - selected_county => $county, - selected_state => $state, - selected_country => $country, - default_state => $statedefault, - default_country => $countrydefault, - locales => \@cust_main_county, - } ); - - "$county_html $state_html"; - %> - *Zip
    *Country<%= $country_html %>
    Day Phone
    Night Phone
    Fax
    !. $label{stateid}.'!. $label{stateid_state} .'$county_html $state_html
    * required fields
    -
    Billing information - - -<%= ( scalar(@payby) > 1 or 1 ) ? '!; - } - } - if ( $paystate_enabled ) { - foreach my $payby ( grep { exists $payby{$_} } qw(CHEK DCHK) ) { - my ($county_html, $state_html, $country_html) = - regionselector( { - prefix => "${payby}_pay", - default_state => $statedefault, - default_country => $countrydefault, - locales => \@cust_main_county, - } ); - $payby{$payby} .= "
    ${r}Bank state $county_html $state_html"; - } - } - - my( $account, $aba ) = split('@', $payinfo); - my %paybychecked = ( - 'CARD' => qq!
    - - <%= - $OUT =''; - unless ( $emailinvoiceonly ) { - $OUT .= ' - - -
    <%= $OUT = ( $emailinvoiceonly ? q|*| : q|| ) %> Email invoice -
    Billing type ' : '' %> - - - <%= - - my $cardselect = ''; - - my %payby = ( - 'CARD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("CARD"). qq!
    *Name on card
    !, - 'DCRD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("DCRD"). qq!
    *Name on card
    !, - 'CHEK' => qq!Electronic check
    ${r}Account number
    ${r}ABA/Routing code Type
    {$r}Bank State
    ${r}Bank name !, - 'DCHK' => qq!Electronic check
    ${r}Account number Type
    ${r}ABA/Routing code
    {$r}Bank State
    ${r}Bank name !, - 'LECB' => qq!Phone bill billing
    ${r}Phone number !, - 'BILL' => qq!Billing
    P.O.
    *Exp !. expselect("BILL", "12-2037"). qq!
    *Attention
    !, - 'COMP' => qq!Complimentary
    *Approved by
    *Exp !. expselect("COMP"), - 'PREPAY' => qq!Prepaid card
    *!, - ); - - if ( $cvv_enabled ) { - foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5 - $payby{$payby} .= qq!
    CVV2 (help)
    !, - 'DCRD' => qq!Credit card
    *$cardselect
    *Exp !. expselect("DCRD", $paydate). qq!
    *Name on card
    !, - 'CHEK' => qq!Electronic check
    ${r}Account number Type
    ${r}ABA/Routing code
    ${r}Bank name !, - 'DCHK' => qq!Electronic check
    ${r}Account number Type
    ${r}ABA/Routing code
    ${r}Bank name !, - 'LECB' => qq!Phone bill billing
    ${r}Phone number !, - 'BILL' => qq!Billing
    P.O.
    *Exp !. expselect("BILL", $paydate). qq!
    *Attention
    !, - 'COMP' => qq!Complimentary
    *Approved by
    *Exp !. expselect("COMP", $paydate), - 'PREPAY' => qq!Prepaid card
    *!, - ); - - if ( $cvv_enabled ) { - foreach my $payby ( grep { exists $payby{$_} } qw(CARD DCRD) ) { #1.4/1.5 - $paybychecked{$payby} .= qq!!; - } - } - if ( $paystate_enabled ) { - foreach my $payby ( grep { exists $payby{$_} } qw(CHEK DCHK) ) { - my ($county_html, $state_html, $country_html) = - regionselector( { - prefix => "${payby}_pay", - selected_county => $county, - selected_state => $state, - selected_country => $country, - default_state => $statedefault, - default_country => $countrydefault, - locales => \@cust_main_county, - } ); - $paybychecked{$payby} .= "
    ${r}Bank state $county_html $state_html"; - } - } - -use Tie::IxHash; -use HTML::Widgets::SelectLayers; - - my %payby_index = ( 'CARD' => qq/Credit Card/, - 'DCRD' => qq/Credit Card/, - 'CHEK' => qq/Check/, - 'DCHK' => qq/Check/, - 'LECB' => qq/Phone Bill Billing/, - 'BILL' => qq/Billing/, - 'COMP' => qq/Complimentary/, - 'PREPAY' => qq/Prepaid Card/, - ); - - -tie my %options, 'Tie::IxHash', (); - -foreach my $payby_option ( @payby ) { - $options{$payby_option} = $payby_index{$payby_option}; -} - -HTML::Widgets::SelectLayers->new( - options => \%options, - selected_layer => 'CARD', - form_name => 'dummy', - html_between => '
    * Card type$cardselect
    * Card number
    * Expration!. expselect("CARD", $paydate). qq!
    * Name on card
    CVV2 (help)
    ', - form_action => 'dummy.cgi', - layer_callback => sub { my $layer = shift; return $paybychecked{$layer}. ''; }, -)->html; - - - %> - -* required fields -

    First package - - - - - - - - - - - - - - - - - - -<%= - if ( $security_phrase ) { - $OUT .= < - - - -ENDOUT - } else { - $OUT .= ''; - } -%> -<%= - if ( @svc_acct_pop ) { - $OUT .= ''; - } else { - $OUT .= popselector(popnum=>$popnum, pops=>\@svc_acct_pop); - } -%> -
    Username
    Password
    Re-enter Password
    Security Phrase -
    Access number'. - popselector( 'popnum' => $popnum, - 'pops' => \@svc_acct_pop, - 'init_popstate' => $init_popstate, - 'popac' => $popac, - 'acstate' => $acstate, - ). - '
    - -<%= -if ( @optional_packages ) { - my @html; - foreach my $ii ( 0 .. $#optional_packages) { - my $friendly_index = $ii + 1; - if ($optional_packages[$ii]) { - push @html, qq|
    Optional Package #$friendly_index
    |,'
    '; - - push @html, qq||; - - push @html, '
    '; - } - $OUT = join("\n", @html); - } -} else { -$OUT = '' -} -%> - -
    - -
    diff --git a/fs_selfservice/FS-SelfService/cgi/stateselect.html b/fs_selfservice/FS-SelfService/cgi/stateselect.html deleted file mode 100644 index ba55bff74..000000000 --- a/fs_selfservice/FS-SelfService/cgi/stateselect.html +++ /dev/null @@ -1,134 +0,0 @@ -ISP Signup -ISP Signup - state selection

    - -
    -Select your state from the map or dropdown: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - diff --git a/fs_selfservice/FS-SelfService/cgi/success-delayed.html b/fs_selfservice/FS-SelfService/cgi/success-delayed.html deleted file mode 100644 index 5eeed5957..000000000 --- a/fs_selfservice/FS-SelfService/cgi/success-delayed.html +++ /dev/null @@ -1,16 +0,0 @@ -Signup successful -Signup successful

    -Thanks for signing up! -

    -Signup information for <%= $email_name %>: -

    -Username: <%= $username %>
    -Password: <%= $password %>
    -Access number: (<%= $ac %>) / <%= $exch %> - <%= $local %>
    -Package: <%= $pkg %>
    -Charge: <%= sprintf('$%.2f', $part_pkg->{'options'}->{'setup_fee'}) %>
    -In <%= $part_pkg->{'options'}->{'free_days'} %> days you will be charged - <%= sprintf('$%.2f', $part_pkg->{'options'}->{'recur_fee'}) %> -and <%= $part_pkg->{'freq_pretty'} %> thereafter.
    - - diff --git a/fs_selfservice/FS-SelfService/cgi/success.html b/fs_selfservice/FS-SelfService/cgi/success.html deleted file mode 100644 index 397cc6c30..000000000 --- a/fs_selfservice/FS-SelfService/cgi/success.html +++ /dev/null @@ -1,11 +0,0 @@ -Signup successful -Signup successful

    -Thanks for signing up! -

    -Signup information for <%= $email_name %>: -

    -Username: <%= $username %>
    -Password: <%= $password %>
    -Access number: (<%= $ac %>) / <%= $exch %> - <%= $local %>
    -Package: <%= $pkg %>
    - diff --git a/fs_selfservice/FS-SelfService/cgi/svc_acct.html b/fs_selfservice/FS-SelfService/cgi/svc_acct.html deleted file mode 100644 index 00244386b..000000000 --- a/fs_selfservice/FS-SelfService/cgi/svc_acct.html +++ /dev/null @@ -1,58 +0,0 @@ -Setup <%= $svc %>

    - -<%= if ( $error ) { - $OUT .= qq!Error setting up $svc: $error!. - '

    '; -} ''; %> -
    - - - - - - - - - - -<%= - $OUT .= domainselector(pkgnum=>$pkgnum, svcpart=>$svcpart); -%> - - - - - - - - -<%= - if ( $security_phrase ) { - $OUT .= < - - - -ENDOUT - } else { - $OUT .= ''; - } -%> -<%= - if ( @svc_acct_pop ) { - $OUT .= ''; - } else { - $OUT .= popselector(popnum=>$popnum, pops=>\@svc_acct_pop); - } -%> -
    Username
    Password
    Re-enter Password
    Security Phrase -
    Access number'. - popselector( 'popnum' => $popnum, - 'pops' => \@svc_acct_pop, - 'init_popstate' => $init_popstate, - 'popac' => $popac, - 'acstate' => $acstate, - ). - '
    - -
    diff --git a/fs_selfservice/FS-SelfService/cgi/view_customer.html b/fs_selfservice/FS-SelfService/cgi/view_customer.html deleted file mode 100644 index 11e4432d0..000000000 --- a/fs_selfservice/FS-SelfService/cgi/view_customer.html +++ /dev/null @@ -1,29 +0,0 @@ -Reseller -Reseller

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> - -<%= include('agent_menu') %> -
    - -<%= $message - ? "$message

    " - : '' -%> - -<%= $small_custview %> - -
    - - -<%= include('agent_customer_menu') %> -
    - -
    - -
    -
    -powered by freeside - - - - diff --git a/fs_selfservice/FS-SelfService/cgi/view_invoice.html b/fs_selfservice/FS-SelfService/cgi/view_invoice.html deleted file mode 100644 index ad2f4f419..000000000 --- a/fs_selfservice/FS-SelfService/cgi/view_invoice.html +++ /dev/null @@ -1,15 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -<%= $invoice_html %> - - -
    -powered by freeside - - - - diff --git a/fs_selfservice/FS-SelfService/cgi/view_support_details.html b/fs_selfservice/FS-SelfService/cgi/view_support_details.html deleted file mode 100644 index 270f9a81d..000000000 --- a/fs_selfservice/FS-SelfService/cgi/view_support_details.html +++ /dev/null @@ -1,80 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Support usage details for -<%= Date::Format::time2str('%b %o %Y', $beginning) %> - -<%= Date::Format::time2str('%b %o %Y', $ending) %> -

    - -<%= if ( $error ) { - $OUT .= qq!$error

    !; -} ''; %> - - - - - - -
    -<%= if ($previous < $beginning) { - $OUT .= qq!Previous period!; - }else{ - ''; - } %> - -<%= if ($next > $ending) { - $OUT .= qq!Next period!; - }else{ - ''; - }%> -
    - - - - - - - - - -<%= my $total = 0; - foreach my $usage ( @usage ) { - $OUT .= ''; - } - my $h = int($total/3600); - my $m = sprintf("%02d", int(($total % 3600) / 60)); - my $s = sprintf("%02d", $total % 60); - $OUT .= qq!!; - $OUT .= qq!!; - %> - -
    TicketSubjectStaffDateStatusTime
    '; - $OUT .= $usage->{'ticketid'}; - $OUT .= ''; - $OUT .= $usage->{'subject'}; - $OUT .= ''; - $OUT .= $usage->{'creator'}; - $OUT .= ''; - $OUT .= Date::Format::time2str('%T%P %a %b %o %Y', $usage->{'_date'}); - $OUT .= ''; - $OUT .= $usage->{'status'}; - $OUT .= ''; - my $duration = $usage->{'support'}; - $total += $usage->{'support'}; - my $h = int($duration/3600); - my $m = sprintf("%02d", int(($duration % 3600) / 60)); - my $s = sprintf("%02d", $duration % 60); - $OUT .= $usage->{'support'} < 0 ? '-' : ''; - $OUT .= "$h:$m:$s"; - $OUT .= '

    $h:$m:$s
    -
    - - -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/view_usage.html b/fs_selfservice/FS-SelfService/cgi/view_usage.html deleted file mode 100644 index 79d07d4df..000000000 --- a/fs_selfservice/FS-SelfService/cgi/view_usage.html +++ /dev/null @@ -1,59 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Service usage

    - -<%= if ( $error ) { - $OUT .= qq!$error

    !; -} ''; %> - - - - - - - - - -<%= foreach my $svc ( @svcs ) { - my $link = "${url}view_usage_details;". - "svcnum=$svc->{'svcnum'};beginning=0;ending=0"; - $OUT .= ''; - if ( $svc->{'recharge_amount'} ) { - my $link = "${url}process_order_recharge;". - "svcnum=$svc->{'svcnum'}"; - $OUT .= ''; - } - } %> - -
    AccountTime remainingUpload remainingDownload remainingTotal remaining
    '; - $OUT .= qq!!. $svc->{'label'}. ': '. $svc->{'value'}.''; - $OUT .= ''; - $OUT .= $svc->{'seconds'}; - $OUT .= ''; - $OUT .= $svc->{'upbytes'}; - $OUT .= ''; - $OUT .= $svc->{'downbytes'}; - $OUT .= ''; - $OUT .= $svc->{'totalbytes'}; - $OUT .= '
    '; - $OUT .= qq!!.'Recharge for $'; - $OUT .= $svc->{'recharge_amount'} . ' with'; - $OUT .= ''; - $OUT .= $svc->{'recharge_seconds'} if $svc->{'recharge_seconds'}; - $OUT .= ''; - $OUT .= $svc->{'recharge_upbytes'} if $svc->{'recharge_upbytes'}; - $OUT .= ''; - $OUT .= $svc->{'recharge_downbytes'} if $svc->{'recharge_downbytes'}; - $OUT .= ''; - $OUT .= $svc->{'recharge_totalbytes'} if $svc->{'recharge_totalbytes'}; - $OUT .= '
    -
    - - -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/view_usage_details.html b/fs_selfservice/FS-SelfService/cgi/view_usage_details.html deleted file mode 100644 index 74a4c3d12..000000000 --- a/fs_selfservice/FS-SelfService/cgi/view_usage_details.html +++ /dev/null @@ -1,86 +0,0 @@ -MyAccount -MyAccount

    -<%= $url = "$selfurl?session=$session_id;action="; ''; %> -<%= include('myaccount_menu') %> - - -Service usage details for -<%= Date::Format::time2str('%b %o %Y', $beginning) %> - -<%= Date::Format::time2str('%b %o %Y', $ending) %> -

    - -<%= if ( $error ) { - $OUT .= qq!$error

    !; -} ''; %> - - - - - - -
    -<%= if ($previous < $beginning) { - $OUT .= qq!Previous period!; - }else{ - ''; - } %> - -<%= if ($next > $ending) { - $OUT .= qq!Next period!; - }else{ - ''; - }%> -
    - - - - - - - - -<%= my $total = 0; - my $utotal = 0; - my $dtotal = 0; - foreach my $usage ( @usage ) { - $OUT .= ''; - } - my $h = int($total/3600); - my $m = sprintf("%02d", int(($total % 3600) / 60)); - my $s = sprintf("%02d", $total % 60); - $OUT .= qq!!; - $OUT .= qq!! x 3; - $OUT .= qq!!; - $OUT .= qq!!; - $OUT .= qq!!; - $OUT .= qq!!; - $OUT .= qq!!; %> - -
    AccountStart TimeDurationUploadDownload
    '; - $OUT .= $usage->{'username'}; - $OUT .= ''; - $OUT .= Date::Format::time2str('%T%P %a %b %o %Y', $usage->{'acctstarttime'}); - $OUT .= ''; - my $duration = $usage->{'acctstoptime'} - $usage->{'acctstarttime'}; - $total += $duration; - my $h = int($duration/3600); - my $m = sprintf("%02d", int(($duration % 3600) / 60)); - my $s = sprintf("%02d", $duration % 60); - $OUT .= "$h:$m:$s"; - $OUT .= ''; - $OUT .= Number::Format::format_bytes($usage->{'acctinputoctets'}, precision => 2); - $utotal += $usage->{'acctinputoctets'}; - $OUT .= ''; - $OUT .= Number::Format::format_bytes($usage->{'acctoutputoctets'}, precision => 2); - $dtotal += $usage->{'acctoutputoctets'}; - $OUT .= '

    $h:$m:$s!; - $OUT .= Number::Format::format_bytes($utotal, precision => 2). qq!!; - $OUT .= Number::Format::format_bytes($dtotal, precision => 2). qq!
    -
    - - -
    -powered by freeside - diff --git a/fs_selfservice/FS-SelfService/cgi/xmlrpc.cgi b/fs_selfservice/FS-SelfService/cgi/xmlrpc.cgi deleted file mode 100644 index 559ae04d8..000000000 --- a/fs_selfservice/FS-SelfService/cgi/xmlrpc.cgi +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/perl -Tw - -use strict; -use XMLRPC::Transport::HTTP; -use XMLRPC::Lite; # for XMLRPC::Serializer -use FS::SelfService::XMLRPC; - -my %typelookup = ( - base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'], - dateTime => [35, sub {$_[0] =~ /^\d{8}T\d\d:\d\d:\d\d$/}, 'as_dateTime'], - string => [40, sub {1}, 'as_string'], -); -my $serializer = new XMLRPC::Serializer(typelookup => \%typelookup); - -XMLRPC::Transport::HTTP::CGI->dispatch_to('FS::SelfService::XMLRPC') - ->serializer($serializer) - ->handle; - diff --git a/fs_selfservice/FS-SelfService/freeside-selfservice-clientd b/fs_selfservice/FS-SelfService/freeside-selfservice-clientd deleted file mode 100644 index bdc8e1547..000000000 --- a/fs_selfservice/FS-SelfService/freeside-selfservice-clientd +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/bin/perl -w -# -# freeside-selfservice-clientd -# -# This is run REMOTELY over ssh by freeside-selfservice-server - -use strict; -use subs qw(spawn logmsg lock_write unlock_write); -use Fcntl qw(:flock); -use POSIX qw(:sys_wait_h); -use Socket; -use Storable 2.09 qw(nstore_fd fd_retrieve); -use IO::Handle qw(_IONBF); -use IO::Select; -use IO::File; - -#STDOUT->setbuf(''); - -my $tag = scalar(@ARGV) ? '.'.shift : ''; - -use vars qw( $Debug ); -$Debug = 2; #2 will turn on child logging - #3 will log packet contents,#including passwords - #4 will log receipts of all packets from server including - # keepalives (big!) - -my $socket = "/usr/local/freeside/selfservice_socket$tag"; -my $pid_file = "$socket.pid"; - -my $log_file = "/usr/local/freeside/selfservice$tag.log"; - -my $lock_file = "/usr/local/freeside/selfservice$tag.writelock"; - -#my $me = '[client]'; - -$|=1; - -$SIG{__WARN__} = \&_logmsg; - -#read data to be cached or something -#warn "$me Reading init data\n" if $Debug; -#my $signup_init = - -warn "Creating $lock_file\n" if $Debug; -open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!"; -close LOCKFILE; - -warn "Creating $socket\n" if $Debug; -my $uaddr = sockaddr_un($socket); -my $proto = getprotobyname('tcp'); -socket(Server,PF_UNIX,SOCK_STREAM,0) or die "socket: $!"; -unlink($socket); -bind(Server, $uaddr) or die "bind: $!"; -listen(Server,SOMAXCONN) or die "listen: $!"; - -if ( -e $pid_file ) { - open(PIDFILE,"<$pid_file"); - my $old_pid = ; - close PIDFILE; - if ( $old_pid =~ /^(\d+)$/ ) { - kill 'TERM', $1; - } -} -open(PIDFILE,">$pid_file"); -print PIDFILE "$$\n"; -close PIDFILE; - -#my $waitedpid; -#sub REAPER { $waitedpid = wait; $SIG{CHLD} = \&REAPER; } -#$SIG{CHLD} = \&REAPER; - -warn "enabling keep alives\n" if $Debug; -nstore_fd( { _packet => '_enable_keepalive' } , \*STDOUT ); - -warn "entering main loop\n" if $Debug; - -my %kids; - -my $s = new IO::Select; -$s->add(\*STDIN); -$s->add(\*Server); - -#for ( $waitedpid = 0; -# accept(Client,Server) || $waitedpid; -# $waitedpid = 0, close Client) -#{ -# next if $waitedpid; - -#$SIG{PIPE} = sub { warn "SIGPIPE received" }; -#$SIG{CHLD} = sub { warn "SIGCHLD received" }; - -#sub REAPER { warn "SIGCHLD received"; my $pid = wait; $SIG{CHLD} = \&REAPER; } -#sub REAPER { my $pid = wait; $SIG{CHLD} = \&REAPER; } -#sub REAPER { my $pid = wait; delete $kids{$pid}; $SIG{CHLD} = \&REAPER; } -#$SIG{CHLD} = \&REAPER; - -my $undisp = 0; -while (1) { - - &reap_kids; - - warn "waiting for connection\n" if $Debug && !$undisp; - - #my @handles = $s->can_read(); - my @handles = $s->can_read(5); - $undisp = !scalar(@handles); - foreach my $handle ( @handles ) { - - if ( $handle == \*STDIN ) { - - warn "receiving packet from server\n" if $Debug > 3; - - my $packet = fd_retrieve(\*STDIN); - my $token = $packet->{'_token'}; - - if ( $token eq '_keepalive' ) { - $undisp = 1; - next; - } - - warn "received packet from server with token $token\n". - ( $Debug > 2 - ? join('', map { " $_=>$packet->{$_}\n" } keys %$packet ) - : '' ) - if $Debug; - - if ( exists($kids{$token}) ) { - warn "sending return packet to $token via $kids{$token}\n" - if $Debug; - nstore_fd($packet, $kids{$token}); - warn "flushing to $token\n" if $Debug; - until ( $kids{$token}->flush ) { - warn "WARNING: error flushing: $!"; - sleep 1; - } - #no close or delete here - will block waiting for child - warn "done with $token\n" if $Debug; - } else { - warn "WARNING: unknown token $token, discarding message"; - } - - } elsif ( $handle == \*Server ) { - - until ( accept(Client, Server) ) { - warn "WARNING: accept failed: $!"; - next; - } - - warn "received local connection; forking\n" if $Debug; - - spawn sub { #child - warn "[child-$$] reading packet from local client" if $Debug > 1; - my $packet = fd_retrieve(\*Client); - warn "[child-$$] packet received:\n". - join('', map { " $_=>$packet->{$_}\n" } keys %$packet ) - if $Debug > 2; - my $command = $packet->{'command'}; - #handle some commands weirdly? - $packet->{_token}=$$; - - warn "[child-$$] locking write stream\n" if $Debug > 1; - lock_write; - - warn "[child-$$] sending packet to remote server\n" if $Debug > 1; - nstore_fd($packet, \*STDOUT) or die "FATAL: can't send response: $!"; - - warn "[child-$$] flushing write stream\n" if $Debug > 1; - STDOUT->flush or die "FATAL: can't flush: $!"; - - warn "[child-$$] releasing write lock\n" if $Debug > 1; - unlock_write; - - warn "[child-$$] closing write stream\n" if $Debug > 1; - close STDOUT or die "FATAL: can't close write stream: $!"; #??! - - warn "[child-$$] waiting for response from parent\n" if $Debug > 1; - my $w = new IO::Select; - $w->add(\*STDIN); - until ( $w->can_read ) { - warn "[child-$$] WARNING: interrupted select: $!\n"; - } - my $rv = fd_retrieve(\*STDIN); - - #close STDIN; - - warn "[child-$$] sending response to local client" if $Debug > 1; - nstore_fd($rv, \*Client); - Client->flush or die "FATAL: can't flush to local client: $!"; - close Client or die "FATAL: can't close connection to local client: $!"; - - warn "[child-$$] child exiting" if $Debug > 1; - exit; - - }; #eo child - - #close Client; - - } else { - die "wtf? $handle"; - } - - } - -} - -sub reap_kids { - #warn "reaping kids\n"; - foreach my $pid ( keys %kids ) { - my $kid = waitpid($pid, WNOHANG); - if ( $kid > 0 ) { - close $kids{$kid}; - delete $kids{$kid}; - } - } - #warn "done reaping\n"; -} - -sub spawn { - my $coderef = shift; - - unless (@_ == 0 && $coderef && ref($coderef) eq 'CODE') { - use Carp; - confess "usage: spawn CODEREF"; - } - - my $pid; - #if (!defined($pid = fork)) { - my $kid = new IO::Handle; - if (!defined($pid = open($kid, '|-'))) { - warn "WARNING: cannot fork: $!"; - return; - } elsif ($pid) { - warn "begat $pid" if $Debug; - $kids{$pid} = $kid; - #$kids{$pid}->autoflush; - return; # I'm the parent - } - # else I'm the child -- go spawn - -# open(STDIN, "<&Client") || die "can't dup client to stdin"; -# open(STDOUT, ">&Client") || die "can't dup client to stdout"; -# open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr"; - exit &$coderef(); -} - -sub _logmsg { - chomp( my $msg = shift ); - my $log = new IO::File ">>$log_file"; - die "can't open $log_file: $!" unless defined($log); - flock($log, LOCK_EX); - seek($log, 0, 2); - print $log "[client] [". scalar(localtime). "] [$$] $msg\n"; - flock($log, LOCK_UN); - close $log; -} - -sub lock_write { - #broken on freebsd? - #flock(STDOUT, LOCK_EX) or die "FATAL: can't lock write stream: $!"; - - #open a new one for each kid to get a unique lock - open(LOCKFILE,">$lock_file") or die "can't open $lock_file: $!"; - - flock(LOCKFILE, LOCK_EX) or die "FATAL: can't lock $lock_file: $!"; -} - -sub unlock_write { - #broken on freebsd? - #flock(STDOUT, LOCK_UN) or die "FATAL: can't release write lock: $!"; - - flock(LOCKFILE, LOCK_UN) or die "FATAL: can't unlock $lock_file: $!"; -} diff --git a/fs_selfservice/FS-SelfService/freeside-selfservice-xmlrpc-server b/fs_selfservice/FS-SelfService/freeside-selfservice-xmlrpc-server deleted file mode 100644 index bd4f83b3c..000000000 --- a/fs_selfservice/FS-SelfService/freeside-selfservice-xmlrpc-server +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/perl -w -# -# freeside-selfservice-xmlrpc-server -# - -use strict; -use Fcntl qw(:flock); -use POSIX; -use Getopt::Std; -use XMLRPC::Transport::HTTP; -use XMLRPC::Lite; # for XMLRPC::Serializer; -use FS::SelfService::XMLRPC; - -use vars qw( $opt_p $opt_d ); -use vars qw( $DEBUG ); - -getopts("p:d"); -$DEBUG = $opt_d; -my $tag = $opt_p ? ':'.$opt_p : ''; - -my %typelookup = ( - base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'], - dateTime => [35, sub {$_[0] =~ /^\d{8}T\d\d:\d\d:\d\d$/}, 'as_dateTime'], - string => [40, sub {1}, 'as_string'], -); -my $serializer = new XMLRPC::Serializer(typelookup => \%typelookup); - -my $log_file = "/usr/local/freeside/selfservice.xmlrpc$tag.log"; - -my $pid = fork; -defined($pid) or die "Can't fork to start: $!"; -print "Started daemon with pid $pid\n" if $pid; -exit if $pid; - -POSIX::setsid(); -open STDIN, "/dev/null" or die "Can't get rid of STDIN"; -open STDOUT, ">/dev/null" or die "Can't get rid of STDOUT"; -open STDERR, ">&STDOUT" or die "Can't get rid of STDERR"; - -$SIG{__WARN__} = \&_logmsg; -$SIG{__DIE__} = sub { &_logmsg(@_); exit }; - -my $daemon = XMLRPC::Transport::HTTP::Daemon - ->new(LocalPort => $opt_p ? $opt_p : 8080) - ->dispatch_to('FS::SelfService::XMLRPC') - ->serializer($serializer); - -warn "Handling request at ", $daemon->url, "\n"; -$daemon->handle; - -sub _logmsg { - chomp( my $msg = shift ); - my $log = new IO::File ">>$log_file"; - flock($log, LOCK_EX); - seek($log, 0, 2); - print $log "[". scalar(localtime). "] [$$] $msg\n"; - flock($log, LOCK_UN); - close $log; -} diff --git a/fs_selfservice/FS-SelfService/ieak.template b/fs_selfservice/FS-SelfService/ieak.template deleted file mode 100755 index 52edaa951..000000000 --- a/fs_selfservice/FS-SelfService/ieak.template +++ /dev/null @@ -1,40 +0,0 @@ -[Entry] -Entry_Name = The Internet -[Phone] -Dial_As_Is=no -Phone_Number = { $exch. $loc } -Area_Code = { $ac } -Country_Code = 1 -Country_Id = 1 -[Server] -Type = PPP -SW_Compress = Yes -PW_Encrypt = Yes -Negotiate_TCP/IP = Yes -Disable_LCP = No -[TCP/IP] -Specify_IP_Address = No -Specity_Server_Address = No -IP_Header_Compress = Yes -Gateway_On_Remote = Yes -[User] -Name = { $username } -Password = { $password } -Display_Password = Yes -[Internet_Mail] -Email_Name = { $email_name } -Email_Address = { $username }\@domain.tld -POP_Server = mail.domain.tld -POP_Server_Port_Number = 110 -POP_Login_Name = { $username } -POP_Login_Password = { $password } -SMTP_Server = mail.domain.tld -SMTP_Server_Port_Number = 25 -Install_Mail = 1 -[Internet_News] -NNTP_Server = news.domain.tld -NNTP_Server_Port_Number = 119 -Logon_Required = No -Install_News = 1 -[Branding] -Window_Title = The Internet diff --git a/fs_selfservice/FS-SelfService/test.pl b/fs_selfservice/FS-SelfService/test.pl deleted file mode 100644 index 7468ea471..000000000 --- a/fs_selfservice/FS-SelfService/test.pl +++ /dev/null @@ -1,17 +0,0 @@ -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl test.pl' - -######################### - -# change 'tests => 1' to 'tests => last_test_to_print'; - -use Test; -BEGIN { plan tests => 1 }; -use FS::SelfService; -ok(1); # If we made it this far, we're ok. - -######################### - -# Insert your test code below, the Test module is use()ed here so read -# its man page ( perldoc Test ) for help writing this test script. - diff --git a/fs_selfservice/fs_passwd_test b/fs_selfservice/fs_passwd_test deleted file mode 100755 index 4f8b8a888..000000000 --- a/fs_selfservice/fs_passwd_test +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use FS::SelfService qw(passwd); - -my $rv = passwd( - 'username' => 'ivan', - 'old_password' => 'heyhoo', - 'new_password' => 'haloo', -); -my $error = $rv->{error}; - -if ( $error eq 'Incorrect password.' ) { - exit; -} else { - die $error if $error; - die "no error"; -} - diff --git a/fs_selfservice/php/freeside.class.php b/fs_selfservice/php/freeside.class.php deleted file mode 100644 index 21e89b47f..000000000 --- a/fs_selfservice/php/freeside.class.php +++ /dev/null @@ -1,33 +0,0 @@ -URL); - - $request = xmlrpc_encode_request("FS.SelfService.XMLRPC.$name", $arguments); - $context = stream_context_create( array( 'http' => array( - 'method' => "POST", - 'header' => "Content-Type: text/xml", - 'content' => $request - ))); - $file = file_get_contents($this->URL, false, $context); - $response = xmlrpc_decode($file); - if (xmlrpc_is_fault($response)) { - trigger_error("[FreesideSelfService] XML-RPC communication error: $response[faultString] ($response[faultCode])"); - } else { - //error_log("[FreesideSelfService] $response"); - return $response; - } - } - -} - -?> diff --git a/fs_selfservice/php/freeside.login_example.php b/fs_selfservice/php/freeside.login_example.php deleted file mode 100644 index 69174a40a..000000000 --- a/fs_selfservice/php/freeside.login_example.php +++ /dev/null @@ -1,37 +0,0 @@ -login( array( - 'username' => strtolower($_POST['username']), - 'domain' => $domain, - 'password' => strtolower($_POST['password']), -) ); - -error_log("[login] received response from freeside: $response"); -$error = $response['error']; - -if ( ! $error ) { - - // sucessful login - - $session_id = $response['session_id']; - - error_log("[login] logged into freeside with session_id=$session_id"); - - // store session id in your session store, to be used for other calls - -} else { - - // unsucessful login - - error_log("[login] error logging into freeside: $error"); - - // display error message to user - -} - -?> diff --git a/fs_selfservice/php/freeside_signup_example.php b/fs_selfservice/php/freeside_signup_example.php deleted file mode 100644 index 8b1dc193c..000000000 --- a/fs_selfservice/php/freeside_signup_example.php +++ /dev/null @@ -1,49 +0,0 @@ -new_customer( array( - 'agentnum' => 1, - - 'first' => $_POST['first'], - 'last' => $_POST['last'], - 'address1' => $_POST['address1'], - 'address2' => $_POST['address2'], - 'city' => $_POST['city'], - 'state' => $_POST['state'], - 'zip' => $_POST['zip'], - 'country' => 'US', - 'daytime' => $_POST['daytime'], - 'fax' => $_POST['fax'], - - 'payby' => 'BILL', - 'invoicing_list' => $_POST['email'], - - 'pkgpart' => 2, - 'username' => strtolower($_POST['username']), - '_password' => strtolower($_POST['password']) -) ); - -error_log("[new_customer] received response from freeside: $response"); -$error = $response['error']; - -if ( ! $error ) { - - // sucessful signup - - $custnum = $response['custnum']; - - error_log("[new_customer] signup up with custnum $custnum"); - -} else { - - // unsucessful signup - - error_log("[new_customer] signup error:: $error"); - - // display error message to user - -} - -?> diff --git a/fs_sesmon/FS-SessionClient/Changes b/fs_sesmon/FS-SessionClient/Changes deleted file mode 100644 index 390a7b946..000000000 --- a/fs_sesmon/FS-SessionClient/Changes +++ /dev/null @@ -1,5 +0,0 @@ -Revision history for Perl extension FS::SessionClient - -0.01 Wed Oct 18 16:34:36 1999 - - original version; created by ivan 1.0 - diff --git a/fs_sesmon/FS-SessionClient/MANIFEST b/fs_sesmon/FS-SessionClient/MANIFEST deleted file mode 100644 index 162d4e453..000000000 --- a/fs_sesmon/FS-SessionClient/MANIFEST +++ /dev/null @@ -1,11 +0,0 @@ -Changes -MANIFEST -MANIFEST.SKIP -Makefile.PL -SessionClient.pm -test.pl -fs_sessiond -cgi/login.cgi -cgi/logout.cgi -bin/freeside-login -bin/freeside-logout diff --git a/fs_sesmon/FS-SessionClient/MANIFEST.SKIP b/fs_sesmon/FS-SessionClient/MANIFEST.SKIP deleted file mode 100644 index ae335e78a..000000000 --- a/fs_sesmon/FS-SessionClient/MANIFEST.SKIP +++ /dev/null @@ -1 +0,0 @@ -CVS/ diff --git a/fs_sesmon/FS-SessionClient/Makefile.PL b/fs_sesmon/FS-SessionClient/Makefile.PL deleted file mode 100644 index 137b6b8bd..000000000 --- a/fs_sesmon/FS-SessionClient/Makefile.PL +++ /dev/null @@ -1,10 +0,0 @@ -use ExtUtils::MakeMaker; -# See lib/ExtUtils/MakeMaker.pm for details of how to influence -# the contents of the Makefile that is written. -WriteMakefile( - 'NAME' => 'FS::SessionClient', - 'VERSION_FROM' => 'SessionClient.pm', # finds $VERSION - 'EXE_FILES' => [ qw(fs_sessiond bin/freeside-login bin/freeside-logout) ], - 'INSTALLSCRIPT' => '/usr/local/sbin', - 'PERM_RWX' => '750', -); diff --git a/fs_sesmon/FS-SessionClient/SessionClient.pm b/fs_sesmon/FS-SessionClient/SessionClient.pm deleted file mode 100644 index 0d3f86b4d..000000000 --- a/fs_sesmon/FS-SessionClient/SessionClient.pm +++ /dev/null @@ -1,118 +0,0 @@ -package FS::SessionClient; - -use strict; -use vars qw($AUTOLOAD $VERSION @ISA @EXPORT_OK $fs_sessiond_socket); -use Exporter; -use Socket; -use FileHandle; -use IO::Handle; - -$VERSION = '0.01'; - -@ISA = qw( Exporter ); -@EXPORT_OK = qw( login logout portnum ); - -$fs_sessiond_socket = "/usr/local/freeside/fs_sessiond_socket"; - -$ENV{'PATH'} ='/usr/bin:/bin'; -$ENV{'SHELL'} = '/bin/sh'; -$ENV{'IFS'} = " \t\n"; -$ENV{'CDPATH'} = ''; -$ENV{'ENV'} = ''; -$ENV{'BASH_ENV'} = ''; - -my $freeside_uid = scalar(getpwnam('freeside')); -die "not running as the freeside user\n" if $> != $freeside_uid; - -=head1 NAME - -FS::SessionClient - Freeside session client API - -=head1 SYNOPSIS - - use FS::SessionClient qw( login portnum logout ); - - $error = login ( { - 'username' => $username, - 'password' => $password, - 'login' => $timestamp, - 'portnum' => $portnum, - } ); - - $portnum = portnum( { 'ip' => $ip } ) or die "unknown ip!" - $portnum = portnum( { 'nasnum' => $nasnum, 'nasport' => $nasport } ) - or die "unknown nasnum/nasport"; - - $error = logout ( { - 'username' => $username, - 'password' => $password, - 'logout' => $timestamp, - 'portnum' => $portnum, - } ); - -=head1 DESCRIPTION - -This modules provides an API for a remote session application. - -It needs to be run as the freeside user. Because of this, the program which -calls these subroutines should be written very carefully. - -=head1 SUBROUTINES - -=over 4 - -=item login HASHREF - -HASHREF should have the following keys: username, password, login and portnum. -login is a UNIX timestamp; if not specified, will default to the current time. -Starts a new session for the specified user and portnum. The password is -optional, but must be correct if specified. - -Returns a scalar error message, or the empty string for success. - -=item portnum - -HASHREF should contain a single key: ip, or the two keys: nasnum and nasport. -Returns a portnum suitable for the login and logout subroutines, or false -on error. - -=item logout HASHREF - -HASHREF should have the following keys: usrename, password, logout and portnum. -logout is a UNIX timestamp; if not specified, will default to the current time. -Starts a new session for the specified user and portnum. The password is -optional, but must be correct if specified. - -Returns a scalar error message, or the empty string for success. - -=cut - -sub AUTOLOAD { - my $hashref = shift; - my $method = $AUTOLOAD; - $method =~ s/^.*:://; - socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; - connect(SOCK, sockaddr_un($fs_sessiond_socket)) or die "connect: $!"; - print SOCK "$method\n"; - - print SOCK join("\n", %{$hashref}, 'END' ), "\n"; - SOCK->flush; - - chomp( my $r = ); - $r; -} - -=back - -=head1 BUGS - -=head1 SEE ALSO - -L - -=cut - -1; - - - diff --git a/fs_sesmon/FS-SessionClient/bin/freeside-login b/fs_sesmon/FS-SessionClient/bin/freeside-login deleted file mode 100644 index a6d475169..000000000 --- a/fs_sesmon/FS-SessionClient/bin/freeside-login +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/perl -Tw - -#false-laziness hack w freeside-logout - -use strict; -use FS::SessionClient qw( login portnum ); - -my $username = shift; - -my $portnum; -if ( scalar(@ARGV) == 1 ) { - my $arg = shift; - if ( $arg =~ /^(\d+)$/ ) { - $portnum = $1; - } elsif ( $arg =~ /^([\d\.]+)$/ ) { - $portnum = portnum( { 'ip' => $1 } ) or die "unknown ip!" - } else { - &usage; - } -} elsif ( scalar(@ARGV) == 2 ) { - $portnum = portnum( { 'nasnum' => shift, 'nasport' => shift } ) - or die "unknown nasnum/nasport"; -} else { - &usage; -} - -my $error = login ( { - 'username' => $username, - 'portnum' => $portnum, -} ); - -warn $error if $error; - -sub usage { - die "Usage:\n\n freeside-login username ( portnum | ip | nasnum nasport )"; -} diff --git a/fs_sesmon/FS-SessionClient/bin/freeside-logout b/fs_sesmon/FS-SessionClient/bin/freeside-logout deleted file mode 100644 index 9b4ecfe23..000000000 --- a/fs_sesmon/FS-SessionClient/bin/freeside-logout +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/perl -Tw - -#false-laziness hack w freeside-login - -use strict; -use FS::SessionClient qw( logout portnum ); - -my $username = shift; - -my $portnum; -if ( scalar(@ARGV) == 1 ) { - my $arg = shift; - if ( $arg =~ /^(\d+)$/ ) { - $portnum = $1; - } elsif ( $arg =~ /^([\d\.]+)$/ ) { - $portnum = portnum( { 'ip' => $1 } ) or die "unknown ip!" - } else { - &usage; - } -} elsif ( scalar(@ARGV) == 2 ) { - $portnum = portnum( { 'nasnum' => shift, 'nasport' => shift } ) - or die "unknown nasnum/nasport"; -} else { - &usage; -} - -my $error = logout ( { - 'username' => $username, - 'portnum' => $portnum, -} ); - -warn $error if $error; - -sub usage { - die "Usage:\n\n freeside-logout username ( portnum | ip | nasnum nasport )"; -} diff --git a/fs_sesmon/FS-SessionClient/cgi/login.cgi b/fs_sesmon/FS-SessionClient/cgi/login.cgi deleted file mode 100644 index 0307c5a3d..000000000 --- a/fs_sesmon/FS-SessionClient/cgi/login.cgi +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/perl -Tw - -#false-laziness hack w logout.cgi - -use strict; -use vars qw( $cgi $username $password $error $ip $portnum ); -use CGI; -use CGI::Carp qw(fatalsToBrowser); -use FS::SessionClient qw( login portnum ); - -$cgi = new CGI; - -if ( defined $cgi->param('magic') ) { - $cgi->param('username') =~ /^\s*(\w{1,255})\s*$/ or do { - $error = "Illegal username"; - &print_form; - exit; - }; - $username = $1; - $cgi->param('password') =~ /^([^\n]{0,255})$/ or die "guru meditation #420"; - $password = $1; - #$ip = $cgi->remote_host; - $ip = $ENV{REMOTE_ADDR}; - $ip =~ /^([\d\.]+)$/ or die "illegal ip: $ip"; - $ip = $1; - $portnum = portnum( { 'ip' => $1 } ) or do { - $error = "You appear to be coming from an unknown IP address. Verify ". - "that your computer is set to obtain an IP address automatically ". - "via DHCP."; - &print_form; - exit; - }; - - ( $error = login ( { - 'username' => $username, - 'portnum' => $portnum, - 'password' => $password, - } ) ) - ? &print_form() - : &print_okay(); - -} else { - $username = ''; - $password = ''; - $error = ''; - &print_form; -} - -sub print_form { - my $self_url = $cgi->self_url; - - print $cgi->header( '-expires' => 'now' ), <login - -END - -print qq!Error: $error! if $error; - -print < - - - - - - - - - - - - - - - - -
    - Welcome -
    - Username - - -
    - Password - - -
    - -
    - - - -END - -} - -sub print_okay { - print $cgi->header( '-expires' => 'now' ), <login sucessful -login successful, etc. - - -END -} - -sub usage { - die "Usage:\n\n freeside-login username ( portnum | ip | nasnum nasport )"; -} diff --git a/fs_sesmon/FS-SessionClient/cgi/logout.cgi b/fs_sesmon/FS-SessionClient/cgi/logout.cgi deleted file mode 100644 index 95cef98d1..000000000 --- a/fs_sesmon/FS-SessionClient/cgi/logout.cgi +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/perl -Tw - -#false-laziness hack w login.cgi - -use strict; -use vars qw( $cgi $username $password $error $ip $portnum ); -use CGI; -use CGI::Carp qw(fatalsToBrowser); -use FS::SessionClient qw( logout portnum ); - -$cgi = new CGI; - -if ( defined $cgi->param('magic') ) { - $cgi->param('username') =~ /^\s*(\w{1,255})\s*$/ or do { - $error = "Illegal username"; - &print_form; - exit; - }; - $username = $1; - $cgi->param('password') =~ /^([^\n]{0,255})$/ or die "guru meditation #420"; - $password = $1; - #$ip = $cgi->remote_host; - $ip = $ENV{REMOTE_ADDR}; - $ip =~ /^([\d\.]+)$/ or die "illegal ip: $ip"; - $ip = $1; - $portnum = portnum( { 'ip' => $1 } ) or do { - $error = "You appear to be coming from an unknown IP address. Verify ". - "that your computer is set to obtain an IP address automatically ". - "via DHCP."; - &print_form; - exit; - }; - - ( $error = logout ( { - 'username' => $username, - 'portnum' => $portnum, - 'password' => $password, - } ) ) - ? &print_form() - : &print_okay(); - -} else { - $username = ''; - $password = ''; - $error = ''; - &print_form; -} - -sub print_form { - my $self_url = $cgi->self_url; - - print $cgi->header( '-expires' => 'now' ), <logout - -END - -print qq!Error: $error! if $error; - -print < - -Username
    -Password
    - - - - -END - -} - -sub print_okay { - print $cgi->header( '-expires' => 'now' ), <logout sucessful -logout successful, etc. - - -END -} - -sub usage { - die "Usage:\n\n freeside-logout username ( portnum | ip | nasnum nasport )"; -} diff --git a/fs_sesmon/FS-SessionClient/fs_sessiond b/fs_sesmon/FS-SessionClient/fs_sessiond deleted file mode 100644 index bfdb20a1d..000000000 --- a/fs_sesmon/FS-SessionClient/fs_sessiond +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/perl -Tw -# -# fs_sessiond -# -# This is run REMOTELY over ssh by fs_session_server -# - -use strict; -use Socket; - -use vars qw( $Debug ); - -$Debug = 1; - -my $fs_sessiond_socket = "/usr/local/freeside/fs_sessiond_socket"; - -$ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin'; -$ENV{'SHELL'} = '/bin/sh'; -$ENV{'IFS'} = " \t\n"; -$ENV{'CDPATH'} = ''; -$ENV{'ENV'} = ''; -$ENV{'BASH_ENV'} = ''; - -$|=1; - -my $me = "[fs_sessiond]"; - -warn "$me starting\n" if $Debug; -#nothing to read from server - -warn "$me creating $fs_sessiond_socket\n" if $Debug; -my $uaddr = sockaddr_un($fs_sessiond_socket); -my $proto = getprotobyname('tcp'); -socket(Server,PF_UNIX,SOCK_STREAM,0) or die "socket: $!"; -unlink($fs_sessiond_socket); -bind(Server, $uaddr) or die "bind: $!"; -listen(Server,SOMAXCONN) or die "listen: $!"; - -warn "$me entering main loop\n" if $Debug; -my $paddr; -for ( ; $paddr = accept(Client,Server); close Client) { - - chomp( my $command = ); - - if ( $command eq 'login' || $command eq 'logout' || $command eq 'portnum' ) { - warn "$me reading data from local client\n" if $Debug; - my @data; - my $dos = 0; - push @data, scalar() until $dos++ == 99 || $data[$#data] eq "END\n"; - if ( $dos == 99 ) { - warn "$me WARNING: DoS attempt!" - } else { - warn "$me sending data to remote server\n" if $Debug; - print "$command\n", @data; - warn "$me reading result from remote server\n" if $Debug; - my $error = ; - warn "$me sending error to local client\n" if $Debug; - print Client $error; - } - } else { - warn "$me WARNING: unexpected command from client: $command"; - } - -} - diff --git a/fs_sesmon/FS-SessionClient/test.pl b/fs_sesmon/FS-SessionClient/test.pl deleted file mode 100644 index 4b9ae17e0..000000000 --- a/fs_sesmon/FS-SessionClient/test.pl +++ /dev/null @@ -1,21 +0,0 @@ -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl test.pl' - -######################### We start with some black magic to print on failure. - -# Change 1..1 below to 1..last_test_to_print . -# (It may become useful if the test is moved to ./t subdirectory.) - -BEGIN { $| = 1; print "1..1\n"; } -END {print "not ok 1\n" unless $loaded;} -#use FS::SessionClient; -#sigh, "not running as the freeside user" -$loaded = 1; -print "ok 1\n"; - -######################### End of black magic. - -# Insert your test code below (better if it prints "ok 13" -# (correspondingly "not ok 13") depending on the success of chunk 13 -# of the test code): - diff --git a/fs_sesmon/fs_session_server b/fs_sesmon/fs_session_server deleted file mode 100644 index 00229f8dc..000000000 --- a/fs_sesmon/fs_session_server +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/perl -Tw -# -# fs_session_server -# - -use strict; -use vars qw( $opt $Debug ); -use IO::Handle; -use Net::SSH qw(sshopen2); -use FS::UID qw(adminsuidsetup dbh); -use FS::Record qw( qsearchs ); #qsearch ); -#use FS::cust_main_county; -#use FS::cust_main; -use FS::session; -use FS::port; -use FS::svc_acct; - -#require "configfile"; -$Debug = 1; - -my $user = shift or die &usage; -&adminsuidsetup( $user ); - -my $machine = shift or die &usage; - -my $fs_sessiond = "/usr/local/sbin/fs_sessiond"; - -my $me = "[fs_session_server]"; - -while (1) { - my($reader, $writer) = (new IO::Handle, new IO::Handle); - $writer->autoflush(1); - warn "$me Connecting to $machine\n" if $Debug; - sshopen2($machine,$reader,$writer,$fs_sessiond); - - warn "$me Entering main loop\n" if $Debug; - while (1) { - warn "$me Reading (waiting for) data\n" if $Debug; - my $command = scalar(<$reader>); - chomp $command; - #DoS protection here too, to protect against a compromised client? *sigh* - my %hash; - while ( ( my $key = scalar(<$reader>) ) ne "END\n" ) { - chomp $key; - chomp( $hash{$key} = scalar(<$reader>) ); - } - - if ( $command eq 'login' ) { - my $error = &login(\%hash); - print $writer "$error\n"; - } elsif ( $command eq 'logout' ) { - my $error = &logout(\%hash); - print $writer "$error\n"; - } elsif ( $command eq 'portnum' ) { - my $port; - if ( exists $hash{'ip'} ) { - $hash{'ip'} =~ /^([\d\.]+)$/ or $1='nomatch'; - $port = qsearchs('port', { 'ip' => $1 } ); - } else { - $hash{'nasnum'} =~ /^(\d+)$/ and my $nasnum = $1; - $hash{'nasport'} =~ /^(\d+)$/ and my $nasport = $1; - $port = qsearchs('port', { 'nasnum'=>$nasnum, 'nasport'=>$nasport } ); - } - print $writer ( $port ? $port->portnum : '' ), "\n"; - } else { - warn "$me WARNING: unrecognized command: $command"; - } - } - #won't ever reach without code above to throw out of loop, but... - close $writer; - close $reader; - warn "connection to $machine lost!\n"; - sleep 5; - warn "reconnecting...\n"; -} - -sub login { - my $href = shift; - $href->{'username'} =~ /^([a-z0-9_\-\.]+)$/ or return "Illegal username"; - my $username = $1; - my $svc_acct = qsearchs('svc_acct', { 'username' => $username } ) - or return "Unknown user"; - return "Incorrect password" - if exists($href->{'password'}) - && $href->{'password'} ne $svc_acct->_password; - return "Time limit exceeded" unless $svc_acct->seconds; - my $session = new FS::session { - 'portnum' => $href->{'portnum'}, - 'svcnum' => $svc_acct->svcnum, - 'login' => $href->{'login'}, - }; - $session->insert; -} - -sub logout { - my $href = shift; - $href->{'username'} =~ /^([a-z0-9_\-\.]+)$/ or return "Illegal username"; - my $username = $1; - local $FS::UID::AutoCommit = 0; - my $dbh = dbh; - my $svc_acct = - qsearchs('svc_acct', { 'username' => $username }, '', 'FOR UPDATE' ) - or return "Unknown user"; - return "Incorrect password" - if exists($href->{'password'}) - && $href->{'password'} ne $svc_acct->_password; - my $session = qsearchs( 'session', { - 'portnum' => $href->{'portnum'}, - 'svcnum' => $svc_acct->svcnum, - 'logout' => '', - }, - '', 'FOR UPDATE' - ); - unless ( $session ) { - $dbh->rollback; - return "No currently open sessions found for that user/port!"; - } - my $nsession = new FS::session ( { $session->hash } ); - warn "$nsession replacing $session"; - my $error = $nsession->replace($session); - if ( $error ) { - $dbh->rollback; - return "can't logout: $error"; - } - my $time = $nsession->logout - $nsession->login; - my $new_svc_acct = new FS::svc_acct ( { $svc_acct->hash } ); - my $seconds = $new_svc_acct->seconds; - $seconds -= $time; - $seconds = 0 if $seconds < 0; - $new_svc_acct->seconds( $seconds ); - $error = $new_svc_acct->replace( $svc_acct ); - warn "can't debit time: $error\n"; #don't want to rollback, though - $dbh->commit or die $dbh->errstr; - '' -} - -sub usage { - die "Usage:\n\n fs_session_server user machine\n"; -} - diff --git a/htetc/freeside-base1.99.conf b/htetc/freeside-base1.99.conf deleted file mode 100644 index c1c187c8d..000000000 --- a/htetc/freeside-base1.99.conf +++ /dev/null @@ -1,21 +0,0 @@ -PerlModule Apache::compat - -#PerlModule Apache::DBI - -PerlModule HTML::Mason -PerlSetVar MasonArgsMethod CGI -PerlModule HTML::Mason::ApacheHandler - -PerlRequire "%%%MASON_HANDLER%%%" - - -AuthName Freeside -AuthType Basic -AuthUserFile /usr/local/etc/freeside/htpasswd -require valid-user - -SetHandler perl-script -PerlHandler HTML::Mason - - - diff --git a/htetc/freeside-base1.conf b/htetc/freeside-base1.conf deleted file mode 100644 index 3f6bd0ee3..000000000 --- a/htetc/freeside-base1.conf +++ /dev/null @@ -1,18 +0,0 @@ -#PerlModule Apache::DBI - -PerlModule HTML::Mason - - -AuthName Freeside -AuthType Basic -AuthUserFile /usr/local/etc/freeside/htpasswd -require valid-user - -AddHandler perl-script .cgi .html -PerlHandler HTML::Mason - - -require "%%%MASON_HANDLER%%%"; - - - diff --git a/htetc/freeside-base2.conf b/htetc/freeside-base2.conf deleted file mode 100644 index 38f784068..000000000 --- a/htetc/freeside-base2.conf +++ /dev/null @@ -1,21 +0,0 @@ -PerlModule Apache2::compat - -#PerlModule Apache::DBI - -PerlModule HTML::Mason -PerlSetVar MasonArgsMethod CGI -PerlModule HTML::Mason::ApacheHandler - -PerlRequire "%%%MASON_HANDLER%%%" - - -AuthName Freeside -AuthType Basic -AuthUserFile /usr/local/etc/freeside/htpasswd -require valid-user - -SetHandler perl-script -PerlHandler HTML::Mason - - - diff --git a/htetc/freeside-rt.conf b/htetc/freeside-rt.conf deleted file mode 100644 index 9b5ccf807..000000000 --- a/htetc/freeside-rt.conf +++ /dev/null @@ -1,36 +0,0 @@ - - -allow from all -Satisfy any -SetHandler perl-script -PerlHandler HTML::Mason - - - - - -allow from all -Satisfy any -SetHandler perl-script -PerlHandler HTML::Mason - - - - -SetHandler None - - - -SetHandler perl-script -PerlHandler HTML::Mason - - - -SetHandler perl-script -PerlHandler HTML::Mason - - - -SetHandler perl-script -PerlHandler HTML::Mason - diff --git a/htetc/handler.pl b/htetc/handler.pl deleted file mode 100644 index caa266df0..000000000 --- a/htetc/handler.pl +++ /dev/null @@ -1,390 +0,0 @@ -#!/usr/bin/perl - -package HTML::Mason; - -use strict; -use vars qw($r); -use HTML::Mason 1.27; #http://www.masonhq.com/?ApacheModPerl2Redirect -use HTML::Mason::Interp; -use HTML::Mason::Compiler::ToObject; - -# Bring in ApacheHandler, necessary for mod_perl integration. -# Uncomment the second line (and comment the first) to use -# Apache::Request instead of CGI.pm to parse arguments. -use HTML::Mason::ApacheHandler; -# use HTML::Mason::ApacheHandler (args_method=>'mod_perl'); - -###use Module::Refresh;### - -# List of modules that you want to use from components (see Admin -# manual for details) -#{ package HTML::Mason::Commands; -# use CGI; -#} - -if ( %%%RT_ENABLED%%% ) { - eval ' - use lib ( "/opt/rt3/local/lib", "/opt/rt3/lib" ); - use RT; - use vars qw($Nobody $SystemUser); - RT::LoadConfig(); - '; - die $@ if $@; -} - -# Create Mason objects - -my %interp = ( - request_class => 'HTML::Mason::Request::ApacheHandler', - data_dir => '%%%MASONDATA%%%', - error_mode => 'output', - error_format => 'html', - ignore_warnings_expr => '.', - comp_root => [ - [ 'freeside' => '%%%FREESIDE_DOCUMENT_ROOT%%%' ], - [ 'rt' => '%%%FREESIDE_DOCUMENT_ROOT%%%/rt' ], - ], -); - -my $fs_interp = new HTML::Mason::Interp ( - %interp, - escape_flags => { 'js_string' => sub { - #${$_[0]} =~ s/(['\\\n])/'\\'.($1 eq "\n" ? 'n' : $1)/ge; - ${$_[0]} =~ s/(['\\])/\\$1/g; - ${$_[0]} =~ s/\n/\\n/g; - ${$_[0]} = "'". ${$_[0]}. "'"; - } - }, -); - -my $rt_interp = new HTML::Mason::Interp ( - %interp, - escape_flags => { 'h' => \&RT::Interface::Web::EscapeUTF8 }, - compiler => HTML::Mason::Compiler::ToObject->new( - default_escape_flags => 'h', - allow_globals => [qw(%session)], - ), -); - -my $ah = new HTML::Mason::ApacheHandler ( - interp => $fs_interp, - args_method => 'CGI', #(and FS too) -); - -# Activate the following if running httpd as root (the normal case). -# Resets ownership of all files created by Mason at startup. -# -#chown (Apache->server->uid, Apache->server->gid, $interp->files_written); - -sub handler -{ - ($r) = @_; - - # If you plan to intermix images in the same directory as - # components, activate the following to prevent Mason from - # evaluating image files as components. - # - #return -1 if $r->content_type && $r->content_type !~ m|^text/|i; - - #rar - { package HTML::Mason::Commands; - use strict; - use vars qw( $cgi $p $fsurl); - use vars qw( %session ); - use CGI 2.47 qw(-private_tempfiles); - #use CGI::Carp qw(fatalsToBrowser); - use CGI::Cookie; - use List::Util qw( max min ); - use Data::Dumper; - use Date::Format; - use Date::Parse; - use Time::Local; - use Time::Duration; - use DateTime; - use DateTime::Format::Strptime; - use Lingua::EN::Inflect qw(PL); - use Tie::IxHash; - use URI::Escape; - use HTML::Entities; - use JSON; - use MIME::Base64; - use IO::Handle; - use IO::File; - use IO::Scalar; - #not actually using this yet anyway...# use IPC::Run3 0.036; - use Net::Whois::Raw qw(whois); - if ( $] < 5.006 ) { - eval "use Net::Whois::Raw 0.32 qw(whois)"; - die $@ if $@; - } - use Text::CSV_XS; - use Spreadsheet::WriteExcel; - use Business::CreditCard 0.30; #for mask-aware cardtype() - use NetAddr::IP; - use String::Approx qw(amatch); - use Chart::LinesPoints; - use Chart::Mountain; - use Color::Scheme; - use HTML::Widgets::SelectLayers 0.07; - use Locale::Country; - use FS; - use FS::UID qw(cgisuidsetup dbh getotaker datasrc driver_name); - use FS::Record qw(qsearch qsearchs fields dbdef str2time_sql); - use FS::Conf; - use FS::CGI qw(header menubar popurl rooturl table itable ntable idiot - eidiot small_custview myexit http_header); - use FS::UI::Web qw(svc_url); - use FS::UI::bytecount; - use FS::Msgcat qw(gettext geterror); - use FS::Misc qw( send_email send_fax states_hash counties state_label ); - use FS::Report::Table::Monthly; - use FS::TicketSystem; - - use FS::agent; - use FS::agent_type; - use FS::domain_record; - use FS::cust_bill; - use FS::cust_bill_pay; - use FS::cust_credit; - use FS::cust_credit_bill; - use FS::cust_main qw(smart_search); - use FS::cust_main_county; - use FS::part_pkg_taxclass; - use FS::cust_pay; - use FS::cust_pkg; - use FS::cust_pkg_reason; - use FS::cust_refund; - use FS::cust_svc; - use FS::nas; - use FS::part_bill_event; - use FS::part_event; - use FS::part_event_condition; - use FS::part_pkg; - use FS::part_referral; - use FS::part_svc; - use FS::part_svc_router; - use FS::part_virtual_field; - use FS::pay_batch; - use FS::pkg_svc; - use FS::port; - use FS::queue qw(joblisting); - use FS::raddb; - use FS::session; - use FS::svc_acct; - use FS::svc_acct_pop qw(popselector); - use FS::acct_rt_transaction; - use FS::svc_domain; - use FS::svc_forward; - use FS::svc_www; - use FS::router; - use FS::addr_block; - use FS::svc_broadband; - use FS::svc_external; - use FS::type_pkgs; - use FS::part_export; - use FS::part_export_option; - use FS::export_svc; - use FS::msgcat; - use FS::rate; - use FS::rate_region; - use FS::rate_prefix; - use FS::payment_gateway; - use FS::agent_payment_gateway; - use FS::XMLRPC; - use FS::payby; - use FS::cdr; - use FS::inventory_class; - use FS::inventory_item; - use FS::pkg_class; - use FS::access_user; - use FS::access_user_pref; - use FS::access_group; - use FS::access_usergroup; - use FS::access_groupagent; - use FS::access_right; - use FS::AccessRight; - use FS::svc_phone; - use FS::reason_type; - use FS::reason; - use FS::cust_main_note; - - if ( %%%RT_ENABLED%%% ) { - eval ' - use RT::Tickets; - use RT::Transactions; - use RT::Users; - use RT::CurrentUser; - use RT::Templates; - use RT::Queues; - use RT::ScripActions; - use RT::ScripConditions; - use RT::Scrips; - use RT::Groups; - use RT::GroupMembers; - use RT::CustomFields; - use RT::CustomFieldValues; - use RT::ObjectCustomFieldValues; - - #blah. manually updated from RT::Interface::Web::Handler - use RT::Interface::Web; - use MIME::Entity; - use Text::Wrapper; - use Time::ParseDate; - use Time::HiRes; - use HTML::Scrubber; - - #slow, unreliable, segfaults and is optional - #see rt/html/Ticket/Elements/ShowTransactionAttachments - #use Text::Quoted; - - #?#use File::Path qw( rmtree ); - #?#use File::Glob qw( bsd_glob ); - #?#use File::Spec::Unix; - - '; - die $@ if $@; - } - - *CGI::redirect = sub { - my $self = shift; - my $cookie = ''; - if ( $_[0] eq '-cookie' ) { #this isn't actually used at the moment - (my $x, $cookie) = (shift, shift); - $HTML::Mason::r->err_headers_out->add( 'Set-cookie' => $cookie ); - } - my $location = shift; - - use vars qw($m); - - # false laziness w/below - if ( defined(@DBIx::Profile::ISA) ) { #profiling redirect - - my $page = - qq!Redirect to $location!. - '

    '.
    -              ( UNIVERSAL::can(dbh, 'sprintProfile')
    -                  ? encode_entities(dbh->sprintProfile())
    -                  : 'DBIx::Profile missing sprintProfile method;'.
    -                    'unpatched or too old?'                        ).
    -            #"\n\n". &sprintAutoProfile().  '
    '. - "\n\n". ''. - ''; - dbh->{'private_profile'} = {}; - return $page; - - } else { #normal redirect - - $m->redirect($location); - ''; - - } - - }; - - unless ( $HTML::Mason::r->filename =~ /\/rt\/.*NoAuth/ ) { #RT - $cgi = new CGI; - &cgisuidsetup($cgi); - #&cgisuidsetup($r); - $p = popurl(2); - $fsurl = rooturl(); - } - - sub include { - use vars qw($m); - $m->scomp(@_); - } - - sub errorpage { - use vars qw($m); - $m->comp('/elements/errorpage.html', @_); - } - - sub redirect { - my( $location ) = @_; - use vars qw($m); - $m->clear_buffer; - #false laziness w/above - if ( defined(@DBIx::Profile::ISA) ) { #profiling redirect - - $m->print( - qq!Redirect to $location!. - '

    '.
    -              ( UNIVERSAL::can(dbh, 'sprintProfile')
    -                  ? encode_entities(dbh->sprintProfile())
    -                  : 'DBIx::Profile missing sprintProfile method;'.
    -                    'unpatched or too old?'                        ).
    -            #"\n\n". &sprintAutoProfile().  '
    '. - "\n\n". ''. - '' - ); - dbh->{'private_profile'} = {}; - - #whew. removing this is all that's needed to fix the annoying - #blank-page-instead-of-profiling-redirect-when-called-from-an-include - #bug triggered by mason 1.32 - #my $rv = $m->abort(200); - - } else { #normal redirect - - $m->redirect($location); - - } - - } - - } # end package HTML::Mason::Commands; - - ###Module::Refresh->refresh;### - - $r->content_type('text/html'); - #eorar - - my $headers = $r->headers_out; - $headers->{'Cache-control'} = 'no-cache'; - #$r->no_cache(1); - $headers->{'Expires'} = '0'; - -# $r->send_http_header; - - if ( $r->filename =~ /\/rt\// ) { #RT - - $ah->interp($rt_interp); - - local $SIG{__WARN__}; - local $SIG{__DIE__}; - - RT::Init(); - - # We don't need to handle non-text, non-xml items - return -1 if defined( $r->content_type ) - && $r->content_type !~ m!(^text/|\bxml\b)!io; - - } else { - - $ah->interp($fs_interp); - - } - - my %session; - my $status; - eval { $status = $ah->handle_request($r); }; -#!! -# if ( $@ ) { -# $RT::Logger->crit($@); -# } - warn $@ if $@; - - undef %session; - -#!! -# if ($RT::Handle->TransactionDepth) { -# $RT::Handle->ForceRollback; -# $RT::Logger->crit( -#"Transaction not committed. Usually indicates a software fault. Data loss may have occurred" -# ); -# } - - $status; -} - -1; diff --git a/httemplate/.htaccess b/httemplate/.htaccess deleted file mode 100755 index f8c6b9c0c..000000000 --- a/httemplate/.htaccess +++ /dev/null @@ -1,3 +0,0 @@ -AuthName Freeside -AuthType Basic -require valid-user diff --git a/httemplate/autohandler b/httemplate/autohandler deleted file mode 100644 index bdea50534..000000000 --- a/httemplate/autohandler +++ /dev/null @@ -1,35 +0,0 @@ -% $m->call_next; -<%init> - dbh->{'private_profile'} = {} if UNIVERSAL::can(dbh, 'sprintProfile'); - -<%filter> - -my $profile = ''; -if ( UNIVERSAL::can(dbh, 'sprintProfile') ) { - - if ( lc($r->content_type) eq 'text/html' ) { - - ## barely worth it, just in case someone tries to use profiling on a - ## non-RT install - #eval "use Text::Wrapper;"; - #die $@ if $@; - - my $wrapper = new Text::Wrapper( columns => 80 ); - my $text = dbh->sprintProfile(); - #my $text = $wrapper->wrap( dbh->sprintProfile() ); - $text =~ s/^/ /mg; - - $profile = '
    '.
    -               encode_entities( $text ).
    -               #"\n\n". &sprintAutoProfile(). '
    '; - "\n\n". ''; - } - - dbh->{'private_profile'} = {}; -} - -s/(<\/BODY>[\s\n]*<\/HTML>[\s\n]*)$/$profile$1/i; - -<%cleanup> - dbh->commit(); - diff --git a/httemplate/browse/access_group.html b/httemplate/browse/access_group.html deleted file mode 100644 index 736ab9c62..000000000 --- a/httemplate/browse/access_group.html +++ /dev/null @@ -1,108 +0,0 @@ -<% include( 'elements/browse.html', - 'title' => 'Internal Access Groups', - 'menubar' => [ 'Internal users' => $p.'browse/access_user.html', ], - 'html_init' => $html_init, - 'name' => 'internal access groups', - 'query' => { 'table' => 'access_group', - 'hashref' => {}, - 'extra_sql' => 'ORDER BY groupname', #?? - }, - 'count_query' => $count_query, - 'header' => [ '#', - 'Group name', - 'Agents', - 'Rights', - ], - 'fields' => [ 'groupnum', - 'groupname', - $agents_sub, - $rights_sub, - ], - 'links' => [ $link, - $link, - '', - '', - ], - ) -%> -<%once> - -my $html_init = - "Internal access groups control access to the back-office interface.

    ". - qq!Add an internal access group

    !; - -#false laziness w/access_user.html & agent_type.cgi -my $agents_sub = sub { - my $access_group = shift; - - [ map { - my $access_groupagent = $_; - my $agent = $access_groupagent->agent; - [ - { - 'data' => $agent->agent, - 'align' => 'left', - 'link' => $p. 'edit/agent.cgi?'. $agent->agentnum, - }, - ]; - } - grep { $_->agent } #? - $access_group->access_groupagent, - - ]; - -}; - -tie my %rights, 'Tie::IxHash', FS::AccessRight->rights_info; - -my $rights_sub = sub { - my $access_group = shift; - - #[ map { my $access_right = $_; - # [ - # { - # 'data' => $access_right->rightname, - # 'align' => 'left', - # }, - # ]; - # } - # $access_group->access_rights, - #]; - - #some false laziness w/edit/access_group.html - my $columns = 3; - my $count = 0; - - #include('/elements/table-grid.html', bgcolor=>'#cccccc' ). - ''. - ''. join( '', map { - - ''. - ( ++$count % $columns ? '' : '') - - } keys %rights ). '
    '. - ''. - '
    '. $_. '
    '. - - join('
    ', grep { warn "$access_group->access_right($_): ". - $access_group->access_right($_). "\n"; - $access_group->access_right($_); } - map { ref($_) ? $_->{'rightname'} : $_; } - @{ $rights{$_} } - ). - - '
    '; - -}; - -my $count_query = 'SELECT COUNT(*) FROM access_group'; - -my $link = [ $p.'edit/access_group.html?', 'groupnum' ]; - - -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - - diff --git a/httemplate/browse/access_user.html b/httemplate/browse/access_user.html deleted file mode 100644 index 2aa752b73..000000000 --- a/httemplate/browse/access_user.html +++ /dev/null @@ -1,61 +0,0 @@ -<% include( 'elements/browse.html', - 'title' => 'Internal Users', - 'menubar' => [ 'Internal access groups' => $p.'browse/access_group.html', ], - 'html_init' => $html_init, - 'name' => 'internal users', - 'disableable' => 1, - 'disabled_statuspos' => 2, - 'query' => { 'table' => 'access_user', - 'hashref' => {}, - 'extra_sql' => 'ORDER BY last, first' - }, - 'count_query' => $count_query, - 'header' => \@header, - 'fields' => \@fields, - 'links' => \@links, - 'align' => $align, - ) -%> -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -my $html_init = - "Internal users have access to the back-office interface. Typically, this is your employees and contractors. In a VISP setup, you can also add accounts for your reseller's employees.

    It is highly recommended to add a separate account for each person rather than using role accounts.

    ". - qq!Add an internal user

    !; - -#false laziness w/access_group.html & agent_type.cgi -my $groups_sub = sub { - my $access_user = shift; - - [ map { - my $access_usergroup = $_; - my $access_group = $access_usergroup->access_group; - [ - { - 'data' => $access_group->groupname, - 'align' => 'left', - 'link' => - $p. 'edit/access_group.html?'. $access_usergroup->groupnum, - }, - ]; - } - grep { $_->access_group # and ! $_->access_group->disabled - } - $access_user->access_usergroup, - - ]; - -}; - -my $count_query = 'SELECT COUNT(*) FROM access_user'; - -my $link = [ $p.'edit/access_user.html?', 'usernum' ]; - -my @header = ( '#', 'Username', 'Full name', 'Groups' ); -my @fields = ( 'usernum', 'username', 'name', $groups_sub ); -my $align = 'rlll'; -my @links = ( $link, $link, $link, '' ); - - diff --git a/httemplate/browse/addr_block.cgi b/httemplate/browse/addr_block.cgi deleted file mode 100644 index 7a9351918..000000000 --- a/httemplate/browse/addr_block.cgi +++ /dev/null @@ -1,91 +0,0 @@ -<% include('/elements/header.html', 'Address Blocks') %> - -<% include('/elements/error.html') %> - -<% include('/elements/table-grid.html') %> -% my $bgcolor1 = '#eeeeee'; -% my $bgcolor2 = '#ffffff'; -% my $bgcolor = ''; - - - Address block(s) - Router - Action(s) - - -% foreach $block (sort {$a->NetAddr cmp $b->NetAddr} @addr_block) { -% if ( $bgcolor eq $bgcolor1 ) { -% $bgcolor = $bgcolor2; -% } else { -% $bgcolor = $bgcolor1; -% } - - - <%$block->NetAddr%> - -% if (my $router = $block->router) { -% -% if (scalar($block->svc_broadband) == 0) { - - - <%$router->routername%> - - -
    - - -
    - -% } else { - - - <%$router->routername%> - -% } -% -% } else { - - -
    - - - -
    - - -
    - - -
    - - -% } - - -% } - - - -

    -
    -Gateway/Netmask: -/ - - -<% include('/elements/footer.html') %> -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -my @addr_block = qsearch('addr_block', {}); -my @router = qsearch('router', {}); -my $block; -my $p2 = popurl(2); -my $path = $p2 . "edit/process/addr_block"; - - diff --git a/httemplate/browse/agent.cgi b/httemplate/browse/agent.cgi deleted file mode 100755 index 234bfa74a..000000000 --- a/httemplate/browse/agent.cgi +++ /dev/null @@ -1,401 +0,0 @@ -<% include("/elements/header.html",'Agent Listing', menubar( - 'Agent Types' => $p. 'browse/agent_type.cgi', -# 'Add new agent' => '../edit/agent.cgi' -)) %> -Agents are resellers of your service. Agents may be limited to a subset of your -full offerings (via their type).

    -Add a new agent

    -% if ( dbdef->table('agent')->column('disabled') ) { - - <% $cgi->param('showdisabled') - ? do { $cgi->param('showdisabled', 0); - '( hide disabled agents )'; } - : do { $cgi->param('showdisabled', 1); - '( show disabled agents )'; } - %> -% } - - -<% include('/elements/table-grid.html') %> -% my $bgcolor1 = '#eeeeee'; -% my $bgcolor2 = '#ffffff'; -% my $bgcolor = ''; -% - - - - param('showdisabled') || !dbdef->table('agent')->column('disabled') ) ? 2 : 3 %>>Agent - Type - Invoice
    Template
    - Customers - Customer
    packages
    - Reports - Registration
    codes
    - Prepaid cards -% if ( $conf->config('ticket_system') ) { - - Ticketing -% } - - Payment Gateway Overrides - Configuration Overrides - -% -%# Agent # -%# Agent -% -%foreach my $agent ( sort { -% #$a->getfield('agentnum') <=> $b->getfield('agentnum') -% $a->getfield('agent') cmp $b->getfield('agent') -%} qsearch('agent', \%search ) ) { -% -% my $cust_main_link = $p. 'search/cust_main.cgi?agentnum_on=1&'. -% 'agentnum='. $agent->agentnum; -% -% my $cust_pkg_link = $p. 'search/cust_pkg.cgi?agentnum='. $agent->agentnum; -% -% if ( $bgcolor eq $bgcolor1 ) { -% $bgcolor = $bgcolor2; -% } else { -% $bgcolor = $bgcolor1; -% } -% -% - - - - - - <% $agent->agentnum %> - - -% if ( dbdef->table('agent')->column('disabled') -% && !$cgi->param('showdisabled') ) { - - <% $agent->disabled ? 'DISABLED' : '' %> - -% } - - - <% $agent->agent %> - - - - <% $agent->agent_type->atype %> - - - - <% $agent->invoice_template || '(Default)' %> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - <% my $num_prospect = $agent->num_prospect_cust_main %>  - - -% if ( $num_prospect ) { - - -% } -prospects -% if ($num_prospect ) { - -% } - - -
    - - <% my $num_inactive = $agent->num_inactive_cust_main %>  - - -% if ( $num_inactive ) { - - -% } -inactive -% if ( $num_inactive ) { - -% } - -
    - - <% my $num_active = $agent->num_active_cust_main %>  - - -% if ( $num_active ) { - - -% } -active -% if ( $num_active ) { - -% } - -
    - - <% my $num_susp = $agent->num_susp_cust_main %>  - - -% if ( $num_susp ) { - - -% } -suspended -% if ( $num_susp ) { - -% } - -
    - - <% my $num_cancel = $agent->num_cancel_cust_main %>  - - -% if ( $num_cancel ) { - - -% } -cancelled -% if ( $num_cancel ) { - -% } - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - <% my $num_inactive_pkg = $agent->num_inactive_cust_pkg %>  - - -% if ( $num_inactive_pkg ) { - - -% } -inactive -% if ( $num_inactive_pkg ) { - -% } - -
    - - <% my $num_active_pkg = $agent->num_active_cust_pkg %>  - - -% if ( $num_active_pkg ) { - - -% } -active -% if ( $num_active_pkg ) { - -% } - -
    - - <% my $num_susp_pkg = $agent->num_susp_cust_pkg %>  - - - -% if ( $num_susp_pkg ) { - - -% } -suspended -% if ( $num_susp_pkg ) { - -% } - -
    - - <% my $num_cancel_pkg = $agent->num_cancel_cust_pkg %>  - - -% if ( $num_cancel_pkg ) { - - -% } -cancelled -% if ( $num_cancel_pkg ) { - -% } - -
    - - - - Package Churn -
    Payments -
    Credits -
    A/R Aging - - - - - - <% my $num_reg_code = $agent->num_reg_code %> -% if ( $num_reg_code ) { - - -% } -Unused -% if ( $num_reg_code ) { - -% } - -
    Generate codes - - - - <% my $num_prepay_credit = $agent->num_prepay_credit %> -% if ( $num_prepay_credit ) { - - -% } -Unused -% if ( $num_prepay_credit ) { - -% } - -
    Generate cards - -% if ( $conf->config('ticket_system') ) { - - - -% if ( $agent->ticketing_queueid ) { - - Queue: <% $agent->ticketing_queueid %>: <% $agent->ticketing_queue %>
    -% } - - -% } - - - - -% foreach my $override ( -% # sort { } want taxclass-full stuff first? and default cards (empty cardtype) -% qsearch('agent_payment_gateway', { 'agentnum' => $agent->agentnum } ) -% ) { -% - - - - -% } - - - - -
    - <% $override->cardtype || 'Default' %> to <% $override->payment_gateway->gateway_module %> (<% $override->payment_gateway->gateway_username %>) - <% $override->taxclass - ? ' for '. $override->taxclass. ' only' - : '' - %> - (delete) -
    (add override)
    - - - - -% foreach my $override ( -% qsearch('conf', { 'agentnum' => $agent->agentnum } ) -% ) { -% - - - - -% } - - - - -
    - <% $override->name %> - (delete) -
    (add override)
    - - - -% } - - - - - -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -my %search; -if ( $cgi->param('showdisabled') - || !dbdef->table('agent')->column('disabled') ) { - %search = (); -} else { - %search = ( 'disabled' => '' ); -} - -my $conf = new FS::Conf; - - diff --git a/httemplate/browse/agent_type.cgi b/httemplate/browse/agent_type.cgi deleted file mode 100755 index d64ff186a..000000000 --- a/httemplate/browse/agent_type.cgi +++ /dev/null @@ -1,61 +0,0 @@ -<% include( 'elements/browse.html', - 'title' => 'Agent Types', - 'menubar' => [ 'Agents' =>"${p}browse/agent.cgi", ], - 'html_init' => $html_init, - 'name' => 'agent types', - 'query' => { 'table' => 'agent_type', - 'hashref' => {}, - 'extra_sql' => 'ORDER BY typenum', # 'ORDER BY atype', - }, - 'count_query' => $count_query, - 'header' => [ '#', - 'Agent Type', - 'Packages', - ], - 'fields' => [ 'typenum', - 'atype', - $packages_sub, - ], - 'links' => [ $link, - $link, - '', - ], - ) -%> -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -my $html_init = -'Agent types define groups of packages that you can then assign to'. -' particular agents.

    '. -qq!Add a new agent type

    !; - -my $count_query = 'SELECT COUNT(*) FROM agent_type'; - -#false laziness w/access_user.html -my $packages_sub = sub { -my $agent_type = shift; - -[ map { - my $type_pkgs = $_; - #my $part_pkg = $type_pkgs->part_pkg; - [ - { - #'data' => $part_pkg->pkg. ' - '. $part_pkg->comment, - 'data' => $type_pkgs->pkg. ' - '. $type_pkgs->comment, - 'align' => 'left', - 'link' => $p. 'edit/part_pkg.cgi?'. $type_pkgs->pkgpart, - }, - ]; - } - - $agent_type->type_pkgs_enabled -]; - -}; - -my $link = [ $p.'edit/agent_type.cgi?', 'typenum' ]; - - diff --git a/httemplate/browse/cust_main_county.cgi b/httemplate/browse/cust_main_county.cgi deleted file mode 100755 index 12bdeb333..000000000 --- a/httemplate/browse/cust_main_county.cgi +++ /dev/null @@ -1,288 +0,0 @@ -<% include( 'elements/browse.html', - 'title' => "Tax Rates $title", - 'name_singular' => 'tax rate', - 'menubar' => \@menubar, - 'html_init' => $html_init, - 'html_posttotal' => $html_posttotal, - 'query' => { - 'table' => 'cust_main_county', - 'hashref' => $hashref, - 'order_by' => - 'ORDER BY country, state, county, taxclass', - }, - 'count_query' => $count_query, - 'header' => \@header, - 'header2' => \@header2, - 'fields' => \@fields, - 'align' => $align, - 'color' => \@color, - 'cell_style' => \@cell_style, - 'links' => \@links, - 'link_onclicks' => \@link_onclicks, - ) -%> -% -% # collapse state -% # % } -% -<%once> - -my $conf = new FS::Conf; -my $money_char = $conf->config('money_char') || '$'; - -my @manual_countries = ( 'US', 'CA', 'AU', 'NZ', 'GB' ); #some manual ordering -my @all_countries = ( @manual_countries, - grep { my $c = $_; ! grep { $c eq $_ } @manual_countries } - map { $_->country } - qsearch({ - 'select' => 'country', - 'table' => 'cust_main_county', - 'hashref' => {}, - 'extra_sql' => 'GROUP BY country', - }) - ); - -my $exempt_sub = sub { - my $cust_main_county = shift; - - my @exempt = (); - push @exempt, - sprintf("$money_char%.2f per month", $cust_main_county->exempt_amount ) - if $cust_main_county->exempt_amount > 0; - - push @exempt, 'Setup fee' - if $cust_main_county->setuptax =~ /^Y$/i; - - push @exempt, 'Recurring fee' - if $cust_main_county->recurtax =~ /^Y$/i; - - [ map [ {'data'=>$_} ], @exempt ]; -}; - -my $oldrow; -my $cell_style; -my $cell_style_sub = sub { - my $row = shift; - if ( $oldrow ne $row ) { - if ( $oldrow ) { - if ( $oldrow->country ne $row->country ) { - $cell_style = 'border-top:1px solid #000000'; - } elsif ( $oldrow->state ne $row->state ) { - $cell_style = 'border-top:1px solid #cccccc'; #default? - } elsif ( $oldrow->state eq $row->state ) { - #$cell_style = 'border-top:dashed 1px dark gray'; - $cell_style = 'border-top:1px dashed #cccccc'; - } - } - $oldrow = $row; - } - return $cell_style; -}; - -#my $edit_link = [ "${p}edit/cust_main_county.html", 'taxnum' ]; -my $edit_link = [ 'javascript:void(0);', sub { ''; } ]; - -my $edit_onclick = sub { - my $row = shift; - my $taxnum = $row->taxnum; - my $color = '#333399'; - qq!overlib( OLiframeContent('${p}edit/cust_main_county.html?$taxnum', 540, 420, 'edit_cust_main_county_popup' ), CAPTION, 'Edit tax rate', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '$color', CGCOLOR, '$color' ); return false;!; -}; - -sub expand_link { - my( $row, $desc ) = @_; - my $taxnum = $row->taxnum; - my $url = "${p}edit/cust_main_county-expand.cgi?$taxnum"; - my $color = '#333399'; - - qq!!; -} - -sub separate_taxclasses_link { - my( $row ) = @_; - my $taxnum = $row->taxnum; - my $url = "${p}edit/process/cust_main_county-expand.cgi?taxclass=1;taxnum=$taxnum"; - - qq!!; -} - - -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -#my $conf = new FS::Conf; -#my $money_char = $conf->config('money_char') || '$'; -my $enable_taxclasses = $conf->exists('enable_taxclasses'); - -my @menubar; - -my $html_init = - "Click on add states to specify a country's tax rates by state or province. -
    Click on add counties to specify a state's tax rates by county."; -$html_init .= "
    Click on separate taxclasses to specify taxes per taxclass." - if $enable_taxclasses; -$html_init .= '

    '; - -$html_init .= qq( - - - - -); - -my $title = ''; - -my $country = ''; -if ( $cgi->param('country') =~ /^(\w\w)$/ ) { - $country = $1; - $title = $country; -} -$cgi->delete('country'); - -my $state = ''; -if ( $cgi->param('state') =~ /^([\w \-\'\[\]]+)$/ ) { - $state = $1; - $title = "$state, $title"; -} -$cgi->delete('state'); - -my $county = ''; -if ( $cgi->param('county') =~ /^([\w \-\'\[\]]+)$/ ) { - $county = $1; - $title = "$county county, $title"; -} -$cgi->delete('county'); - -$title = " for $title" if $title; - -my $taxclass = ''; -if ( $cgi->param('taxclass') =~ /^([\w \-]+)$/ ) { - $taxclass = $1; - $title .= " for $taxclass tax class"; -} -$cgi->delete('taxclass'); - -if ( $country || $taxclass ) { - push @menubar, 'View all tax rates' => $p.'browse/cust_main_county.cgi'; -} - -$cgi->param('dummy', 1); - -my $country_filter_change = - "window.location = '". - $cgi->self_url. ";country=' + this.options[this.selectedIndex].value;"; - -#restore this so pagination works -$cgi->param('country', $country) if $country; -$cgi->param('state', $state ) if $state; -$cgi->param('county', $county ) if $county; -$cgi->param('taxclass', $county ) if $taxclass; - -my $html_posttotal = - '(show country: '. - qq()'; - -my $hashref = {}; -my $count_query = 'SELECT COUNT(*) FROM cust_main_county'; -if ( $country ) { - $hashref->{'country'} = $country; - $count_query .= ' WHERE country = '. dbh->quote($country); -} -if ( $state ) { - $hashref->{'state'} = $state; - $count_query .= ' AND state = '. dbh->quote($state); -} -if ( $county ) { - $hashref->{'country'} = $country; - $count_query .= ' AND county = '. dbh->quote($county); -} -if ( $taxclass ) { - $hashref->{'taxclass'} = $taxclass; - $count_query .= ( $count_query =~ /WHERE/i ? ' AND ' : ' WHERE ' ). - ' taxclass = '. dbh->quote($taxclass); -} - - -$cell_style = ''; - -my @header = ( 'Country', 'State/Province', 'County',); -my @header2 = ( '', '', '', ); -my @links = ( '', '', '', ); -my @link_onclicks = ( '', '', '', ); -my $align = 'lll'; - -my @fields = ( - sub { my $country = shift->country; - code2country($country). " ($country)"; - }, - sub { state_label($_[0]->state, $_[0]->country). - ( $_[0]->state - ? '' - : ' '. expand_link($_[0], 'Add States'). - 'add states
    ' - ) - }, - sub { $_[0]->county || '(all) '. - expand_link($_[0], 'Add Counties'). - 'add counties
    ' - }, -); - -my @color = ( - '000000', - sub { shift->state ? '000000' : '999999' }, - sub { shift->county ? '000000' : '999999' }, -); - -if ( $conf->exists('enable_taxclasses') ) { - push @header, qq!Tax class (add new)!; - push @header2, '(per-package classification)'; - push @fields, sub { $_[0]->taxclass || '(all) '. - separate_taxclasses_link($_[0], 'Separate Taxclasses'). - 'separate taxclasses' - }; - push @color, sub { shift->taxclass ? '000000' : '999999' }; - push @links, ''; - push @link_onclicks, ''; - $align .= 'l'; -} - -push @header, 'Tax name', - 'Rate', #'Tax', - 'Exemptions', - ; - -push @header2, '(printed on invoices)', - '', - '', - ; - -push @fields, - sub { shift->taxname || 'Tax' }, - sub { shift->tax. '% (edit)' }, - $exempt_sub, -; - -push @color, - sub { shift->taxname ? '000000' : '666666' }, - sub { shift->tax ? '000000' : '666666' }, - '000000', -; - -$align .= 'lrl'; - -my @cell_style = map $cell_style_sub, (1..scalar(@header)); - -push @links, '', $edit_link, ''; -push @link_onclicks, '', $edit_onclick, ''; - - diff --git a/httemplate/browse/elements/browse.html b/httemplate/browse/elements/browse.html deleted file mode 100644 index 513c2c4e9..000000000 --- a/httemplate/browse/elements/browse.html +++ /dev/null @@ -1,6 +0,0 @@ -<% include( '/search/elements/search.html', - 'disable_download' => 1, - 'disable_nonefound' => 1, - @_, - ) -%> diff --git a/httemplate/browse/inventory_class.html b/httemplate/browse/inventory_class.html deleted file mode 100644 index 8ce131ac2..000000000 --- a/httemplate/browse/inventory_class.html +++ /dev/null @@ -1,93 +0,0 @@ -<% include( 'elements/browse.html', - 'title' => 'Inventory Classes', - 'name' => 'inventory classes', - 'menubar' => [ 'Add a new inventory class' => - $p.'edit/inventory_class.html', - ], - 'query' => { 'table' => 'inventory_class', }, - 'count_query' => 'SELECT COUNT(*) FROM inventory_class', - 'header' => [ '#', 'Inventory class', 'Inventory' ], - 'fields' => [ 'classnum', - 'classname', - sub { - #my $inventory_class = shift; - my $i_c = shift; - - my $link = - $p. 'search/inventory_item.html?'. - 'classnum='. $i_c->classnum; - - my %actioncol = (); - foreach ( keys %inv_action_link ) { - my($label, $baseurl, $method) = - @{ $inv_action_link{$_} }; - my $url = $baseurl. $i_c->$method(); - $actioncol{$_} = - ''. - '('. - ''. - $label. - ''. - ')'. - ''; - } - - my %num = map { - $_ => $i_c->$_(); - } keys %labels; - - [ map { - [ - { - 'data' => ''. $num{$_}. '', - 'align' => 'right', - }, - { - 'data' => $labels{$_}, - 'align' => 'left', - 'link' => ( $num{$_} - ? $link.$link{$_} - : '' - ), - }, - { 'data' => $actioncol{$_}, - 'align' => 'left', - }, - ] - } keys %labels - ]; - }, - ], - 'links' => [ $link, - $link, - '', - ], - ) -%> -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -tie my %labels, 'Tie::IxHash', - 'num_avail' => 'Available', # (upload batch)', - 'num_used' => 'In use', #'Used', #'Allocated', - 'num_total' => 'Total', -; - -my %link = ( - 'num_avail' => ';avail=1', - 'num_used' => ';used=1', - 'num_total' => '', -); - -my %inv_action_link = ( - 'num_avail' => [ 'upload batch', - $p.'misc/inventory_item-import.html?classnum=', - 'classnum' - ], -); - -my $link = [ "${p}edit/inventory_class.html?", 'classnum' ]; - - diff --git a/httemplate/browse/invoice_template.html b/httemplate/browse/invoice_template.html deleted file mode 100644 index 0bbfb2452..000000000 --- a/httemplate/browse/invoice_template.html +++ /dev/null @@ -1,124 +0,0 @@ -<% include("/elements/header.html", 'Invoice templates') %> - -<% include('/elements/table-grid.html') %> -% my $bgcolor1 = '#eeeeee'; -% my $bgcolor2 = '#ffffff'; -% my $bgcolor = ''; - - - Template - HTML - Print/PDF (typeset) - Plaintext - - -% foreach my $templatename ( '', @templatenames ) { -% my $tname = length($templatename) ? "_$templatename" : ''; -% -% if ( $bgcolor eq $bgcolor1 ) { -% $bgcolor = $bgcolor2; -% } else { -% $bgcolor = $bgcolor1; -% } -% -% my $display = length($templatename) ? $templatename : '(Default)'; - - - - - <% $display %> - - - - -% my( $logo_label, $logo_link_label)= length( $templatename ) -% ? labels("logo_$templatename.png") -% : ( '', 'edit' ); - <% $logo_label %> Logo - (<% $logo_link_label %>) -
    - -% foreach my $suffix (qw( returnaddress notes footer), '' ) { -% my $file = "invoice_html$suffix$tname"; -% my($label, $link_label) = length($templatename) -% ? labels($file) -% : ( '', 'edit' ); - - <% $label %> <% $suffix2name{$suffix} %> - (<% $link_label %>) -
    - -% } - - - - - -% my( $logo_label, $logo_link_label)= length( $templatename ) -% ? labels("logo_$templatename.eps") -% : ( '', 'edit' ); - <% $logo_label %> Logo - (<% $logo_link_label %>) -
    - -% foreach my $suffix (qw( returnaddress notes footer smallfooter), '' ) { -% my $file = "invoice_latex$suffix$tname"; -% my($label, $link_label) = length($templatename) -% ? labels($file) -% : ( '', 'edit' ); - - <% $label %> <% $suffix2name{$suffix} %> - (<% $link_label %>) -
    - -% } - - - - - -% my( $txt_label, $txtlink_label)= -% length( $templatename ) -% ? labels("invoice_template_$templatename.png") -% : ( 'Main template', 'edit' ); - <% $txt_label %> - (<% $txtlink_label %>) - - - - - -% } - -<% include("/elements/footer.html") %> - -<%once> - -my %suffix2name = ( - 'returnaddress' => 'Return address', - 'notes' => 'Notes', - 'footer' => 'Footer', - 'smallfooter' => 'Small footer', - '' => 'Main template', -); - -my $conf = new FS::Conf; - -sub labels { - my $filename = shift; - if ( $conf->exists($filename) ) { - ( 'Custom', 'edit' ); - } else { - ( 'Standard', 'customize' ); - } -} - - -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -my @templatenames = $conf->invoice_templatenames; - - diff --git a/httemplate/browse/msgcat.cgi b/httemplate/browse/msgcat.cgi deleted file mode 100755 index 2c916dc9f..000000000 --- a/httemplate/browse/msgcat.cgi +++ /dev/null @@ -1,44 +0,0 @@ -<% include('/elements/header.html', "View Message catalog", menubar( - 'Edit message catalog' => $p. "edit/msgcat.cgi", -)) %> -<% $widget->html %> -<% include('/elements/footer.html') %> -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -my $widget = new HTML::Widgets::SelectLayers( - 'selected_layer' => 'en_US', - 'options' => { 'en_US'=>'en_US' }, - 'layer_callback' => sub { - my $layer = shift; - my $html = "
    Messages for locale $layer
    ". table(). - "Code". - "Message"; - $html .= "en_US Message" unless $layer eq 'en_US'; - $html .= ''; - - #foreach my $msgcat ( sort { $a->msgcode cmp $b->msgcode } - # qsearch('msgcat', { 'locale' => $layer } ) ) { - foreach my $msgcat ( qsearch('msgcat', { 'locale' => $layer } ) ) { - $html .= ''. $msgcat->msgnum. ''. - ''. $msgcat->msgcode. ''. - ''. $msgcat->msg. ''; - unless ( $layer eq 'en_US' ) { - my $en_msgcat = qsearchs('msgcat', { - 'locale' => 'en_US', - 'msgcode' => $msgcat->msgcode, - } ); - $html .= ''. $en_msgcat->msg. ''; - } - $html .= ''; - } - - $html .= ''; - $html; - }, - -); - - diff --git a/httemplate/browse/nas.cgi b/httemplate/browse/nas.cgi deleted file mode 100755 index b5e0ef8b7..000000000 --- a/httemplate/browse/nas.cgi +++ /dev/null @@ -1,82 +0,0 @@ -%print header('NAS ports'); -% -%my $now = time; -% -%foreach my $nas ( sort { $a->nasnum <=> $b->nasnum } qsearch( 'nas', {} ) ) { -% print $nas->nasnum. ": ". $nas->nas. " ". -% $nas->nasfqdn. " (". $nas->nasip. ") ". -% "as of ". time2str("%c",$nas->last). -% " (". &pretty_interval($now - $nas->last). " ago)
    ". -% &table(). "Nas
    Port #Global
    Port #
    ". -% "IP addressUserSinceDuration", -% ; -% foreach my $port ( sort { -% $a->nasport <=> $b->nasport || $a->portnum <=> $b->portnum -% } qsearch( 'port', { 'nasnum' => $nas->nasnum } ) ) { -% my $session = $port->session; -% my($user, $since, $pretty_since, $duration); -% if ( ! $session ) { -% $user = "(empty)"; -% $since = 0; -% $pretty_since = "(never)"; -% $duration = ''; -% } elsif ( $session->logout ) { -% $user = "(empty)"; -% $since = $session->logout; -% } else { -% my $svc_acct = $session->svc_acct; -% $user = "svcnum. "\">". -% $svc_acct->username. ""; -% $since = $session->login; -% } -% $pretty_since = time2str("%c", $since) if $since; -% $duration = pretty_interval( $now - $since ). " ago" -% unless defined($duration); -% print "". $port->nasport. "". $port->portnum. "". -% $port->ip. "$user$pretty_since". -% "$duration" -% ; -% } -% print "
    "; -%} -% -%#Time::Duration?? -%sub pretty_interval { -% my $interval = shift; -% my %howlong = ( -% '604800' => 'week', -% '86400' => 'day', -% '3600' => 'hour', -% '60' => 'minute', -% '1' => 'second', -% ); -% -% my $pretty = ""; -% foreach my $key ( sort { $b <=> $a } keys %howlong ) { -% my $value = int( $interval / $key ); -% if ( $value ) { -% if ( $value == 1 ) { -% $pretty .= -% ( $howlong{$key} eq 'hour' ? 'an ' : 'a ' ). $howlong{$key}. " " -% } else { -% $pretty .= $value. ' '. $howlong{$key}. 's '; -% } -% } -% $interval -= $value * $key; -% } -% $pretty =~ /^\s*(\S.*\S)\s*$/; -% $1; -%} -% -%#print &table(), < -%# # -%# NAS - -#this hasn't been used in ages, and isn't linked from anywhere... -die 'NAS browse not currently active'; - - diff --git a/httemplate/browse/part_bill_event.cgi b/httemplate/browse/part_bill_event.cgi deleted file mode 100755 index 11bc14e5c..000000000 --- a/httemplate/browse/part_bill_event.cgi +++ /dev/null @@ -1,122 +0,0 @@ -<% include('/elements/header.html', 'Invoice Event Listing') %> - - Invoice events are the deprecated, old-style actions taken on open invoices. Any events still listed here should be migrated to new-style events.

    - -Add a new invoice event -

    - -<% $total %> events -<% $cgi->param('showdisabled') - ? do { $cgi->param('showdisabled', 0); - '( hide disabled events )'; } - : do { $cgi->param('showdisabled', 1); - '( show disabled events )'; } -%> -

    -% tie my %payby, 'Tie::IxHash', FS::payby->cust_payby2longname; -% tie my %freq, 'Tie::IxHash', '1d' => 'daily', '1m' => 'monthly'; -% foreach my $payby ( keys %payby ) { -% my $oldfreq = ''; -% -% my @payby_part_bill_event = -% grep { $payby eq $_->payby } -% sort { ( $a->freq || '1d') cmp ( $b->freq || '1d' ) # for now -% || $a->seconds <=> $b->seconds -% || $a->weight <=> $b->weight -% || $a->eventpart <=> $b->eventpart -% } -% @part_bill_event; -% -% -% if ( @payby_part_bill_event ) { - - - <% include('/elements/table-grid.html') %> -% my $bgcolor1 = '#eeeeee'; -% my $bgcolor2 = '#ffffff'; -% my $bgcolor; -% -% -% foreach my $part_bill_event ( @payby_part_bill_event ) { -% my $url = "${p}edit/part_bill_event.cgi?". $part_bill_event->eventpart; -% my $delay = duration_exact($part_bill_event->seconds); -% ( my $plandata = $part_bill_event->plandata ) =~ s/\n/
    /go; -% my $freq = $part_bill_event->freq || '1d'; -% my $reason = $part_bill_event->reasontext ; -% -% if ( $oldfreq ne $freq ) { - - - - param('showdisabled') ? 7 : 8 %>><% ucfirst($freq{$freq}) %> event tests for <% $payby{$payby} %> customers - - - - param('showdisabled') ? 2 : 3 %>>Event - After - Action - Reason - Options - Code - -% -% $oldfreq = $freq; -% $bgcolor = ''; -% -% } -% -% if ( $bgcolor eq $bgcolor1 ) { -% $bgcolor = $bgcolor2; -% } else { -% $bgcolor = $bgcolor1; -% } -% - - - - - <% $part_bill_event->eventpart %> -% unless ( $cgi->param('showdisabled') ) { - - - <% $part_bill_event->disabled ? 'DISABLED' : '' %> -% } - - - <% $part_bill_event->event %> - - <% $delay %> - - <% $part_bill_event->plan %> - - <% $reason %> - - <% $plandata %> - - <% $part_bill_event->eventcode %> - -% } - - -

    -% } -% } - -<% include('/elements/footer.html') %> - -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -my %search; -if ( $cgi->param('showdisabled') ) { -%search = (); -} else { -%search = ( 'disabled' => '' ); -} - -my @part_bill_event = qsearch('part_bill_event', \%search ); -my $total = scalar(@part_bill_event); - - diff --git a/httemplate/browse/part_event.html b/httemplate/browse/part_event.html deleted file mode 100644 index 4a0582633..000000000 --- a/httemplate/browse/part_event.html +++ /dev/null @@ -1,157 +0,0 @@ -<% include( 'elements/browse.html', - 'title' => 'Billing Event Definitions', - 'html_init' => $html_init, - 'name' => 'billing event definitions', - 'disableable' => 1, - 'disabled_statuspos' => 2, - 'agent_virt' => 1, - 'agent_null_right' => 'Edit global billing events', - 'agent_pos' => 3, - 'query' => { 'select' => 'part_event.*', - 'table' => 'part_event', - 'addl_from' => $join_conditions, - 'hashref' => {}, - 'order_by' => $order_conditions, - }, - 'count_query' => $count_query, - 'header' => [ '#', - 'Event', - 'Type', - 'Check freq.', - 'Conditions', - 'Action', - ], - 'fields' => [ 'eventpart', - 'event', - $eventtable_sub, - $check_freq_sub, - $conditions_sub, - $action_sub, - ], - 'links' => [ $link, - $link, - '', - '', - '', - '', - ], - 'align' => 'rllccc', - ) -%> -<%once> - -my $eventtable_labels = FS::part_event->eventtable_labels; -my $eventtable_sub = sub { $eventtable_labels->{ shift->eventtable }; }; - -my $check_freq_labels = FS::part_event->check_freq_labels; -my $check_freq_sub = sub { $check_freq_labels->{ shift->check_freq }; }; - -my $conditions_sub = sub { - my $part_event = shift; - my $addl = 0; - - [ - map { - my $part_event_condition = $_; - my %options = $part_event_condition->options; - - [ - { - 'data' => $part_event_condition->description, - 'width' => '100%', - 'align' => 'center', - 'colspan' => 2, - 'style' => ( $addl++ ? 'border-top: 1px solid gray' : '' ), - }, - ], - - map { - - my $data = $options{$_}; - if ( ref($data) ) { - $data = join('
    ', keys %$data); #XXX display hash values too? - } - - [ - { - 'data' => $part_event_condition->option_label($_). ':', - 'align' => 'right', - 'valign' => 'top', - 'size' => '-1', - }, - { - 'data' => $data, - 'align' => 'left', - 'size' => '-1', - }, - ]; - - } keys %options - - } - $part_event->part_event_condition - - ]; - -}; - -my $action_sub = sub { - my $part_event = shift; - - my %options = $part_event->options; - - [ - - [ - { - 'data' => $part_event->description, - 'width' => '100%', - 'align' => 'center', - 'colspan' => 2, - }, - ], - - map { - [ - { - 'data' => $part_event->option_label($_). ':', - 'align' => 'right', - 'size' => '-1', - }, - { - 'data' => $options{$_}, - 'align' => 'left', - 'size' => '-1', - }, - ]; - } - - keys %options - ]; - -}; - -my $link = [ $p.'edit/part_event.html?', 'eventpart' ]; - - -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Edit billing events') - || $FS::CurrentUser::CurrentUser->access_right('Edit global billing events'); - -my $html_init = - #XXX better description - 'Events are billing, collection or other actions triggered when certain '. - 'customer, invoice, package or other conditions are met.

    '. - qq!Add a new event

    !; - -my $count_query = 'SELECT COUNT(*) FROM part_event WHERE '. - $FS::CurrentUser::CurrentUser->agentnums_sql( - 'null_right' => 'Edit global billing events', - ); - -my $join_conditions = FS::part_event_condition->join_conditions_sql; -my $order_conditions = FS::part_event_condition->order_conditions_sql; - - diff --git a/httemplate/browse/part_export.cgi b/httemplate/browse/part_export.cgi deleted file mode 100755 index 1cd201360..000000000 --- a/httemplate/browse/part_export.cgi +++ /dev/null @@ -1,65 +0,0 @@ -<% include("/elements/header.html", "Export Listing") %> - -Provisioning services to external machines, databases and APIs.

    - -Add a new export

    - - - -<% include('/elements/table-grid.html') %> -% my $bgcolor1 = '#eeeeee'; -% my $bgcolor2 = '#ffffff'; -% my $bgcolor = ''; - - - Export - Options - - -% foreach my $part_export ( sort { -% $a->getfield('exportnum') <=> $b->getfield('exportnum') -% } qsearch('part_export',{}) -% ) { -% if ( $bgcolor eq $bgcolor1 ) { -% $bgcolor = $bgcolor2; -% } else { -% $bgcolor = $bgcolor1; -% } - - - - <% $part_export->exportnum %> - - <% $part_export->exporttype %> to <% $part_export->machine %> (edit | delete) - - - <% itable() %> -% my %opt = $part_export->options; -% foreach my $opt ( keys %opt ) { - - - <% $opt %>:  - <% encode_entities($opt{$opt}) %> - -% } - - - - - - -% } - - - -<% include('/elements/footer.html') %> - -<%init> -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi deleted file mode 100755 index 78cb77d26..000000000 --- a/httemplate/browse/part_pkg.cgi +++ /dev/null @@ -1,231 +0,0 @@ -<% include( 'elements/browse.html', - 'title' => 'Package Definitions', - 'html_init' => $html_init, - 'name' => 'package definitions', - 'disableable' => 1, - 'disabled_statuspos' => 3, - 'agent_virt' => 1, - 'agent_null_right' => 'Edit global package definitions', - 'agent_pos' => 4, - 'query' => { 'select' => $select, - 'table' => 'part_pkg', - 'hashref' => {}, - 'order_by' => "ORDER BY $orderby", - }, - 'count_query' => $count_query, - 'header' => \@header, - 'fields' => \@fields, - 'links' => \@links, - 'align' => $align, - ) -%> -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Edit package definitions') - || $FS::CurrentUser::CurrentUser->access_right('Edit global package definitions'); - -my $select = '*'; -my $orderby = 'pkgpart'; -if ( $cgi->param('active') ) { - - $orderby = 'num_active DESC'; -} - $select = " - - *, - - ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart - AND ( cancel IS NULL OR cancel = 0 ) - AND ( susp IS NULL OR susp = 0 ) - ) AS num_active, - - ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart - AND ( cancel IS NULL OR cancel = 0 ) - AND susp IS NOT NULL AND susp != 0 - ) AS num_suspended, - - ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart - AND cancel IS NOT NULL AND cancel != 0 - ) AS num_cancelled - - "; - -#} - -my $conf = new FS::Conf; -my $taxclasses = $conf->exists('enable_taxclasses'); - -my $html_init; -#unless ( $cgi->param('active') ) { - $html_init = qq! - One or more service definitions are grouped together into a package - definition and given pricing information. Customers purchase packages - rather than purchase services directly.

    - Add a new package definition -

    - !; -#} - -# ------ - -my $link = [ $p.'edit/part_pkg.cgi?', 'pkgpart' ]; - -my @header = ( '#', 'Package', 'Comment' ); -my @fields = ( 'pkgpart', 'pkg', 'comment' ); -my $align = 'rll'; -my @links = ( $link, $link, '' ); - -unless ( 0 ) { #already showing only one class or something? - push @header, 'Class'; - push @fields, sub { shift->classname || '(none)'; }; - $align .= 'l'; -} - -#if ( $cgi->param('active') ) { - push @header, 'Customer
    packages'; - my %col = ( - 'active' => '00CC00', - 'suspended' => 'FF9900', - 'cancelled' => 'FF0000', - #'one-time charge' => '000000', - 'charge' => '000000', - ); - my $cust_pkg_link = $p. 'search/cust_pkg.cgi?pkgpart='; - push @fields, sub { my $part_pkg = shift; - [ - map { - my $magic = $_; - my $label = $_; - if ( $magic eq 'active' && $part_pkg->freq == 0 ) { - $magic = 'inactive'; - #$label = 'one-time charge', - $label = 'charge', - } - - [ - { - 'data' => ''. - $part_pkg->get("num_$_"). - '', - 'align' => 'right', - }, - { - 'data' => $label. - ( $part_pkg->get("num_$_") != 1 - && $label =~ /charge$/ - ? 's' - : '' - ), - 'align' => 'left', - 'link' => ( $part_pkg->get("num_$_") - ? $cust_pkg_link. - $part_pkg->pkgpart. - ";magic=$magic" - : '' - ), - }, - ], - } (qw( active suspended cancelled )) - ]; }; - $align .= 'r'; -#} - -push @header, 'Frequency'; -push @fields, sub { shift->freq_pretty; }; -$align .= 'l'; - -if ( $taxclasses ) { - push @header, 'Taxclass'; - push @fields, sub { shift->taxclass() || ' '; }; - $align .= 'l'; -} - -push @header, 'Plan', - 'Data', - 'Services'; - #'Service', 'Quan', 'Primary'; - -push @fields, sub { shift->plan || '(legacy)' }, - - sub { - my $part_pkg = shift; - if ( $part_pkg->plan ) { - - [ map { - /^(\w+)=(.*)$/; #or something; - [ - { 'data' => $1, - 'align' => 'right', - }, - { 'data' => $part_pkg->format($1,$2), - 'align' => 'left', - }, - ]; - } - split(/\n/, $part_pkg->plandata) - ]; - - } else { - - [ map { [ - { 'data' => uc($_), - 'align' => 'right', - }, - { - 'data' => $part_pkg->$_(), - 'align' => 'left', - }, - ]; - } - (qw(setup recur)) - ]; - - } - - }, - - sub { - my $part_pkg = shift; - - [ map { - my $pkg_svc = $_; - my $part_svc = $pkg_svc->part_svc; - my $svc = $part_svc->svc; - if ( $pkg_svc->primary_svc =~ /^Y/i ) { - $svc = "$svc (PRIMARY)"; - } - $svc =~ s/ +/ /g; - - [ - { - 'data' => ''. $pkg_svc->quantity. '', - 'align' => 'right' - }, - { - 'data' => $svc, - 'align' => 'left', - 'link' => $p. 'edit/part_svc.cgi?'. - $part_svc->svcpart, - }, - ]; - } - sort { $b->primary_svc =~ /^Y/i - <=> $a->primary_svc =~ /^Y/i - } - $part_pkg->pkg_svc - - ]; - - }; - -$align .= 'lrl'; #rr'; - -# -------- - -my $count_query = 'SELECT COUNT(*) FROM part_pkg WHERE '. - $FS::CurrentUser::CurrentUser->agentnums_sql( - 'null_right' => 'Edit global package definitions', - ); - - diff --git a/httemplate/browse/part_referral.html b/httemplate/browse/part_referral.html deleted file mode 100755 index 9cc32c459..000000000 --- a/httemplate/browse/part_referral.html +++ /dev/null @@ -1,181 +0,0 @@ -<% include("/elements/header.html","Advertising source Listing" ) %> - -Where a customer heard about your service. Tracked for informational purposes. -

    - -Add a new advertising source -

    - -<% include('/elements/table-grid.html') %> -% my $bgcolor1 = '#eeeeee'; -% my $bgcolor2 = '#ffffff'; -% my $bgcolor = ''; - - - Advertising source -% if ( $show_agentnums ) { - - Agent -% } - - >Customers and Packages - -% for my $period ( keys %after ) { - - <% $period %> -% } - - - -%foreach my $part_referral ( FS::part_referral->all_part_referral(1) ) { -% -% if ( $bgcolor eq $bgcolor1 ) { -% $bgcolor = $bgcolor2; -% } else { -% $bgcolor = $bgcolor1; -% } -% -% $a = 0; - - - - -% if ( $part_referral->agentnum || $curuser->access_right('Edit global advertising sources') ) { -% $a++; -% - - -% } - - <% $part_referral->refnum %><% $a ? '' : '' %> - -% if ( $a ) { - - -% } - - <% $part_referral->referral %><% $a ? '' : '' %> -% if ( $show_agentnums ) { - - <% $part_referral->agentnum ? $part_referral->agent->agent : '(global)' %> -% } -% for my $period ( keys %after ) { -% my @param = ( $part_referral->refnum, -% $today-$after{$period}, -% $today+$before{$period}, -% ); -% $cust_sth->execute(@param) or die $cust_sth->errstr; -% my $num_cust = $cust_sth->fetchrow_arrayref->[0]; -% $pkg_sth->execute(@param) or die $pkg_sth->errstr; -% my $num_pkg = $pkg_sth->fetchrow_arrayref->[0]; - - - - - - - - - - - -
    <% $num_cust %>customers
    <% $num_pkg %>packages
    - -% } - - -% } -% -% $cust_statement =~ s/AND refnum = \?//; -% $cust_sth = dbh->prepare($cust_statement) -% or die dbh->errstr; -% $pkg_statement =~ s/AND h_pkg_referral\.refnum = \?//; -% $pkg_sth = dbh->prepare($pkg_statement) -% or die dbh->errstr; - - - Total -% for my $period ( keys %after ) { -% my @param = ( $today-$after{$period}, -% $today+$before{$period}, -% ); -% $cust_sth->execute( @param ) or die $cust_sth->errstr; -% my $num_cust = $cust_sth->fetchrow_arrayref->[0]; -% $pkg_sth->execute(@param) or die $pkg_sth->errstr; -% my $num_pkg = $pkg_sth->fetchrow_arrayref->[0]; - - - - - - - - - - - -
    <% $num_cust %>customers
    <% $num_pkg %>packages
    - - -% } - - - - - -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Edit advertising sources') - || $FS::CurrentUser::CurrentUser->access_right('Edit global advertising sources'); - -my $today = timelocal(0, 0, 0, (localtime(time))[3..5] ); - -tie my %after, 'Tie::IxHash', - 'Today' => 0, - 'Yesterday' => 86400, # 60sec * 60min * 24hrs - 'Past week' => 518400, # 60sec * 60min * 24hrs * 6days - 'Past 30 days' => 2505600, # 60sec * 60min * 24hrs * 29days - 'Past 60 days' => 5097600, # 60sec * 60min * 24hrs * 59days - 'Past 90 days' => 7689600, # 60sec * 60min * 24hrs * 89days - 'Past 6 months' => 15724800, # 60sec * 60min * 24hrs * 182days - 'Past year' => 31486000, # 60sec * 60min * 24hrs * 364days - 'Total' => $today, -; -my %before = ( - 'Today' => 86400, # 60sec * 60min * 24hrs - 'Yesterday' => 0, - 'Past week' => 86400, # 60sec * 60min * 24hrs - 'Past 30 days' => 86400, # 60sec * 60min * 24hrs - 'Past 60 days' => 86400, # 60sec * 60min * 24hrs - 'Past 90 days' => 86400, # 60sec * 60min * 24hrs - 'Past 6 months' => 86400, # 60sec * 60min * 24hrs - 'Past year' => 86400, # 60sec * 60min * 24hrs - 'Total' => 86400, # 60sec * 60min * 24hrs -); - -my $curuser = $FS::CurrentUser::CurrentUser; - -my $show_agentnums = ( scalar($curuser->agentnums) > 1 ); - -my $cust_statement = "SELECT COUNT(*) FROM h_cust_main - WHERE history_action = 'insert' - AND refnum = ? - AND history_date >= ? - AND history_date < ? - AND ". $curuser->agentnums_sql; -my $cust_sth = dbh->prepare($cust_statement) - or die dbh->errstr; - -my $pkg_statement = "SELECT COUNT(*) FROM h_pkg_referral - LEFT JOIN cust_pkg USING ( pkgnum ) - LEFT JOIN cust_main USING ( custnum ) - WHERE history_action = 'insert' - AND h_pkg_referral.refnum = ? - AND history_date >= ? - AND history_date < ? - AND ". $curuser->agentnums_sql; -my $pkg_sth = dbh->prepare($pkg_statement) - or die dbh->errstr; - - diff --git a/httemplate/browse/part_svc.cgi b/httemplate/browse/part_svc.cgi deleted file mode 100755 index f1b283638..000000000 --- a/httemplate/browse/part_svc.cgi +++ /dev/null @@ -1,215 +0,0 @@ -<% include('/elements/header.html', 'Service Definition Listing') %> - - - - Service definitions are the templates for items you offer to your customers.

    - - -Add a new service definition -% if ( @part_svc ) { - or  -% } - -
    - -<% $total %> service definitions -<% $cgi->param('showdisabled') - ? do { $cgi->param('showdisabled', 0); - '( hide disabled services )'; } - : do { $cgi->param('showdisabled', 1); - '( show disabled services )'; } -%> -% $cgi->param('showdisabled', ( 1 ^ $cgi->param('showdisabled') ) ); - -<% include('/elements/table-grid.html') %> -% my $bgcolor1 = '#eeeeee'; -% my $bgcolor2 = '#ffffff'; -% my $bgcolor = ''; - - - - # - -% if ( $cgi->param('showdisabled') ) { - Status -% } - - Service - - Table - - Customer
    Services
    - - Export - - Field - - Modifier - - - -% foreach my $part_svc ( @part_svc ) { -% my $svcdb = $part_svc->svcdb; -% my $svc_x = "FS::$svcdb"->new( { svcpart => $part_svc->svcpart } ); -% my @dfields = $svc_x->fields; -% push @dfields, 'usergroup' if $svcdb eq 'svc_acct'; #kludge -% my @fields = -% grep { $svc_x->pvf($_) -% or $_ ne 'svcnum' && $part_svc->part_svc_column($_)->columnflag } -% @dfields ; -% my $rowspan = scalar(@fields) || 1; -% my $url = "${p}edit/part_svc.cgi?". $part_svc->svcpart; -% -% if ( $bgcolor eq $bgcolor1 ) { -% $bgcolor = $bgcolor2; -% } else { -% $bgcolor = $bgcolor1; -% } - - - - - CLASS="grid" BGCOLOR="<% $bgcolor %>"> - <% $part_svc->svcpart %> - - -% if ( $cgi->param('showdisabled') ) { - CLASS="grid" BGCOLOR="<% $bgcolor %>"> - <% $part_svc->disabled - ? 'Disabled' - : 'Enabled' - %> - -% } - - CLASS="grid" BGCOLOR="<% $bgcolor %>"> - <% $part_svc->svc %> - - CLASS="grid" BGCOLOR="<% $bgcolor %>"> - <% $svcdb %> - - CLASS="grid" BGCOLOR="<% $bgcolor %>"> - <% $num_active_cust_svc{$part_svc->svcpart} %> <% $num_active_cust_svc{$part_svc->svcpart} ? svc_url( 'ahref' => 1, 'm' => $m, 'action' => 'search', 'part_svc' => $part_svc, 'query' => "svcpart=". $part_svc->svcpart ) : '' %>active - -% if ( $num_active_cust_svc{$part_svc->svcpart} ) { -
    [ change ] -% } - - - - CLASS="inv" BGCOLOR="<% $bgcolor %>"> - -% -%# my @part_export = -%map { qsearchs('part_export', { exportnum => $_->exportnum } ) } qsearch('export_svc', { svcpart => $part_svc->svcpart } ) ; -% foreach my $part_export ( -% map { qsearchs('part_export', { exportnum => $_->exportnum } ) } -% qsearch('export_svc', { svcpart => $part_svc->svcpart } ) -% ) { -% - - - - -% } - -
    <% $part_export->exportnum %>: <% $part_export->exporttype %> to <% $part_export->machine %>
    - - -% unless ( @fields ) { -% for ( 1..3 ) { - -% } -% } -% -% my($n1)=''; -% foreach my $field ( @fields ) { -% my $formatter = -% FS::part_svc->svc_table_fields($svcdb)->{$field}->{format} -% || sub { shift }; -% my $flag = $part_svc->part_svc_column($field)->columnflag; -% - - <% $n1 %> - <% $field %> - <% $flag{$flag} %> - - -% my $value = &$formatter($part_svc->part_svc_column($field)->columnvalue); -% if ( $flag =~ /^[MA]$/ ) { -% $inventory_class{$value} -% ||= qsearchs('inventory_class', { 'classnum' => $value } ); -% - - <% $inventory_class{$value} - ? $inventory_class{$value}->classname - : "WARNING: inventory_class.classnum $value not found" %> -% } else { - - <% $value %> -% } - - -% $n1=""; -% } -% - - -% } - - - - -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -#code duplication w/ edit/part_svc.cgi, should move this hash to part_svc.pm -my %flag = ( - '' => '', - 'D' => 'Default', - 'F' => 'Fixed (unchangeable)', - 'S' => 'Selectable choice', - #'M' => 'Manual selection from inventory', - 'M' => 'Manual selected from inventory', - #'A' => 'Automatically fill in from inventory', - 'A' => 'Automatically filled in from inventory', - 'X' => 'Excluded', -); - -my %search; -if ( $cgi->param('showdisabled') ) { - %search = (); -} else { - %search = ( 'disabled' => '' ); -} - -my @part_svc = - sort { $a->getfield('svcpart') <=> $b->getfield('svcpart') } - qsearch('part_svc', \%search ); -my $total = scalar(@part_svc); - -my %num_active_cust_svc = map { $_->svcpart => $_->num_cust_svc } @part_svc; - -if ( $cgi->param('orderby') eq 'active' ) { - @part_svc = sort { $num_active_cust_svc{$b->svcpart} <=> - $num_active_cust_svc{$a->svcpart} } @part_svc; -} elsif ( $cgi->param('orderby') eq 'svc' ) { - @part_svc = sort { lc($a->svc) cmp lc($b->svc) } @part_svc; -} - -my %inventory_class = (); - - diff --git a/httemplate/browse/part_virtual_field.cgi b/httemplate/browse/part_virtual_field.cgi deleted file mode 100644 index b18440036..000000000 --- a/httemplate/browse/part_virtual_field.cgi +++ /dev/null @@ -1,42 +0,0 @@ -<% include('/elements/header.html', 'Virtual field definitions') %> - -<% include('/elements/error.html') %> - -Add a new field

    -% foreach $dbtable (sort { $a cmp $b } keys (%pvfs)) { - -

    <%$dbtable%>

    - -<%table()%> -Field nameDescription -% foreach my $pvf (sort {$a->name cmp $b->name} @{ $pvfs{$dbtable} }) { - - - - - - <%$pvf->name%> - <%$pvf->label%> - -% } - - -% } - -<% include('/elements/footer.html') %> - -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -my %pvfs; -my $block; -my $p2 = popurl(2); -my $dbtable; - -foreach (qsearch('part_virtual_field', {})) { - push @{ $pvfs{$_->dbtable} }, $_; -} - - diff --git a/httemplate/browse/payment_gateway.html b/httemplate/browse/payment_gateway.html deleted file mode 100644 index 848c58a82..000000000 --- a/httemplate/browse/payment_gateway.html +++ /dev/null @@ -1,94 +0,0 @@ -<% include( 'elements/browse.html', - 'title' => 'Payment gateways', - 'menubar' => [ 'Agents' => $p.'browse/agent.cgi', ], - 'html_init' => $html_init, - 'name' => 'payment gateways', - 'disableable' => 1, - 'disabled_statuspos' => 1, - 'query' => { 'table' => 'payment_gateway', - 'hashref' => {}, - }, - 'count_query' => $count_query, - 'header' => [ '#', - 'Gateway', - 'Username', - 'Password', - 'Action', - 'Options', - ], - 'fields' => [ 'gatewaynum', - $gateway_sub, - 'gateway_username', - sub { ' - '; }, - 'gateway_action', - $options_sub, - ], - ) -%> - - - -<% include('/elements/footer.html') %> -<%once> - -my $html_init = qq! - Add a new payment gateway -

    - - - -!; - -my $gateway_sub = sub { - my($payment_gateway) = @_; - - my $gatewaynum = $payment_gateway->gatewaynum; - - my $html = $payment_gateway->gateway_module. ' '. qq! - - (edit) - !; - - unless ( $payment_gateway->disabled ) { - $html .= qq! - (disable) - !; - } - - $html .= ''; - - $html; - -}; - -my $options_sub = sub { - my($payment_gateway) = @_; - - #should return a structure instead of this manual formatting... - - my $html = ''; - - my %options = $payment_gateway->options; - foreach my $option ( keys %options ) { - $html .= ''. - ''; - } - $html .= '
    '. $option. ':'. $options{$option}. '
    '; - - $html; -}; - -my $count_query = 'SELECT COUNT(*) FROM payment_gateway'; - - -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - - diff --git a/httemplate/browse/pkg_class.html b/httemplate/browse/pkg_class.html deleted file mode 100644 index 4f02ca22d..000000000 --- a/httemplate/browse/pkg_class.html +++ /dev/null @@ -1,31 +0,0 @@ -<% include( 'elements/browse.html', - 'title' => 'Package classes', - 'html_init' => $html_init, - 'name' => 'package classes', - 'disableable' => 1, - 'disabled_statuspos' => 2, - 'query' => { 'table' => 'pkg_class', - 'hashref' => {}, - 'extra_sql' => 'ORDER BY classnum', - }, - 'count_query' => $count_query, - 'header' => [ '#', 'Class', ], - 'fields' => [ 'classnum', 'classname' ], - 'links' => [ $link, $link ], - ) -%> -<%init> - -die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); - -my $html_init = - 'Package classes define groups of packages, for reporting and '. - 'convenience purposes.

    '. - qq!Add a package class

    !; - -my $count_query = 'SELECT COUNT(*) FROM pkg_class'; - -my $link = [ $p.'edit/pkg_class.html?', 'classnum' ]; - - diff --git a/httemplate/browse/rate.cgi b/httemplate/browse/rate.cgi deleted file mode 100644 index b20c45c0c..000000000 --- a/httemplate/browse/rate.cgi +++ /dev/null @@ -1,67 +0,0 @@ -<% include( 'elements/browse.html', - 'title' => 'Rate plans', - 'menubar' => [ 'Regions and Prefixes' => - $p.'browse/rate_region.html', - ], - 'html_init' => $html_init, - 'name' => 'rate plans', - 'query' => { 'table' => 'rate', - 'hashref' => {}, - 'extra_sql' => 'ORDER BY ratenum', - }, - 'count_query' => $count_query, - 'header' => [ '#', 'Rate plan', 'Rates' ], - 'fields' => [ 'ratenum', 'ratename', $rates_sub ], - 'links' => [ $link, $link, '' ], - ) -%> -<%once> - -my $sth = dbh->prepare("SELECT DISTINCT(countrycode) FROM rate_prefix") - or die dbh->errstr; -$sth->execute or die $sth->errstr; -my @all_countrycodes = map $_->[0], @{ $sth->fetchall_arrayref }; -my $all_countrycodes = join("\n", map qq(
  • -% 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 0149e1b30..000000000 --- a/rt/html/Elements/MessageBox +++ /dev/null @@ -1,74 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -<%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 7e720ad71..000000000 --- a/rt/html/Elements/MyAdminQueues +++ /dev/null @@ -1,54 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<&|/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 3fde555c2..000000000 --- a/rt/html/Elements/MyRT +++ /dev/null @@ -1,100 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - -% 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 1e962bd61..000000000 --- a/rt/html/Elements/MyReminders +++ /dev/null @@ -1,73 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 fc1e27095..000000000 --- a/rt/html/Elements/MyRequests +++ /dev/null @@ -1,49 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# DEPRECATED -<& /Elements/ShowSearch, Name => 'My Requests' &> diff --git a/rt/html/Elements/MySupportQueues b/rt/html/Elements/MySupportQueues deleted file mode 100644 index f9e18a09a..000000000 --- a/rt/html/Elements/MySupportQueues +++ /dev/null @@ -1,54 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<&|/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 8d657db3d..000000000 --- a/rt/html/Elements/MyTickets +++ /dev/null @@ -1,49 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# DEPRECATED -<& /Elements/ShowSearch, Name => 'My Tickets' &> diff --git a/rt/html/Elements/PageLayout b/rt/html/Elements/PageLayout deleted file mode 100644 index b9fd31f71..000000000 --- a/rt/html/Elements/PageLayout +++ /dev/null @@ -1,256 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - - - -
    -% my $notfirst = 0; foreach my $action (sort keys %{$topactions}) { - -
    - -% } - - - -
    -% $m->out($topactions->{"$action"}->{'html'}); -
    - -%# End of div#quickbar from /Elements/Header - - - - - - - - -<%perl> - -my %generic_query_args = ( Query => $Query, Rows => $Rows, Page => $Page, Format => $FormatString ); - -my $item = 0; -foreach my $col (@Format) { - $item++; - if ( $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/RTx/Statistics/Elements/CollectionAsTable/ParseFormat b/rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat deleted file mode 100644 index a482f817e..000000000 --- a/rt/html/RTx/Statistics/Elements/CollectionAsTable/ParseFormat +++ /dev/null @@ -1,109 +0,0 @@ -%# 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 }}} -<%ARGS> -$Format - - -<%init> -use Regexp::Common; -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; - - # kfh at mqsoftware.com added this to be able - # to create columns where the actual heading and value - # aren't know ahead of time. For instance queue names. - # it will work with subcols, but all subcols will have the same KEY - if ( $col =~ s!/KEY:([^/]+)!!io ) { - $colref->{'keyname'} = $1; - } - if ( $col =~ s!/STYLE:([^/]+)!!io ) { - $colref->{'style'} = $1; - } - 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/RTx/Statistics/Elements/CollectionAsTable/Row b/rt/html/RTx/Statistics/Elements/CollectionAsTable/Row deleted file mode 100644 index bcfabe5c3..000000000 --- a/rt/html/RTx/Statistics/Elements/CollectionAsTable/Row +++ /dev/null @@ -1,112 +0,0 @@ -%# 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 }}} -<%ARGS> -$i => undef -@Format => undef -$record => undef -$maxitems => undef -$Depth => undef -$Warning => undef - - -<%PERL> -$m->out('' ); -my $item; -foreach my $column (@Format) { - if ( $column->{title} eq 'NEWLINE' ) { - while ( $item < $maxitems ) { - $m->out(qq{\n}); - $item++; - } - $item = 0; - $m->out(''); - $m->out('' ); - next; - } - $item++; - $m->out(''); -} -$m->out(''); - diff --git a/rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox b/rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox deleted file mode 100644 index ce043e294..000000000 --- a/rt/html/RTx/Statistics/Elements/ControlsAsTable/ControlBox +++ /dev/null @@ -1,103 +0,0 @@ -
    - -% if ( $show_menu ) { - -% } - - - -
    -<& /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 0176180d2..000000000 --- a/rt/html/Elements/QueryString +++ /dev/null @@ -1,63 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 133539cc0..000000000 --- a/rt/html/Elements/QueueSummary +++ /dev/null @@ -1,92 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - -% 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 75b3a4598..000000000 --- a/rt/html/Elements/QuickCreate +++ /dev/null @@ -1,71 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    -<&| /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 4acbc204d..000000000 --- a/rt/html/Elements/Quicksearch +++ /dev/null @@ -1,61 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    -<&|/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 21dc2a753..000000000 --- a/rt/html/Elements/RT__Ticket/ColumnMap +++ /dev/null @@ -1,314 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 (undef); - } - elsif ( $attr eq 'title' ) { - return ( $field ); - } - elsif ( $attr eq 'value' ) { - # Display custom field contents, separated by newlines. - # For Image custom fields we also show a thumbnail here. - return sub { - my $values = $_[0]->CustomFieldValues($field); - 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 = { - 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 => 'CreatedBy', - 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 6edec0967..000000000 --- a/rt/html/Elements/Refresh +++ /dev/null @@ -1,69 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 167a48cab..000000000 --- a/rt/html/Elements/RefreshHomepage +++ /dev/null @@ -1,51 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    -<& /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 f382cc273..000000000 --- a/rt/html/Elements/ScrubHTML +++ /dev/null @@ -1,73 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 befe2475f..000000000 --- a/rt/html/Elements/Section +++ /dev/null @@ -1,51 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -

    <%$title%>

    -<%ARGS> -$title => undef - diff --git a/rt/html/Elements/SelectAttachmentField b/rt/html/Elements/SelectAttachmentField deleted file mode 100644 index 8a37ca504..000000000 --- a/rt/html/Elements/SelectAttachmentField +++ /dev/null @@ -1,56 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -<%ARGS> -$Name => 'AttachmentField' - diff --git a/rt/html/Elements/SelectBoolean b/rt/html/Elements/SelectBoolean deleted file mode 100644 index b34e07a14..000000000 --- a/rt/html/Elements/SelectBoolean +++ /dev/null @@ -1,71 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 ecb306c58..000000000 --- a/rt/html/Elements/SelectCustomFieldOperator +++ /dev/null @@ -1,64 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 2bcb35e9a..000000000 --- a/rt/html/Elements/SelectCustomFieldValue +++ /dev/null @@ -1,65 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 b43f324ac..000000000 --- a/rt/html/Elements/SelectDate +++ /dev/null @@ -1,75 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 9c80be4d7..000000000 --- a/rt/html/Elements/SelectDateRelation +++ /dev/null @@ -1,60 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 653949a83..000000000 --- a/rt/html/Elements/SelectDateType +++ /dev/null @@ -1,60 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -<%ARGS> -$Name => 'DateType' - diff --git a/rt/html/Elements/SelectEqualityOperator b/rt/html/Elements/SelectEqualityOperator deleted file mode 100644 index 851add309..000000000 --- a/rt/html/Elements/SelectEqualityOperator +++ /dev/null @@ -1,64 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 c1fb9df2a..000000000 --- a/rt/html/Elements/SelectGroups +++ /dev/null @@ -1,62 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -<& /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 7640744c9..000000000 --- a/rt/html/Elements/SelectLang +++ /dev/null @@ -1,80 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -<%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 4617e7c1c..000000000 --- a/rt/html/Elements/SelectLinkType +++ /dev/null @@ -1,61 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 646ad4e31..000000000 --- a/rt/html/Elements/SelectMatch +++ /dev/null @@ -1,82 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 55dc7d2ea..000000000 --- a/rt/html/Elements/SelectNewTicketQueue +++ /dev/null @@ -1,50 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - diff --git a/rt/html/Elements/SelectOwner b/rt/html/Elements/SelectOwner deleted file mode 100644 index f33b346dc..000000000 --- a/rt/html/Elements/SelectOwner +++ /dev/null @@ -1,110 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -<%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 0decb5bc9..000000000 --- a/rt/html/Elements/SelectQueue +++ /dev/null @@ -1,97 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -% 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 a83cfaab7..000000000 --- a/rt/html/Elements/SelectResultsPerPage +++ /dev/null @@ -1,68 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 2a2771777..000000000 --- a/rt/html/Elements/SelectSortOrder +++ /dev/null @@ -1,65 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 5f861af4f..000000000 --- a/rt/html/Elements/SelectStatus +++ /dev/null @@ -1,67 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -<%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 aca98f878..000000000 --- a/rt/html/Elements/SelectTicketSortBy +++ /dev/null @@ -1,62 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 5bacccf6c..000000000 --- a/rt/html/Elements/SelectTicketTypes +++ /dev/null @@ -1,58 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 e1656f113..000000000 --- a/rt/html/Elements/SelectTimeUnits +++ /dev/null @@ -1,57 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -<%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 52febb837..000000000 --- a/rt/html/Elements/SelectUsers +++ /dev/null @@ -1,62 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -<& /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 26854a782..000000000 --- a/rt/html/Elements/SelectWatcherType +++ /dev/null @@ -1,71 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 63101af5a..000000000 --- a/rt/html/Elements/SetupSessionCookie +++ /dev/null @@ -1,126 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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}; - }; -} - -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 9dd5faaf1..000000000 --- a/rt/html/Elements/ShowCustomFieldBinary +++ /dev/null @@ -1,51 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<% $Object->Content %> -<%ARGS> -$Object => undef - diff --git a/rt/html/Elements/ShowCustomFieldImage b/rt/html/Elements/ShowCustomFieldImage deleted file mode 100644 index c49ae0ecf..000000000 --- a/rt/html/Elements/ShowCustomFieldImage +++ /dev/null @@ -1,53 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -% 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 1ddd7da1f..000000000 --- a/rt/html/Elements/ShowCustomFieldWikitext +++ /dev/null @@ -1,58 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -% 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 743c9999b..000000000 --- a/rt/html/Elements/ShowCustomFields +++ /dev/null @@ -1,115 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -% 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->print( $value->Content ); - } - $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 a1d6bdf97..000000000 --- a/rt/html/Elements/ShowLink +++ /dev/null @@ -1,64 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -% 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 800e82ea2..000000000 --- a/rt/html/Elements/ShowLinks +++ /dev/null @@ -1,112 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - - - - - - - - - - - - - - - - - - - - - - -% # 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 f6b2817d7..000000000 --- a/rt/html/Elements/ShowMemberships +++ /dev/null @@ -1,88 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
      -% 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 ded865b82..000000000 --- a/rt/html/Elements/ShowSearch +++ /dev/null @@ -1,126 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<&|/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 ) { - $_->{'Query'} =~ s/__CurrentUser__/$session{'CurrentUser'}->Id/ge; - $_->{'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 a4fd7e270..000000000 --- a/rt/html/Elements/SimpleSearch +++ /dev/null @@ -1,58 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    - -
    -Advanced - -
    diff --git a/rt/html/Elements/Submit b/rt/html/Elements/Submit deleted file mode 100644 index ee3e8b6f6..000000000 --- a/rt/html/Elements/Submit +++ /dev/null @@ -1,86 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    -
    -% 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 9d1eea602..000000000 --- a/rt/html/Elements/Tabs +++ /dev/null @@ -1,137 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 $basetopactions = { -# A => { html => $m->scomp('/Elements/CreateTicket') -# }, - A => { html => $m->scomp('/Elements/FreesideNewCust') - }, - B => { html => $m->scomp('/Elements/FreesideSearch') - }, - C => { html => $m->scomp('/Elements/FreesideInvoiceSearch') - }, - D => { html => $m->scomp('/Elements/FreesideSvcSearch') - }, - E => { html => $m->scomp('/Elements/SimpleSearch') - } - }; -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; -} -if (!defined $topactions) { - $topactions = $basetopactions; -} - - 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 b36101e73..000000000 --- a/rt/html/Elements/TicketList +++ /dev/null @@ -1,179 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -% 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 dfab9ea82..000000000 --- a/rt/html/Elements/TitleBox +++ /dev/null @@ -1,51 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 933d77000..000000000 --- a/rt/html/Elements/TitleBoxEnd +++ /dev/null @@ -1,51 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 ba24fd92e..000000000 --- a/rt/html/Elements/TitleBoxStart +++ /dev/null @@ -1,51 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 483021952..000000000 --- a/rt/html/Elements/ValidateCustomFields +++ /dev/null @@ -1,81 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 9509d13f4..000000000 --- a/rt/html/Helpers/CalPopup.html +++ /dev/null @@ -1,129 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 e69de29bb..000000000 diff --git a/rt/html/NoAuth/Logout.html b/rt/html/NoAuth/Logout.html deleted file mode 100644 index 49b7a4e59..000000000 --- a/rt/html/NoAuth/Logout.html +++ /dev/null @@ -1,74 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -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 dc935d45e..000000000 --- a/rt/html/NoAuth/Reminder.html +++ /dev/null @@ -1,50 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 6188951a4..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 4e90c507c..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 301f8f3e4..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -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 a8e3184ce..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 2b967e0f1..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 f2c9ad321..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 09be77a51..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.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 f83c0fd2c..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 d7aac5d51..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 2c808929d..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.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 363da69d3..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.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 2078a3147..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.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 5bc836aa9..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.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 d4470343c..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 c46998293..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 e49c45f3a..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -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: 2px inset #069; - 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; -} - diff --git a/rt/html/NoAuth/css/3.5-default/freeside.css b/rt/html/NoAuth/css/3.5-default/freeside.css deleted file mode 100644 index a595061b9..000000000 --- a/rt/html/NoAuth/css/3.5-default/freeside.css +++ /dev/null @@ -1,82 +0,0 @@ -.black { - background-color: #000000; - color: #ffffff; - background-position: left top; - vertical-align: top; - text-align: left; -} - -.blackright { - background-color: #000000; - color: #ffffff; - background-position: left top; - vertical-align: center; - text-align: right; - font-size:16px; - padding-right:4px -} - -input.fsblackbutton { - background-color:#333333; - color: #ffffff; - border:1px solid; - border-top-color:#cccccc; - border-left-color:#cccccc; - border-right-color:#aaaaaa; - border-bottom-color:#aaaaaa; - font-family: Arial, Verdana, Helvetica, sans-serif; - font-weight:bold; - padding-left:12px; - padding-right:12px; - overflow:visible; - filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#ff333333',EndColorStr='#ff666666') -} - -input.fsblackbuttonselected { - background-color:#7e0079; - color: #ffffff; - border:1px solid; - border-top-color:#cccccc; - border-left-color:#cccccc; - border-right-color:#aaaaaa; - border-bottom-color:#aaaaaa; - font-family: Arial, Verdana, Helvetica, sans-serif; - font-weight:bold; - padding-left:12px; - padding-right:12px; - overflow:visible; - filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#ff330033',EndColorStr='#ff7e0079') -} - -.darkmediumgray { - background-color: #aaaaaa; - background-position: left top; - vertical-align: top; - text-align: left; -} -.darkmediumgrayright { - background-color: #aaaaaa; - background-position: left top; - vertical-align: top; - text-align: right; -} -.bggray { - background-color: #e8e8e8; - background-position: left top; - vertical-align: top; - text-align: left; -} -.bggrayright { - background-color: #e8e8e8; - background-position: left top; - vertical-align: top; - text-align: right; -} - -div.titlebox { - background: #d4d4d4; -} - -div.titlebox-title { - background: #e8e8e8; -} 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 cc5c9e4b1..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 b9e7aeb41..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 e9c079cc0..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 7c4fa5a20..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -@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 ddb2e687b..000000000 --- a/rt/html/NoAuth/css/3.5-default/misc.css +++ /dev/null @@ -1,92 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -body { - font-family: Verdana, 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 78323aa91..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 16f83f789..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -#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 5e8eeb78a..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.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 79d8040a7..000000000 --- a/rt/html/NoAuth/css/3.5-default/titlebox.css +++ /dev/null @@ -1,179 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.titlebox { - margin-bottom: 1em; -} - -.titlebox .titlebox-content { - margin-top: -1px; - padding: 1em 2em 0.5em 2em; - margin: 0; - /*margin: 1em 2em 0.5em 2em;*/ -} - -.titlebox th { font-size: 0.8em; } - -%# TRS: I wish there was a more elegant way to do this... I essentially need to -%# select all elements X that do NOT have element Y as a descendant... which I can -%# fake with the child selector of CSS2, but IE is stupid and does not support that. - -% for (qw(index -% Search-Build -% User-Prefs -% Approvals -% Admin-Users-Modify -% SelfService -% SelfService-Closed -% )) -% { -#comp-<%$_%> .titlebox .titlebox-content, -% } -.titlebox .titlebox .titlebox-content -{ - background: #eee; - border-bottom: 1px solid #ccc; - border-right: 1px solid #ccc; - border-left: 0.5em solid #069; -} - -#login-box .titlebox .titlebox-content -{ - background: none; - border: none; -} - -.titlebox .titlebox-title { - position: relative; - font-weight: bold; - color: #930; - font-size: 1.2em; - padding: 0.2em 0 0.2em 4em; - border-bottom: 1px solid #069; -} - -.titlebox .titlebox-title .right { - position: absolute; - top: 0.5em; - right: 1.5em; - font-size: 0.9em; - color: #888; -} - -.titlebox .titlebox-title .right .selected { color: #930; } - -#body .titlebox .titlebox-title .right :link, -#body .titlebox .titlebox-title .right :visited { - color: #888; -} - -#body .titlebox .titlebox-title .right :link:hover, -#body .titlebox .titlebox-title .right :visited:hover { - color: #930; -} - -.titlebox .titlebox-title .widget a { - display: block; - padding-top: 1em; - width: 20px; - - background: url(<%$RT::WebImagesURL%>/css/rollup-arrow.gif) no-repeat center center; - - margin: 0; - text-indent: -9999px; - - position: absolute; - top: 0.4em; - left: 0.75em; - float: left; - -%# Basically IE5 will see those crazy backslashes and prematurely end the rule. -%# This allows values for IE 5's broken box model to be set before the hack and -%# the real values to be set after. We also set voice-family back to whatever it -%# would have been on the off chance it's actually used. - /* WIN IE5 hack */ - height: 7px; - voice-family: "\"}\""; - voice-family: inherit; - height: 0; - overflow: hidden; -} - -%# IE also doesn't support the child selector ">", so we can use it to set values -%# that only other browsers will see (in this case, playing nice with Opera, which -%# also suffers from the backslash hack above.) -html>body .titlebox .titlebox-title .widget a { - height: 0; - overflow: hidden; -} - -%# Compensates for IE's bad box model by hiding this rule from other browsers -* html .titlebox .titlebox-title .widget a { - background-position: center 0.3em; - left: -3.5em; -} - -.titlebox.rolled-up .titlebox-title .widget a { - background-image: url(<%$RT::WebImagesURL%>/css/rolldown-arrow.gif); -} - -#body .titlebox .titlebox-title :link, -#body .titlebox .titlebox-title :visited -{ - color: #930; - text-decoration: none; -} - -#body .titlebox .titlebox-title :link:hover, -#body .titlebox .titlebox-title :visited:hover -{ - text-decoration: underline; -} - -.titlebox .titlebox-content hr.clear { - visibility: hidden; -} diff --git a/rt/html/NoAuth/css/3.5-default/transactions.css b/rt/html/NoAuth/css/3.5-default/transactions.css deleted file mode 100755 index e9decf8ee..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -.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 980e5f09d..000000000 --- a/rt/html/NoAuth/css/autohandler +++ /dev/null @@ -1,53 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 4c8ba3405..000000000 --- a/rt/html/NoAuth/css/dhandler +++ /dev/null @@ -1,30 +0,0 @@ -<%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 40d23d0d6..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -* { - 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~ zTgYrlYFaJ=)@Y~IcETBrLy#zlLj*+ynFI$EPzDhMr0Tpsz><;zN+wM&_gZ(YTc_^b_nfcx z-TT}7oKx^hT2#bux${y=Q@{`?2ObF_lt8qXNQK?ihQg=~GDZi9b>c4U+^@D2+_yAs2$6z2(RiWbIKjOF(m&NUKw@?@; zFf=p7x`Pe=@Ajr`R|jqC&H--=AuhiHyb|0lz(~MLO6etp@XF22bx2N5COJ8o+}vCi zELcF)pCdW>bre#ms#TX`PbVhtpNfTpg}O~yu0#ld!a#8kxCq2oJCcMD75~7cXI98HIkE)xp?s+rKP0+*xA_;7Z*qB#$=BF>4;AHO>9h=a%ehE zy`2Fl$Sh!~>tC^QwZ^HJGfusnaO&lZLr*6R%?%|GC4|@p>=Huc{#yVpr8Ecr2m}=r z6!iJ|=byz-KmEj!BS*-{$k2L^xw$zPE?nU8r82g?x#hW@XJ%){yu<~V*qEpR*Cq}< z9O*cwGu{(@ucf;X;;sEFnKV@427db5<|Lem}lWz^jXG7dyNs`r2Hl%;C7a#TcCf;83BRsA*SDgqVxN>UQA+v7O98l)vMX>hF)?w& zkRe0th7KLdfddCnsZ%L@TqN@*#jTv}9AbpE4{KI+%4TQ?#jBO7f2?b@|dGmbW$Z5ym7FZDk6 zQ|>joKgBu49A0pcH9b~w>&(rez$Gc=EGeaEF~Fsi!=#j1;o;%)eSCcM7cE*ud3kx0 z!~q){8})hDDcu{TYxAg0O%|W-CFQaq;CqgIaM-eVA%#9m2nly@6*BAKV0DLERZLlt7xw1+7rc$biUi=Gdy07H+xm!V1*50#O0Iv#+ zU*+fLe?MZx2>q>Fw>Ar%OiWDF;85c?1T$daVDyb%p0dcjq+HeqtmX3d1S=p)N*UCo zw6KcqZMuH_ddR3zqclNjVi`MjEPMCvtb1w{PEmzekTALe z+LuU4Zt)Alee}2E@PD_rQV20j2oc#Jz@?PIWo2bM1`i%AVq#+Iu3?y&v2EKnEG;bw z4h|+a_h~JtZ{NP0K7AUcQb|BS0I{*L^$ws{uU`D?U;o0*%}w`!dn$wYO>tb=kw9r- zY0DbALNN8n+qeyJzYTN~Lfm^Uz@?NOrIcsq&!2C(V#SI&A7*cF&w&F6aCdjd)zy^; z4<2ZI@9*!=xpU_L$j!~g+1Xhq8fj{3%9=H6m@;L`b0tBgg{7QY6h-W^7#=@rIhSMM zXvyy{{uicgO!onAXe$ROY5`jzrQErF`}TUlHa9mXCME`de}7i2SWyFPfN|r-JuMX3 z+S0S9ZcM7Aq=aeHrs3k^!k1ruS+7fbBF3$Z8TywXKD_s7jfn}N5d3cUTlAXKM<+d= zBfOY?d?p_k{7=2t7iB$Q?>oCdG8UNoJhX6fX=$m?ym|BLeaMCl8`Q7;&YjwW^q4VY zG(Hy;6g-#Z+`M^{Pe1*XcJ10RYSbv!ty`zzvT73pQv<>dOvS>lo>L_{!q_H5d=ZA(Bv0E-tduC=ZXVCme7DTk(GU}mVMm&-aV=7)jn znysiBz4#d z3+vXcW5R?9HOj+wKK7W|nd8vS0f%l5wDxRWE4_2*;fUK1ciME)ty*c?#tiR?K6Dz_ z1rr++wJ(2orwHKPx-7i25JJSo#p(1QD=RCVuDg8sGBGhR1O^5Y7#N7NvojYiTp%YW zhw83tz<>e7#>TRD?_SoeTgUqK>xqnvJ%qWp2XJHmSe|`@x>Qk)CiyoeZhmQBBr01#kju**UTmC%n3U<4ONAT^y6tfxK&sg zTx&6LeG>yle>)DZksZ0R<1)zylbCwsZ9GSIM5R=5BPJ6mrGH(3dleNGarf?Boq)8o zw0!PYty8B?L`6lZgXt4s3=Iw0x^*iLA3o&7i4#wweo_)nPENe{-g{5WuA4WLnVCsa zQj)qYB_#!CXJ=;4oC(0!Uw>W0eLXIIOmWUbt^QjGLCCh>@i421>`Rs7FMn80a>TXT z*1Rx!)mZHP+7kbd3zc!DLPbi%H9~iVVPD;P@i|YP%&q_v8O&;YxLf=>)*Zv*IPgB>OJb-&z0Z&d&ra7fH4*tY~lai9y zv15nEch%j_lem$Zn#$3mN7d~|j~?Z_@4nLvT<6ZI0nbgWo8mh6ZKvkm&&s2`M>X2q zhPbPFz58%ab^C*xh3uQXoBJvEFl}vG9q?FffIHUZPR5NJ$N2H%)vsW6Y2CUt>({TZ zanGJTd)U8!zfOVmNhVq!+W{~#sy`8_-p72lLm@s_!@EYw22?_NAV`gTCnVA^?-rnAIXL3nN+`D%V zcX#)C^?G@EscB>UKk6m|x6W23ZH83|lE&C)=R1gvp!m(q=@bmN2hzYi~ zw(9KIz`y`MKfg+rv@L=A$#qXCr$k)i#;MHeR;jjRYquI1I;lS;lXE#6=RWOgvNsni z^i2$~a#7!xQ5#E1cXxM3PfxE&{kE^KFa7%UY<@pJ zJy1z1%9Y&t^)@BxDWH7 zm5UX30U1wP#RZGw` zvaBraN-6g!6bh-;r3fJ&3Lzr?@P|Lp(vq5*`m_#yub9(IqZv751bKOReEjjp7#bSZ ztD}Ga{=~(_(dK?@*7~m^{dgKLN_;|mF)%ei2(eKkJJoXScYXTw85*3&JVEOBvg z!mnKy6nYBKhX?TwDBNGjzJ=kuEMo81miGNz05%FCRQ0lbDdlLDO10n1%Zs$Mv=#}P zty;ArD=Q0A(@M^}%6l2PS9AESi9%1otk`#P=;?Gr2;n1yD5|p_UggUVC=`mrn>KC2 zz`&qII$Bs*NO*X-h7bHLO5geafup}OLWnuff?X@%Rq{^1e*JDQS+bUo))-m2a;197vblo=!~gpF zOAWT3p&pZVhT#(ES^xwIA?hqk>a<*02(il1(Q#pHY%C*3j%?Ne6ciLNb?Q`gZKdZs zz3^+q8u8`^J9PJ3c#iNY21W@X;_GEGx+)h!d|_c>F=g-Gy~T6q&TZC#L`6mM%{Sku zKabxu5uZtZFBRBrI@#yVI=Z8XHLGV9AP*te7y6eSnoA2_b4{xjw#>mnr0+=F%(0Qv~gLs#e(gOG% z2yLpwM{CArZ_mDc`{>=fHvr1VN`78=l<03xB9$%w*C_hN`V9Vj82$bjr~>{><>uMv z+OF3qqAR8RUn%9Egb)U2&Ya=eHO+W2ZQ8U(57N}slr3AfXeK?b$QQ#fvp2s4%o0MJZIG@epmJ@153{qg=PqBq+<5is)mm53HY#0KC|I**4YOy@ zR<~7@RdC|7<3uk$iK;@?Y+$ccFq}#;Wgzj(mr1$UpV(n&=0jvSm3n7}!a+>qsB%FW{AT&NczSr*E zyG3|-IF~Os4a?Bi*Jse6L4<~eGGW35jb(S)33o|}Nap708)TeFuX6#Ap_w6GqdL+# z*oV&JyGVt;;%6bmDqz15LfO=~v`BTR%IYTplhV`EyKdjUon5JUl$7`#JV0-@ku< z0s;cmOY@|ZIYNjdzyTmaTN(A=25>DufCJE@`f>gG_4a9LY2@YQQBY7oVPPSKg@x+# zf`S4{OG|0hsukwu<{F2kr6nF79(a0s;^yX7uBWG$1f*0Q8Ne|i#0#73d?^dgReNLF z0#?-y>t{Zj0}rK?MM8*&z>}j8xC5j#=U*wkl2`IdUdc-!{|`Xf(WEFzbUgq7002ov JPDHLkV1oSof|dXP diff --git a/rt/html/NoAuth/js/ahah.js b/rt/html/NoAuth/js/ahah.js deleted file mode 100644 index 03ed12a97..000000000 --- a/rt/html/NoAuth/js/ahah.js +++ /dev/null @@ -1,80 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -/* -% $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 fd1b90075..000000000 --- a/rt/html/NoAuth/js/autohandler +++ /dev/null @@ -1,53 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 79da4167f..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -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 9e4c70ea5..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -/* 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 9225870b6..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -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( "listSize" ) != null && theList.getAttribute( "listSize" ) != "" ) { - theList.listSize = theList.getAttribute( "listSize" ); - 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 9753b9771..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -/* 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/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -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 0de071ad3..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -/* $(...) - 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 e706d9a73..000000000 --- a/rt/html/Prefs/Elements/Tabs +++ /dev/null @@ -1,72 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 ba35fd214..000000000 --- a/rt/html/Prefs/MyRT.html +++ /dev/null @@ -1,151 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 f4becc74a..000000000 --- a/rt/html/Prefs/Quicksearch.html +++ /dev/null @@ -1,96 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 8754d535d..000000000 --- a/rt/html/Prefs/Search.html +++ /dev/null @@ -1,108 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 7cc71b0cd..000000000 --- a/rt/html/Prefs/SearchOptions.html +++ /dev/null @@ -1,114 +0,0 @@ - -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /Elements/Header, Title => loc("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 cfc4b5291..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 227318944..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 4ee409bdc..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 4ed2da8af..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 2bfc43d9a..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 5dd7417d0..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 6b2ed222d..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 69af6c8e1..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 35ee11fa7..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 e23098a66..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 621e96dfa..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 3503d8ace..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 739dace9d..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 e8247b18e..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 7406520bc..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 4152a7ee0..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 3e6b314b7..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 37883931d..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 240dd90fb..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 766e12624..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 d6ae96f83..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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/RTx/Statistics/CallsMultiQueue/Elements/Chart b/rt/html/RTx/Statistics/CallsMultiQueue/Elements/Chart deleted file mode 100755 index 02a183b2c..000000000 --- a/rt/html/RTx/Statistics/CallsMultiQueue/Elements/Chart +++ /dev/null @@ -1,39 +0,0 @@ -<%perl> -$r->content_type("image/$format"); -print $graph->plot(\@data)->$format(); -$m->abort(); - -<&|/l, $#data+1&>[_1] Plot Elements

    -% foreach my $value (@data) { -<% $value %>

    -% } -<&|/l&>x_labels:

    -<% $ARGS{x_labels} %> -

    -<&|/l&>legend:

    -<% $ARGS{set_legend} %> -

    -<&|/l, (keys %ARGS) - 2&>[_1] data sets:

    - -% for (1..(scalar keys %ARGS)-2) { -<% $_ %> <% $ARGS{"data$_"} %>

    -% } - -<%INIT> -use GD::Graph::lines; - -my @data; -my $graph = GD::Graph::lines->new($Statistics::GraphWidth,$Statistics::GraphHeight); -$graph->set(export_format => "png", - x_label => 'Day of Week', - y_label => 'Tickets per day'); -$graph->set_legend(split /,/ , $ARGS{set_legend}); -my $format = $graph->export_format; -push @data, [split /,/ , $ARGS{x_labels}]; -for (1..((scalar keys %ARGS)-2)) { - push @data, [split /,/ , $ARGS{"data".$_}]; -} - - -<%ARGS> - diff --git a/rt/html/RTx/Statistics/CallsMultiQueue/index.html b/rt/html/RTx/Statistics/CallsMultiQueue/index.html deleted file mode 100755 index abf8aa74a..000000000 --- a/rt/html/RTx/Statistics/CallsMultiQueue/index.html +++ /dev/null @@ -1,330 +0,0 @@ -<& /Elements/Header, Title => loc('Tickets per day in Multiple queues') &> -<& /RTx/Statistics/Elements/Tabs, Title => loc('Tickets per day in Multiple Queues by status') &> - -

    Description

    -

    This chart shows details of tickets per day by their status. You can select multiple queues to display at the same time, but only one status. You can chose any of the defined status values. -There is also the option to display all available queues at the same time. -The default display shows tickets resolved in your default queue (General unless altered locally). -The line chart below shows the same information in a graphical form. - -
    - -

    - -%# Build Legend -% my @legend; -% for (sort keys %queues_to_show) { -% push @legend, $_; -% } - -%my $title = "Tickets with Status $status in " . join(', ', @queues) . ", per day from " . -% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[0]) . " through " . -% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$#dates-1]); - -<& /Elements/TitleBoxStart, title => $title, title_href => "/RTx/Statistics/OpenStalled/index.html?$QueryString"&> - -% if ($ShowHeader) { -<& /RTx/Statistics/Elements/CollectionAsTable/Header, - Format => \@RowFormat, - FormatString => $RowFormat, - AllowSorting => $AllowSorting, - Order => $Order, - Query => undef, - Rows => $Rows, - Page => $Page, - OrderBy => $OrderBy , - BaseURL => $BaseURL, - maxitems => $maxitems &> -% } -% my $line = 0; -% LINE: for my $d (0..$#dates) { -% if ($d == $#dates ){ -% next LINE; -% } -% $line++; -% my $x = 1; -% $values{Statistics_Date} = Statistics::FormatDate($dateformat, $dates[$d]); -% my $row_total=0; -% foreach my $q (sort keys %queues_to_show) { -% my $tix = new RT::Tickets($session{'CurrentUser'}); -% if ($status eq "resolved") { -% $tix->LimitStatus(VALUE => $status); -% $tix->LimitResolved(VALUE => $dates[$d]->ISO, OPERATOR => ">="); -% if ($dates[$d+1]) { -% $tix->LimitResolved(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); -% } -% } -% elsif ($status eq "new") { -% $tix->LimitCreated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); -% if ($dates[$d+1]) { -% $tix->LimitCreated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); -% } -% } -% elsif ($status eq "deleted") { -% $tix->LimitStatus(VALUE => $status); -% $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); -% if ($dates[$d+1]) { -% $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); -% } -% } -% elsif ($status eq "stalled") { -% $tix->LimitStatus(VALUE => $status); -% $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); -% if ($dates[$d+1]) { -% $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); -% } -% } -% elsif ($status eq "open") { -% $tix->LimitStatus(VALUE => $status); -% $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); -% if ($dates[$d+1]) { -% $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); -% } -% } -% elsif ($status eq "rejected") { -% $tix->LimitStatus(VALUE => $status); -% $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); -% if ($dates[$d+1]) { -% $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); -% } -% } -% $tix->LimitQueue (VALUE => $q); -% $values{$q} = $tix->Count; -% $row_total += $tix->Count; -% $data[$x++][$d] = $tix->Count; -% } -% $values{Statistics_Totals} = $row_total; -<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@RowFormat, i => $line, record => $record, maxitems => $maxitems &> -% } -
    -<& /Elements/TitleBoxEnd&> - -
    - -
    -
    - - - -<%perl> -# Create the graph URL -my $url = 'Elements/Chart?x_labels='; -#$url .= join ",", @{ shift @data } . "&"; -for (0..$max) { - $url .= $m->interp->apply_escapes($data[0][$_],'u') . ","; -} -chop $url; -$url .= "&"; -shift @data; -$url .= 'set_legend='.(join ",", @legend)."&"; -for (0..$#data) { - $url .= "data".(1+$_)."=". (join ",", @{$data[$_]})."&"; -} -chop $url; - - -<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &> - -<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox, - Title => "Change Status, Queues or Dates", - ShowDates => 1, sMonth => \$sMonth, sDay => \$sDay, sYear => \$sYear, - eMonth => \$eMonth, eDay => \$eDay, eYear => \$eYear, - weekends => $weekends, - ShowMultiQueues => 1, queues_ref => \@queues, - ShowStatus => 1, Status => $status - &> - -
    - -<&|/l&>Bookmarkable link -%# | <&|/l&>spreadsheet -
    -
    - -<%ARGS> -$status => $Statistics::MultiQueueStatus -$max => $Statistics::MultiQueueMaxRows -@queues => @Statistics::MultiQueueQueueList -$weekends => $Statistics::PerDayWeekends; -$sMonth=>undef -$sDay=>undef -$sYear=>undef -$eMonth=>undef -$eDay=>undef -$eYear=>undef -$days=>undef -$dateformat => $Statistics::MultiQueueDateFormat -$currentMonth=>undef - -$AllowSorting => undef -$Order => undef -$OrderBy => undef -$ShowNavigation => 1 -$ShowHeader => 1 -$Rows => 50 -$Page => 1 -$BaseURL => undef -$AddAllCheck => undef - - -<%INIT> - -use RTx::Statistics; -use Time::Local; -my $n = 0; -my @data = ([]); -my @dates; -my @msgs; -my $selected; -my $diff; -my %queues_to_show; -my $secsPerDay=86400; -my $sEpoch; -my $eEpoch; -my $QueryString; -my $maxitems; -my $RowFormat; -my $BoldRowFormat; -my %record; -my %values; -my $record = \%record; - -$record{values} = \%values; - -Statistics::DebugClear(); -Statistics::DebugLog("CallsQueueDay/index.html ARGS:\n"); -for my $key (keys %ARGS) { - Statistics::DebugLog("ARG{ $key }=" . $ARGS{$key} . "\n"); -} - - - # Handle the Add All Checkbox - if($AddAllCheck eq "on") { - $AddAllCheck = undef; - undef (@queues); - my $q=new RT::Queues($session{'CurrentUser'}); - $q->UnLimit; - while (my $queue=$q->Next) { - next if !$queue->CurrentUserHasRight('SeeQueue'); - push @queues, $queue->Name; - } - } - - # If the user has the right to see the queue, put it into the map - for my $q (@queues) { - my $Queueobj = new RT::Queue($session{'CurrentUser'}); - $Queueobj->Load($q); - next if !$Queueobj->CurrentUserHasRight('SeeQueue'); - $queues_to_show{$q} = 1; - } - - $maxitems = (scalar @queues) + 2; - - # Build the format strings - $RowFormat = "'__Statistics_Date__'"; - $BoldRowFormat = "'__Statistics_Date__'"; - for my $q (@queues) { - $RowFormat .= ",'__Statistics_Dynamic__/KEY:$q/TITLE:$q/STYLE:text-align:right;'"; - $BoldRowFormat .= ",'__Statistics_Dynamic__/KEY:$q/TITLE:$q/STYLE:text-align:right;'"; - } - $RowFormat .= ",'__Statistics_Totals__/STYLE:text-align:right;'"; - $BoldRowFormat .= ",'__Statistics_Totals__/STYLE:text-align:right;'"; - # Parse the formats into structures. - my (@RowFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $RowFormat); - my (@BoldRowFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldRowFormat); - -if ($sDay > $Statistics::monthsMaxDay{$sMonth}) { - $sDay = $Statistics::monthsMaxDay{$sMonth}; -} - -if ($eDay > $Statistics::monthsMaxDay{$eMonth}) { - $eDay = $Statistics::monthsMaxDay{$eMonth}; -} - -if ($sYear){ - $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear-1900); -} -if ($eYear){ -Statistics::DebugLog("eMonth = " . $eMonth . "\n"); - $eEpoch = timelocal(0, 0, 0, $eDay, $eMonth, $eYear-1900); -} else { - # This case happens when the page is first loaded - my @local = localtime(time); - ($eDay, $eMonth, $eYear) = ($local[3], $local[4], $local[5]); - $eYear += 1900; - $eEpoch = timelocal(0, 0, 0, $local[3], $local[4], $local[5], $local[6], $local[7], $local[8]); -Statistics::DebugLog("Setting eEpoch=$eEpoch from current time.\n"); -} - -if (($eEpoch < $sEpoch) || ($sEpoch == 0)) { - # We have an end, but not a start, or, overlapping. - - # if $currentMonth is set, just set the day to 1 - if($currentMonth) { - # set start vars from end, but with day set to 1 - (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($eEpoch); - $sDay=1; - $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear); - } else { - # If the user has specified how many days back to go, use that, - # If not, set start to configured default period before end - if(defined $days) { - $sEpoch = $eEpoch - ($days * $Statistics::secsPerDay); - } else { - $sEpoch = $eEpoch - ($Statistics::PerDayPeriod * $Statistics::secsPerDay); - } - (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($sEpoch); - } - $sYear += 1900; -} - -# Compute days to chart. -# The +1 is because we need to generate one more date. If the user -# selected a 10 day range, we need to generate 11 days. -$diff = int(($eEpoch - $sEpoch + $Statistics::secsPerDay - 1) / $Statistics::secsPerDay)+1; -Statistics::DebugLog("Setting diff=$diff\n"); - -Statistics::DebugLog("sEpoch=$sEpoch, components=" . join(',', localtime($sEpoch)) . "\n"); -Statistics::DebugLog("eEpoch=$eEpoch, components=" . join(',', localtime($eEpoch)) . "\n"); - -# Build the new query string -$QueryString = "queues=" . join("&queues=", @queues); -$QueryString .= "&sDay=$sDay&sMonth=$sMonth&sYear=$sYear&eDay=$eDay&eMonth=$eMonth&eYear=$eYear&weekends=$weekends"; - - - - -# Set up the end date to be midnight(morning) of the date after the one the user wanted. -my $endRange = $eEpoch + $Statistics::secsPerDay; -$n = 0; -until ($#dates == $diff) { - my $date = new RT::Date($session{CurrentUser}); - $date->Set(Value=>$endRange - $n, Format => 'unix'); - # Note: we used to adjust the time to local midnight, but - # none of the other date entry fields in RT seem to adjust, so we've stopped. - #Statistics::DebugLog("Before adjust to midnight date " . Statistics::FormatDate("%c", $date) . "\n"); - $n+= $Statistics::secsPerDay; - # If we aren't showing weekends and this is one, decrement the number - # of days to show and skip to the next date. - if(!$weekends and Statistics::RTDateIsWeekend($date)) {$diff--; next;} - unshift @dates, $date; -Statistics::DebugLog("pushing date " . Statistics::FormatDate("%c", $date) . "\n"); - unshift @{ $data[0] }, Statistics::FormatDate($Statistics::PerDayLabelDateFormat, $date); -} - -# We put an extra day into the lists to cover up till midnight of the next day, -# But we don't want that to appear in the labels, so pop it off. -pop( @{ $data[0] } ); - -my $queue = new RT::Queues($session{CurrentUser}); -$queue->UnLimit; - -my $QueueObj = new RT::Queue($session{'CurrentUser'}); -$QueueObj->Load($queue); - diff --git a/rt/html/RTx/Statistics/CallsQueueDay/Elements/Chart b/rt/html/RTx/Statistics/CallsQueueDay/Elements/Chart deleted file mode 100755 index 9a3a50574..000000000 --- a/rt/html/RTx/Statistics/CallsQueueDay/Elements/Chart +++ /dev/null @@ -1,29 +0,0 @@ -<%perl> -$r->content_type("image/$format"); -print $graph->plot(\@data)->$format(); -$m->abort(); -print $#data+1 . " Elements:

    "; -for (0..$#data) { -print $data[$_]; -print "

    "; -} - -<%INIT> -use GD::Graph::lines; - -my @data; -my $graph = GD::Graph::lines->new($Statistics::GraphWidth,$Statistics::GraphHeight); -$graph->set(export_format => "png", - x_label => 'Day of Week', - y_label => 'Tickets per Day', - x_labels_vertical => 1, - ); -my $format = $graph->export_format; -$graph->set_legend(split /,/ , $ARGS{set_legend}); -push @data, [split /,/ , $ARGS{x_labels}]; -push @data, [split /,/ , $ARGS{data1}]; -push @data, [split /,/ , $ARGS{data2}]; -push @data, [split /,/ , $ARGS{data3}]; - -<%ARGS> - diff --git a/rt/html/RTx/Statistics/CallsQueueDay/Results.tsv b/rt/html/RTx/Statistics/CallsQueueDay/Results.tsv deleted file mode 100644 index 23f0c699c..000000000 --- a/rt/html/RTx/Statistics/CallsQueueDay/Results.tsv +++ /dev/null @@ -1,191 +0,0 @@ -%# 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 }}} -<%ARGS> -$Queue => undef -$weekends => $Statistics::PerDayWeekends; -$sMonth=>undef -$sDay=>undef -$sYear=>undef -$eMonth=>undef -$eDay=>undef -$eYear=>undef -$days=>undef -$currentMonth=>undef - - -<%INIT> -use RTx::Statistics; -use Time::Local; -my @dates; -my $n = 0; -my %Totals; -my $now = new RT::Date($session{CurrentUser}); -my $sEpoch; -my $eEpoch; - -if (!defined $Queue) { - $Queue = $Statistics::PerDayQueue; -} - -if ($sDay > $Statistics::monthsMaxDay{$sMonth}) { - $sDay = $Statistics::monthsMaxDay{$sMonth}; -} - -if ($eDay > $Statistics::monthsMaxDay{$eMonth}) { - $eDay = $Statistics::monthsMaxDay{$eMonth}; -} - -if ($sYear){ - $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear-1900); -} -if ($eYear){ -Statistics::DebugLog("eMonth = " . $eMonth . "\n"); - $eEpoch = timelocal(0, 0, 0, $eDay, $eMonth, $eYear-1900); -} else { - # This case happens when the page is first loaded - my @local = localtime(time); - ($eDay, $eMonth, $eYear) = ($local[3], $local[4], $local[5]); - $eYear += 1900; - $eEpoch = timelocal(0, 0, 0, $local[3], $local[4], $local[5], $local[6], $local[7], $local[8]); -Statistics::DebugLog("Setting eEpoch=$eEpoch from current time.\n"); -} - -if (($eEpoch < $sEpoch) || ($sEpoch == 0)) { - # We have an end, but not a start, or, overlapping. - - # if $currentMonth is set, just set the day to 1 - if($currentMonth) { - # set start vars from end, but with day set to 1 - (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($eEpoch); - $sDay=1; - $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear); - } else { - # If the user has specified how many days back to go, use that, - # If not, set start to configured default period before end - if(defined $days) { - $sEpoch = $eEpoch - ($days * $Statistics::secsPerDay); - } else { - $sEpoch = $eEpoch - ($Statistics::PerDayPeriod * $Statistics::secsPerDay); - } - (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($sEpoch); - } - $sYear += 1900; -} - -# set content type -$r->content_type('application/vnd.ms-excel'); - -# Put out some data about the generation of this file -$m->out("Tickets per day for Queue:\t" . $Queue . "\tGenerated at:\t" . Statistics::FormatDate("%x %X", $now). "\n\n"); - - -# Compute days to chart. -# The +1 is because we need to generate one more date. If the user -# selected a 10 day range, we need to generate 11 days. -my $diff = int(($eEpoch - $sEpoch + $Statistics::secsPerDay - 1) / $Statistics::secsPerDay)+1; - -# Build array of dates -my $endRange = $eEpoch + $Statistics::secsPerDay; -my $QueueObj = new RT::Queue($session{'CurrentUser'}); -$QueueObj->Load($Queue); -until ($#dates == $diff) { - my $date = new RT::Date($session{CurrentUser}); - $date->Set(Value=>$endRange - $n, Format => 'unix'); - # Note: we used to adjust the time to local midnight, but - # none of the other date entry fields in RT seem to adjust, so we've stopped. - #Statistics::DebugLog("Before adjust to midnight date " . Statistics::FormatDate("%c", $date) . "\n"); - $n+= $Statistics::secsPerDay; - # If we aren't showing weekends and this is one, decrement the number - # of days to show and skip to the next date. - if(!$weekends and Statistics::RTDateIsWeekend($date)) {$diff--; next;} - unshift @dates, $date; -} - -# Output header row -$m->out("Date\tcreate\tresolved\tdeleted\n"); - - -LINE: for my $d (0..$#dates) { - if ($d == $#dates){ - next LINE; - } - my $x = 1; - # Output the date for this row - $m->out(Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$d])); - - # output the 3 columns for this row - for my $status (qw(created resolved deleted)) { - my $tix = new RT::Tickets($session{'CurrentUser'}); - if ($status eq "created") { - $tix->LimitCreated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); - if ($dates[$d+1]) { - $tix->LimitCreated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); - } - } elsif ($status eq "resolved") { - $tix->LimitStatus(VALUE => $status); - $tix->LimitResolved(VALUE => $dates[$d]->ISO, OPERATOR => ">="); - if ($dates[$d+1]) { - $tix->LimitResolved(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); - } - } elsif ($status eq "deleted") { - $tix->LimitStatus(VALUE => $status); - $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); - if ($dates[$d+1]) { - $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); - } - } - $tix->LimitQueue (VALUE => $Queue); - $m->out( "\t" . $tix->Count ); - $Totals{$status} += $tix->Count; - } - $m->out("\n"); -} - -# Output the totals -$m->out("Totals\t$Totals{created}\t$Totals{resolved}\t$Totals{deleted}\n"); - -$m->abort(); - diff --git a/rt/html/RTx/Statistics/CallsQueueDay/index.html b/rt/html/RTx/Statistics/CallsQueueDay/index.html deleted file mode 100755 index 06fc484d1..000000000 --- a/rt/html/RTx/Statistics/CallsQueueDay/index.html +++ /dev/null @@ -1,275 +0,0 @@ -<& /Elements/Header, Title => loc("Tickets per day in Queue:" . $QueueObj->Name()) &> -<& /RTx/Statistics/Elements/Tabs, Title => loc("Tickets by status per day in Queue:" . $QueueObj->Name()) &> - -

    Description

    -

    This page displays details about tickets in the selected queue over the date range chosen. It shows how many tickets were created on -each day in the chosen range, and how many of those were either Resolved or Deleted.

    -

    To always show the current month to date, bookmark this link, or -for a spreadsheet, use this link.

    - -
    - -% Statistics::DebugLog("queue name=" . $QueueObj->Name() . "\n"); - -%my $title = "Ticket counts in " . $QueueObj->Name() . " by status per day from " . -% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[0]) . " through " . -% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$#dates-1]); -<&|/Elements/TitleBox, - title => $title, - title_href => "/RTx/Statistics/CallsQueueDay/index.html?$QueryString" &> - -% if ($ShowHeader) { -<& /RTx/Statistics/Elements/CollectionAsTable/Header, - Format => \@Format, - FormatString => $Format, - AllowSorting => $AllowSorting, - Order => $Order, - Query => undef, - Rows => $Rows, - Page => $Page, - OrderBy => $OrderBy , - BaseURL => $BaseURL, - maxitems => $maxitems &> -% } -% my $line = 1; -% LINE: for my $d (0..$#dates) { -% if ($d == $#dates){ -% next LINE; -% } -% my $x = 1; -% $values{Statistics_Date} = Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$d]); -%# NOTE need to handle all status values here.... -% for my $status (qw(created resolved deleted)) { -% my $tix = new RT::Tickets($session{'CurrentUser'}); -% $tix->LimitQueue (VALUE => $Queue); -% if ($status eq "created") { -% $tix->LimitCreated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); -% if ($dates[$d+1]) { -% $tix->LimitCreated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); -% } -% $values{Statistics_Created_Count} = $tix->Count; -% $Totals{Statistics_Created_Count} += $tix->Count; -% } -% elsif ($status eq "resolved") { -% $tix->LimitStatus(VALUE => $status); -% $tix->LimitResolved(VALUE => $dates[$d]->ISO, OPERATOR => ">="); -% if ($dates[$d+1]) { -% $tix->LimitResolved(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); -% } -% $values{Statistics_Resolved_Count} = $tix->Count; -% $Totals{Statistics_Resolved_Count} += $tix->Count; -% } -% elsif ($status eq "deleted") { -% $tix->LimitStatus(VALUE => $status); -% $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); -% if ($dates[$d+1]) { -% $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); -% } -% $values{Statistics_Deleted_Count} = $tix->Count; -% $Totals{Statistics_Deleted_Count} += $tix->Count; -% } -% $data[$x++][$d] = $tix->Count; -% } -<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@Format, i => $line, record => $record, maxitems => $maxitems &> -% $line++; -% } -% $values {Statistics_Date} = "Totals"; -% $values {Statistics_Created_Count} = $Totals{Statistics_Created_Count}; -% $values {Statistics_Resolved_Count} = $Totals{Statistics_Resolved_Count}; -% $values {Statistics_Deleted_Count} = $Totals{Statistics_Deleted_Count}; -<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@BoldFormat, i => $line, record => $record, maxitems => $maxitems &> -
    - - -
    - -
    -
    - -<%perl> -# Create the graph URL -my $url= 'Elements/Chart?x_labels='; -for (1..$diff) { - $url .= $data[0][$_] . ","; -} -chop $url; -$url .= "&"; -shift @data; -for (0..$#data) { - $url .= "data".(1+$_)."=".(join ",", @{$data[$_]})."&"; -} -chop $url; -$url .= "&set_legend=Created,Resolved,Deleted"; - - -<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &> - -<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox, - Title => "Change Queue or Dates", - ShowDates => 1, sMonth => \$sMonth, sDay => \$sDay, sYear => \$sYear, - eMonth => \$eMonth, eDay => \$eDay, eYear => \$eYear, - weekends => $weekends, - ShowSingleQueue => 1, Queue => $Queue - &> - -
    - -<&|/l&>Bookmarkable link | -<&|/l&>spreadsheet -
    -
    - - -% Statistics::DebugLog("ref of eMonth is " . ref($eMonth) . "\n"); -% Statistics::DebugInit( $m ); - -<%ARGS> -$Queue => undef -$weekends => $Statistics::PerDayWeekends; -$sMonth=>undef -$sDay=>undef -$sYear=>undef -$eMonth=>undef -$eDay=>undef -$eYear=>undef -$days=>undef -$currentMonth=>undef - -$AllowSorting => undef -$Order => undef -$OrderBy => undef -$ShowNavigation => 1 -$ShowHeader => 1 -$Rows => 50 -$Page => 1 -$BaseURL => undef - - -<%INIT> -use RTx::Statistics; -use Time::Local; -my $selected; -my $n = 0; -my @data = ([]); -my @dates; -my @msgs; -my $diff; -my $sEpoch=0; -my $eEpoch=0; -my %Totals; -my $QueryString; -my $maxitems = 4; -my %record; -my %values; -my $record = \%record; - -$record{values} = \%values; - - -# If debugging, set things up and display all the args -Statistics::DebugClear(); -Statistics::DebugLog("CallsQueueDay/index.html ARGS:\n"); -for my $key (keys %ARGS) { - Statistics::DebugLog("ARG{ $key }=" . $ARGS{$key} . "\n"); -} - -my $Format = qq{ Statistics_Date, - '__Statistics_Created_Count__/STYLE:text-align:right;', - '__Statistics_Resolved_Count__/STYLE:text-align:right;', - '__Statistics_Deleted_Count__/STYLE:text-align:right;' }; -my $BoldFormat = qq{ '__Statistics_Date__', - '__Statistics_Created_Count__/STYLE:text-align:right;', - '__Statistics_Resolved_Count__/STYLE:text-align:right;', - '__Statistics_Deleted_Count__/STYLE:text-align:right;' }; -my (@Format) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $Format); -my (@BoldFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldFormat); -Statistics::DebugLog("CallsQueueDay/index.html Format array=" . join(',', @Format) . "\n"); - -if (!defined $Queue) { - my $QueueObj = new RT::Queue($session{'CurrentUser'}); - $QueueObj->Load($Statistics::PerDayQueue); - $Queue = $QueueObj->Id(); -} - -if ($sDay > $Statistics::monthsMaxDay{$sMonth}) { - $sDay = $Statistics::monthsMaxDay{$sMonth}; -} - -if ($eDay > $Statistics::monthsMaxDay{$eMonth}) { - $eDay = $Statistics::monthsMaxDay{$eMonth}; -} - -if ($sYear){ - $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear-1900); -} -if ($eYear){ -Statistics::DebugLog("eMonth = " . $eMonth . "\n"); - $eEpoch = timelocal(0, 0, 0, $eDay, $eMonth, $eYear-1900); -} else { - # This case happens when the page is first loaded - my @local = localtime(time); - ($eDay, $eMonth, $eYear) = ($local[3], $local[4], $local[5]); - $eYear += 1900; - $eEpoch = timelocal(0, 0, 0, $local[3], $local[4], $local[5], $local[6], $local[7], $local[8]); -Statistics::DebugLog("Setting eEpoch=$eEpoch from current time.\n"); -} - -if (($eEpoch < $sEpoch) || ($sEpoch == 0)) { - # We have an end, but not a start, or, overlapping. - - # if $currentMonth is set, just set the day to 1 - if($currentMonth) { - # set start vars from end, but with day set to 1 - (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($eEpoch); - $sDay=1; - $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear); - } else { - # If the user has specified how many days back to go, use that, - # If not, set start to configured default period before end - if(defined $days) { - $sEpoch = $eEpoch - ($days * $Statistics::secsPerDay); - } else { - $sEpoch = $eEpoch - ($Statistics::PerDayPeriod * $Statistics::secsPerDay); - } - (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($sEpoch); - } - $sYear += 1900; -} - -# Compute days to chart. -# The +1 is because we need to generate one more date. If the user -# selected a 10 day range, we need to generate 11 days. -$diff = int(($eEpoch - $sEpoch + $Statistics::secsPerDay - 1) / $Statistics::secsPerDay)+1; -Statistics::DebugLog("Setting diff=$diff\n"); - -Statistics::DebugLog("sEpoch=$sEpoch, components=" . join(',', localtime($sEpoch)) . "\n"); -Statistics::DebugLog("eEpoch=$eEpoch, components=" . join(',', localtime($eEpoch)) . "\n"); - -# Set up the string for the current query for bookmarkable link -$QueryString = "sDay=$sDay&sMonth=$sMonth&sYear=$sYear&eDay=$eDay&eMonth=$eMonth&eYear=$eYear&weekends=$weekends&Queue=$Queue"; - -# Set up the end date to be midnight(morning) of the date after the one the user wanted. -my $endRange = $eEpoch + $Statistics::secsPerDay; -my $QueueObj = new RT::Queue($session{'CurrentUser'}); -$QueueObj->Load($Queue); -$n = 0; -until ($#dates == $diff) { - my $date = new RT::Date($session{CurrentUser}); - $date->Set(Value=>$endRange - $n, Format => 'unix'); - # Note: we used to adjust the time to local midnight, but - # none of the other date entry fields in RT seem to adjust, so we've stopped. - #Statistics::DebugLog("Before adjust to midnight date " . Statistics::FormatDate("%c", $date) . "\n"); - $n+= $Statistics::secsPerDay; - # If we aren't showing weekends and this is one, decrement the number - # of days to show and skip to the next date. - if(!$weekends and Statistics::RTDateIsWeekend($date)) {$diff--; next;} - unshift @dates, $date; -Statistics::DebugLog("pushing date " . Statistics::FormatDate("%c", $date) . "\n"); - unshift @{ $data[0] }, Statistics::FormatDate($Statistics::PerDayLabelDateFormat, $date); -} - -# We put an extra day into the lists to cover up till midnight of the next day, -# But we don't want that to appear in the labels, so pop it off. -pop( @{ $data[0] } ); - - diff --git a/rt/html/RTx/Statistics/DayOfWeek/Elements/Chart b/rt/html/RTx/Statistics/DayOfWeek/Elements/Chart deleted file mode 100755 index 239c09541..000000000 --- a/rt/html/RTx/Statistics/DayOfWeek/Elements/Chart +++ /dev/null @@ -1,26 +0,0 @@ -% $r->content_type("image/$format"); -% $m->print($graph->plot(\@data)->$format()); -% $m->abort(); -<&|/l, $#data+1&>[_1] Elements:

    -% for (0..$#data) { -<% $data[$_] %>

    -% } -<%INIT> -use GD::Graph::bars; - -my @data; -my $graph = GD::Graph::bars->new($Statistics::GraphWidth,$Statistics::GraphHeight); -$graph->set(export_format => "png", - x_label => 'Day of Week', - y_label => 'Ticket actions per Day by type'); -$graph->set_legend(split /,/ , $ARGS{set_legend}); -push @data, [split /,/ , $ARGS{x_labels}]; -push @data, [split /,/ , $ARGS{data1}]; -push @data, [split /,/ , $ARGS{data2}]; -push @data, [split /,/ , $ARGS{data3}]; - -my $format = $graph->export_format; -$r->content_type("image/$format"); - -<%ARGS> - diff --git a/rt/html/RTx/Statistics/DayOfWeek/index.html b/rt/html/RTx/Statistics/DayOfWeek/index.html deleted file mode 100755 index 2e82b9c24..000000000 --- a/rt/html/RTx/Statistics/DayOfWeek/index.html +++ /dev/null @@ -1,155 +0,0 @@ -<& /Elements/Header, Title =>loc('Tickets by Day Of Week in Queue:' . $QueueObj->Name()) &> -<& /RTx/Statistics/Elements/Tabs, Title =>loc('Trends in ticket status by Day Of Week in Queue:' . $QueueObj->Name()) &> - -

    Description

    -

    The purpose of this page is to show historical trends for each day of the week. -It displays details of number of tickets created in your -selected queue for each day. It also hows how many of those created tickets were Resolved or Deleted

    - -
    - - -%my $title = "Ticket counts by day of week in " . $QueueObj->Name(); -<&|/Elements/TitleBox, - title => $title, - title_href => "/RTx/Statistics/DayOfWeek/index.html?$QueryString" &> - -% if ($ShowHeader) { -<& /RTx/Statistics/Elements/CollectionAsTable/Header, - Format => \@Format, - FormatString => $Format, - AllowSorting => $AllowSorting, - Order => $Order, - Query => undef, - Rows => $Rows, - Page => $Page, - OrderBy => $OrderBy , - BaseURL => $BaseURL, - maxitems => $maxitems &> -% } -% my $line = 1; -% for my $d (0..$#days) { -% my $x = 1; -% $values{Statistics_Date} = $days[$d]; -%# NOTE Show all status values??? -% $values{Statistics_Created_Count} = $counts[$d]{new}; -% $values{Statistics_Resolved_Count} = $counts[$d]{resolved}; -% $values{Statistics_Deleted_Count} = $counts[$d]{deleted}; -<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@Format, i => $line, record => $record, maxitems => $maxitems &> -% $line++; -% } -% $values {Statistics_Date} = "Totals"; -% $values {Statistics_Created_Count} = $Totals{new}; -% $values {Statistics_Resolved_Count} = $Totals{resolved}; -% $values {Statistics_Deleted_Count} = $Totals{deleted}; -<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@BoldFormat, i => $line, record => $record, maxitems => $maxitems &> -
    - - -
    - -
    -
    - -<%perl> -my $url = 'Elements/Chart?&x_labels='; -for (0..$#days) { - $url .= $days[$_] . "," ; -} -chop $url; -$url .= "&"; - -my @things = qw(new resolved deleted); -for my $th (0..$#things) { - $url .= "data".(1+$th)."=".(join ",", map { $counts[$_]{$things[$th]} } (0..6))."&"; -} -chop $url; -$url .= '&set_legend=Created,Resolved,Deleted'; - - -<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &> - -% Statistics::DebugLog("queue name=" . $QueueObj->Id() . "\n"); - -<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox, - Title => "Change Queue", - ShowSingleQueue => 1, Queue => $QueueObj->Id() - &> - -
    - -% Statistics::DebugInit( $m ); - -<%ARGS> -$Queue => $Statistics::DayOfWeekQueue - -$AllowSorting => undef -$Order => undef -$OrderBy => undef -$ShowNavigation => 1 -$ShowHeader => 1 -$Rows => 50 -$Page => 1 -$BaseURL => undef - - -<%INIT> -use GD::Graph; -use RTx::Statistics; -my @days = qw(Sun Mon Tue Wed Thu Fri Sat); -my $n = 0; -my @data = ([]); -my @msgs; -my @counts; -my %Totals = ( - resolved => 0, - deleted => 0, - new => 0 -); -my $QueryString = "Queue=$Queue"; -my $maxitems = 4; -my %record; -my %values; -my $record = \%record; - -$record{values} = \%values; - -my $Format = qq{ Statistics_Date, - '__Statistics_Created_Count__/STYLE:text-align:right;', - '__Statistics_Resolved_Count__/STYLE:text-align:right;', - '__Statistics_Deleted_Count__/STYLE:text-align:right;' }; -my $BoldFormat = qq{ '__Statistics_Date__', - '__Statistics_Created_Count__/STYLE:text-align:right;', - '__Statistics_Resolved_Count__/STYLE:text-align:right;', - '__Statistics_Deleted_Count__/STYLE:text-align:right;' }; -my (@Format) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $Format); -my (@BoldFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldFormat); - -my $QueueObj = new RT::Queue($session{'CurrentUser'}); -$QueueObj->Load($Queue); -$RT::Logger->warning("Loaded queue $Queue, name=". $QueueObj->Name()); - -my $tix = new RT::Tickets($session{'CurrentUser'}); -$tix->LimitQueue (VALUE => $Queue); -$tix->UnLimit; -if ($tix->Count) { - # Initialize the counters to zero, so that all the cells show up - foreach my $day (0..@days) { - $counts[$day]{resolved} = 0; - $counts[$day]{deleted} = 0; - $counts[$day]{new} = 0; - } - while (my $t = $tix->RT::SearchBuilder::Next) { # BLOODY HACK - if($t->Status eq "resolved") { - $counts[(localtime($t->ResolvedObj->Unix))[6]]{resolved}++; - $Totals{resolved}++; - } - if($t->Status eq "deleted") { - $counts[(localtime($t->LastUpdatedObj->Unix))[6]]{deleted}++; - $Totals{deleted}++; - } - $counts[(localtime($t->CreatedObj->Unix))[6]]{new}++; - $Totals{new}++; - } -} - diff --git a/rt/html/RTx/Statistics/DurationAsString b/rt/html/RTx/Statistics/DurationAsString deleted file mode 100755 index c0b4d9af4..000000000 --- a/rt/html/RTx/Statistics/DurationAsString +++ /dev/null @@ -1,18 +0,0 @@ -<%$days|'00'%> days <%$hours|'00'%>:<%$minutes|'00'%> -<%INIT> - -my $MINUTE = 60; -my $HOUR = $MINUTE*60; -my $DAY = $HOUR * 24; -my $WEEK = $DAY * 7; -my $days = int($Duration / $DAY); -$Duration = $Duration % $DAY; -my $hours = int($Duration / $HOUR); -$hours = sprintf("%02d", $hours); -$Duration = $Duration % $HOUR; -my $minutes = int($Duration/$MINUTE); -$minutes = sprintf("%02d", $minutes); - -<%ARGS> -$Duration => undef - diff --git a/rt/html/RTx/Statistics/Elements/CollectionAsTable/Header b/rt/html/RTx/Statistics/Elements/CollectionAsTable/Header deleted file mode 100644 index cecb02eee..000000000 --- a/rt/html/RTx/Statistics/Elements/CollectionAsTable/Header +++ /dev/null @@ -1,126 +0,0 @@ -%# 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 }}} -<%ARGS> -@Format => undef -$FormatString => undef -$AllowSorting => undef -$Order=>undef -$BaseURL => undef -$Query => undef -$Rows => undef -$Page => undef -$maxitems => undef - -
     
    out( 'align="' . $col->{align} . '"' ) if ( $col->{align} ); - $m->out( 'style="' . $col->{style} . '"' ) if ( $col->{style} ); - $m->out('>'); - my $title = $col->{title}; - $title =~ s/^__(.*)__$/$1/o; - $title = ( - $m->comp( - '/RTx/Statistics/Elements/StatColumnMap', - Name => $title, - Attr => 'title' - ) - || $title - ); - if ( - $AllowSorting - && $col->{'attribute'} - && $m->comp( - '/RTx/Statistics/Elements/StatColumnMap', - 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( - '/RTx/Statistics/Elements/StatColumnMap', - 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, $column->{keyname} ); - ; - } - 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('
    - - - - - - - - - -
    - - X  - - <% $Title %> - -   -
    - -% if (defined $ShowStatus) { - - - - -% } -% if (defined $ShowSingleQueue) { - - - - -% } -% if (defined $ShowDates) { - - <& /RTx/Statistics/Elements/DateSelectRow, Label => "Start Date:", - refMonth => $sMonth, nameMonth => "sMonth", - refDay => $sDay, nameDay => "sDay", - refYear => $sYear, nameYear => "sYear" &> - - - <& /RTx/Statistics/Elements/DateSelectRow, Label => "End Date:", - refMonth => $eMonth, nameMonth => "eMonth", - refDay => $eDay, nameDay => "eDay", - refYear => $eYear, nameYear => "eYear" &> - - - - - -% } -% if (defined $ShowMultiQueues) { - -% if (defined $ShowDates) { -%# If we're showing the dates, we put these side by side. - - -% } else { - - - - -% } - -% } - <& /RTx/Statistics/Elements/ControlsAsTable/UpdatePage &> -
    Show Status: - <& /Elements/SelectStatus, Name=>"status", Default => $Status, DefaultValue => undef &> -
    Show Queue: - <& /Elements/SelectQueue, Name=>"Queue", Default=>$Queue ,ShowNullOption=>0, - CheckQueueRight=>'SeeQueue' &> -
    Show Weekends: - -
    Select All Queues: - <& /RTx/Statistics/Elements/SelectMultiQueue, Name=>"queues", Selected=>$queues_ref, - ShowNullOption=>0, CheckQueueRight=>'SeeQueue', Size => 10, NamedValues => 1 &> - - <& /RTx/Statistics/Elements/SelectMultiQueue, Name=>"queues", Selected=>$queues_ref, - ShowNullOption=>0, CheckQueueRight=>'SeeQueue', Size => 10, NamedValues => 1 &> -
    Select All Queues:
    -
    - - -
    -<%args> -$Title => undef -$ShowMultiQueues => undef -$queues_ref => undef -$ShowDates => undef -$sMonth => undef -$sDay => undef -$sYear => undef -$eMonth => undef -$eDay => undef -$eYear => undef -$weekends => undef -$ShowSingleQueue => undef -$Queue => undef -$ShowStatus => undef -$Status => undef - - diff --git a/rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage b/rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage deleted file mode 100644 index b4ccfd56f..000000000 --- a/rt/html/RTx/Statistics/Elements/ControlsAsTable/UpdatePage +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/rt/html/RTx/Statistics/Elements/DateSelectRow b/rt/html/RTx/Statistics/Elements/DateSelectRow deleted file mode 100644 index 325e168c9..000000000 --- a/rt/html/RTx/Statistics/Elements/DateSelectRow +++ /dev/null @@ -1,55 +0,0 @@ - <% $Label %> - - - - - - - - - - - -<%args> -$Label => undef -$refMonth => undef -$nameMonth => undef -$refDay => undef -$nameDay => undef -$refYear => undef -$nameYear => undef - -<%init> -use RTx::Statistics; -my $n; -my $selected; - - diff --git a/rt/html/RTx/Statistics/Elements/DurationAsString b/rt/html/RTx/Statistics/Elements/DurationAsString deleted file mode 100755 index c0b4d9af4..000000000 --- a/rt/html/RTx/Statistics/Elements/DurationAsString +++ /dev/null @@ -1,18 +0,0 @@ -<%$days|'00'%> days <%$hours|'00'%>:<%$minutes|'00'%> -<%INIT> - -my $MINUTE = 60; -my $HOUR = $MINUTE*60; -my $DAY = $HOUR * 24; -my $WEEK = $DAY * 7; -my $days = int($Duration / $DAY); -$Duration = $Duration % $DAY; -my $hours = int($Duration / $HOUR); -$hours = sprintf("%02d", $hours); -$Duration = $Duration % $HOUR; -my $minutes = int($Duration/$MINUTE); -$minutes = sprintf("%02d", $minutes); - -<%ARGS> -$Duration => undef - diff --git a/rt/html/RTx/Statistics/Elements/GraphBox b/rt/html/RTx/Statistics/Elements/GraphBox deleted file mode 100644 index 3dc06973e..000000000 --- a/rt/html/RTx/Statistics/Elements/GraphBox +++ /dev/null @@ -1,27 +0,0 @@ -
    - - - - - - - - - - -
    - - X  - - - Download Chart as Image - - -   -
    - Result Graph -
    -
    -<%args> -$GraphURL => undef - diff --git a/rt/html/RTx/Statistics/Elements/SelectMultiQueue b/rt/html/RTx/Statistics/Elements/SelectMultiQueue deleted file mode 100755 index 637f6dc80..000000000 --- a/rt/html/RTx/Statistics/Elements/SelectMultiQueue +++ /dev/null @@ -1,81 +0,0 @@ -%# 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 }}} - -<%ARGS> -$CheckQueueRight => 'CreateTicket' -$ShowNullOption => 1 -$ShowAllQueues => 1 -$Name => undef -$Verbose => undef -$NamedValues => 0 -$Selected => undef # ref to array containing selected queue names -$Lite => 0 -$Size => 5 - - -<%INIT> - -# put list of queue names into string, starting and ending with commas -my $sel_list = "," . join(",", @$Selected) . ","; - -my $q=new RT::Queues($session{'CurrentUser'}); -$q->UnLimit; - - diff --git a/rt/html/RTx/Statistics/Elements/StatColumnMap b/rt/html/RTx/Statistics/Elements/StatColumnMap deleted file mode 100644 index aef9e2f3e..000000000 --- a/rt/html/RTx/Statistics/Elements/StatColumnMap +++ /dev/null @@ -1,173 +0,0 @@ -%# 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 }}} -<%ARGS> -$Name => undef -$Attr => undef - - - -<%ONCE> -our ( $STAT_COLUMN_MAP ); - -sub StatColumnMap { - my $name = shift; - my $attr = shift; - - # First deal with the simple things from the map - if ( $STAT_COLUMN_MAP->{$name} ) { - return ( $STAT_COLUMN_MAP->{$name}->{$attr} ); - } - - # now, let's deal with harder things, like Custom Fields - - elsif ( $name =~ /^(?:CF|CustomField)\.\{(.+)\}$/ ) { - my $field = $1; - - if ( $attr eq 'attribute' ) { - return (undef); - } - elsif ( $attr eq 'title' ) { - return ( $field ); - } - elsif ( $attr eq 'value' ) { - # Display custom field contents, separated by newlines. - # For Image custom fields we also show a thumbnail here. - return sub { - my $values = $_[0]->CustomFieldValues($field); - return map { - ( - ($_->CustomFieldObj->Type eq 'Image') - ? \($m->scomp( '/Elements/ShowCustomFieldImage', Object => $_ )) - : $_->Content - ), - \'
    ', - } @{ $values->ItemsArrayRef } - }; - } - } -} - -sub LinkCallback { - my $method = shift; - - my $mode = $RT::Ticket::LINKTYPEMAP{$method}{Mode}; - my $type = $RT::Ticket::LINKTYPEMAP{$method}{Type}; - my $mode_uri = $mode.'URI'; - my $local_type = 'Local'.$mode; - - return sub { - map { - \'', - ( $_->$mode_uri->IsLocal ? $_->$local_type : $_->$mode ), - \'
    ', - } @{ $_[0]->Links($mode,$type)->ItemsArrayRef } - } -} - -$STAT_COLUMN_MAP = { - LastUpdated => { - attribute => 'LastUpdated', - title => 'Last Updated', - value => sub { return $_[0]->LastUpdatedObj->AsString } - }, - - Statistics_Date => { - title => 'Date', - value => sub { return $_[0]{values}{Statistics_Date} } - }, - - Statistics_Created_Count => { - title => 'Created', - value => sub { return $_[0]{values}{Statistics_Created_Count} } - }, - - Statistics_Resolved_Count => { - title => 'Resolved', - value => sub { return $_[0]{values}{Statistics_Resolved_Count} } - }, - - Statistics_Deleted_Count => { - title => 'Deleted', - value => sub { return $_[0]{values}{Statistics_Deleted_Count} } - }, - - Statistics_Totals => { - title => 'Totals', - value => sub { return $_[0]{values}{Statistics_Totals} } - }, - - Statistics_Status => { - title => 'Status', - value => sub { return $_[0]{values}{Statistics_Status} } - }, - - Statistics_Dynamic => { - # Depends on having a KEY as second param - value => sub { - my $record = shift; - my $line = shift; - my $key = shift; - return $$record{values}{$key} - } - }, - - # Everything from LINKTYPEMAP - (map { - $_ => { value => LinkCallback( $_ ) } - } keys %RT::Ticket::LINKTYPEMAP), - - '_CLASS' => { - value => sub { return $_[1] % 2 ? 'oddline' : 'evenline' } - }, - -}; - -<%init> -$m->comp( '/Elements/Callback', STAT_COLUMN_MAP => $STAT_COLUMN_MAP, _CallbackName => 'StatColumnMap'); -return StatColumnMap($Name, $Attr); - diff --git a/rt/html/RTx/Statistics/Elements/Tabs b/rt/html/RTx/Statistics/Elements/Tabs deleted file mode 100755 index 4fde113ea..000000000 --- a/rt/html/RTx/Statistics/Elements/Tabs +++ /dev/null @@ -1,72 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<& /Elements/Tabs, - tabs => $tabs, - current_toptab => 'RTx/Statistics/index.html', - current_tab => $current_tab, - Title => $Title &> - -<%INIT> - my $tabs = { A => { title => loc('Tickets per Day'), - path => 'RTx/Statistics/CallsQueueDay/index.html', - }, - B => { title => loc('Tickets by status'), - path => 'RTx/Statistics/OpenStalled/index.html', - }, - C => { title => loc('Multiple Queues'), - path => 'RTx/Statistics/CallsMultiQueue/index.html', - }, - D => { title => loc('Ticket Trends by Day'), - path => 'RTx/Statistics/DayOfWeek/index.html', - }, - E => { 'title' => loc('Time to Resolve'), - path => 'RTx/Statistics/Resolution/index.html', - }, - F => { 'title' => loc('Resolve Time Graph'), - path => 'RTx/Statistics/TimeToResolve/index.html', - }, - Z => { 'title' => loc('FAQ'), - path => 'RTx/Statistics/FAQ/index.html', - }, - }; - - # Now let callbacks add their extra tabs - $m->comp('/Elements/Callback', tabs => $tabs, %ARGS); - - foreach my $tab (sort keys %{$tabs}) { - if ($tabs->{$tab}->{'path'} eq $current_tab) { - $tabs->{$tab}->{"subtabs"} = $subtabs; - $tabs->{$tab}->{"current_subtab"} = $current_subtab; - } - } - - - - -<%ARGS> -$subtabs => undef -$current_tab => undef -$current_subtab => undef -$Title => undef - diff --git a/rt/html/RTx/Statistics/FAQ/index.html b/rt/html/RTx/Statistics/FAQ/index.html deleted file mode 100644 index e7839eaad..000000000 --- a/rt/html/RTx/Statistics/FAQ/index.html +++ /dev/null @@ -1,23 +0,0 @@ -<& /Elements/Header, Title => 'FAQ and known issues' &> -<& /RTx/Statistics/Elements/Tabs, Title => loc("FAQ and Known Issues") &> -
    -

    This page will be used to contain known issues and FAQ`s for the Statistics -package
    -This will also be used to clarify limitations of the package as they stand.

    - -

    What Version of the Statistics package is this?

    -

    0.1.8

    - -

    What time zone are the charts set to?

    -

    Because of the new programming method of the date functions, the charts are currently built in GMT(UTC). This may once again be -customisable in a future release.

    - -

    What is the default date period and queue?

    -

    The default date period is the previous 10 days, except where the chart is over a fixed 7 day period. The default queue is either -General, or another queue set in your local configuration.

    - -

    What are the limitations of the date function?

    -

    It has few, but it will not let you chose less than one day. you cannot select an end date before the start date and it is not -recommended to select a date in the future or an illegal date, such at 30th February. Code has been put in place to trap these, but it may -not be fool proof.

    -
    diff --git a/rt/html/RTx/Statistics/OpenStalled/Elements/Chart b/rt/html/RTx/Statistics/OpenStalled/Elements/Chart deleted file mode 100755 index 9505881e8..000000000 --- a/rt/html/RTx/Statistics/OpenStalled/Elements/Chart +++ /dev/null @@ -1,27 +0,0 @@ -<%perl> -$r->content_type("image/$format"); -print $graph->plot(\@data)->$format(); -$m->abort(); -print $#data+1 . " Elements:

    "; -for (0..$#data) { -print $data[$_]; -print "

    "; -} - -<%INIT> -use GD::Graph::bars; - -my @data; -my $graph = GD::Graph::bars->new($Statistics::GraphWidth,$Statistics::GraphHeight); -$graph->set(export_format => "png", - x_label => 'Queue name', - y_label => 'Total per queue by status'); -my $format = $graph->export_format; -$graph->set_legend(split /,/ , $ARGS{set_legend}); -push @data, [split /,/ , $ARGS{x_labels}]; -push @data, [split /,/ , $ARGS{data1}]; -push @data, [split /,/ , $ARGS{data2}]; -push @data, [split /,/ , $ARGS{data3}]; - -<%ARGS> - diff --git a/rt/html/RTx/Statistics/OpenStalled/Results.tsv b/rt/html/RTx/Statistics/OpenStalled/Results.tsv deleted file mode 100644 index 2ec1e0c4a..000000000 --- a/rt/html/RTx/Statistics/OpenStalled/Results.tsv +++ /dev/null @@ -1,114 +0,0 @@ -%# 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 }}} -<%ARGS> -@queues => @Statistics::OpenStalledQueueList - - -<%INIT> -use RTx::Statistics; -use Time::Local; - - my $n = 0; - my @data; - my @msgs; - my %totals; - my $QueryString; - my $now = new RT::Date($session{CurrentUser}); - my $tix = new RT::Tickets($session{'CurrentUser'}); - - my %queues = map { - $_ => 1; - } (@queues); - - # set content type - $r->content_type('application/vnd.ms-excel'); - - $QueryString = "queues=" . join("&queues=", @queues); - - my $queue = new RT::Queues($session{CurrentUser}); - $queue->UnLimit; - - my $QueueObj = new RT::Queue($session{'CurrentUser'}); - $QueueObj->Load($queue); - - # Put out some data about the generation of this file - $m->out("Tickets by Status by Queue for Queues:\t" . join(',', @queues) . "\tGenerated at:\t" . Statistics::FormatDate("%x %X", $now). "\n\n"); - - # basically the same as index.html - - # Output header row - $m->out("Status"); - for ( sort keys %queues) { - push @data, $_; - my $Queueobj = new RT::Queue($session{'CurrentUser'}); - $Queueobj->Load($_); - next if !$Queueobj->CurrentUserHasRight('SeeQueue'); - $m->out("\t" . $_); - } - $m->out("\tTotals\n"); - - foreach my $s (qw(new open stalled)) { - $m->out("$s"); - my $total=0; - foreach my $q (sort keys %queues) { - $tix = new RT::Tickets($session{'CurrentUser'}); - $tix->LimitQueue(VALUE => "$q"); - $tix->LimitStatus(VALUE => "$s"); - $totals{$q} += $tix->Count; # Add up columns for each queue - $m->out("\t" . $tix->Count); - $total += $tix->Count; - } - $m->out("\t$total\n"); - $totals{"Totals"} += $total; - } - $m->out("Totals"); - foreach my $q (sort keys %queues) { - $m->out("\t" . $totals{$q}); - } - $m->out("\t" . $totals{"Totals"} . "\n"); - - $m->abort(); - diff --git a/rt/html/RTx/Statistics/OpenStalled/index.html b/rt/html/RTx/Statistics/OpenStalled/index.html deleted file mode 100755 index d0cd9f158..000000000 --- a/rt/html/RTx/Statistics/OpenStalled/index.html +++ /dev/null @@ -1,188 +0,0 @@ -<& /Elements/Header, Title => loc('New, Open and Stalled tickets by Queue') &> -<& /RTx/Statistics/Elements/Tabs, Title => loc('New, Open and Stalled tickets by Queue') &> - -

    Description

    -

    The purpose of this page is to show a snapshot of the current status of tickets by Queue. You can multi select Queues from the dropdown -list or simply show all available queues. This will indicate how many tickets have not yet been viewed (New), how many have been at least -viewed once (Open) and how many have had their status changed to stalled.

    - -
    - -%my $tix = new RT::Tickets($session{'CurrentUser'}); -%if ($queue) { -% $tix->LimitQueue (VALUE => $queue); -%} - - -%my $title = "New, Open and Stalled Tickets in " . join(', ', @queues); -<& /Elements/TitleBoxStart, title => $title, title_href => "/RTx/Statistics/OpenStalled/index.html?$QueryString"&> - -% if ($ShowHeader) { -<& /RTx/Statistics/Elements/CollectionAsTable/Header, - Format => \@RowFormat, - FormatString => $RowFormat, - AllowSorting => $AllowSorting, - Order => $Order, - Query => undef, - Rows => $Rows, - Page => $Page, - OrderBy => $OrderBy , - BaseURL => $BaseURL, - maxitems => $maxitems &> -% } - -% for ( sort keys %queues_to_show) { -% push @data, $_; -% } -% my @legend; -% my $total = 0; -% my $line = 0; -%# NOTE need to handle all status values (see share/html/Elements/SelectStatus). -% foreach my $s (qw(new open stalled)) { -% $line++; -% push @legend, $s; -% $total=0; -% foreach my $q (sort keys %queues_to_show) { -% $tix = new RT::Tickets($session{'CurrentUser'}); -% $tix->LimitQueue(VALUE => "$q"); -% $tix->LimitStatus(VALUE => "$s"); -% push @data, $tix->Count; -% $totals{$q} += $tix->Count; # Add up columns for each queue -% $total += $tix->Count; -% $values{$q} = $tix->Count; -% } -% $totals{"Totals"} += $total; -% $values{Statistics_Status} = $s; -% $values{Statistics_Totals} = $total; -<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@RowFormat, i => $line, record => $record, maxitems => $maxitems &> -% } -% $values{Statistics_Status} = "Totals"; -% foreach my $q (sort keys %queues_to_show) { -% $values{$q} = $totals{$q}; -% } -% $values{Statistics_Totals} = $totals{"Totals"}; -<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@BoldRowFormat, i => $line+1, record => $record, maxitems => $maxitems &> -
    -<& /Elements/TitleBoxEnd&> - -
    - -
    -
    - -% use Data::Dumper; -% Statistics::DebugLog("Dump of data array is " . Dumper(@data) . "\n"); -% my $url = 'Elements/Chart?x_labels='; -% for (1..(scalar keys %queues_to_show)) { -% $url .= $m->interp->apply_escapes((shift @data),'u') . ','; -% } -% chop $url; -% $url .= '&data1=' ; -% for (1..(scalar keys %queues_to_show)) { -% $url .= $m->interp->apply_escapes((shift @data),'u') . ','; -% } -% chop $url; -% $url .= '&data2=' ; -% for (1..(scalar keys %queues_to_show)) { -% $url .= $m->interp->apply_escapes((shift @data),'u') . ','; -% } -% chop $url; -% $url .= '&data3=' ; -% for (1..(scalar keys %queues_to_show)) { -% $url .= $m->interp->apply_escapes((shift @data),'u') . ','; -% } -% $url .= '&set_legend='.(join ",", @legend); - - -<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &> - -<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox, Title => "Select Queues", ShowMultiQueues => 1, queues_ref => \@queues &> - -<&|/l&>Bookmarkable link -%# | <&|/l&>spreadsheet -
    -
    - -
    - -% Statistics::DebugInit( $m ); - -<%ARGS> -@queues => @Statistics::OpenStalledQueueList -$AllowSorting => undef -$Order => undef -$OrderBy => undef -$ShowNavigation => 1 -$ShowHeader => 1 -$Rows => 50 -$Page => 1 -$BaseURL => undef -$AddAllCheck => undef - - -<%INIT> - use RTx::Statistics; - - my $n = 0; - my @data; - my @msgs; - my %totals; - my $QueryString; - my %queues_to_show; - my $maxitems; - my $RowFormat; - my $BoldRowFormat; - my %record; - my %values; - my $record = \%record; - - $record{values} = \%values; - - Statistics::DebugClear(); - - # Handle the Add All Checkbox - if($AddAllCheck eq "on") { - $AddAllCheck = undef; - undef (@queues); - my $q=new RT::Queues($session{'CurrentUser'}); - $q->UnLimit; - while (my $queue=$q->Next) { - next if !$queue->CurrentUserHasRight('SeeQueue'); - push @queues, $queue->Name; - } - } - - # If the user has the right to see the queue, put it into the map - for my $q (@queues) { - my $Queueobj = new RT::Queue($session{'CurrentUser'}); - $Queueobj->Load($q); - next if !$Queueobj->CurrentUserHasRight('SeeQueue'); - $queues_to_show{$q} = 1; - } - - $maxitems = (scalar @queues) + 2; - - # Build the new query string - $QueryString = "queues=" . join("&queues=", @queues); - - # Build the format strings - $RowFormat = "'__Statistics_Status__'"; - $BoldRowFormat = "'__Statistics_Status__'"; - for my $q (@queues) { - $RowFormat .= ",'__Statistics_Dynamic__/KEY:$q/TITLE:$q/STYLE:text-align:right;'"; - $BoldRowFormat .= ",'__Statistics_Dynamic__/KEY:$q/TITLE:$q/STYLE:text-align:right;'"; - } - $RowFormat .= ",'__Statistics_Totals__/STYLE:text-align:right;'"; - $BoldRowFormat .= ",'__Statistics_Totals__/STYLE:text-align:right;'"; - # Parse the formats into structures. - my (@RowFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $RowFormat); - my (@BoldRowFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldRowFormat); - - - my $queue = new RT::Queues($session{CurrentUser}); - $queue->UnLimit; - - my $QueueObj = new RT::Queue($session{'CurrentUser'}); - $QueueObj->Load($queue); - - diff --git a/rt/html/RTx/Statistics/Resolution/Elements/Chart b/rt/html/RTx/Statistics/Resolution/Elements/Chart deleted file mode 100755 index fa0ac5538..000000000 --- a/rt/html/RTx/Statistics/Resolution/Elements/Chart +++ /dev/null @@ -1,29 +0,0 @@ -<%perl> -$r->content_type("image/$format"); -print $graph->plot(\@data)->$format(); -$m->abort(); -print $#data+1 . " Elements:

    "; -for (0..$#data) { -print $data[$_]; -print "

    "; -} - -<%INIT> -use GD::Graph::lines; - -my @data; -my $graph = GD::Graph::lines->new($Statistics::GraphWidth,$Statistics::GraphHeight); -$graph->set(export_format => "png", - x_label => 'Days', - y_label => 'Average time in Days'); - -push @data, [split /,/ , $ARGS{x_labels}]; -push @data, [split /,/ , $ARGS{data1}]; -push @data, [split /,/ , $ARGS{data2}]; -push @data, [split /,/ , $ARGS{data3}]; - -my $format = $graph->export_format; -#$r->content_type("image/$format"); - -<%ARGS> - diff --git a/rt/html/RTx/Statistics/Resolution/index.html b/rt/html/RTx/Statistics/Resolution/index.html deleted file mode 100644 index d9885b093..000000000 --- a/rt/html/RTx/Statistics/Resolution/index.html +++ /dev/null @@ -1,269 +0,0 @@ -<& /Elements/Header, Title => 'Time to Resolution' &> -<& /RTx/Statistics/Elements/Tabs, Title => loc("Time To Resolve tickets by Queue for : " .$QueueObj->Name()) &> -

    Description

    -

    This page shows details of resolution of tickets in the selected queue. It displays tickets created on each day in your selected date -range. Of those tickets created on that day, how many have been resolved and the total time it has taken for all tickets created on that -day to be resolved.

    -

    At the bottom of the chart is shows total time taken to resolve all tickets -in the selected date range and the average time per ticket to -resolve.

    - -
    - -%my $title = "Time to resolve in " . $QueueObj->Name() . " per day from " . -% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[0]) . " through " . -% Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$#dates-1]); -<&|/Elements/TitleBox, - title => $title, - title_href => "/RTx/Statistics/Resolution/index.html?$QueryString" &> - -% if ($ShowHeader) { -<& /RTx/Statistics/Elements/CollectionAsTable/Header, - Format => \@Format, - FormatString => $Format, - AllowSorting => $AllowSorting, - Order => $Order, - Query => undef, - Rows => $Rows, - Page => $Page, - OrderBy => $OrderBy , - BaseURL => $BaseURL, - maxitems => $maxitems &> -% } -% my $line = 1; -% LINE: for my $d (0..$#dates ) { -% if ($d == $#dates ){ -% next LINE; -% } -% my $x = 1; -% $values{Statistics_Date} = Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$d]); -% my $tix = new RT::Tickets($session{'CurrentUser'}); -% $tix->LimitCreated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); -% if ($dates[$d+1]) { -% $tix->LimitCreated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); -% } -% if ($Queue) { -% $tix->LimitQueue (VALUE => $Queue); -% } -% $values{Statistics_Created_Count} = $tix->Count; -% $tix->LimitStatus(VALUE => "resolved"); -% $values{Statistics_Resolved_Count} = $tix->Count; -% if ($tix->Count) { -% my @tix = @{$tix->ItemsArrayRef}; -% my $total; -% $total += ($_->ResolvedObj->Unix - $_->CreatedObj->Unix) for @tix; -% $size+= ($#tix +1); -% $grandtotal += $total; -% $values{Duration} = Statistics::DurationAsString($total); -% $data[$x++][$d] = int ($total ); -% } else { -% $values{Duration} = "N/A"; -% } -<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@Format, i => $line, record => $record, maxitems => $maxitems &> -% $line++; -%} -% $size =1 if $size==0; -% $values{text} = "Average time to resolve = " . Statistics::DurationAsString($grandtotal / $size); -<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@OneCellFormat, i => $line, record => $record, maxitems => $maxitems &> -% $line++; -% $values{text} = "Total time to resolve = " . Statistics::DurationAsString( $grandtotal ); -<& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@OneCellFormat, i => $line, record => $record, maxitems => $maxitems &> -% $line++; -
    - - -
    - -
    -
    - -<%perl> -# Create the graph URL - -# change the total time to resolve to a floating point number of days -foreach my $dat(@{$data[1]} ){ - $dat = ($dat / $Statistics::secsPerDay); - $dat = sprintf("%0.4f", $dat); -} - -my $url = 'Elements/Chart?x_labels='; -for (0..$diff-1) { - $url .= $data[0][$_] . ","; -} -chop $url; -shift @data; -$url .= "&data1="; -for(0..$diff-1) { - $data[0][$_] = 0 if !$data[0][$_]; - $url .= $data[0][$_] . ","; -} - - -<& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &> - -<& /RTx/Statistics/Elements/ControlsAsTable/ControlBox, - Title => "Change Queue or Dates", - ShowDates => 1, sMonth => \$sMonth, sDay => \$sDay, sYear => \$sYear, - eMonth => \$eMonth, eDay => \$eDay, eYear => \$eYear, - weekends => $weekends, - ShowSingleQueue => 1, Queue => $Queue - &> - -
    - -<%ARGS> -$max => $Statistics::TimeToResolveMaxRows -$Queue => undef -$weekends =>$Statistics::TimeToResolveWeekends -$sMonth=>undef -$sDay=>undef -$sYear=>undef -$eMonth=>undef -$eDay=>undef -$eYear=>undef -$days=>undef -$currentMonth=>undef - -$AllowSorting => undef -$Order => undef -$OrderBy => undef -$ShowNavigation => 1 -$ShowHeader => 1 -$Rows => 50 -$Page => 1 -$BaseURL => undef - - -<%INIT> -use RTx::Statistics; -use Time::Local; -my $n = 0; -my @data = ([]); -my @dates; -my @msgs; -my $size; -my $selected; -my $grandtotal = 0; -my $diff; -my $sEpoch=0; -my $eEpoch=0; -my $QueryString; - -my $maxitems = 4; -my %record; -my %values; -my $record = \%record; - -$record{values} = \%values; - - -# If debugging, set things up and display all the args -Statistics::DebugClear(); -Statistics::DebugLog("CallsQueueDay/index.html ARGS:\n"); -for my $key (keys %ARGS) { - Statistics::DebugLog("ARG{ $key }=" . $ARGS{$key} . "\n"); -} - -my $Format = qq{ Statistics_Date, - '__Statistics_Created_Count__/STYLE:text-align:right;', - '__Statistics_Resolved_Count__/STYLE:text-align:right;', - '__Statistics_Dynamic__/KEY:Duration/TITLE:Time To Resolve/STYLE:text-align:right;' }; -my $BoldFormat = qq{ '__Statistics_Date__', - '__Statistics_Created_Count__/STYLE:text-align:right;', - '__Statistics_Resolved_Count__/STYLE:text-align:right;', - '__Statistics_Dynamic__/KEY:Duration/TITLE:Time To Resolve/STYLE:text-align:right;' }; - -# TODO need way to make this cell do colspan -my $OneCellFormat = qq{ '__Statistics_Dynamic__/KEY:text/STYLE:text-align:left;','','','' }; - -my (@Format) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $Format); -my (@BoldFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldFormat); -my (@OneCellFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $OneCellFormat); - -Statistics::DebugLog("CallsQueueDay/index.html Format array=" . join(',', @Format) . "\n"); - -if ($sDay > $Statistics::monthsMaxDay{$sMonth}) { - $sDay = $Statistics::monthsMaxDay{$sMonth}; -} - -if ($eDay > $Statistics::monthsMaxDay{$eMonth}) { - $eDay = $Statistics::monthsMaxDay{$eMonth}; -} - -if ($sYear){ - $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear-1900); -} -if ($eYear){ -Statistics::DebugLog("eMonth = " . $eMonth . "\n"); - $eEpoch = timelocal(0, 0, 0, $eDay, $eMonth, $eYear-1900); -} else { - # This case happens when the page is first loaded - my @local = localtime(time); - ($eDay, $eMonth, $eYear) = ($local[3], $local[4], $local[5]); - $eYear += 1900; - $eEpoch = timelocal(0, 0, 0, $local[3], $local[4], $local[5], $local[6], $local[7], $local[8]); -Statistics::DebugLog("Setting eEpoch=$eEpoch from current time.\n"); -} - -if (($eEpoch < $sEpoch) || ($sEpoch == 0)) { - # We have an end, but not a start, or, overlapping. - - # if $currentMonth is set, just set the day to 1 - if($currentMonth) { - # set start vars from end, but with day set to 1 - (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($eEpoch); - $sDay=1; - $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear); - } else { - # If the user has specified how many days back to go, use that, - # If not, set start to configured default period before end - if(defined $days) { - $sEpoch = $eEpoch - ($days * $Statistics::secsPerDay); - } else { - $sEpoch = $eEpoch - ($Statistics::PerDayPeriod * $Statistics::secsPerDay); - } - (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($sEpoch); - } - $sYear += 1900; -} - -# Compute days to chart. -# The +1 is because we need to generate one more date. If the user -# selected a 10 day range, we need to generate 11 days. -$diff = int(($eEpoch - $sEpoch + $Statistics::secsPerDay - 1) / $Statistics::secsPerDay)+1; -Statistics::DebugLog("Setting diff=$diff\n"); - -Statistics::DebugLog("sEpoch=$sEpoch, components=" . join(',', localtime($sEpoch)) . "\n"); -Statistics::DebugLog("eEpoch=$eEpoch, components=" . join(',', localtime($eEpoch)) . "\n"); - -my $QueueObj = new RT::Queue($session{'CurrentUser'}); -if (!defined $Queue) { - $QueueObj->Load($Statistics::TimeToResolveQueue); - $Queue = $QueueObj->Id(); -} - -# Set up the string for the current query for bookmarkable link -$QueryString = "sDay=$sDay&sMonth=$sMonth&sYear=$sYear&eDay=$eDay&eMonth=$eMonth&eYear=$eYear&weekends=$weekends&Queue=$Queue"; - -# Set up the end date to be midnight(morning) of the date after the one the user wanted. -my $endRange = $eEpoch + $Statistics::secsPerDay; -$QueueObj->Load($Queue); -# NOTE: list loop starts at the end of the date range, unshifting dates onto -# the arrays, so that they end up in start to finish order. -$eEpoch += $Statistics::secsPerDay; -$n = 0; -until ($#dates == $diff ) { - my $date = new RT::Date($session{CurrentUser}); - $date->Set(Value=>$endRange - $n, Format => 'unix'); - # Note: we used to adjust the time to local midnight, but - # none of the other date entry fields in RT seem to adjust, so we've stopped. - #Statistics::DebugLog("Before adjust to midnight date " . Statistics::FormatDate("%c", $date) . "\n"); - $n+= $Statistics::secsPerDay; - # If we aren't showing weekends and this is one, decrement the number - # of days to show and skip to the next date. - if(!$weekends and Statistics::RTDateIsWeekend($date)) {$diff--; next;} - unshift @dates, $date; -Statistics::DebugLog("pushing date " . Statistics::FormatDate("%c", $date) . "\n"); - unshift @{ $data[0] }, Statistics::FormatDate($Statistics::PerDayLabelDateFormat, $date); -} - diff --git a/rt/html/RTx/Statistics/TimeToResolve/Elements/Chart b/rt/html/RTx/Statistics/TimeToResolve/Elements/Chart deleted file mode 100755 index a069a7bfb..000000000 --- a/rt/html/RTx/Statistics/TimeToResolve/Elements/Chart +++ /dev/null @@ -1,23 +0,0 @@ -<%perl> -print $graph->plot(\@data)->$format(); -$m->abort(); - -<%INIT> -use GD::Graph::points; - -my @data; -my $graph = GD::Graph::points->new(400,300); -$graph->set(export_format => "png", - marker_size => $ARGS{marker_size}, - x_label => 'Average time to resolve (Days)', - y_label => 'Number of tickets resolved' ); -#$r->content_type("image/$format"); -my $format = $graph->export_format; -push @data, [split /,/ , $ARGS{x_labels}]; -for (1..((scalar keys %ARGS)-2)) { - push @data, [split /,/ , $ARGS{"data".$_}]; -} - - -<%ARGS> - diff --git a/rt/html/RTx/Statistics/TimeToResolve/index.html b/rt/html/RTx/Statistics/TimeToResolve/index.html deleted file mode 100755 index 2124b538d..000000000 --- a/rt/html/RTx/Statistics/TimeToResolve/index.html +++ /dev/null @@ -1,75 +0,0 @@ -<& /Elements/Header, Title => 'Time to Resolve in Queue' &> -<& /RTx/Statistics/Elements/Tabs, Title => 'Time to Resolve, by ticket in Queue:' . $QueueObj->Name() &> - -

    Description

    -

    This page displays the same information as the Time to Resolve chart, but in a scattergraph format and only for the previous 7 calendar -days. It only displays data for tickets which have been resolved. Each division on the Days axis is one day and the granularity of this chart -is 30 minutes.

    -
    - - - - - - -
    Show Queue:<& /Elements/SelectQueue, Name=>"queue", Default=>$queue ,ShowNullOption=>0, - CheckQueueRight=>'SeeQueue' &>
    - -
    - -
    -% my $url = 'Elements/Chart?x_labels='; -% my $i; -% $url .= join ",", (map {(int($_/2) == $_/2 && (++$i)%2) ? $_/2 : ""} grep {$counts[$_]} 0..($#counts-1)), "longer"; -% $url .= '&'; -% $url .= "marker_size=1&"; -% $url .= "data1=".(join ",", map { $_ || () } @counts)."&"; -% chop $url; - - -
    - -%Statistics::DebugInit($m); - -<%ARGS> -$queue => undef - - -<%INIT> -use RTx::Statistics; - -my @days = qw(Sun Mon Tue Wed Thu Fri Sat); -my $n = 0; -my @data = ([]); -my @msgs; -my @counts; - -Statistics::DebugClear(); -Statistics::DebugLog("TimeToResolve/index.html ARGS:\n"); -for my $key (keys %ARGS) { - Statistics::DebugLog("ARG{ $key }=" . $ARGS{$key} . "\n"); -} - -my $QueueObj = new RT::Queue($session{'CurrentUser'}); -if (!defined $queue) { - $QueueObj->Load($Statistics::TimeToResolveGraphQueue); - $queue = $QueueObj->Id(); -} else { - $QueueObj->Load($queue); -} - - -my $tix = new RT::Tickets($session{'CurrentUser'}); -$tix->LimitQueue (VALUE => $queue) if $queue; -$tix->LimitStatus(VALUE => "resolved"); -$tix->UnLimit; -if ($tix->Count) { - while (my $t = $tix->RT::SearchBuilder::Next) { # BLOODY HACK - my $when = $t->ResolvedObj->Unix - $t->CreatedObj->Unix; - next unless $when > 0; # Doubly bloody hack - my $max = (60*60*24*2) / 1800; - my $x = int($when / 1800); - $counts[$x > $max ? $max : $x]++; - } -} - diff --git a/rt/html/RTx/Statistics/UserTest/Elements/Chart b/rt/html/RTx/Statistics/UserTest/Elements/Chart deleted file mode 100755 index 99eb2a2b1..000000000 --- a/rt/html/RTx/Statistics/UserTest/Elements/Chart +++ /dev/null @@ -1,28 +0,0 @@ -<%perl> -print $graph->plot(\@data)->$format(); -$m->abort(); -print $#data+1 . " Elements:

    "; -for (0..$#data) { -print $data[$_]; -print "

    "; -} - -<%INIT> -use GD::Graph::lines; - -my @data; -my $graph = GD::Graph::lines->new(640,480); -$graph->set(export_format => "png", - x_label => 'Days', - y_label => 'Average time in Days'); - -push @data, [split /,/ , $ARGS{x_labels}]; -push @data, [split /,/ , $ARGS{data1}]; -push @data, [split /,/ , $ARGS{data2}]; -push @data, [split /,/ , $ARGS{data3}]; - -my $format = $graph->export_format; -#$r->content_type("image/$format"); - -<%ARGS> - diff --git a/rt/html/RTx/Statistics/UserTest/index.html b/rt/html/RTx/Statistics/UserTest/index.html deleted file mode 100755 index 7bc25da70..000000000 --- a/rt/html/RTx/Statistics/UserTest/index.html +++ /dev/null @@ -1,54 +0,0 @@ -<& /Elements/Header, Title => 'Time to Resolve in Queue' &> -<& /RTx/Statistics/Elements/Tabs, Title => 'Time to Resolve, by ticket in Queue:' . $QueueObj->Name() &> - - -

    - -See Queue:
    -<& /Elements/SelectQueue, Name=>"queue", Default => "$queue" &> -
    - -
    - -
    -% my $url = 'Elements/Chart?x_labels='; -% my $i; -% $url .= join ",", (map {(int($_/2) == $_/2 && (++$i)%2) ? $_/2 : ""} grep {$counts[$_]} 0..($#counts-1)), "longer"; -% $url .= '&'; -% $url .= "marker_size=1&"; -% $url .= "data1=".(join ",", map { $_ || () } @counts)."&"; -% chop $url; - - -
    - -<%ARGS> -$queue => $Statistics::TimeToResolveGraphQueue; - - -<%INIT> -use RTx::Statistics; - -my @days = qw(Sun Mon Tue Wed Thu Fri Sat); -my $n = 0; -my @data = ([]); -my @msgs; -my @counts; - -my $QueueObj = new RT::Queue($session{'CurrentUser'}); -$QueueObj->Load($queue); - -my $tix = new RT::Tickets($session{'CurrentUser'}); -$tix->LimitQueue (VALUE => $queue) if $queue; -$tix->LimitStatus(VALUE => "resolved"); -$tix->UnLimit; -if ($tix->Count) { - while (my $t = $tix->RT::SearchBuilder::Next) { # BLOODY HACK - my $when = $t->ResolvedObj->Unix - $t->CreatedObj->Unix; - next unless $when > 0; # Doubly bloody hack - my $max = (60*60*24*2) / 1800; - my $x = int($when / 1800); - $counts[$x > $max ? $max : $x]++; - } -} - diff --git a/rt/html/RTx/Statistics/index.html b/rt/html/RTx/Statistics/index.html deleted file mode 100755 index 41490de18..000000000 --- a/rt/html/RTx/Statistics/index.html +++ /dev/null @@ -1,59 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# Copyright this file (c) 2003 Harald Wagener -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<& /Elements/Header, Title => loc('RT Statistics') &> -<& /RTx/Statistics/Elements/Tabs, Title => loc('RT Statistics') &> - -<&|/l&>

    Description

    -

    These 6 options below enable you to display management data from the RT Database in table and graphical forms, enabling trends, bottlenecks, load problems etc to be identified. -Each contains a description of how the data is displayed and describes the options available to you.

    - diff --git a/rt/html/Reports/Activity/ActivityDetail.html b/rt/html/Reports/Activity/ActivityDetail.html deleted file mode 100644 index ef0d830f7..000000000 --- a/rt/html/Reports/Activity/ActivityDetail.html +++ /dev/null @@ -1,83 +0,0 @@ -<&|Elements/Wrapper, %ARGS, title => loc("Activity detail"), - path => "Reports/Activity/ActivityDetail.html", - &> - -<& Elements/MiniPlot, data => \%counts &> - - - - - -% for my $item (@items) { - - - - - - - - - -% } -
    QueueActivityDateTimeTicket #UserShort description
    <% $item->{queue} %><% $item->{status} %><% $item->{date} %><% $item->{time} %><% $item->{id} %><% $item->{actor} %><% $item->{notes} %>
    - - -<%args> -$query => 'id > 0' -$start => "2005/01/01" -$end => "2006/01/01" - -<%init> - - -my $summary_tickets = RT::Tickets->new($session{'CurrentUser'}); -$summary_tickets->FromSQL($query . " AND ( Updated >= '$start' AND Updated <= '$end')"); -my %counts; -while (my $ticket = $summary_tickets->Next) { - my $txns = $ticket->Transactions; - $txns->Limit(FIELD => 'Created', OPERATOR => '>=', VALUE => $start); - $txns->Limit(FIELD => 'Created', OPERATOR => '<=', VALUE => $end); - # I think they really don't just want status changes - $txns->Limit(FIELD => 'Type', VALUE => 'Status', ENTRYAGGREGATOR => 'OR'); - $txns->Limit(FIELD => 'Type', VALUE => 'Create'); - - while (my $txn = $txns->Next){ - my $date = substr($txn->Created, 0, 10); - # we don't have data on the status of a new ticket, default to 'new' - $counts{$date}{$txn->NewValue || 'new'}++; - } -} - - -my $tickets = RT::Tickets->new($session{'CurrentUser'}); -$tickets->FromSQL($query); -my @items; -while (my $ticket = $tickets->Next) { - my $txns = $ticket->Transactions; - $txns->Limit(FIELD => 'Created', OPERATOR => '>=', VALUE => $start); - $txns->Limit(FIELD => 'Created', OPERATOR => '<=', VALUE => $end); - # I think they really don't just want status changes - $txns->Limit(FIELD => 'Type', VALUE => 'Status', ENTRYAGGREGATOR => 'OR'); - $txns->Limit(FIELD => 'Type', VALUE => 'Create'); - - while (my $txn = $txns->Next) { - push @items, { queue => $txn->TicketObj->QueueObj->Name, - id => $txn->TicketObj->id, - date => (split ' ', $txn->CreatedObj->ISO)[0], - time => (split ' ', $txn->CreatedObj->ISO)[1], - status => $txn->NewValue || 'new', - actor => $txn->CreatorObj->Name, - notes => ($txn->Content ne 'This transaction appears to have no content' ? substr($txn->Content, 0, 60) : $txn->BriefDescription) - }; - } -} - -@items = sort { - $a->{queue} cmp $b->{'queue'} - || $a->{'status'} cmp $b->{'status'} - || $a->{'id'} <=> $b->{'id'} - || $a->{'actor'} cmp $b->{'actor'} - || $a->{'notes'} <=> $b->{'notes'} -} @items; - - diff --git a/rt/html/Reports/Activity/ActivitySummary.html b/rt/html/Reports/Activity/ActivitySummary.html deleted file mode 100644 index 7bb756fbc..000000000 --- a/rt/html/Reports/Activity/ActivitySummary.html +++ /dev/null @@ -1,61 +0,0 @@ -<&|Elements/Wrapper, %ARGS, title => loc("Activity summary"), - path => "Reports/Activity/ActivitySummary.html", - &> - -<& Elements/MiniPlot, data => \%queues &> - - - - -% for my $status (sort keys %status) { - -% } - - -% for my $queue (sort keys %queues) { - -% for my $status (sort keys %status) { - - -% } - - -% for my $status (sort keys %status) { - -% } - -
    Queue<% $status %>Total
    <% $queue %><% $queues{$queue}{$status} || 0 %> -% } -<% $total{$queue} %>
    Grand Total<% $status{$status} %><% $total %>
    - -<%args> -$query => 'id > 0' -$start => "2005/01/01" -$end => "2006/01/01" - -<%init> - -my $tickets = RT::Tickets->new($session{'CurrentUser'}); -$tickets->FromSQL($query . " AND ( Updated >= '$start' AND Updated <= '$end')"); - -my %queues; -my %status; -my %total; -my $total; -while (my $ticket = $tickets->Next) { - my $txns = $ticket->Transactions; - $txns->Limit(FIELD => 'Created', OPERATOR => '>=', VALUE => $start); - $txns->Limit(FIELD => 'Created', OPERATOR => '<=', VALUE => $end); - $txns->Limit(FIELD => 'Type', VALUE => 'Status', ENTRYAGGREGATOR => 'OR'); - $txns->Limit(FIELD => 'Type', VALUE => 'Create'); - - while (my $txn = $txns->Next) { - $queues{$txn->TicketObj->QueueObj->Name}{$txn->NewValue || 'new'}++; - $status{$txn->NewValue || 'new'}++; - $total{$txn->TicketObj->QueueObj->Name}++; - $total++; - } -} - - - diff --git a/rt/html/Reports/Activity/Elements/LimitReport b/rt/html/Reports/Activity/Elements/LimitReport deleted file mode 100644 index 7c4aac73b..000000000 --- a/rt/html/Reports/Activity/Elements/LimitReport +++ /dev/null @@ -1,23 +0,0 @@ -
    -Query: -
    - -Report type:
    - -Start date:
    -End date:
    -<& /Elements/Submit, Label => loc('Report') &> -
    -<%args> -$type => undef -$start => undef -$end => undef -$query => undef - -<%init> - diff --git a/rt/html/Reports/Activity/Elements/MiniPlot b/rt/html/Reports/Activity/Elements/MiniPlot deleted file mode 100644 index f92032818..000000000 --- a/rt/html/Reports/Activity/Elements/MiniPlot +++ /dev/null @@ -1,57 +0,0 @@ - -% for my $major (@major) { - -% } - -% for my $major (@major) { - -% } - -
    -
      -% my $i = 0; -% for my $minor (@minor) { -% my $percent = int( 100 * ($data->{$major}{$minor} || 0) / $max ); -
    • <% $minor %>: <% $percent %>%
    • -% $i++; -% } -
    -
    <% $major %>
    - - -% my $i = 0; -% for my $minor (@minor) { - -% } - -
    <% $minor %>
    - -<%args> -$data -$major => undef -$minor => undef - -<%init> - -my $max = 1; - -my %minor; -for my $major (keys %{$data}) { - for (keys %{$data->{$major}}) { - $minor{$_}++; - $max = $data->{$major}{$_} if $data->{$major}{$_} > $max; - } -} - -my @major = $major ? @{$major} : sort keys %{$data}; -my @minor = $minor ? @{$minor} : sort keys %minor; - -return unless @minor and @major; - -my $each = int( (100 / @minor) ); -my $barwidth = int( (100 / @minor) * (3/4) ); -my $baroffset = int( (100 / @minor) * (1/8) ); - - diff --git a/rt/html/Reports/Activity/Elements/PrintFooter b/rt/html/Reports/Activity/Elements/PrintFooter deleted file mode 100644 index fa9f47582..000000000 --- a/rt/html/Reports/Activity/Elements/PrintFooter +++ /dev/null @@ -1,7 +0,0 @@ -
    -
    -<%$RT::ReportFooterMessage || 'Proprietary and Confidential' %> -
    - - -%$m->abort(); diff --git a/rt/html/Reports/Activity/Elements/PrintHeader b/rt/html/Reports/Activity/Elements/PrintHeader deleted file mode 100644 index b7c4b3419..000000000 --- a/rt/html/Reports/Activity/Elements/PrintHeader +++ /dev/null @@ -1,32 +0,0 @@ -<%args> -$title => undef -$path => undef -$query => undef - - - -<%$title%> - - - -%# XXX TODO THIS SHOULD NOT BE A TABLE - - - - - - - -
    -
    User: <%$session{'CurrentUser'}->Name%>
    -
    -%my $d= RT::Date->new($session{'CurrentUser'}); $d->SetToNow; -<%$d->AsString%>
    -
    -

    <%$title%>

    -
    -RT Logo -
    -
    -<&|/l&>Report criteria: <%$query%> -
    diff --git a/rt/html/Reports/Activity/Elements/ScreenFooter b/rt/html/Reports/Activity/Elements/ScreenFooter deleted file mode 100644 index 235b7b306..000000000 --- a/rt/html/Reports/Activity/Elements/ScreenFooter +++ /dev/null @@ -1,13 +0,0 @@ -<& LimitReport, %ARGS &> -% if ($show_print_link) { -
    -% my %printable_args = %ARGS; -% delete $printable_args{$_} for (qw/path title mode/); -% $printable_args{'mode'} = 'print'; -% my $url = $ARGS{'path'} .'?'. join(';', map { $_."=".$printable_args{$_} } keys %printable_args); -<&|/l&>Printable version -
    -% } -<%args> -$show_print_link => 1 - diff --git a/rt/html/Reports/Activity/Elements/ScreenHeader b/rt/html/Reports/Activity/Elements/ScreenHeader deleted file mode 100644 index 080efc0dd..000000000 --- a/rt/html/Reports/Activity/Elements/ScreenHeader +++ /dev/null @@ -1,8 +0,0 @@ -<%args> -$title => undef -$path => undef - -<& /Elements/Header, Title => $title &> -<& Tabs, - current_subtab => $path, - Title => $title &> diff --git a/rt/html/Reports/Activity/Elements/Tabs b/rt/html/Reports/Activity/Elements/Tabs deleted file mode 100644 index a9498209e..000000000 --- a/rt/html/Reports/Activity/Elements/Tabs +++ /dev/null @@ -1,52 +0,0 @@ -<& /Elements/Tabs, - tabs => $tabs, - subtabs => $subtabs, - current_toptab => 'Tools/Offline.html', - current_tab => 'Reports/Activity/index.html'.$args, - Title => $Title &> - -<%INIT> -my $subtabs = {}; - -my $top = $m->caller_args(-1); -my $args = "?" . $m->comp( '/Elements/QueryString', - query => $top->{query}, - start => $top->{start}, - end => $top->{end}); -if ($m->caller_args(-1)->{'query'}) { - $current_subtab .= $args; - $subtabs = { - a => { title => 'Activity detail', - path => 'Reports/Activity/ActivityDetail.html'.$args, - }, - b => { title => 'Activity summary', - path => 'Reports/Activity/ActivitySummary.html'.$args, - }, - c => { title => 'Resolution comments', - path => 'Reports/Activity/ResolutionComments.html'.$args, - }, - d => { title => 'Resolution statistics', - path => 'Reports/Activity/ResolutionStatistics.html'.$args, - }, - }; -} - -my $tabs = { - a => { title => loc('Offline'), - path => 'Tools/Offline.html', - }, - r => { title => loc('Reports'), - path => 'Reports/Activity/index.html'.$args, - subtabs => $subtabs, - current_subtab => $current_subtab, - } - }; - - - - -<%ARGS> -$current_tab => undef -$current_subtab => undef -$Title => undef - diff --git a/rt/html/Reports/Activity/Elements/Wrapper b/rt/html/Reports/Activity/Elements/Wrapper deleted file mode 100644 index 6f81f5f50..000000000 --- a/rt/html/Reports/Activity/Elements/Wrapper +++ /dev/null @@ -1,16 +0,0 @@ -<%args> -$mode => 'screen' - - -% if ($mode eq 'print') { -<& PrintHeader, %ARGS &> -%} else { -<& ScreenHeader, %ARGS &> -% } -<%$m->content |n%> -% if ($mode eq 'print') { -<& PrintFooter, %ARGS &> -%} else { -<& ScreenFooter, %ARGS &> -% } - diff --git a/rt/html/Reports/Activity/ResolutionComments.html b/rt/html/Reports/Activity/ResolutionComments.html deleted file mode 100644 index 81ca301cc..000000000 --- a/rt/html/Reports/Activity/ResolutionComments.html +++ /dev/null @@ -1,62 +0,0 @@ -<&|Elements/Wrapper, %ARGS, title => loc("Resolution Comments"), - path => "Reports/Activity/ResolutionComments.html", - &> - - - - - - - - -% for my $item (@items) { - - - - - - - - - - -% } -
    QueueTicket #CreatedResolvedTime to resolve
    Resolution comments
    <% $item->{queue} %><% $item->{id} %><% $item->{created} %><% $item->{resolved} %><% $item->{duration} %>
    <% $item->{whiteboard} %>
    - - -<%args> -$query => 'id > 0' -$start => "2005/01/01" -$end => "2006/01/01" - -<%init> - -use Time::Duration; - -my $summary_tickets = RT::Tickets->new( $session{'CurrentUser'} ); -$summary_tickets->FromSQL( - $query . " AND (Status = 'resolved') AND ( Updated >= '$start' AND Updated <= '$end')" ); - -my @items; -while ( my $ticket = $summary_tickets->Next ) { - push @items, { - queue => $ticket->QueueObj->Name, - id => $ticket->id, - created => $ticket->CreatedObj->AsString, - resolved => $ticket->ResolvedObj->AsString, - duration => Time::Duration::concise( - Time::Duration::duration( - $ticket->ResolvedObj->Unix - $ticket->CreatedObj->Unix - ) - ), - whiteboard => $ticket->FirstCustomFieldValue('Whiteboard') - }; -} - -@items = sort { $a->{queue} cmp $b->{queue} || $a->{id} <=> $b->{id} } @items; - - - - - - diff --git a/rt/html/Reports/Activity/ResolutionStatistics.html b/rt/html/Reports/Activity/ResolutionStatistics.html deleted file mode 100644 index 4ecde2c82..000000000 --- a/rt/html/Reports/Activity/ResolutionStatistics.html +++ /dev/null @@ -1,95 +0,0 @@ -<&|Elements/Wrapper, %ARGS, title => loc("Resolution statistics"), - path => "Reports/Activity/ResolutionStatistics.html", - &> - -<& Elements/MiniPlot, - data => \%plot, - major => ['Date range','Last 30 days','Last 60 days','Last 90 days','Ever'], - minor => [(sort keys %queues), "Average"] - &> - - - - - - - - - - - - - -% for my $queue (sort keys %queues) { - - -% for my $period ('Date range','Last 30 days','Last 60 days','Last 90 days','Ever') { - -% } - -% } - - -% for my $period ('Date range','Last 30 days','Last 60 days','Last 90 days','Ever') { - -% } - -
    Number of tickets closed / Average resolution time per ticket
    QueueDate rangeLast 30 daysLast 60 daysLast 90 daysEver
    <% $queue %><% scalar @{$closed{$period}{$queue}} %> / <% $average_resolve_times{$period}{$queue} %>
    Ticket average<% $average_resolve_times{$period}{_all_count} %> / <% $average_resolve_times{$period}{_all} %>
    - - -<%args> -$query => 'id > 0' -$start => "2005/01/01" -$end => "2006/01/01" - -<%init> - -my $in_30_days = RT::Date->new($session{'CurrentUser'}); -$in_30_days->Set(Format => 'Unix', Value => ( time - (86400*30))); -my $in_60_days = RT::Date->new($session{'CurrentUser'}); -$in_60_days->Set(Format => 'Unix', Value => ( time - (86400*60))); -my $in_90_days = RT::Date->new($session{'CurrentUser'}); -$in_90_days->Set(Format => 'Unix', Value => ( time - (86400*90))); - -my %queries; -$queries{'Date range'} = "(Resolved >= '$start' AND Resolved <= '$end')"; -$queries{'Last 30 days'} = "(Resolved >= '".$in_30_days->ISO."')"; -$queries{'Last 60 days'} = "(Resolved >= '".$in_60_days->ISO."')"; -$queries{'Last 90 days'} = "(Resolved >= '".$in_90_days->ISO."')"; -$queries{'Ever'} = "(Status = 'resolved' OR Status = 'rejected')"; - - -my %closed; -my %queues; -foreach my $period (keys %queries) { - my $tix = RT::Tickets->new($session{'CurrentUser'}); - $tix->FromSQL($query . " AND " .$queries{$period}); - - while (my $ticket = $tix->Next) { - push @{ $closed{$period}{$ticket->QueueObj->Name}}, $ticket; - $queues{$ticket->QueueObj->Name}++; - } -} - -my %restimes; -my %average_resolve_times; -my %plot; -use Time::Duration; -foreach my $period ( keys %closed ) { - foreach my $queue ( keys %{$closed{$period}} ) { - foreach my $ticket (@{$closed{$period}{$queue}} ) { - push @{$restimes{$period}{$queue}}, ( $ticket->ResolvedObj->Unix - $ticket->CreatedObj->Unix); - } - - my $total_time = 0; - $total_time+= $_ for @{$restimes{$period}{$queue}}; - $average_resolve_times{$period}{'_all_time'} += $total_time; - $average_resolve_times{$period}{'_all_count'} += @{$restimes{$period}{$queue}}; - $plot{$period}{$queue} = $total_time / @{$restimes{$period}{$queue}}; - $average_resolve_times{$period}{$queue} = Time::Duration::concise(Time::Duration::duration($plot{$period}{$queue})); - } - $plot{$period}{Average} = $average_resolve_times{$period}{'_all_time'} / $average_resolve_times{$period}{'_all_count'}; - $average_resolve_times{$period}{'_all'} = Time::Duration::concise(Time::Duration::duration($plot{$period}{Average})); -} - - diff --git a/rt/html/Reports/Activity/index.html b/rt/html/Reports/Activity/index.html deleted file mode 100644 index 1f6ddb0d5..000000000 --- a/rt/html/Reports/Activity/index.html +++ /dev/null @@ -1,29 +0,0 @@ -<&| Elements/Wrapper, %ARGS, title => loc("Activity reports"), show_print_link => 0 &> - - - - -<%args> -$type => undef -$start => undef -$end => undef -$query => "Status = 'resolved'" - -<%init> - -unless ($start) { - my $then = RT::Date->new($session{'CurrentUser'}); - $then->Set(Format => 'Unix', Value => time - (86400*7)); - $ARGS{start} = substr($then->ISO,0,10); -} - -unless ($end) { - my $now = RT::Date->new($session{'CurrentUser'}); - $now->SetToNow(); - $ARGS{end} = substr($now->ISO,0,10); -} - -if ($type) { - $m->redirect($type . ".html?" . $m->comp('/Elements/QueryString', query => $query, start => $start, end => $end)); -} - diff --git a/rt/html/Search/Build.html b/rt/html/Search/Build.html deleted file mode 100644 index 263958775..000000000 --- a/rt/html/Search/Build.html +++ /dev/null @@ -1,832 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# -%# 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 9742df5ae..000000000 --- a/rt/html/Search/Bulk.html +++ /dev/null @@ -1,396 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 ); - 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 82704fdc7..000000000 --- a/rt/html/Search/Chart +++ /dev/null @@ -1,188 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 a07d89502..000000000 --- a/rt/html/Search/Chart.html +++ /dev/null @@ -1,73 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 21df0db97..000000000 --- a/rt/html/Search/Edit.html +++ /dev/null @@ -1,88 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 3bd39b5c2..000000000 --- a/rt/html/Search/Elements/BuildFormatString +++ /dev/null @@ -1,244 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 2eca6afda..000000000 --- a/rt/html/Search/Elements/Chart +++ /dev/null @@ -1,139 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 cc57f96dc..000000000 --- a/rt/html/Search/Elements/DisplayOptions +++ /dev/null @@ -1,143 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<&| /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{ $_ . '.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 fa0ac96e0..000000000 --- a/rt/html/Search/Elements/EditFormat +++ /dev/null @@ -1,116 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - - - - - - - - - -
    -<&|/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 5c40c2573..000000000 --- a/rt/html/Search/Elements/EditQuery +++ /dev/null @@ -1,67 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& 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 3978ea320..000000000 --- a/rt/html/Search/Elements/EditSearches +++ /dev/null @@ -1,103 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<&| /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 => 'Saved searches' - diff --git a/rt/html/Search/Elements/NewListActions b/rt/html/Search/Elements/NewListActions deleted file mode 100644 index 535ac8cb9..000000000 --- a/rt/html/Search/Elements/NewListActions +++ /dev/null @@ -1,68 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -% 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 44a378c14..000000000 --- a/rt/html/Search/Elements/PickBasics +++ /dev/null @@ -1,176 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<&|/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 => '!=' &> - - - -<%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 734f5f871..000000000 --- a/rt/html/Search/Elements/PickCFs +++ /dev/null @@ -1,80 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -% while ( my $CustomField = $CustomFields->Next ) { -% my $name = "'CF.{" . $CustomField->Name . "}'"; - -<% $CustomField->Name %> - - - <& /Elements/SelectCustomFieldOperator, Name => $name . "Op", - True => loc("is"), - False => loc("isn't"), - TrueVal=> '=', FalseVal => '!=' &> - - -<& /Elements/SelectCustomFieldValue, Name => "ValueOf" . $name, - CustomField => $CustomField, - &> - -% } -<%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 58b29fb57..000000000 --- a/rt/html/Search/Elements/PickCriteria +++ /dev/null @@ -1,82 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<&| /Widgets/TitleBox, title => loc('Add Criteria')&> - - - - - - - - - - -
    - - - -
    - <&|/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 745ba62ac..000000000 --- a/rt/html/Search/Elements/SearchPrivacy +++ /dev/null @@ -1,55 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 45aa4535e..000000000 --- a/rt/html/Search/Elements/SearchesForObject +++ /dev/null @@ -1,65 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 c8122660a..000000000 --- a/rt/html/Search/Elements/SelectAndOr +++ /dev/null @@ -1,53 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<&|/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 43a6182bf..000000000 --- a/rt/html/Search/Elements/SelectChartType +++ /dev/null @@ -1,56 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%args> -$Name => 'ChartType' -$Default => 'bar' - - diff --git a/rt/html/Search/Elements/SelectGroup b/rt/html/Search/Elements/SelectGroup deleted file mode 100644 index 3f78d3964..000000000 --- a/rt/html/Search/Elements/SelectGroup +++ /dev/null @@ -1,67 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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 0ffb5e453..000000000 --- a/rt/html/Search/Elements/SelectGroupBy +++ /dev/null @@ -1,63 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 f3586528d..000000000 --- a/rt/html/Search/Elements/SelectLinks +++ /dev/null @@ -1,66 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -<%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 bc631dbb0..000000000 --- a/rt/html/Search/Elements/SelectPersonType +++ /dev/null @@ -1,84 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - -<%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); -} - -my @subtypes = qw(EmailAddress Name RealName Nickname Organization Address1 Address2 WorkPhone HomePhone MobilePhone PagerPhone); - - -<%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 f52a83372..000000000 --- a/rt/html/Search/Elements/SelectSearchObject +++ /dev/null @@ -1,60 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%args> -@Objects => undef -$Name => undef - - diff --git a/rt/html/Search/Elements/SelectSearchesForObjects b/rt/html/Search/Elements/SelectSearchesForObjects deleted file mode 100644 index dc8368577..000000000 --- a/rt/html/Search/Elements/SelectSearchesForObjects +++ /dev/null @@ -1,69 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 01bdfffde..000000000 --- a/rt/html/Search/Results.html +++ /dev/null @@ -1,177 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 fe97a314c..000000000 --- a/rt/html/Search/Results.rdf +++ /dev/null @@ -1,87 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 bb1907317..000000000 --- a/rt/html/Search/Results.tsv +++ /dev/null @@ -1,134 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 01424a3b1..000000000 --- a/rt/html/Search/Simple.html +++ /dev/null @@ -1,107 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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. RT will look for anything else you enter in ticket bodies and attachments.

    - -

    <&|/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 e7d59e63c..000000000 --- a/rt/html/SelfService/Attachment/dhandler +++ /dev/null @@ -1,51 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 766b0bc4f..000000000 --- a/rt/html/SelfService/Closed.html +++ /dev/null @@ -1,56 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 f66961db8..000000000 --- a/rt/html/SelfService/Create.html +++ /dev/null @@ -1,117 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& Elements/Header, Title => loc("Create a ticket") &> - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -<&|/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:
    -<& /Elements/MessageBox &> -
    -<& /Elements/Submit, Label => loc("Create ticket")&> - - -
    -<%args> -$Queue => undef - -<%init> -my $queue_obj = RT::Queue->new($session{'CurrentUser'}); -$queue_obj->Load($Queue); - diff --git a/rt/html/SelfService/CreateTicketInQueue.html b/rt/html/SelfService/CreateTicketInQueue.html deleted file mode 100755 index fd7e42664..000000000 --- a/rt/html/SelfService/CreateTicketInQueue.html +++ /dev/null @@ -1,63 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& 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 a38d2593b..000000000 --- a/rt/html/SelfService/Display.html +++ /dev/null @@ -1,235 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 5eac306e9..000000000 --- a/rt/html/SelfService/Elements/GotoTicket +++ /dev/null @@ -1,48 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
     
    diff --git a/rt/html/SelfService/Elements/Header b/rt/html/SelfService/Elements/Header deleted file mode 100644 index f248292e2..000000000 --- a/rt/html/SelfService/Elements/Header +++ /dev/null @@ -1,49 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 41f6b09b1..000000000 --- a/rt/html/SelfService/Elements/MyRequests +++ /dev/null @@ -1,84 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<&| /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 164fa2863..000000000 --- a/rt/html/SelfService/Elements/Tabs +++ /dev/null @@ -1,113 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 81a483d39..000000000 --- a/rt/html/SelfService/Error.html +++ /dev/null @@ -1,70 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 0cd3756c3..000000000 --- a/rt/html/SelfService/Prefs.html +++ /dev/null @@ -1,92 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 b10716f9a..000000000 --- a/rt/html/SelfService/Update.html +++ /dev/null @@ -1,129 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 cd7dfb02f..000000000 --- a/rt/html/SelfService/index.html +++ /dev/null @@ -1,54 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 4872ef2a7..000000000 --- a/rt/html/Ticket/Attachment/dhandler +++ /dev/null @@ -1,94 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 2061b3be3..000000000 --- a/rt/html/Ticket/Create.html +++ /dev/null @@ -1,405 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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:
    -% 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 17d00a00c..000000000 --- a/rt/html/Ticket/Display.html +++ /dev/null @@ -1,182 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /Elements/Header, - Title => loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject) &> -<& /Ticket/Elements/Tabs, - Ticket => $TicketObj, - current_tab => 'Ticket/Display.html?id='.$TicketObj->id, - Title => loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject) &> - -<& /Elements/ListActions, actions => \@Actions &> -<& /Elements/Callback, _CallbackName => 'BeforeShowSummary', Ticket => $TicketObj, %ARGS &> -<&| /Widgets/TitleBox, title => loc('Ticket metadata') &> -<& /Ticket/Elements/ShowSummary, Ticket => $TicketObj, Attachments => $attachments &> - - -
    - -<& /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 ( $ARGS{'UpdateTimeWorked'} || ( - defined $ARGS{'UpdateContent'} - && $ARGS{'UpdateContent'} ne '' - && $ARGS{'UpdateContent'} ne "-- \n" - . $session{'CurrentUser'}->UserObj->Signature ) ) - { - $ARGS{UpdateAttachments} = $session{'Attachments'}; - ProcessUpdateMessage( - ARGSRef => \%ARGS, - Actions => \@Actions, - TicketObj => $TicketObj, - ); - delete $session{'Attachments'}; - } - #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/AddCustomers b/rt/html/Ticket/Elements/AddCustomers deleted file mode 100644 index 01c7367c4..000000000 --- a/rt/html/Ticket/Elements/AddCustomers +++ /dev/null @@ -1,50 +0,0 @@ -%# Copyright (c) 2004 Ivan Kohler -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -
    -<%$msg%>
    - -% if (@Customers) { - -
    (Check box to link) - -% foreach my $customer (@Customers) { - - - -% } - -% } - -<%INIT> -my ($msg); - -my $freeside_url = &RT::URI::freeside::FreesideURL(); - -my @Customers = (); -if ( $CustomerString ) { - @Customers = &RT::URI::freeside::smart_search( 'search' => $CustomerString ); -} - -my @Services = (); -if ($ServiceString) { - @Services = (); #service_search(); -} - - - -<%ARGS> -$CustomerString => undef -$ServiceString => undef - diff --git a/rt/html/Ticket/Elements/AddWatchers b/rt/html/Ticket/Elements/AddWatchers deleted file mode 100644 index 891ff95b5..000000000 --- a/rt/html/Ticket/Elements/AddWatchers +++ /dev/null @@ -1,123 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    -<%$msg%>
    - -<&|/l&>Add new watchers:
    - -
    - > - <% &RT::URI::freeside::small_custview($customer->{'custnum'}, &RT::URI::freeside::FreesideGetConfig('countrydefault'), 1) |n %> -
    -% 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 e449b18d8..000000000 --- a/rt/html/Ticket/Elements/BulkLinks +++ /dev/null @@ -1,77 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    <&|/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 d68fe6522..000000000 --- a/rt/html/Ticket/Elements/EditBasics +++ /dev/null @@ -1,117 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<& /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 fff3925aa..000000000 --- a/rt/html/Ticket/Elements/EditCustomField +++ /dev/null @@ -1,57 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 04d7180af..000000000 --- a/rt/html/Ticket/Elements/EditCustomFields +++ /dev/null @@ -1,110 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -% 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/EditCustomers b/rt/html/Ticket/Elements/EditCustomers deleted file mode 100644 index c5a6f708c..000000000 --- a/rt/html/Ticket/Elements/EditCustomers +++ /dev/null @@ -1,67 +0,0 @@ -%# Copyright (c) 2004 Ivan Kohler -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. - - - - - - -
    -

    <&|/l&>Current Customers

    - - - - - - - - -
    <&|/l&>(Check box to disassociate)
    -% #while (my $link = $Ticket->MemberOf->Next) { -% foreach my $link ( -% grep { $_->TargetURI->Resolver->{'fstable'} eq 'cust_main' } -% grep { $_->TargetURI->Scheme eq 'freeside' } -% @{ $Ticket->_Links('Base')->ItemsArrayRef } -% ) { - - -%# <& ShowLink, URI => $link->TargetURI &>
    - <% $link->TargetURI->Resolver->AsStringLong |n %> -
    -% } -
    - -
    -

    <&|/l&>New Customer Links

    -<&|/l&>Find customer
    - - -
    cust #, name, company or phone -
    -%#
    -%#<&|/l&>Find service
    -%# -%# -%#
    username, username@domain, domain, or IP address -%#
    - -<& AddCustomers, Ticket => $Ticket, - CustomerString => $CustomerString, - ServiceString => $ServiceString, &> - -
    - -<%ARGS> -$CustomerString => undef -$ServiceString => undef -$Ticket => undef - diff --git a/rt/html/Ticket/Elements/EditDates b/rt/html/Ticket/Elements/EditDates deleted file mode 100644 index f694506d0..000000000 --- a/rt/html/Ticket/Elements/EditDates +++ /dev/null @@ -1,77 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - - - - - - - - - - - - - - -
    <&|/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 fd23ae0d6..000000000 --- a/rt/html/Ticket/Elements/EditPeople +++ /dev/null @@ -1,93 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - -
    - -

    <&|/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 918dddb68..000000000 --- a/rt/html/Ticket/Elements/EditWatchers +++ /dev/null @@ -1,81 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
      -%# 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 a9d698d31..000000000 --- a/rt/html/Ticket/Elements/FindAttachments +++ /dev/null @@ -1,95 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 fc83d6605..000000000 --- a/rt/html/Ticket/Elements/LoadTextAttachments +++ /dev/null @@ -1,94 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 423040c8e..000000000 --- a/rt/html/Ticket/Elements/PreviewScrips +++ /dev/null @@ -1,133 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 63d68c7b1..000000000 --- a/rt/html/Ticket/Elements/Reminders +++ /dev/null @@ -1,168 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 6f1de620a..000000000 --- a/rt/html/Ticket/Elements/ShowAttachments +++ /dev/null @@ -1,104 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -% 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 631b90927..000000000 --- a/rt/html/Ticket/Elements/ShowBasics +++ /dev/null @@ -1,85 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - - - - - -% 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 f307d9dd2..000000000 --- a/rt/html/Ticket/Elements/ShowCustomFields +++ /dev/null @@ -1,51 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /Elements/ShowCustomFields, Object => $Ticket &> -<%ARGS> -$Ticket => undef - diff --git a/rt/html/Ticket/Elements/ShowCustomers b/rt/html/Ticket/Elements/ShowCustomers deleted file mode 100644 index 612727ede..000000000 --- a/rt/html/Ticket/Elements/ShowCustomers +++ /dev/null @@ -1,40 +0,0 @@ -%# Copyright (c) 2004 Ivan Kohler -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. - -% my $cust = 0; -% foreach my $customerURI ( -% grep { $_->Resolver->{'fstable'} eq 'cust_main' } -% grep { $_->Scheme eq 'freeside' } -% map { $_->TargetURI } -% @{ $Ticket->_Links('Base')->ItemsArrayRef } -% ) { -% $cust++; -% my $cust_main = ''; - - - -% } -% unless ( $cust ) { - - - - -% } -
    - <% $customerURI->Resolver->AsStringLong |n %> -
    - (none) -
    -<%ARGS> -$Ticket => undef - - diff --git a/rt/html/Ticket/Elements/ShowDates b/rt/html/Ticket/Elements/ShowDates deleted file mode 100644 index e00b5ee80..000000000 --- a/rt/html/Ticket/Elements/ShowDates +++ /dev/null @@ -1,86 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - - - - - - - - - - - - - - - - - - - - - - - -% 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 b2f4d298d..000000000 --- a/rt/html/Ticket/Elements/ShowDependencies +++ /dev/null @@ -1,65 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<&|/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 e39bc690e..000000000 --- a/rt/html/Ticket/Elements/ShowGroupMembers +++ /dev/null @@ -1,63 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 45cd5122f..000000000 --- a/rt/html/Ticket/Elements/ShowHistory +++ /dev/null @@ -1,166 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 f87ce8fc9..000000000 --- a/rt/html/Ticket/Elements/ShowMembers +++ /dev/null @@ -1,68 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
      -% 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 81c56375d..000000000 --- a/rt/html/Ticket/Elements/ShowMessageHeaders +++ /dev/null @@ -1,92 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - -% 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 8040096f1..000000000 --- a/rt/html/Ticket/Elements/ShowMessageStanza +++ /dev/null @@ -1,84 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -% 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 76336ecdc..000000000 --- a/rt/html/Ticket/Elements/ShowPeople +++ /dev/null @@ -1,68 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - - - - - - - - - - - - - -
    <&|/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 484760244..000000000 --- a/rt/html/Ticket/Elements/ShowQueue +++ /dev/null @@ -1,9 +0,0 @@ -<% $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 d7fe6b185..000000000 --- a/rt/html/Ticket/Elements/ShowRequestor +++ /dev/null @@ -1,89 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 e3464c732..000000000 --- a/rt/html/Ticket/Elements/ShowSummary +++ /dev/null @@ -1,120 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - -
    - <&| /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 92e84f681..000000000 --- a/rt/html/Ticket/Elements/ShowTime +++ /dev/null @@ -1,55 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -% 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 f6d73c2f5..000000000 --- a/rt/html/Ticket/Elements/ShowTransaction +++ /dev/null @@ -1,194 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    <% $RowNum % 2 ? ' odd' : ' even' %>"> - - - - -% 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 85e04e5e5..000000000 --- a/rt/html/Ticket/Elements/ShowTransactionAttachments +++ /dev/null @@ -1,215 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 8481c143b..000000000 --- a/rt/html/Ticket/Elements/ShowUserEntry +++ /dev/null @@ -1,61 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 3dee8dff6..000000000 --- a/rt/html/Ticket/Elements/Tabs +++ /dev/null @@ -1,250 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 =~ "Search/Results.html") { - $current_tab = "Search/Results.html$args"; - } - $tabs->{"j"} = { path => "Search/Bulk.html$args", - title => loc('Bulk Update'), - }; - if ($current_tab =~ "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 bf533b304..000000000 --- a/rt/html/Ticket/History.html +++ /dev/null @@ -1,89 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 488e0ad46..000000000 --- a/rt/html/Ticket/Modify.html +++ /dev/null @@ -1,91 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 7f7ae30bd..000000000 --- a/rt/html/Ticket/ModifyAll.html +++ /dev/null @@ -1,221 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 &> - - -
    - -<&| /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) { - # 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 -$UserField => undef -$UserOp => undef -$UserString => undef -$id => undef - - diff --git a/rt/html/Ticket/ModifyCustomers.html b/rt/html/Ticket/ModifyCustomers.html deleted file mode 100644 index 72d103b23..000000000 --- a/rt/html/Ticket/ModifyCustomers.html +++ /dev/null @@ -1,49 +0,0 @@ -%# Copyright (c) 2004 Ivan Kohler -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -<& /Elements/Header, Title => loc("Customers for ticket #[_1]", $Ticket->Id) &> -<& /Ticket/Elements/Tabs, - Ticket => $Ticket, - current_tab => "Ticket/ModifyCustomers.html?id=".$Ticket->Id, - Title => loc("Customers for ticket #[_1]", $Ticket->Id) &> - -<& /Elements/ListActions, actions => \@results &> - -
    - - -<& /Elements/TitleBoxStart, title => loc('Edit Customer Links'), color => "#7f007b"&> -<& Elements/EditCustomers, Ticket => $Ticket, CustomerString => $CustomerString, ServiceString => $ServiceString &> -<& /Elements/TitleBoxEnd &> -<& /Elements/Submit, color => "#7f007b", Label => loc('Save Changes') &> -
    - - -<%INIT> - -my @results = (); -my $Ticket = LoadTicket($id); - -# if we're trying to search for customers/services and nothing else -unless ( $OnlySearchForCustomers || $OnlySearchForServices) { - @results = ProcessTicketCustomers( TicketObj => $Ticket, ARGSRef => \%ARGS); -} - - - - -<%ARGS> -$OnlySearchForCustomers => undef -$OnlySearchForServices => undef -$CustomerString => undef -$ServiceString => undef -$id => undef - diff --git a/rt/html/Ticket/ModifyDates.html b/rt/html/Ticket/ModifyDates.html deleted file mode 100644 index d12619002..000000000 --- a/rt/html/Ticket/ModifyDates.html +++ /dev/null @@ -1,77 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 93c80db18..000000000 --- a/rt/html/Ticket/ModifyLinks.html +++ /dev/null @@ -1,82 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 aa3811269..000000000 --- a/rt/html/Ticket/ModifyPeople.html +++ /dev/null @@ -1,94 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 2a3ba4c08..000000000 --- a/rt/html/Ticket/Reminders.html +++ /dev/null @@ -1,71 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 f77406c77..000000000 --- a/rt/html/Ticket/ShowEmailRecord.html +++ /dev/null @@ -1,73 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 3824873b5..000000000 --- a/rt/html/Ticket/Update.html +++ /dev/null @@ -1,228 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 cd6d16916..000000000 --- a/rt/html/Tools/Elements/Tabs +++ /dev/null @@ -1,84 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 dbda0f9aa..000000000 --- a/rt/html/Tools/MyDay.html +++ /dev/null @@ -1,117 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 => "Record all updates" , Reset => 'Clear'&> -
    - -<%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 385e6add8..000000000 --- a/rt/html/Tools/Offline.html +++ /dev/null @@ -1,166 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 b6d6f940a..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 18829f085..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 265a1caa4..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 142af6475..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 149dc7619..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 8d2efdbed..000000000 --- a/rt/html/Tools/index.html +++ /dev/null @@ -1,52 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 2587f8cde..000000000 --- a/rt/html/User/Delegation.html +++ /dev/null @@ -1,107 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 3d42ed54e..000000000 --- a/rt/html/User/Elements/DelegateRights +++ /dev/null @@ -1,109 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -

    <%$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 b0eba0f8e..000000000 --- a/rt/html/User/Elements/GroupTabs +++ /dev/null @@ -1,84 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 0aca8b5c3..000000000 --- a/rt/html/User/Elements/Tabs +++ /dev/null @@ -1,89 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 0634260ca..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 da42f2c2a..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 76ffac3af..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-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /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 8c6d5f18e..000000000 --- a/rt/html/User/Prefs.html +++ /dev/null @@ -1,289 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<& /Elements/Header, Title=>loc("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 8fb5682d9..000000000 --- a/rt/html/Widgets/ComboBox +++ /dev/null @@ -1,69 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} - - - - - 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 b873c2bcb..000000000 --- a/rt/html/Widgets/SavedSearch +++ /dev/null @@ -1,158 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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 => 'Saved searches' - -<%init> - - diff --git a/rt/html/Widgets/SelectionBox b/rt/html/Widgets/SelectionBox deleted file mode 100644 index 38ae7a04a..000000000 --- a/rt/html/Widgets/SelectionBox +++ /dev/null @@ -1,243 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -%# 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 00d9e4c63..000000000 --- a/rt/html/Widgets/TitleBox +++ /dev/null @@ -1,54 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    - <& 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 b12b58f4d..000000000 --- a/rt/html/Widgets/TitleBoxEnd +++ /dev/null @@ -1,59 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    - - - -% #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 1d8548d00..000000000 --- a/rt/html/Widgets/TitleBoxStart +++ /dev/null @@ -1,86 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -
    -
    "> -% 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 909b922c8..000000000 --- a/rt/html/autohandler +++ /dev/null @@ -1,331 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%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( utf8 => $_, Encode::FB_PERLQQ ) - : ( $type eq 'ARRAY' ) - ? [ - map { - ( ref($_) or Encode::is_utf8($_) ) - ? $_ - : Encode::decode( utf8 => $_, Encode::FB_PERLQQ ) - } @$_ - ] - : ( $type eq 'HASH' ) - ? { - map { - ( ref($_) or Encode::is_utf8($_) ) - ? $_ - : Encode::decode( utf8 => $_, 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 !~ '^(/+)SelfService/' ) { - 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 af95a655c..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 32302aaa0..000000000 --- a/rt/html/l +++ /dev/null @@ -1,52 +0,0 @@ -%# BEGIN BPS TAGGED BLOCK {{{ -%# -%# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -%# -%# -%# (Except where explicitly superseded by other copyright notices) -%# -%# -%# LICENSE: -%# -%# This work is made available to you under the terms of Version 2 of -%# the GNU General Public License. A copy of that license should have -%# been provided with this software, but in any event can be snarfed -%# from www.gnu.org. -%# -%# This work is distributed in the hope that it will be useful, but -%# WITHOUT ANY WARRANTY; without even the implied warranty of -%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%# General Public License for more details. -%# -%# You should have received a copy of the GNU General Public License -%# along with this program; if not, write to the Free Software -%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -%# 02110-1301 or visit their web page on the internet at -%# http://www.gnu.org/copyleft/gpl.html. -%# -%# -%# CONTRIBUTION SUBMISSION POLICY: -%# -%# (The following paragraph is not intended to limit the rights granted -%# to you to modify and distribute this software under the terms of -%# the GNU General Public License and is only of importance to you if -%# you choose to contribute your changes and enhancements to the -%# community by submitting them to Best Practical Solutions, LLC.) -%# -%# By intentionally submitting any modifications, corrections or -%# derivatives to this work, or any other work intended for use with -%# Request Tracker, to Best Practical Solutions, LLC, you confirm that -%# you are the copyright holder for those contributions and you grant -%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -%# royalty-free, perpetual, license to use, copy, create derivative -%# works based on those contributions, and sublicense and distribute -%# those contributions and any derivatives thereof. -%# -%# END BPS TAGGED BLOCK }}} -<%init> - my $hand = ($session{'CurrentUser'} ||= RT::CurrentUser->new)->LanguageHandle; - $m->print($hand->maketext($m->content,@_)); - return(1); - diff --git a/rt/install-sh b/rt/install-sh deleted file mode 100644 index 11870f1b0..000000000 --- a/rt/install-sh +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). -# -# Copyright 1991 by the Massachusetts Institute of Technology -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of M.I.T. not be used in advertising or -# publicity pertaining to distribution of the software without specific, -# written prior permission. M.I.T. makes no representations about the -# suitability of this software for any purpose. It is provided "as is" -# without express or implied warranty. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -transformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - : -fi - -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d $dst ]; then - instcmd=: - chmodcmd="" - else - instcmd=$mkdirprog - fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f "$src" ] || [ -d "$src" ] - then - : - else - echo "install: $src does not exist" - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - : - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - : - fi -fi - -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' - ' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - : - fi - - pathcomp="${pathcomp}/" -done -fi - -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi -else - -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - : - fi - -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - - $doit $instcmd $src $dsttmp && - - trap "rm -f ${dsttmp}" 0 && - -# and set any options; do chmod last to preserve setuid bits - -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && - -# Now rename the file to the real destination. - - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile - -fi && - - -exit 0 diff --git a/rt/lib/RT.pm b/rt/lib/RT.pm deleted file mode 100644 index 0d0c0f509..000000000 --- a/rt/lib/RT.pm +++ /dev/null @@ -1,465 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -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.4'; -$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'; - -# $MasonComponentRoot is where your rt instance keeps its mason html files - -$MasonComponentRoot = '/var/www/freeside/rt'; - -# $MasonLocalComponentRoot is where your rt instance keeps its site-local -# mason html files. - -$MasonLocalComponentRoot = '/opt/rt3/local/html'; - -# $MasonDataDir Where mason keeps its datafiles - -$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'; - - - -=head1 NAME - -RT - Request Tracker - -=head1 SYNOPSIS - -A fully featured request tracker package - -=head1 DESCRIPTION - -=head2 LoadConfig - -Load RT's config file. First, the site configuration file -(C) 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 -for all settings; it bases some values on settings from the site -configuration file. - -In order for the core configuration to not override the site's -settings, the function C is used; it only sets values if they -have not been set already. - -=cut - -sub LoadConfig { - local *Set = sub { $_[0] = $_[1] unless defined $_[0] }; - - my $username = getpwuid($>); - my $group = getgrgid($(); - my $message = <Init; -} - -=head2 Init - -Conenct to the database, set up logging. - -=cut - -sub Init { - - CheckPerlRequirements(); - - #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(); - - InitClasses(); - InitLogging(); -} - - -=head2 ConnectToDatabase - -Get a database connection - -=cut - -sub ConnectToDatabase { - require RT::Handle; - unless ($Handle && $Handle->dbh && $Handle->dbh->ping) { - $Handle = RT::Handle->new(); - } - $Handle->Connect(); -} - -=head2 InitLogging - -Create the RT::Logger object. - -=cut - -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) { - - $RT::Logger = Log::Dispatch->new(); - - my $simple_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); - $p{message} =~ s/(?:\r*\n)+$//; - my $str = "[".gmtime(time)."] [".$p{level}."]: $p{message} ($filename:$line)\n"; - - if( $RT::LogStackTraces ) { - $str .= "\nStack trace:\n"; - # skip calling of the Log::* subroutins - $frame++ while( caller($frame) && (caller($frame))[3] =~ /^Log::/ ); - while( my ($package, $filename, $line, $sub) = caller($frame++) ) { - $str .= "\t". $sub ."() called at $filename:$line\n"; - } - } - 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}); - - $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!^(.*[/\\])!; - } - else { - $filename = "$RT::LogDir/$RT::LogToFileNamed"; - $logdir = $RT::LogDir; - } - - unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) { - # localizing here would be hard when we don't have a current user yet - die "Log file $filename couldn't be written or created.\n RT can't run."; - } - - 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 - -## This is the default handling of warnings and die'ings in the code -## (including other used modules - maybe except for errors catched by -## Mason). It will log all problems through the standard logging -## mechanism (see above). - - $SIG{__WARN__} = sub { - # The 'wide character' warnings has to be silenced for now, at least - # until HTML::Mason offers a sane way to process both raw output and - # unicode strings. - # use 'goto &foo' syntax to hide ANON sub from stack - if( index($_[0], 'Wide character in ') != 0 ) { - unshift @_, $RT::Logger, qw(level warning message); - goto &Log::Dispatch::log; - } - }; - -#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]; -}; - -# }}} - -} - - -sub CheckPerlRequirements { - if ($^V < 5.008003) { - die sprintf "RT requires Perl v5.8.3 or newer. Your current Perl is v%vd\n", $^V; - } - - local ($@); - eval { - my $x = ''; - my $y = \$x; - require Scalar::Util; Scalar::Util::weaken($y); - }; - if ($@) { - die <<"EOF"; - -RT requires the Scalar::Util module be built with support for the 'weaken' -function. - -It is sometimes the case that operating system upgrades will replace -a working Scalar::Util with a non-working one. If your system was working -correctly up until now, this is likely the cause of the problem. - -Please reinstall Scalar::Util, being careful to let it build with your C -compiler. Ususally this is as simple as running the following command as -root. - - perl -MCPAN -e'install Scalar::Util' - -EOF - - } -} - - -=head2 InitClasses - -Load all modules that define base classes - -=cut - -sub InitClasses { - require RT::Tickets; - require RT::Transactions; - require RT::Users; - require RT::CurrentUser; - require RT::Templates; - require RT::Queues; - require RT::ScripActions; - require RT::ScripConditions; - require RT::Scrips; - require RT::Groups; - require RT::GroupMembers; - require RT::CustomFields; - require RT::CustomFieldValues; - require RT::ObjectCustomFields; - require RT::ObjectCustomFieldValues; -} - -# }}} - - -sub SystemUser { - return($SystemUser); -} - -sub Nobody { - return ($Nobody); -} - -=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. - -If you're not sure what's going on, report them rt-devel@lists.bestpractical.com. - -=head1 SEE ALSO - -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 - -eval "require RT_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT_Local.pm}); - -1; diff --git a/rt/lib/RT.pm.in b/rt/lib/RT.pm.in deleted file mode 100644 index 1a9bf083e..000000000 --- a/rt/lib/RT.pm.in +++ /dev/null @@ -1,467 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT; -use strict; -use RT::I18N; -use RT::CurrentUser; -use RT::System; - -use vars qw($VERSION $System $SystemUser $Nobody $Handle $Logger - $CORE_CONFIG_FILE - $SITE_CONFIG_FILE - $BasePath - $EtcPath - $VarPath - $LocalPath - $LocalEtcPath - $LocalLexiconPath - $LogDir - $BinPath - $MasonComponentRoot - $MasonLocalComponentRoot - $MasonDataDir - $MasonSessionDir -); - -$VERSION = '@RT_VERSION_MAJOR@.@RT_VERSION_MINOR@.@RT_VERSION_PATCH@'; -$CORE_CONFIG_FILE = "@CONFIG_FILE_PATH@/RT_Config.pm"; -$SITE_CONFIG_FILE = "@CONFIG_FILE_PATH@/RT_SiteConfig.pm"; - -@DATABASE_ENV_PREF@ - -$BasePath = '@RT_PATH@'; - -$EtcPath = '@RT_ETC_PATH@'; -$BinPath = '@RT_BIN_PATH@'; -$VarPath = '@RT_VAR_PATH@'; -$LocalPath = '@RT_LOCAL_PATH@'; -$LocalEtcPath = '@LOCAL_ETC_PATH@'; -$LocalLexiconPath = '@LOCAL_LEXICON_PATH@'; - -# $MasonComponentRoot is where your rt instance keeps its mason html files - -$MasonComponentRoot = '@MASON_HTML_PATH@'; - -# $MasonLocalComponentRoot is where your rt instance keeps its site-local -# mason html files. - -$MasonLocalComponentRoot = '@MASON_LOCAL_HTML_PATH@'; - -# $MasonDataDir Where mason keeps its datafiles - -$MasonDataDir = '@MASON_DATA_PATH@'; - -# RT needs to put session data (for preserving state between connections -# via the web interface) -$MasonSessionDir = '@MASON_SESSION_PATH@'; - - - -=head1 NAME - -RT - Request Tracker - -=head1 SYNOPSIS - -A fully featured request tracker package - -=head1 DESCRIPTION - -=head2 LoadConfig - -Load RT's config file. First, the site configuration file -(C) 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 -for all settings; it bases some values on settings from the site -configuration file. - -In order for the core configuration to not override the site's -settings, the function C is used; it only sets values if they -have not been set already. - -=cut - -sub LoadConfig { - local *Set = sub { $_[0] = $_[1] unless defined $_[0] }; - - my $username = getpwuid($>); - my $group = getgrgid($(); - my $message = <Init; -} - -=head2 Init - -Conenct to the database, set up logging. - -=cut - -sub Init { - - CheckPerlRequirements(); - - #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(); - - InitClasses(); - InitLogging(); -} - - -=head2 ConnectToDatabase - -Get a database connection - -=cut - -sub ConnectToDatabase { - require RT::Handle; - unless ($Handle && $Handle->dbh && $Handle->dbh->ping) { - $Handle = RT::Handle->new(); - } - $Handle->Connect(); -} - -=head2 InitLogging - -Create the RT::Logger object. - -=cut - -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) { - - $RT::Logger = Log::Dispatch->new(); - - my $simple_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); - $p{message} =~ s/(?:\r*\n)+$//; - my $str = "[".gmtime(time)."] [".$p{level}."]: $p{message} ($filename:$line)\n"; - - if( $RT::LogStackTraces ) { - $str .= "\nStack trace:\n"; - # skip calling of the Log::* subroutins - $frame++ while( caller($frame) && (caller($frame))[3] =~ /^Log::/ ); - while( my ($package, $filename, $line, $sub) = caller($frame++) ) { - $str .= "\t". $sub ."() called at $filename:$line\n"; - } - } - 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}); - - $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!^(.*[/\\])!; - } - else { - $filename = "$RT::LogDir/$RT::LogToFileNamed"; - $logdir = $RT::LogDir; - } - - unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) { - # localizing here would be hard when we don't have a current user yet - die "Log file $filename couldn't be written or created.\n RT can't run."; - } - - 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 - -## This is the default handling of warnings and die'ings in the code -## (including other used modules - maybe except for errors catched by -## Mason). It will log all problems through the standard logging -## mechanism (see above). - - $SIG{__WARN__} = sub { - # The 'wide character' warnings has to be silenced for now, at least - # until HTML::Mason offers a sane way to process both raw output and - # unicode strings. - # use 'goto &foo' syntax to hide ANON sub from stack - if( index($_[0], 'Wide character in ') != 0 ) { - unshift @_, $RT::Logger, qw(level warning message); - goto &Log::Dispatch::log; - } - }; - -#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]; -}; - -# }}} - -} - - -sub CheckPerlRequirements { - if ($^V < 5.008003) { - die sprintf "RT requires Perl v5.8.3 or newer. Your current Perl is v%vd\n", $^V; - } - - local ($@); - eval { - my $x = ''; - my $y = \$x; - require Scalar::Util; Scalar::Util::weaken($y); - }; - if ($@) { - die <<"EOF"; - -RT requires the Scalar::Util module be built with support for the 'weaken' -function. - -It is sometimes the case that operating system upgrades will replace -a working Scalar::Util with a non-working one. If your system was working -correctly up until now, this is likely the cause of the problem. - -Please reinstall Scalar::Util, being careful to let it build with your C -compiler. Ususally this is as simple as running the following command as -root. - - perl -MCPAN -e'install Scalar::Util' - -EOF - - } -} - - -=head2 InitClasses - -Load all modules that define base classes - -=cut - -sub InitClasses { - require RT::Tickets; - require RT::Transactions; - require RT::Users; - require RT::CurrentUser; - require RT::Templates; - require RT::Queues; - require RT::ScripActions; - require RT::ScripConditions; - require RT::Scrips; - require RT::Groups; - require RT::GroupMembers; - require RT::CustomFields; - require RT::CustomFieldValues; - require RT::ObjectCustomFields; - require RT::ObjectCustomFieldValues; -} - -# }}} - - -sub SystemUser { - return($SystemUser); -} - -sub Nobody { - return ($Nobody); -} - -=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. - -If you're not sure what's going on, report them rt-devel@lists.bestpractical.com. - -=head1 SEE ALSO - -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 - -eval "require RT_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT_Vendor.pm}); -eval "require RT_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT_Local.pm}); - -1; diff --git a/rt/lib/RT/ACE.pm b/rt/lib/RT/ACE.pm deleted file mode 100755 index 1501a125e..000000000 --- a/rt/lib/RT/ACE.pm +++ /dev/null @@ -1,304 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::ACE - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::ACE; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('ACL'); - $self->SUPER::_Init(@_); -} - - - - - -=item Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(25) 'PrincipalType'. - int(11) 'PrincipalId'. - varchar(25) 'RightName'. - varchar(25) 'ObjectType'. - int(11) 'ObjectId'. - int(11) 'DelegatedBy'. - int(11) 'DelegatedFrom'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - PrincipalType => '', - PrincipalId => '0', - RightName => '', - ObjectType => '', - ObjectId => '0', - DelegatedBy => '0', - DelegatedFrom => '0', - - @_); - $self->SUPER::Create( - PrincipalType => $args{'PrincipalType'}, - PrincipalId => $args{'PrincipalId'}, - RightName => $args{'RightName'}, - ObjectType => $args{'ObjectType'}, - ObjectId => $args{'ObjectId'}, - DelegatedBy => $args{'DelegatedBy'}, - DelegatedFrom => $args{'DelegatedFrom'}, -); - -} - - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item PrincipalType - -Returns the current value of PrincipalType. -(In the database, PrincipalType is stored as varchar(25).) - - - -=item SetPrincipalType VALUE - - -Set PrincipalType to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, PrincipalType will be stored as a varchar(25).) - - -=cut - - -=item PrincipalId - -Returns the current value of PrincipalId. -(In the database, PrincipalId is stored as int(11).) - - - -=item SetPrincipalId VALUE - - -Set PrincipalId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, PrincipalId will be stored as a int(11).) - - -=cut - - -=item RightName - -Returns the current value of RightName. -(In the database, RightName is stored as varchar(25).) - - - -=item SetRightName VALUE - - -Set RightName to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, RightName will be stored as a varchar(25).) - - -=cut - - -=item ObjectType - -Returns the current value of ObjectType. -(In the database, ObjectType is stored as varchar(25).) - - - -=item SetObjectType VALUE - - -Set ObjectType to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ObjectType will be stored as a varchar(25).) - - -=cut - - -=item ObjectId - -Returns the current value of ObjectId. -(In the database, ObjectId is stored as int(11).) - - - -=item SetObjectId VALUE - - -Set ObjectId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ObjectId will be stored as a int(11).) - - -=cut - - -=item DelegatedBy - -Returns the current value of DelegatedBy. -(In the database, DelegatedBy is stored as int(11).) - - - -=item SetDelegatedBy VALUE - - -Set DelegatedBy to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, DelegatedBy will be stored as a int(11).) - - -=cut - - -=item DelegatedFrom - -Returns the current value of DelegatedFrom. -(In the database, DelegatedFrom is stored as int(11).) - - - -=item SetDelegatedFrom VALUE - - -Set DelegatedFrom to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, DelegatedFrom will be stored as a int(11).) - - -=cut - - - -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - PrincipalType => - {read => 1, write => 1, type => 'varchar(25)', default => ''}, - PrincipalId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - RightName => - {read => 1, write => 1, type => 'varchar(25)', default => ''}, - ObjectType => - {read => 1, write => 1, type => 'varchar(25)', default => ''}, - ObjectId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - DelegatedBy => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - DelegatedFrom => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - - } -}; - - - eval "require RT::ACE_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/ACE_Overlay.pm}) { - die $@; - }; - - eval "require RT::ACE_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/ACE_Vendor.pm}) { - die $@; - }; - - eval "require RT::ACE_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/ACE_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::ACE_Overlay, RT::ACE_Vendor, RT::ACE_Local - -=cut - - -1; diff --git a/rt/lib/RT/ACE_Overlay.pm b/rt/lib/RT/ACE_Overlay.pm deleted file mode 100644 index 54c6561b5..000000000 --- a/rt/lib/RT/ACE_Overlay.pm +++ /dev/null @@ -1,958 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 SYNOPSIS - - use RT::ACE; - my $ace = new RT::ACE($CurrentUser); - - -=head1 DESCRIPTION - - - -=head1 METHODS - -=begin testing - -ok(require RT::ACE); - -=end testing - -=cut - - -package RT::ACE; - -use strict; -no warnings qw(redefine); -use RT::Principals; -use RT::Queues; -use RT::Groups; - -use vars qw ( - %LOWERCASERIGHTNAMES - %OBJECT_TYPES - %TICKET_METAPRINCIPALS -); - - -# {{{ Descriptions of rights - -=head1 Rights - -# Queue rights are the sort of queue rights that can only be granted -# to real people or groups - - -=begin testing - -my $Queue = RT::Queue->new($RT::SystemUser); - -is ($Queue->AvailableRights->{'DeleteTicket'} , 'Delete tickets', "Found the delete ticket right"); -is ($RT::System->AvailableRights->{'SuperUser'}, 'Do anything and everything', "Found the superuser right"); - - -=end testing - -=cut - - - - -# }}} - -# {{{ Descriptions of principals - -%TICKET_METAPRINCIPALS = ( - Owner => 'The owner of a ticket', # loc_pair - Requestor => 'The requestor of a ticket', # loc_pair - Cc => 'The CC of a ticket', # loc_pair - AdminCc => 'The administrative CC of a ticket', # loc_pair -); - -# }}} - - -# {{{ sub LoadByValues - -=head2 LoadByValues PARAMHASH - -Load an ACE by specifying a paramhash with the following fields: - - PrincipalId => undef, - PrincipalType => undef, - RightName => undef, - - And either: - - Object => undef, - - OR - - ObjectType => undef, - ObjectId => undef - -=cut - -sub LoadByValues { - my $self = shift; - my %args = ( PrincipalId => undef, - PrincipalType => undef, - RightName => undef, - Object => undef, - ObjectId => undef, - ObjectType => undef, - @_ ); - - my $princ_obj; - ( $princ_obj, $args{'PrincipalType'} ) = - $self->_CanonicalizePrincipal( $args{'PrincipalId'}, - $args{'PrincipalType'} ); - - unless ( $princ_obj->id ) { - return ( 0, - $self->loc( 'Principal [_1] not found.', $args{'PrincipalId'} ) - ); - } - - my ($object, $object_type, $object_id) = $self->_ParseObjectArg( %args ); - unless( $object ) { - return ( 0, $self->loc("System error. Right not granted.") ); - } - - $self->LoadByCols( PrincipalId => $princ_obj->Id, - PrincipalType => $args{'PrincipalType'}, - RightName => $args{'RightName'}, - ObjectType => $object_type, - ObjectId => $object_id); - - #If we couldn't load it. - unless ( $self->Id ) { - return ( 0, $self->loc("ACE not found") ); - } - - # if we could - return ( $self->Id, $self->loc("Right Loaded") ); - -} - -# }}} - -# {{{ sub Create - -=head2 Create - -PARAMS is a parameter hash with the following elements: - - PrincipalId => The id of an RT::Principal object - PrincipalType => "User" "Group" or any Role type - RightName => the name of a right. in any case - DelegatedBy => The Principal->Id of the user delegating the right - DelegatedFrom => The id of the ACE which this new ACE is delegated from - - - Either: - - Object => An object to create rights for. ususally, an RT::Queue or RT::Group - This should always be a DBIx::SearchBuilder::Record subclass - - OR - - ObjectType => the type of the object in question (ref ($object)) - ObjectId => the id of the object in question $object->Id - - - - Returns a tuple of (STATUS, MESSAGE); If the call succeeded, STATUS is true. Otherwise it's false. - - - -=cut - -sub Create { - my $self = shift; - my %args = ( PrincipalId => undef, - PrincipalType => undef, - RightName => undef, - Object => undef, - @_ ); - #if we haven't specified any sort of right, we're talking about a global right - if (!defined $args{'Object'} && !defined $args{'ObjectId'} && !defined $args{'ObjectType'}) { - $args{'Object'} = $RT::System; - } - ($args{'Object'}, $args{'ObjectType'}, $args{'ObjectId'}) = $self->_ParseObjectArg( %args ); - unless( $args{'Object'} ) { - return ( 0, $self->loc("System error. Right not granted.") ); - } - - # {{{ Validate the principal - my $princ_obj; - ( $princ_obj, $args{'PrincipalType'} ) = - $self->_CanonicalizePrincipal( $args{'PrincipalId'}, - $args{'PrincipalType'} ); - - unless ( $princ_obj->id ) { - return ( 0, - $self->loc( 'Principal [_1] not found.', $args{'PrincipalId'} ) - ); - } - - # }}} - - # {{{ Check the ACL - - if (ref( $args{'Object'}) eq 'RT::Group' ) { - unless ( $self->CurrentUser->HasRight( Object => $args{'Object'}, - Right => 'AdminGroup' ) - ) { - return ( 0, $self->loc('Permission Denied') ); - } - } - - else { - unless ( $self->CurrentUser->HasRight( Object => $args{'Object'}, Right => 'ModifyACL' )) { - return ( 0, $self->loc('Permission Denied') ); - } - } - # }}} - - # {{{ Canonicalize and check the right name - unless ( $args{'RightName'} ) { - return ( 0, $self->loc('Invalid right') ); - } - - $args{'RightName'} = $self->CanonicalizeRightName( $args{'RightName'} ); - - #check if it's a valid RightName - if ( ref ($args{'Object'} eq 'RT::Queue' )) { - unless ( exists $args{'Object'}->AvailableRights->{ $args{'RightName'} } ) { - $RT::Logger->warning("Couldn't validate right name". $args{'RightName'}); - return ( 0, $self->loc('Invalid right') ); - } - } - elsif ( ref ($args{'Object'} eq 'RT::Group' )) { - unless ( exists $args{'Object'}->AvailableRights->{ $args{'RightName'} } ) { - $RT::Logger->warning("Couldn't validate group right name". $args{'RightName'}); - return ( 0, $self->loc('Invalid right') ); - } - } - elsif ( ref ($args{'Object'} eq 'RT::System' )) { - my $q = RT::Queue->new($self->CurrentUser); - my $g = RT::Group->new($self->CurrentUser); - - unless (( exists $g->AvailableRights->{ $args{'RightName'} } ) - || ( exists $g->AvailableRights->{ $args{'RightName'} } ) - || ( exists $RT::System->AvailableRights->{ $args{'RightName'} } ) ) { - $RT::Logger->warning("Couldn't validate system right name - ". $args{'RightName'}); - return ( 0, $self->loc('Invalid right') ); - } - } - - # }}} - - # Make sure the right doesn't already exist. - $self->LoadByCols( PrincipalId => $princ_obj->id, - PrincipalType => $args{'PrincipalType'}, - RightName => $args{'RightName'}, - ObjectType => $args{'ObjectType'}, - ObjectId => $args{'ObjectId'}, - DelegatedBy => 0, - DelegatedFrom => 0 ); - if ( $self->Id ) { - return ( 0, $self->loc('That principal already has that right') ); - } - - my $id = $self->SUPER::Create( PrincipalId => $princ_obj->id, - PrincipalType => $args{'PrincipalType'}, - RightName => $args{'RightName'}, - ObjectType => ref( $args{'Object'} ), - ObjectId => $args{'Object'}->id, - DelegatedBy => 0, - DelegatedFrom => 0 ); - - #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - RT::Principal->InvalidateACLCache(); - - if ( $id > 0 ) { - return ( $id, $self->loc('Right Granted') ); - } - else { - return ( 0, $self->loc('System error. Right not granted.') ); - } -} - -# }}} - -# {{{ sub Delegate - -=head2 Delegate - -This routine delegates the current ACE to a principal specified by the -B parameter. - -Returns an error if the current user doesn't have the right to be delegated -or doesn't have the right to delegate rights. - -Always returns a tuple of (ReturnValue, Message) - -=begin testing - -use_ok(RT::User); -my $user_a = RT::User->new($RT::SystemUser); -$user_a->Create( Name => 'DelegationA', Privileged => 1); -ok ($user_a->Id, "Created delegation user a"); - -my $user_b = RT::User->new($RT::SystemUser); -$user_b->Create( Name => 'DelegationB', Privileged => 1); -ok ($user_b->Id, "Created delegation user b"); - - -use_ok(RT::Queue); -my $q = RT::Queue->new($RT::SystemUser); -$q->Create(Name =>'DelegationTest'); -ok ($q->Id, "Created a delegation test queue"); - - -#------ First, we test whether a user can delegate a right that's been granted to him personally -my ($val, $msg) = $user_a->PrincipalObj->GrantRight(Object => $RT::System, Right => 'AdminOwnPersonalGroups'); -ok($val, $msg); - -($val, $msg) = $user_a->PrincipalObj->GrantRight(Object =>$q, Right => 'OwnTicket'); -ok($val, $msg); - -ok($user_a->HasRight( Object => $RT::System, Right => 'AdminOwnPersonalGroups') ,"user a has the right 'AdminOwnPersonalGroups' directly"); - -my $a_delegates = RT::Group->new($user_a); -$a_delegates->CreatePersonalGroup(Name => 'Delegates'); -ok( $a_delegates->Id ,"user a creates a personal group 'Delegates'"); -ok( $a_delegates->AddMember($user_b->PrincipalId) ,"user a adds user b to personal group 'delegates'"); - -ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to OwnTicket' in queue 'DelegationTest'"); -ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a has the right to 'OwnTicket' in queue 'DelegationTest'"); -ok(!$user_a->HasRight( Object => $RT::System, Right => 'DelegateRights') ,"user a does not have the right 'delegate rights'"); - - -my $own_ticket_ace = RT::ACE->new($user_a); -my $user_a_equiv_group = RT::Group->new($user_a); -$user_a_equiv_group->LoadACLEquivalenceGroup($user_a->PrincipalObj); -ok ($user_a_equiv_group->Id, "Loaded the user A acl equivalence group"); -my $user_b_equiv_group = RT::Group->new($user_b); -$user_b_equiv_group->LoadACLEquivalenceGroup($user_b->PrincipalObj); -ok ($user_b_equiv_group->Id, "Loaded the user B acl equivalence group"); -$own_ticket_ace->LoadByValues( PrincipalType => 'Group', PrincipalId => $user_a_equiv_group->PrincipalId, Object=>$q, RightName => 'OwnTicket'); - -ok ($own_ticket_ace->Id, "Found the ACE we want to test with for now"); - - -($val, $msg) = $own_ticket_ace->Delegate(PrincipalId => $a_delegates->PrincipalId) ; -ok( !$val ,"user a tries and fails to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg"); - - -($val, $msg) = $user_a->PrincipalObj->GrantRight( Right => 'DelegateRights'); -ok($val, "user a is granted the right to 'delegate rights' - $msg"); - -ok($user_a->HasRight( Object => $RT::System, Right => 'DelegateRights') ,"user a has the right 'AdminOwnPersonalGroups' directly"); - -($val, $msg) = $own_ticket_ace->Delegate(PrincipalId => $a_delegates->PrincipalId) ; - -ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg"); -ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'"); -my $delegated_ace = RT::ACE->new($user_a); -$delegated_ace->LoadByValues ( Object => $q, RightName => 'OwnTicket', PrincipalType => 'Group', -PrincipalId => $a_delegates->PrincipalId, DelegatedBy => $user_a->PrincipalId, DelegatedFrom => $own_ticket_ace->Id); -ok ($delegated_ace->Id, "Found the delegated ACE"); - -ok( $a_delegates->DeleteMember($user_b->PrincipalId) ,"user a removes b from pg 'delegates'"); -ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'"); -ok( $a_delegates->AddMember($user_b->PrincipalId) ,"user a adds user b to personal group 'delegates'"); -ok( $user_b->HasRight(Right => 'OwnTicket', Object=> $q) ,"user b has the right to own tickets in queue 'DelegationTest'"); -ok( $delegated_ace->Delete ,"user a revokes pg 'delegates' right to 'OwnTickets' in queue 'DelegationTest'"); -ok( ! $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'"); - -($val, $msg) = $own_ticket_ace->Delegate(PrincipalId => $a_delegates->PrincipalId) ; -ok( $val ,"user a delegates pg 'delegates' right to 'OwnTickets' in queue 'DelegationTest' - $msg"); - -ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest'"); - -($val, $msg) = $user_a->PrincipalObj->RevokeRight(Object=>$q, Right => 'OwnTicket'); -ok($val, "Revoked user a's right to own tickets in queue 'DelegationTest". $msg); - -ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest'"); - - ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'"); - -($val, $msg) = $user_a->PrincipalObj->GrantRight(Object=>$q, Right => 'OwnTicket'); -ok($val, $msg); - - ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a has the right to own tickets in queue 'DelegationTest'"); - - ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'"); - -# {{{ get back to a known clean state -($val, $msg) = $user_a->PrincipalObj->RevokeRight( Object => $q, Right => 'OwnTicket'); -ok($val, "Revoked user a's right to own tickets in queue 'DelegationTest -". $msg); -ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"make sure that user a can't own tickets in queue 'DelegationTest'"); -# }}} - - -# {{{ Set up some groups and membership -my $del1 = RT::Group->new($RT::SystemUser); -($val, $msg) = $del1->CreateUserDefinedGroup(Name => 'Del1'); -ok( $val ,"create a group del1 - $msg"); - -my $del2 = RT::Group->new($RT::SystemUser); -($val, $msg) = $del2->CreateUserDefinedGroup(Name => 'Del2'); -ok( $val ,"create a group del2 - $msg"); -($val, $msg) = $del1->AddMember($del2->PrincipalId); -ok( $val,"make del2 a member of del1 - $msg"); - -my $del2a = RT::Group->new($RT::SystemUser); -($val, $msg) = $del2a->CreateUserDefinedGroup(Name => 'Del2a'); -ok( $val ,"create a group del2a - $msg"); -($val, $msg) = $del2->AddMember($del2a->PrincipalId); -ok($val ,"make del2a a member of del2 - $msg"); - -my $del2b = RT::Group->new($RT::SystemUser); -($val, $msg) = $del2b->CreateUserDefinedGroup(Name => 'Del2b'); -ok( $val ,"create a group del2b - $msg"); -($val, $msg) = $del2->AddMember($del2b->PrincipalId); -ok($val ,"make del2b a member of del2 - $msg"); - -($val, $msg) = $del2->AddMember($user_a->PrincipalId) ; -ok($val,"make 'user a' a member of del2 - $msg"); - -($val, $msg) = $del2b->AddMember($user_a->PrincipalId) ; -ok($val,"make 'user a' a member of del2b - $msg"); - -# }}} - -# {{{ Grant a right to a group and make sure that a submember can delegate the right and that it does not get yanked -# when a user is removed as a submember, when they're a sumember through another path -($val, $msg) = $del1->PrincipalObj->GrantRight( Object=> $q, Right => 'OwnTicket'); -ok( $val ,"grant del1 the right to 'OwnTicket' in queue 'DelegationTest' - $msg"); - -ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"make sure that user a can own tickets in queue 'DelegationTest'"); - -my $group_ace= RT::ACE->new($user_a); -$group_ace->LoadByValues( PrincipalType => 'Group', PrincipalId => $del1->PrincipalId, Object => $q, RightName => 'OwnTicket'); - -ok ($group_ace->Id, "Found the ACE we want to test with for now"); - -($val, $msg) = $group_ace->Delegate(PrincipalId => $a_delegates->PrincipalId); - -ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg"); -ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'"); - - -($val, $msg) = $del2b->DeleteMember($user_a->PrincipalId); -ok( $val ,"remove user a from group del2b - $msg"); -ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a has the right to own tickets in queue 'DelegationTest'"); -ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'"); - -# }}} - -# {{{ When a user is removed froom a group by the only path they're in there by, make sure the delegations go away -($val, $msg) = $del2->DeleteMember($user_a->PrincipalId); -ok( $val ,"remove user a from group del2 - $msg"); -ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest' "); -ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest' "); -# }}} - -($val, $msg) = $del2->AddMember($user_a->PrincipalId); -ok( $val ,"make user a a member of group del2 - $msg"); - -($val, $msg) = $del2->PrincipalObj->GrantRight(Object=>$q, Right => 'OwnTicket'); -ok($val, "grant the right 'own tickets' in queue 'DelegationTest' to group del2 - $msg"); - -my $del2_right = RT::ACE->new($user_a); -$del2_right->LoadByValues( PrincipalId => $del2->PrincipalId, PrincipalType => 'Group', Object => $q, RightName => 'OwnTicket'); -ok ($del2_right->Id, "Found the right"); - -($val, $msg) = $del2_right->Delegate(PrincipalId => $a_delegates->PrincipalId); -ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' gotten via del2 to personal group 'delegates' - $msg"); - -# They have it via del1 and del2 -ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'"); - - -($val, $msg) = $del2->PrincipalObj->RevokeRight(Object=>$q, Right => 'OwnTicket'); -ok($val, "revoke the right 'own tickets' in queue 'DelegationTest' to group del2 - $msg"); -ok( $user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does has the right to own tickets in queue 'DelegationTest' via del1"); -ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'"); - -($val, $msg) = $del2->PrincipalObj->GrantRight(Object=>$q, Right => 'OwnTicket'); -ok($val, "grant the right 'own tickets' in queue 'DelegationTest' to group del2 - $msg"); - - -$group_ace= RT::ACE->new($user_a); -$group_ace->LoadByValues( PrincipalType => 'Group', PrincipalId => $del1->PrincipalId, Object=>$q, RightName => 'OwnTicket'); - -ok ($group_ace->Id, "Found the ACE we want to test with for now"); - -($val, $msg) = $group_ace->Delegate(PrincipalId => $a_delegates->PrincipalId); - -ok( $val ,"user a tries and succeeds to delegate the right 'ownticket' in queue 'DelegationTest' to personal group 'delegates' - $msg"); - -ok( $user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b has the right to own tickets in queue 'DelegationTest'"); - -($val, $msg) = $del2->DeleteMember($user_a->PrincipalId); -ok( $val ,"remove user a from group del2 - $msg"); - -ok( !$user_a->HasRight(Right => 'OwnTicket', Object => $q) ,"user a does not have the right to own tickets in queue 'DelegationTest'"); - -ok( !$user_b->HasRight(Right => 'OwnTicket', Object => $q) ,"user b does not have the right to own tickets in queue 'DelegationTest'"); - - - -=end testing - -=cut - -sub Delegate { - my $self = shift; - my %args = ( PrincipalId => undef, - @_ ); - - unless ( $self->Id ) { - return ( 0, $self->loc("Right not loaded.") ); - } - my $princ_obj; - ( $princ_obj, $args{'PrincipalType'} ) = - $self->_CanonicalizePrincipal( $args{'PrincipalId'}, - $args{'PrincipalType'} ); - - unless ( $princ_obj->id ) { - return ( 0, - $self->loc( 'Principal [_1] not found.', $args{'PrincipalId'} ) - ); - } - - # }}} - - # {{{ Check the ACL - - # First, we check to se if the user is delegating rights and - # they have the permission to - unless ( $self->CurrentUser->HasRight(Right => 'DelegateRights', Object => $self->Object) ) { - return ( 0, $self->loc("Permission Denied") ); - } - - unless ( $self->PrincipalObj->IsGroup ) { - return ( 0, $self->loc("System Error") ); - } - unless ( $self->PrincipalObj->Object->HasMemberRecursively( - $self->CurrentUser->PrincipalObj - ) - ) { - return ( 0, $self->loc("Permission Denied") ); - } - - # }}} - - my $concurrency_check = RT::ACE->new($RT::SystemUser); - $concurrency_check->Load( $self->Id ); - unless ( $concurrency_check->Id ) { - $RT::Logger->crit( - "Trying to delegate a right which had already been deleted"); - return ( 0, $self->loc('Permission Denied') ); - } - - my $delegated_ace = RT::ACE->new( $self->CurrentUser ); - - # Make sure the right doesn't already exist. - $delegated_ace->LoadByCols( PrincipalId => $princ_obj->Id, - PrincipalType => 'Group', - RightName => $self->__Value('RightName'), - ObjectType => $self->__Value('ObjectType'), - ObjectId => $self->__Value('ObjectId'), - DelegatedBy => $self->CurrentUser->PrincipalId, - DelegatedFrom => $self->id ); - if ( $delegated_ace->Id ) { - return ( 0, $self->loc('That principal already has that right') ); - } - my $id = $delegated_ace->SUPER::Create( - PrincipalId => $princ_obj->Id, - PrincipalType => 'Group', # do we want to hardcode this? - RightName => $self->__Value('RightName'), - ObjectType => $self->__Value('ObjectType'), - ObjectId => $self->__Value('ObjectId'), - DelegatedBy => $self->CurrentUser->PrincipalId, - DelegatedFrom => $self->id ); - - #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - # TODO what about the groups key cache? - RT::Principal->InvalidateACLCache(); - - if ( $id > 0 ) { - return ( $id, $self->loc('Right Delegated') ); - } - else { - return ( 0, $self->loc('System error. Right not delegated.') ); - } -} - -# }}} - -# {{{ sub Delete - -=head2 Delete { InsideTransaction => undef} - -Delete this object. This method should ONLY ever be called from RT::User or RT::Group (or from itself) -If this is being called from within a transaction, specify a true value for the parameter InsideTransaction. -Really, DBIx::SearchBuilder should use and/or fake subtransactions - -This routine will also recurse and delete any delegations of this right - -=cut - -sub Delete { - my $self = shift; - - unless ( $self->Id ) { - return ( 0, $self->loc('Right not loaded.') ); - } - - # A user can delete an ACE if the current user has the right to modify it and it's not a delegated ACE - # or if it's a delegated ACE and it was delegated by the current user - unless ( - ( $self->CurrentUser->HasRight(Right => 'ModifyACL', Object => $self->Object) - && $self->__Value('DelegatedBy') == 0 ) - || ( $self->__Value('DelegatedBy') == $self->CurrentUser->PrincipalId ) - ) { - return ( 0, $self->loc('Permission Denied') ); - } - $self->_Delete(@_); -} - -# Helper for Delete with no ACL check -sub _Delete { - my $self = shift; - my %args = ( InsideTransaction => undef, - @_ ); - - my $InsideTransaction = $args{'InsideTransaction'}; - - $RT::Handle->BeginTransaction() unless $InsideTransaction; - - my $delegated_from_this = RT::ACL->new($RT::SystemUser); - $delegated_from_this->Limit( FIELD => 'DelegatedFrom', - OPERATOR => '=', - VALUE => $self->Id ); - - my $delete_succeeded = 1; - my $submsg; - while ( my $delegated_ace = $delegated_from_this->Next ) { - ( $delete_succeeded, $submsg ) = - $delegated_ace->_Delete( InsideTransaction => 1 ); - last unless ($delete_succeeded); - } - - unless ($delete_succeeded) { - $RT::Handle->Rollback() unless $InsideTransaction; - return ( 0, $self->loc('Right could not be revoked') ); - } - - my ( $val, $msg ) = $self->SUPER::Delete(@_); - - # If we're revoking delegation rights (see above), we may need to - # revoke all rights delegated by the recipient. - if ($val and ($self->RightName() eq 'DelegateRights' or - $self->RightName() eq 'SuperUser')) { - $val = $self->PrincipalObj->_CleanupInvalidDelegations( InsideTransaction => 1 ); - } - - if ($val) { - #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - # TODO what about the groups key cache? - RT::Principal->InvalidateACLCache(); - $RT::Handle->Commit() unless $InsideTransaction; - return ( $val, $self->loc('Right revoked') ); - } - - $RT::Handle->Rollback() unless $InsideTransaction; - return ( 0, $self->loc('Right could not be revoked') ); -} - -# }}} - -# {{{ sub _BootstrapCreate - -=head2 _BootstrapCreate - -Grant a right with no error checking and no ACL. this is _only_ for -installation. If you use this routine without the author's explicit -written approval, he will hunt you down and make you spend eternity -translating mozilla's code into FORTRAN or intercal. - -If you think you need this routine, you've mistaken. - -=cut - -sub _BootstrapCreate { - my $self = shift; - my %args = (@_); - - # When bootstrapping, make sure we get the _right_ users - if ( $args{'UserId'} ) { - my $user = RT::User->new( $self->CurrentUser ); - $user->Load( $args{'UserId'} ); - delete $args{'UserId'}; - $args{'PrincipalId'} = $user->PrincipalId; - $args{'PrincipalType'} = 'User'; - } - - my $id = $self->SUPER::Create(%args); - - if ( $id > 0 ) { - return ($id); - } - else { - $RT::Logger->err('System error. right not granted.'); - return (undef); - } - -} - -# }}} - -# {{{ sub CanonicalizeRightName - -=head2 CanonicalizeRightName - -Takes a queue or system right name in any case and returns it in -the correct case. If it's not found, will return undef. - -=cut - -sub CanonicalizeRightName { - my $self = shift; - my $right = shift; - $right = lc $right; - if ( exists $LOWERCASERIGHTNAMES{"$right"} ) { - return ( $LOWERCASERIGHTNAMES{"$right"} ); - } - else { - return (undef); - } -} - -# }}} - - -# {{{ sub Object - -=head2 Object - -If the object this ACE applies to is a queue, returns the queue object. -If the object this ACE applies to is a group, returns the group object. -If it's the system object, returns undef. - -If the user has no rights, returns undef. - -=cut - - - - -sub Object { - my $self = shift; - - my $appliesto_obj; - - if ($self->__Value('ObjectType') && $OBJECT_TYPES{$self->__Value('ObjectType')} ) { - $appliesto_obj = $self->__Value('ObjectType')->new($self->CurrentUser); - unless (ref( $appliesto_obj) eq $self->__Value('ObjectType')) { - return undef; - } - $appliesto_obj->Load( $self->__Value('ObjectId') ); - return ($appliesto_obj); - } - else { - $RT::Logger->warning( "$self -> Object called for an object " - . "of an unknown type:" - . $self->__Value('ObjectType') ); - return (undef); - } -} - -# }}} - -# {{{ sub PrincipalObj - -=head2 PrincipalObj - -Returns the RT::Principal object for this ACE. - -=cut - -sub PrincipalObj { - my $self = shift; - - my $princ_obj = RT::Principal->new( $self->CurrentUser ); - $princ_obj->Load( $self->__Value('PrincipalId') ); - - unless ( $princ_obj->Id ) { - $RT::Logger->err( - "ACE " . $self->Id . " couldn't load its principal object" ); - } - return ($princ_obj); - -} - -# }}} - -# {{{ ACL related methods - -# {{{ sub _Set - -sub _Set { - my $self = shift; - return ( 0, $self->loc("ACEs can only be created and deleted.") ); -} - -# }}} - -# {{{ sub _Value - -sub _Value { - my $self = shift; - - if ( $self->__Value('DelegatedBy') eq $self->CurrentUser->PrincipalId ) { - return ( $self->__Value(@_) ); - } - elsif ( $self->PrincipalObj->IsGroup - && $self->PrincipalObj->Object->HasMemberRecursively( - $self->CurrentUser->PrincipalObj - ) - ) { - return ( $self->__Value(@_) ); - } - elsif ( $self->CurrentUser->HasRight(Right => 'ShowACL', Object => $self->Object) ) { - return ( $self->__Value(@_) ); - } - else { - return undef; - } -} - -# }}} - - -# }}} - -# {{{ _CanonicalizePrincipal - -=head2 _CanonicalizePrincipal (PrincipalId, PrincipalType) - -Takes a principal id and a principal type. - -If the principal is a user, resolves it to the proper acl equivalence group. -Returns a tuple of (RT::Principal, PrincipalType) for the principal we really want to work with - -=cut - -sub _CanonicalizePrincipal { - my $self = shift; - my $princ_id = shift; - my $princ_type = shift; - - my $princ_obj = RT::Principal->new($RT::SystemUser); - $princ_obj->Load($princ_id); - - unless ( $princ_obj->Id ) { - use Carp; - $RT::Logger->crit(Carp::cluck); - $RT::Logger->crit("Can't load a principal for id $princ_id"); - return ( $princ_obj, undef ); - } - - # Rights never get granted to users. they get granted to their - # ACL equivalence groups - if ( $princ_type eq 'User' ) { - my $equiv_group = RT::Group->new( $self->CurrentUser ); - $equiv_group->LoadACLEquivalenceGroup($princ_obj); - unless ( $equiv_group->Id ) { - $RT::Logger->crit( "No ACL equiv group for princ " . $princ_obj->id ); - return ( RT::Principal->new($RT::SystemUser), undef ); - } - $princ_obj = $equiv_group->PrincipalObj(); - $princ_type = 'Group'; - - } - return ( $princ_obj, $princ_type ); -} - -sub _ParseObjectArg { - my $self = shift; - my %args = ( Object => undef, - ObjectId => undef, - ObjectType => undef, - @_ ); - - if( $args{'Object'} && ($args{'ObjectId'} || $args{'ObjectType'}) ) { - $RT::Logger->crit( "Method called with an ObjectType or an ObjectId and Object args" ); - return (); - } elsif( $args{'Object'} && !UNIVERSAL::can($args{'Object'},'id') ) { - $RT::Logger->crit( "Method called called Object that has no id method" ); - return (); - } elsif( $args{'Object'} ) { - my $obj = $args{'Object'}; - return ($obj, ref $obj, $obj->id); - } elsif ( $args{'ObjectType'} ) { - my $obj = $args{'ObjectType'}->new( $self->CurrentUser ); - $obj->Load( $args{'ObjectId'} ); - return ($obj, ref $obj, $obj->id); - } else { - $RT::Logger->crit( "Method called with wrong args" ); - return (); - } -} - - -# }}} -1; diff --git a/rt/lib/RT/ACL.pm b/rt/lib/RT/ACL.pm deleted file mode 100755 index 81f59c6d0..000000000 --- a/rt/lib/RT/ACL.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::ACL -- Class Description - -=head1 SYNOPSIS - - use RT::ACL - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::ACL; - -use RT::SearchBuilder; -use RT::ACE; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'ACL'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=item NewItem - -Returns an empty new RT::ACE item - -=cut - -sub NewItem { - my $self = shift; - return(RT::ACE->new($self->CurrentUser)); -} - - eval "require RT::ACL_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/ACL_Overlay.pm}) { - die $@; - }; - - eval "require RT::ACL_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/ACL_Vendor.pm}) { - die $@; - }; - - eval "require RT::ACL_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/ACL_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::ACL_Overlay, RT::ACL_Vendor, RT::ACL_Local - -=cut - - -1; diff --git a/rt/lib/RT/ACL_Overlay.pm b/rt/lib/RT/ACL_Overlay.pm deleted file mode 100644 index 09e10cc5f..000000000 --- a/rt/lib/RT/ACL_Overlay.pm +++ /dev/null @@ -1,373 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::ACL - collection of RT ACE objects - -=head1 SYNOPSIS - - use RT::ACL; -my $ACL = new RT::ACL($CurrentUser); - -=head1 DESCRIPTION - - -=head1 METHODS - -=begin testing - -ok(require RT::ACL); - -=end testing - -=cut - - -package RT::ACL; - -use strict; -no warnings qw(redefine); - - -=head2 Next - -Hand out the next ACE that was found - -=cut - - -# {{{ LimitToObject - -=head2 LimitToObject $object - -Limit the ACL to rights for the object $object. It needs to be an RT::Record class. - -=cut - -sub LimitToObject { - my $self = shift; - my $obj = shift; - unless ( defined($obj) - && ref($obj) - && UNIVERSAL::can( $obj, 'id' ) - && $obj->id ) - { - return undef; - } - $self->Limit( - FIELD => 'ObjectType', - OPERATOR => '=', - VALUE => ref($obj), - ENTRYAGGREGATOR => 'OR' - ); - $self->Limit( - FIELD => 'ObjectId', - OPERATOR => '=', - VALUE => $obj->id, - ENTRYAGGREGATOR => 'OR', - QUOTEVALUE => 0 - ); - -} - -# }}} - -# {{{ LimitNotObject - -=head2 LimitNotObject $object - -Limit the ACL to rights NOT on the object $object. $object needs to be -an RT::Record class. - -=cut - -sub LimitNotObject { - my $self = shift; - my $obj = shift; - unless ( defined($obj) - && ref($obj) - && UNIVERSAL::can( $obj, 'id' ) - && $obj->id ) - { - return undef; - } - $self->Limit( FIELD => 'ObjectType', - OPERATOR => '!=', - VALUE => ref($obj), - ENTRYAGGREGATOR => 'OR', - SUBCLAUSE => $obj->id - ); - $self->Limit( FIELD => 'ObjectId', - OPERATOR => '!=', - VALUE => $obj->id, - ENTRYAGGREGATOR => 'OR', - QUOTEVALUE => 0, - SUBCLAUSE => $obj->id - ); -} - -# }}} - -# {{{ LimitToPrincipal - -=head2 LimitToPrincipal { Type => undef, Id => undef, IncludeGroupMembership => undef } - -Limit the ACL to the principal with PrincipalId Id and PrincipalType Type - -Id is not optional. -Type is. - -if IncludeGroupMembership => 1 is specified, ACEs which apply to the principal due to group membership will be included in the resultset. - - -=cut - -sub LimitToPrincipal { - my $self = shift; - my %args = ( Type => undef, - Id => undef, - IncludeGroupMembership => undef, - @_ ); - if ( $args{'IncludeGroupMembership'} ) { - my $cgm = $self->NewAlias('CachedGroupMembers'); - $self->Join( ALIAS1 => 'main', - FIELD1 => 'PrincipalId', - ALIAS2 => $cgm, - FIELD2 => 'GroupId' ); - $self->Limit( ALIAS => $cgm, - FIELD => 'MemberId', - OPERATOR => '=', - VALUE => $args{'Id'}, - ENTRYAGGREGATOR => 'OR' ); - } - else { - if ( defined $args{'Type'} ) { - $self->Limit( FIELD => 'PrincipalType', - OPERATOR => '=', - VALUE => $args{'Type'}, - ENTRYAGGREGATOR => 'OR' ); - } - # 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($args{'Id'}); - if ($princ->PrincipalType eq 'User') { - my $group = RT::Group->new($RT::SystemUser); - $group->LoadACLEquivalenceGroup($princ); - $args{'Id'} = $group->PrincipalId; - } - $self->Limit( FIELD => 'PrincipalId', - OPERATOR => '=', - VALUE => $args{'Id'}, - ENTRYAGGREGATOR => 'OR' ); - } -} - -# }}} - - - -# {{{ ExcludeDelegatedRights - -=head2 ExcludeDelegatedRights - -Don't list rights which have been delegated. - -=cut - -sub ExcludeDelegatedRights { - my $self = shift; - $self->DelegatedBy(Id => 0); - $self->DelegatedFrom(Id => 0); -} -# }}} - -# {{{ DelegatedBy - -=head2 DelegatedBy { Id => undef } - -Limit the ACL to rights delegated by the principal whose Principal Id is -B - -Id is not optional. - -=cut - -sub DelegatedBy { - my $self = shift; - my %args = ( - Id => undef, - @_ - ); - $self->Limit( - FIELD => 'DelegatedBy', - OPERATOR => '=', - VALUE => $args{'Id'}, - ENTRYAGGREGATOR => 'OR' - ); - -} - -# }}} - -# {{{ DelegatedFrom - -=head2 DelegatedFrom { Id => undef } - -Limit the ACL to rights delegate from the ACE which has the Id specified -by the Id parameter. - -Id is not optional. - -=cut - -sub DelegatedFrom { - my $self = shift; - my %args = ( - Id => undef, - @_); - $self->Limit(FIELD => 'DelegatedFrom', OPERATOR=> '=', VALUE => $args{'Id'}, ENTRYAGGREGATOR => 'OR'); - -} - -# }}} - - -# {{{ sub Next -sub Next { - my $self = shift; - - my $ACE = $self->SUPER::Next(); - if ( ( defined($ACE) ) and ( ref($ACE) ) ) { - - if ( $self->CurrentUser->HasRight( Right => 'ShowACL', - Object => $ACE->Object ) - or $self->CurrentUser->HasRight( Right => 'ModifyACL', - Object => $ACE->Object ) - ) { - return ($ACE); - } - - #If the user doesn't have the right to show this ACE - else { - return ( $self->Next() ); - } - } - - #if there never was any ACE - else { - return (undef); - } - -} - -# }}} - - - -#wrap around _DoSearch so that we can build the hash of returned -#values -sub _DoSearch { - my $self = shift; - # $RT::Logger->debug("Now in ".$self."->_DoSearch"); - my $return = $self->SUPER::_DoSearch(@_); - # $RT::Logger->debug("In $self ->_DoSearch. return from SUPER::_DoSearch was $return\n"); - $self->_BuildHash(); - return ($return); -} - - -#Build a hash of this ACL's entries. -sub _BuildHash { - my $self = shift; - - while (my $entry = $self->Next) { - my $hashkey = $entry->ObjectType . "-" . $entry->ObjectId . "-" . $entry->RightName . "-" . $entry->PrincipalId . "-" . $entry->PrincipalType; - - $self->{'as_hash'}->{"$hashkey"} =1; - - } -} - - -# {{{ HasEntry - -=head2 HasEntry - -=cut - -sub HasEntry { - - my $self = shift; - my %args = ( RightScope => undef, - RightAppliesTo => undef, - RightName => undef, - PrincipalId => undef, - PrincipalType => undef, - @_ ); - - #if we haven't done the search yet, do it now. - $self->_DoSearch(); - - if ($self->{'as_hash'}->{ $args{'RightScope'} . "-" . - $args{'RightAppliesTo'} . "-" . - $args{'RightName'} . "-" . - $args{'PrincipalId'} . "-" . - $args{'PrincipalType'} - } == 1) { - return(1); - } - else { - return(undef); - } -} - -# }}} -1; diff --git a/rt/lib/RT/Action/AutoOpen.pm b/rt/lib/RT/Action/AutoOpen.pm deleted file mode 100644 index 54b5ab4e2..000000000 --- a/rt/lib/RT/Action/AutoOpen.pm +++ /dev/null @@ -1,109 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# This Action will open the BASE if a dependent is resolved. - -package RT::Action::AutoOpen; -require RT::Action::Generic; - -use strict; -use vars qw/@ISA/; -@ISA=qw(RT::Action::Generic); - -#Do what we need to do and send it out. - -#What does this type of Action does - -# {{{ sub Describe -sub Describe { - my $self = shift; - return (ref $self ); -} -# }}} - - -# {{{ sub Prepare -sub Prepare { - my $self = shift; - - # if the ticket is already open or the ticket is new and the message is more mail from the - # requestor, don't reopen it. - - my $status = $self->TicketObj->Status; - return undef if $status eq 'open'; - return undef if $status eq 'new' && $self->TransactionObj->IsInbound; - - if ( my $msg = $self->TransactionObj->Message->First ) { - return undef if ($msg->GetHeader('RT-Control') || '') =~ /\bno-autoopen\b/i; - } - - return 1; -} -# }}} - -sub Commit { - my $self = shift; - my $oldstatus = $self->TicketObj->Status(); - $self->TicketObj->__Set( Field => 'Status', Value => 'open' ); - $self->TicketObj->_NewTransaction( - Type => 'Status', - Field => 'Status', - OldValue => $oldstatus, - NewValue => 'open', - Data => 'Ticket auto-opened on incoming correspondence' - ); - - - return(1); -} - -eval "require RT::Action::AutoOpen_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/AutoOpen_Vendor.pm}); -eval "require RT::Action::AutoOpen_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/AutoOpen_Local.pm}); - -1; diff --git a/rt/lib/RT/Action/Autoreply.pm b/rt/lib/RT/Action/Autoreply.pm deleted file mode 100755 index 81f7bddfa..000000000 --- a/rt/lib/RT/Action/Autoreply.pm +++ /dev/null @@ -1,96 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -package RT::Action::Autoreply; -require RT::Action::SendEmail; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Action::SendEmail); - - -# {{{ sub SetRecipients - -=head2 SetRecipients - -Sets the recipients of this message to this ticket's Requestor. - -=cut - - -sub SetRecipients { - my $self=shift; - - push(@{$self->{'To'}}, $self->TicketObj->Requestors->MemberEmailAddresses); - - return(1); -} - -# }}} - - -# {{{ sub SetReturnAddress - -=head2 SetReturnAddress - -Set this message\'s return address to the apropriate queue address - -=cut - -sub SetReturnAddress { - my $self = shift; - my %args = ( is_comment => 0, - @_ - ); - - my $replyto; - if ($args{'is_comment'}) { - $replyto = $self->TicketObj->QueueObj->CommentAddress || - $RT::CommentAddress; - } - else { - $replyto = $self->TicketObj->QueueObj->CorrespondAddress || - $RT::CorrespondAddress; - } - - unless ($self->TemplateObj->MIMEObj->head->get('From')) { - my $friendly_name = $self->TicketObj->QueueObj->Description || - $self->TicketObj->QueueObj->Name; - $friendly_name =~ s/"/\\"/g; - $self->SetHeader('From', "\"$friendly_name\" <$replyto>"); - } - - unless ($self->TemplateObj->MIMEObj->head->get('Reply-To')) { - $self->SetHeader('Reply-To', "$replyto"); - } - -} - -# }}} - -eval "require RT::Action::Autoreply_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Autoreply_Vendor.pm}); -eval "require RT::Action::Autoreply_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Autoreply_Local.pm}); - -1; diff --git a/rt/lib/RT/Action/CreateTickets.pm b/rt/lib/RT/Action/CreateTickets.pm deleted file mode 100644 index 4e72e1151..000000000 --- a/rt/lib/RT/Action/CreateTickets.pm +++ /dev/null @@ -1,1476 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Action::CreateTickets; -require RT::Action::Generic; - -use strict; -use warnings; -use vars qw/@ISA/; -@ISA = qw(RT::Action::Generic); - -use MIME::Entity; - -=head1 NAME - - RT::Action::CreateTickets - -Create one or more tickets according to an externally supplied template. - - -=head1 SYNOPSIS - - ===Create-Ticket codereview - Subject: Code review for {$Tickets{'TOP'}->Subject} - Depended-On-By: TOP - Content: Someone has created a ticket. you should review and approve it, - so they can finish their work - ENDOFCONTENT - -=head1 DESCRIPTION - - -Using the "CreateTickets" ScripAction and mandatory dependencies, RT now has -the ability to model complex workflow. When a ticket is created in a queue -that has a "CreateTickets" scripaction, that ScripAction parses its "Template" - - - -=head2 FORMAT - -CreateTickets uses the template as a template for an ordered set of tickets -to create. The basic format is as follows: - - - ===Create-Ticket: identifier - Param: Value - Param2: Value - Param3: Value - Content: Blah - blah - blah - ENDOFCONTENT - ===Create-Ticket: id2 - Param: Value - Content: Blah - ENDOFCONTENT - - -Each ===Create-Ticket: section is evaluated as its own -Text::Template object, which means that you can embed snippets -of perl inside the Text::Template using {} delimiters, but that -such sections absolutely can not span a ===Create-Ticket boundary. - -After each ticket is created, it's stuffed into a hash called %Tickets -so as to be available during the creation of other tickets during the same -ScripAction. The hash is prepopulated with the ticket which triggered the -ScripAction as $Tickets{'TOP'}; you can also access that ticket using the -shorthand TOP. - -A simple example: - - ===Create-Ticket: codereview - Subject: Code review for {$Tickets{'TOP'}->Subject} - Depended-On-By: TOP - Content: Someone has created a ticket. you should review and approve it, - so they can finish their work - ENDOFCONTENT - - - -A convoluted example - - ===Create-Ticket: approval - { # Find out who the administrators of the group called "HR" - # of which the creator of this ticket is a member - my $name = "HR"; - - my $groups = RT::Groups->new($RT::SystemUser); - $groups->LimitToUserDefinedGroups(); - $groups->Limit(FIELD => "Name", OPERATOR => "=", VALUE => "$name"); - $groups->WithMember($TransactionObj->CreatorObj->Id); - - my $groupid = $groups->First->Id; - - my $adminccs = RT::Users->new($RT::SystemUser); - $adminccs->WhoHaveRight( - Right => "AdminGroup", - Object =>$groups->First, - IncludeSystemRights => undef, - IncludeSuperusers => 0, - IncludeSubgroupMembers => 0, - ); - - my @admins; - while (my $admin = $adminccs->Next) { - push (@admins, $admin->EmailAddress); - } - } - Queue: ___Approvals - Type: approval - AdminCc: {join ("\nAdminCc: ",@admins) } - Depended-On-By: TOP - Refers-To: TOP - Subject: Approval for ticket: {$Tickets{"TOP"}->Id} - {$Tickets{"TOP"}->Subject} - Due: {time + 86400} - Content-Type: text/plain - Content: Your approval is requested for the ticket {$Tickets{"TOP"}->Id}: {$Tickets{"TOP"}->Subject} - Blah - Blah - ENDOFCONTENT - ===Create-Ticket: two - Subject: Manager approval - Depended-On-By: TOP - Refers-On: {$Tickets{"approval"}->Id} - Queue: ___Approvals - Content-Type: text/plain - Content: - Your approval is requred for this ticket, too. - ENDOFCONTENT - -=head2 Acceptable fields - -A complete list of acceptable fields for this beastie: - - - * Queue => Name or id# of a queue - Subject => A text string - ! Status => A valid status. defaults to 'new' - Due => Dates can be specified in seconds since the epoch - to be handled literally or in a semi-free textual - format which RT will attempt to parse. - - - - Starts => - Started => - Resolved => - Owner => Username or id of an RT user who can and should own - this ticket; forces the owner if necessary - + Requestor => Email address - + Cc => Email address - + AdminCc => Email address - TimeWorked => - TimeEstimated => - TimeLeft => - InitialPriority => - FinalPriority => - Type => - +! DependsOn => - +! DependedOnBy => - +! RefersTo => - +! ReferredToBy => - +! Members => - +! MemberOf => - Content => content. Can extend to multiple lines. Everything - within a template after a Content: header is treated - as content until we hit a line containing only - ENDOFCONTENT - ContentType => the content-type of the Content field. Defaults to - 'text/plain' - UpdateType => 'correspond' or 'comment'; used in conjunction with - 'content' if this is an update. Defaults to - 'correspond' - - CustomField- => custom field value - CF-name => custom field value - CustomField-name => custom field value - -Fields marked with an * are required. - -Fields marked with a + may have multiple values, simply -by repeating the fieldname on a new line with an additional value. - -Fields marked with a ! are postponed to be processed after all -tickets in the same actions are created. Except for 'Status', those -field can also take a ticket name within the same action (i.e. -the identifiers after ==Create-Ticket), instead of raw Ticket ID -numbers. - -When parsed, field names are converted to lowercase and have -s stripped. -Refers-To, RefersTo, refersto, refers-to and r-e-f-er-s-tO will all -be treated as the same thing. - - -=begin testing - -ok (require RT::Action::CreateTickets); -use_ok(RT::Scrip); -use_ok(RT::Template); -use_ok(RT::ScripAction); -use_ok(RT::ScripCondition); -use_ok(RT::Ticket); - -my $approvalsq = RT::Queue->new($RT::SystemUser); -$approvalsq->Create(Name => 'Approvals'); -ok ($approvalsq->Id, "Created Approvals test queue"); - - -my $approvals = -'===Create-Ticket: approval -Queue: ___Approvals -Type: approval -AdminCc: {join ("\nAdminCc: ",@admins) } -Depended-On-By: {$Tickets{"TOP"}->Id} -Refers-To: TOP -Subject: Approval for ticket: {$Tickets{"TOP"}->Id} - {$Tickets{"TOP"}->Subject} -Due: {time + 86400} -Content-Type: text/plain -Content: Your approval is requested for the ticket {$Tickets{"TOP"}->Id}: {$Tickets{"TOP"}->Subject} -Blah -Blah -ENDOFCONTENT -===Create-Ticket: two -Subject: Manager approval. -Depended-On-By: approval -Queue: ___Approvals -Content-Type: text/plain -Content: -Your minion approved ticket {$Tickets{"TOP"}->Id}. you ok with that? -ENDOFCONTENT -'; - -ok ($approvals =~ /Content/, "Read in the approvals template"); - -my $apptemp = RT::Template->new($RT::SystemUser); -$apptemp->Create( Content => $approvals, Name => "Approvals", Queue => "0"); - -ok ($apptemp->Id); - -my $q = RT::Queue->new($RT::SystemUser); -$q->Create(Name => 'WorkflowTest'); -ok ($q->Id, "Created workflow test queue"); - -my $scrip = RT::Scrip->new($RT::SystemUser); -my ($sval, $smsg) =$scrip->Create( ScripCondition => 'On Transaction', - ScripAction => 'Create Tickets', - Template => 'Approvals', - Queue => $q->Id); -ok ($sval, $smsg); -ok ($scrip->Id, "Created the scrip"); -ok ($scrip->TemplateObj->Id, "Created the scrip template"); -ok ($scrip->ConditionObj->Id, "Created the scrip condition"); -ok ($scrip->ActionObj->Id, "Created the scrip action"); - -my $t = RT::Ticket->new($RT::SystemUser); -my($tid, $ttrans, $tmsg) = $t->Create(Subject => "Sample workflow test", - Owner => "root", - Queue => $q->Id); - -ok ($tid,$tmsg); - -my $deps = $t->DependsOn; -is ($deps->Count, 1, "The ticket we created depends on one other ticket"); -my $dependson= $deps->First->TargetObj; -ok ($dependson->Id, "It depends on a real ticket"); -unlike ($dependson->Subject, qr/{/, "The subject doesn't have braces in it. that means we're interpreting expressions"); -is ($t->ReferredToBy->Count,1, "It's only referred to by one other ticket"); -is ($t->ReferredToBy->First->BaseObj->Id,$t->DependsOn->First->TargetObj->Id, "The same ticket that depends on it refers to it."); -use RT::Action::CreateTickets; -my $action = RT::Action::CreateTickets->new( CurrentUser => $RT::SystemUser);; - -# comma-delimited templates -my $commas = <<"EOF"; -id,Queue,Subject,Owner,Content -ticket1,General,"foo, bar",root,blah -ticket2,General,foo bar,root,blah -ticket3,General,foo' bar,root,blah'boo -ticket4,General,foo' bar,,blah'boo -EOF - - -# Comma delimited templates with missing data -my $sparse_commas = <<"EOF"; -id,Queue,Subject,Owner,Requestor -ticket14,General,,,bobby -ticket15,General,,,tommy -ticket16,General,,suzie,tommy -ticket17,General,Foo "bar" baz,suzie,tommy -ticket18,General,'Foo "bar" baz',suzie,tommy -ticket19,General,'Foo bar' baz,suzie,tommy -EOF - - -# tab-delimited templates -my $tabs = <<"EOF"; -id\tQueue\tSubject\tOwner\tContent -ticket10\tGeneral\t"foo' bar"\troot\tblah' -ticket11\tGeneral\tfoo, bar\troot\tblah -ticket12\tGeneral\tfoo' bar\troot\tblah'boo -ticket13\tGeneral\tfoo' bar\t\tblah'boo -EOF - -my %expected; - -$expected{ticket1} = <Parse(Content =>$commas); -$action->Parse(Content =>$sparse_commas); -$action->Parse(Content => $tabs); - -my %got; -foreach (@{ $action->{'create_tickets'} }) { - $got{$_} = $action->{'templates'}->{$_}; -} - -foreach my $id ( sort keys %expected ) { - ok(exists($got{"create-$id"}), "template exists for $id"); - is($got{"create-$id"}, $expected{$id}, "template is correct for $id"); -} - -=end testing - - -=head1 AUTHOR - -Jesse Vincent - -=head1 SEE ALSO - -perl(1). - -=cut - -my %LINKTYPEMAP = ( - MemberOf => { - Type => 'MemberOf', - Mode => 'Target', - }, - Parents => { - Type => 'MemberOf', - Mode => 'Target', - }, - Members => { - Type => 'MemberOf', - Mode => 'Base', - }, - Children => { - Type => 'MemberOf', - Mode => 'Base', - }, - HasMember => { - Type => 'MemberOf', - Mode => 'Base', - }, - RefersTo => { - Type => 'RefersTo', - Mode => 'Target', - }, - ReferredToBy => { - Type => 'RefersTo', - Mode => 'Base', - }, - DependsOn => { - Type => 'DependsOn', - Mode => 'Target', - }, - DependedOnBy => { - Type => 'DependsOn', - Mode => 'Base', - }, - -); - -# {{{ Scrip methods (Commit, Prepare) - -# {{{ sub Commit -#Do what we need to do and send it out. -sub Commit { - my $self = shift; - - # Create all the tickets we care about - return (1) unless $self->TicketObj->Type eq 'ticket'; - - $self->CreateByTemplate( $self->TicketObj ); - $self->UpdateByTemplate( $self->TicketObj ); - return (1); -} - -# }}} - -# {{{ sub Prepare - -sub Prepare { - my $self = shift; - - unless ( $self->TemplateObj ) { - $RT::Logger->warning("No template object handed to $self\n"); - } - - unless ( $self->TransactionObj ) { - $RT::Logger->warning("No transaction object handed to $self\n"); - - } - - unless ( $self->TicketObj ) { - $RT::Logger->warning("No ticket object handed to $self\n"); - - } - - $self->Parse( - Content => $self->TemplateObj->Content, - _ActiveContent => 1 - ); - return 1; - -} - -# }}} - -# }}} - -sub CreateByTemplate { - my $self = shift; - my $top = shift; - - $RT::Logger->debug("In CreateByTemplate"); - - my @results; - - # XXX: cargo cult programming that works. i'll be back. - use bytes; - - local %T::Tickets = %T::Tickets; - local $T::TOP = $T::TOP; - local $T::ID = $T::ID; - $T::Tickets{'TOP'} = $T::TOP = $top if $top; - - my $ticketargs; - my ( @links, @postponed ); - foreach my $template_id ( @{ $self->{'create_tickets'} } ) { - $RT::Logger->debug("Workflow: processing $template_id of $T::TOP") - if $T::TOP; - - $T::ID = $template_id; - @T::AllID = @{ $self->{'create_tickets'} }; - - ( $T::Tickets{$template_id}, $ticketargs ) - = $self->ParseLines( $template_id, \@links, \@postponed ); - - # Now we have a %args to work with. - # Make sure we have at least the minimum set of - # reasonable data and do our thang - - my ( $id, $transid, $msg ) - = $T::Tickets{$template_id}->Create(%$ticketargs); - - foreach my $res ( split( '\n', $msg ) ) { - push @results, - $T::Tickets{$template_id} - ->loc( "Ticket [_1]", $T::Tickets{$template_id}->Id ) . ': ' - . $res; - } - if ( !$id ) { - if ( $self->TicketObj ) { - $msg = "Couldn't create related ticket $template_id for " - . $self->TicketObj->Id . " " - . $msg; - } else { - $msg = "Couldn't create ticket $template_id " . $msg; - } - - $RT::Logger->error($msg); - next; - } - - $RT::Logger->debug("Assigned $template_id with $id"); - $T::Tickets{$template_id}->SetOriginObj( $self->TicketObj ) - if $self->TicketObj - && $T::Tickets{$template_id}->can('SetOriginObj'); - - } - - $self->PostProcess( \@links, \@postponed ); - - return @results; -} - -sub UpdateByTemplate { - my $self = shift; - my $top = shift; - - # XXX: cargo cult programming that works. i'll be back. - use bytes; - - my @results; - local %T::Tickets = %T::Tickets; - local $T::ID = $T::ID; - - my $ticketargs; - my ( @links, @postponed ); - foreach my $template_id ( @{ $self->{'update_tickets'} } ) { - $RT::Logger->debug("Update Workflow: processing $template_id"); - - $T::ID = $template_id; - @T::AllID = @{ $self->{'update_tickets'} }; - - ( $T::Tickets{$template_id}, $ticketargs ) - = $self->ParseLines( $template_id, \@links, \@postponed ); - - # Now we have a %args to work with. - # Make sure we have at least the minimum set of - # reasonable data and do our thang - - my @attribs = qw( - Subject - FinalPriority - Priority - TimeEstimated - TimeWorked - TimeLeft - Status - Queue - Due - Starts - Started - Resolved - ); - - my $id = $template_id; - $id =~ s/update-(\d+).*/$1/; - my ($loaded, $msg) = $T::Tickets{$template_id}->LoadById($id); - - unless ( $loaded ) { - $RT::Logger->error("Couldn't update ticket $template_id: " . $msg); - push @results, $self->loc( "Couldn't load ticket '[_1]'", $id ); - next; - } - - my $current = $self->GetBaseTemplate( $T::Tickets{$template_id} ); - - $template_id =~ m/^update-(.*)/; - my $base_id = "base-$1"; - my $base = $self->{'templates'}->{$base_id}; - if ($base) { - $base =~ s/\r//g; - $base =~ s/\n+$//; - $current =~ s/\n+$//; - - # If we have no base template, set what we can. - if ( $base ne $current ) { - push @results, - "Could not update ticket " - . $T::Tickets{$template_id}->Id - . ": Ticket has changed"; - next; - } - } - push @results, $T::Tickets{$template_id}->Update( - AttributesRef => \@attribs, - ARGSRef => $ticketargs - ); - - if ( $ticketargs->{'Owner'} ) { - ($id, $msg) = $T::Tickets{$template_id}->SetOwner($ticketargs->{'Owner'}, "Force"); - push @results, $msg unless $msg eq $self->loc("That user already owns that ticket"); - } - - push @results, - $self->UpdateWatchers( $T::Tickets{$template_id}, $ticketargs ); - - push @results, - $self->UpdateCustomFields( $T::Tickets{$template_id}, $ticketargs ); - - next unless $ticketargs->{'MIMEObj'}; - if ( $ticketargs->{'UpdateType'} =~ /^(private|comment)$/i ) { - my ( $Transaction, $Description, $Object ) - = $T::Tickets{$template_id}->Comment( - BccMessageTo => $ticketargs->{'Bcc'}, - MIMEObj => $ticketargs->{'MIMEObj'}, - TimeTaken => $ticketargs->{'TimeWorked'} - ); - push( @results, - $T::Tickets{$template_id} - ->loc( "Ticket [_1]", $T::Tickets{$template_id}->id ) - . ': ' - . $Description ); - } elsif ( $ticketargs->{'UpdateType'} =~ /^(public|response|correspond)$/i ) { - my ( $Transaction, $Description, $Object ) - = $T::Tickets{$template_id}->Correspond( - BccMessageTo => $ticketargs->{'Bcc'}, - MIMEObj => $ticketargs->{'MIMEObj'}, - TimeTaken => $ticketargs->{'TimeWorked'} - ); - push( @results, - $T::Tickets{$template_id} - ->loc( "Ticket [_1]", $T::Tickets{$template_id}->id ) - . ': ' - . $Description ); - } else { - push( - @results, - $T::Tickets{$template_id}->loc( - "Update type was neither correspondence nor comment.") - . " " - . $T::Tickets{$template_id}->loc("Update not recorded.") - ); - } - } - - $self->PostProcess( \@links, \@postponed ); - - return @results; -} - -=head2 Parse TEMPLATE_CONTENT, DEFAULT_QUEUE, DEFAULT_REQEUESTOR ACTIVE - -Parse a template from TEMPLATE_CONTENT - -If $active is set to true, then we'll use Text::Template to parse the templates, -allowing you to embed active perl in your templates. - -=cut - -sub Parse { - my $self = shift; - my %args = ( - Content => undef, - Queue => undef, - Requestor => undef, - _ActiveContent => undef, - @_ - ); - - if ( $args{'_ActiveContent'} ) { - $self->{'UsePerlTextTemplate'} = 1; - } else { - - $self->{'UsePerlTextTemplate'} = 0; - } - - if ( substr( $args{'Content'}, 0, 3 ) eq '===' ) { - $self->_ParseMultilineTemplate(%args); - } elsif ( $args{'Content'} =~ /(?:\t|,)/i ) { - $self->_ParseXSVTemplate(%args); - - } -} - -=head2 _ParseMultilineTemplate - -Parses mulitline templates. Things like: - - ===Create-Ticket ... - -Takes the same arguments as Parse - -=cut - -sub _ParseMultilineTemplate { - my $self = shift; - my %args = (@_); - - my $template_id; - my ( $queue, $requestor ); - $RT::Logger->debug("Line: ==="); - foreach my $line ( split( /\n/, $args{'Content'} ) ) { - $line =~ s/\r$//; - $RT::Logger->debug("Line: $line"); - if ( $line =~ /^===/ ) { - if ( $template_id && !$queue && $args{'Queue'} ) { - $self->{'templates'}->{$template_id} - .= "Queue: $args{'Queue'}\n"; - } - if ( $template_id && !$requestor && $args{'Requestor'} ) { - $self->{'templates'}->{$template_id} - .= "Requestor: $args{'Requestor'}\n"; - } - $queue = 0; - $requestor = 0; - } - if ( $line =~ /^===Create-Ticket: (.*)$/ ) { - $template_id = "create-$1"; - $RT::Logger->debug("**** Create ticket: $template_id"); - push @{ $self->{'create_tickets'} }, $template_id; - } elsif ( $line =~ /^===Update-Ticket: (.*)$/ ) { - $template_id = "update-$1"; - $RT::Logger->debug("**** Update ticket: $template_id"); - push @{ $self->{'update_tickets'} }, $template_id; - } elsif ( $line =~ /^===Base-Ticket: (.*)$/ ) { - $template_id = "base-$1"; - $RT::Logger->debug("**** Base ticket: $template_id"); - push @{ $self->{'base_tickets'} }, $template_id; - } elsif ( $line =~ /^===#.*$/ ) { # a comment - next; - } else { - if ( $line =~ /^Queue:(.*)/i ) { - $queue = 1; - my $value = $1; - $value =~ s/^\s//; - $value =~ s/\s$//; - if ( !$value && $args{'Queue'} ) { - $value = $args{'Queue'}; - $line = "Queue: $value"; - } - } - if ( $line =~ /^Requestors?:(.*)/i ) { - $requestor = 1; - my $value = $1; - $value =~ s/^\s//; - $value =~ s/\s$//; - if ( !$value && $args{'Requestor'} ) { - $value = $args{'Requestor'}; - $line = "Requestor: $value"; - } - } - $self->{'templates'}->{$template_id} .= $line . "\n"; - } - } - if ( $template_id && !$queue && $args{'Queue'} ) { - $self->{'templates'}->{$template_id} .= "Queue: $args{'Queue'}\n"; - } - } - -sub ParseLines { - my $self = shift; - my $template_id = shift; - my $links = shift; - my $postponed = shift; - - my $content = $self->{'templates'}->{$template_id}; - - if ( $self->{'UsePerlTextTemplate'} ) { - - $RT::Logger->debug( - "Workflow: evaluating\n$self->{templates}{$template_id}"); - - my $template = Text::Template->new( - TYPE => 'STRING', - SOURCE => $content - ); - - my $err; - $content = $template->fill_in( - PACKAGE => 'T', - BROKEN => sub { - $err = {@_}->{error}; - } - ); - - $RT::Logger->debug("Workflow: yielding\n$content"); - - if ($err) { - $RT::Logger->error( "Ticket creation failed: " . $err ); - while ( my ( $k, $v ) = each %T::X ) { - $RT::Logger->debug( - "Eliminating $template_id from ${k}'s parents."); - delete $v->{$template_id}; - } - next; - } - } - - my $TicketObj ||= RT::Ticket->new( $self->CurrentUser ); - - my %args; - my %original_tags; - my @lines = ( split( /\n/, $content ) ); - while ( defined( my $line = shift @lines ) ) { - if ( $line =~ /^(.*?):(?:\s+)(.*?)(?:\s*)$/ ) { - my $value = $2; - my $original_tag = $1; - my $tag = lc($original_tag); - $tag =~ s/-//g; - $tag =~ s/^(requestor|cc|admincc)s?$/$1/i; - - $original_tags{$tag} = $original_tag; - - if ( ref( $args{$tag} ) ) - { #If it's an array, we want to push the value - push @{ $args{$tag} }, $value; - } elsif ( defined( $args{$tag} ) ) - { #if we're about to get a second value, make it an array - $args{$tag} = [ $args{$tag}, $value ]; - } else { #if there's nothing there, just set the value - $args{$tag} = $value; - } - - if ( $tag =~ /^content$/i ) { #just build up the content - # convert it to an array - $args{$tag} = defined($value) ? [ $value . "\n" ] : []; - while ( defined( my $l = shift @lines ) ) { - last if ( $l =~ /^ENDOFCONTENT\s*$/ ); - push @{ $args{'content'} }, $l . "\n"; - } - } else { - # if it's not content, strip leading and trailing spaces - if ( $args{$tag} ) { - $args{$tag} =~ s/^\s+//g; - $args{$tag} =~ s/\s+$//g; - } - if (($tag =~ /^(requestor|cc|admincc)$/i or grep {lc $_ eq $tag} keys %LINKTYPEMAP) and $args{$tag} =~ /,/) { - $args{$tag} = [ split /,\s*/, $args{$tag} ]; - } - } - } - } - - foreach my $date qw(due starts started resolved) { - my $dateobj = RT::Date->new( $self->CurrentUser ); - next unless $args{$date}; - if ( $args{$date} =~ /^\d+$/ ) { - $dateobj->Set( Format => 'unix', Value => $args{$date} ); - } else { - eval { - $dateobj->Set( Format => 'iso', Value => $args{$date} ); - }; - if ($@ or $dateobj->Unix <= 0) { - $dateobj->Set( Format => 'unknown', Value => $args{$date} ); - } - } - $args{$date} = $dateobj->ISO; - } - - $args{'requestor'} ||= $self->TicketObj->Requestors->MemberEmailAddresses - if $self->TicketObj; - - $args{'type'} ||= 'ticket'; - - my %ticketargs = ( - Queue => $args{'queue'}, - Subject => $args{'subject'}, - Status => $args{'status'} || 'new', - 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'} || 0, - FinalPriority => $args{'finalpriority'} || 0, - Type => $args{'type'}, - ); - - if ( $args{content} ) { - my $mimeobj = MIME::Entity->new(); - $mimeobj->build( - Type => $args{'contenttype'} || 'text/plain', - Data => $args{'content'} - ); - $ticketargs{MIMEObj} = $mimeobj; - $ticketargs{UpdateType} = $args{'updatetype'} || 'correspond'; - } - - foreach my $tag ( keys(%args) ) { - # if the tag was added later, skip it - my $orig_tag = $original_tags{$tag} or next; - if ( $orig_tag =~ /^customfield-?(\d+)$/i ) { - $ticketargs{ "CustomField-" . $1 } = $args{$tag}; - } elsif ( $orig_tag =~ /^(?:customfield|cf)-?(.*)$/i ) { - my $cf = RT::CustomField->new( $self->CurrentUser ); - $cf->LoadByName( Name => $1, Queue => $ticketargs{Queue} ); - $ticketargs{ "CustomField-" . $cf->id } = $args{$tag}; - } elsif ($orig_tag) { - my $cf = RT::CustomField->new( $self->CurrentUser ); - $cf->LoadByName( Name => $orig_tag, Queue => $ticketargs{Queue} ); - next unless ($cf->id) ; - $ticketargs{ "CustomField-" . $cf->id } = $args{$tag}; - - } - } - - $self->GetDeferred( \%args, $template_id, $links, $postponed ); - - return $TicketObj, \%ticketargs; -} - - -=head2 _ParseXSVTemplate - -Parses a tab or comma delimited template. Should only ever be called by Parse - -=cut - -sub _ParseXSVTemplate { - my $self = shift; - my %args = (@_); - - use Regexp::Common qw(delimited); - my($first, $content) = split(/\r?\n/, $args{'Content'}, 2); - - my $delimiter; - if ( $first =~ /\t/ ) { - $delimiter = "\t"; - } else { - $delimiter = ','; - } - my @fields = split( /$delimiter/, $first ); - - my $delimiter_re = qr[$delimiter]; - my $justquoted = qr[$RE{quoted}]; - - # Used to generate automatic template ids - my $autoid = 1; - - LINE: - while ($content) { - $content =~ s/^(\s*\r?\n)+//; - - # Keep track of Queue and Requestor, so we can provide defaults - my $queue; - my $requestor; - - # The template for this line - my $template; - - # What column we're on - my $i = 0; - - # If the last iteration was the end of the line - my $EOL = 0; - - # The template id - my $template_id; - - COLUMN: - while (not $EOL and length $content and $content =~ s/^($justquoted|.*?)($delimiter_re|$)//smix) { - $EOL = not $2; - - # Strip off quotes, if they exist - my $value = $1; - if ( $value =~ /^$RE{delimited}{-delim=>qq{\'\"}}$/ ) { - substr( $value, 0, 1 ) = ""; - substr( $value, -1, 1 ) = ""; - } - - # What column is this? - my $field = $fields[$i++]; - next COLUMN unless $field =~ /\S/; - $field =~ s/^\s//; - $field =~ s/\s$//; - - if ( $field =~ /^id$/i ) { - # Special case if this is the ID column - if ( $value =~ /^\d+$/ ) { - $template_id = 'update-' . $value; - push @{ $self->{'update_tickets'} }, $template_id; - } elsif ( $value =~ /^#base-(\d+)$/ ) { - $template_id = 'base-' . $1; - push @{ $self->{'base_tickets'} }, $template_id; - } elsif ( $value =~ /\S/ ) { - $template_id = 'create-' . $value; - push @{ $self->{'create_tickets'} }, $template_id; - } - } else { - # Some translations - if ( $field =~ /^Body$/i - || $field =~ /^Data$/i - || $field =~ /^Message$/i ) - { - $field = 'Content'; - } elsif ( $field =~ /^Summary$/i ) { - $field = 'Subject'; - } elsif ( $field =~ /^Queue$/i ) { - # Note that we found a queue - $queue = 1; - $value ||= $args{'Queue'}; - } elsif ( $field =~ /^Requestors?$/i ) { - $field = 'Requestor'; # Remove plural - # Note that we found a requestor - $requestor = 1; - $value ||= $args{'Requestor'}; - } - - # Tack onto the end of the template - $template .= $field . ": "; - $template .= (defined $value ? $value : ""); - $template .= "\n"; - $template .= "ENDOFCONTENT\n" - if $field =~ /^Content$/i; - } - } - - # Ignore blank lines - next unless $template; - - # If we didn't find a queue of requestor, tack on the defaults - if ( !$queue && $args{'Queue'} ) { - $template .= "Queue: $args{'Queue'}\n"; - } - if ( !$requestor && $args{'Requestor'} ) { - $template .= "Requestor: $args{'Requestor'}\n"; - } - - # If we never found an ID, come up with one - unless ($template_id) { - $autoid++ while exists $self->{'templates'}->{"create-auto-$autoid"}; - $template_id = "create-auto-$autoid"; - # Also, it's a ticket to create - push @{ $self->{'create_tickets'} }, $template_id; - } - - # Save the template we generated - $self->{'templates'}->{$template_id} = $template; - - } -} - -sub GetDeferred { - my $self = shift; - my $args = shift; - my $id = shift; - my $links = shift; - my $postponed = shift; - - # Deferred processing - push @$links, - ( - $id, - { DependsOn => $args->{'dependson'}, - DependedOnBy => $args->{'dependedonby'}, - RefersTo => $args->{'refersto'}, - ReferredToBy => $args->{'referredtoby'}, - Children => $args->{'children'}, - Parents => $args->{'parents'}, - } - ); - - push @$postponed, ( - - # Status is postponed so we don't violate dependencies - $id, { Status => $args->{'status'}, } - ); -} - -sub GetUpdateTemplate { - my $self = shift; - my $t = shift; - - my $string; - $string .= "Queue: " . $t->QueueObj->Name . "\n"; - $string .= "Subject: " . $t->Subject . "\n"; - $string .= "Status: " . $t->Status . "\n"; - $string .= "UpdateType: correspond\n"; - $string .= "Content: \n"; - $string .= "ENDOFCONTENT\n"; - $string .= "Due: " . $t->DueObj->AsString . "\n"; - $string .= "Starts: " . $t->StartsObj->AsString . "\n"; - $string .= "Started: " . $t->StartedObj->AsString . "\n"; - $string .= "Resolved: " . $t->ResolvedObj->AsString . "\n"; - $string .= "Owner: " . $t->OwnerObj->Name . "\n"; - $string .= "Requestor: " . $t->RequestorAddresses . "\n"; - $string .= "Cc: " . $t->CcAddresses . "\n"; - $string .= "AdminCc: " . $t->AdminCcAddresses . "\n"; - $string .= "TimeWorked: " . $t->TimeWorked . "\n"; - $string .= "TimeEstimated: " . $t->TimeEstimated . "\n"; - $string .= "TimeLeft: " . $t->TimeLeft . "\n"; - $string .= "InitialPriority: " . $t->Priority . "\n"; - $string .= "FinalPriority: " . $t->FinalPriority . "\n"; - - foreach my $type ( sort keys %LINKTYPEMAP ) { - - # don't display duplicates - if ( $type eq "HasMember" - || $type eq "Members" - || $type eq "MemberOf" ) - { - next; - } - $string .= "$type: "; - - my $mode = $LINKTYPEMAP{$type}->{Mode}; - my $method = $LINKTYPEMAP{$type}->{Type}; - - my $links; - while ( my $link = $t->$method->Next ) { - $links .= ", " if $links; - - my $object = $mode . "Obj"; - my $member = $link->$object; - $links .= $member->Id if $member; - } - $string .= $links; - $string .= "\n"; - } - - return $string; -} - -sub GetBaseTemplate { - my $self = shift; - my $t = shift; - - my $string; - $string .= "Queue: " . $t->Queue . "\n"; - $string .= "Subject: " . $t->Subject . "\n"; - $string .= "Status: " . $t->Status . "\n"; - $string .= "Due: " . $t->DueObj->Unix . "\n"; - $string .= "Starts: " . $t->StartsObj->Unix . "\n"; - $string .= "Started: " . $t->StartedObj->Unix . "\n"; - $string .= "Resolved: " . $t->ResolvedObj->Unix . "\n"; - $string .= "Owner: " . $t->Owner . "\n"; - $string .= "Requestor: " . $t->RequestorAddresses . "\n"; - $string .= "Cc: " . $t->CcAddresses . "\n"; - $string .= "AdminCc: " . $t->AdminCcAddresses . "\n"; - $string .= "TimeWorked: " . $t->TimeWorked . "\n"; - $string .= "TimeEstimated: " . $t->TimeEstimated . "\n"; - $string .= "TimeLeft: " . $t->TimeLeft . "\n"; - $string .= "InitialPriority: " . $t->Priority . "\n"; - $string .= "FinalPriority: " . $t->FinalPriority . "\n"; - - return $string; -} - -sub GetCreateTemplate { - my $self = shift; - - my $string; - - $string .= "Queue: General\n"; - $string .= "Subject: \n"; - $string .= "Status: new\n"; - $string .= "Content: \n"; - $string .= "ENDOFCONTENT\n"; - $string .= "Due: \n"; - $string .= "Starts: \n"; - $string .= "Started: \n"; - $string .= "Resolved: \n"; - $string .= "Owner: \n"; - $string .= "Requestor: \n"; - $string .= "Cc: \n"; - $string .= "AdminCc:\n"; - $string .= "TimeWorked: \n"; - $string .= "TimeEstimated: \n"; - $string .= "TimeLeft: \n"; - $string .= "InitialPriority: \n"; - $string .= "FinalPriority: \n"; - - foreach my $type ( keys %LINKTYPEMAP ) { - - # don't display duplicates - if ( $type eq "HasMember" - || $type eq 'Members' - || $type eq 'MemberOf' ) - { - next; - } - $string .= "$type: \n"; - } - return $string; -} - -sub UpdateWatchers { - my $self = shift; - my $ticket = shift; - my $args = shift; - - my @results; - - foreach my $type qw(Requestor Cc AdminCc) { - my $method = $type . 'Addresses'; - my $oldaddr = $ticket->$method; - - # Skip unless we have a defined field - next unless defined $args->{$type}; - my $newaddr = $args->{$type}; - - my @old = split( /,\s*/, $oldaddr ); - my @new; - for (ref $newaddr ? @{$newaddr} : split( /,\s*/, $newaddr )) { - # Sometimes these are email addresses, sometimes they're - # users. Try to guess which is which, as we want to deal - # with email addresses if at all possible. - if (/^\S+@\S+$/) { - push @new, $_; - } else { - # It doesn't look like an email address. Try to load it. - my $user = RT::User->new($self->CurrentUser); - $user->Load($_); - if ($user->Id) { - push @new, $user->EmailAddress; - } else { - push @new, $_; - } - } - } - - my %oldhash = map { $_ => 1 } @old; - my %newhash = map { $_ => 1 } @new; - - my @add = grep( !defined $oldhash{$_}, @new ); - my @delete = grep( !defined $newhash{$_}, @old ); - - foreach (@add) { - my ( $val, $msg ) = $ticket->AddWatcher( - Type => $type, - Email => $_ - ); - - push @results, - $ticket->loc( "Ticket [_1]", $ticket->Id ) . ': ' . $msg; - } - - foreach (@delete) { - my ( $val, $msg ) = $ticket->DeleteWatcher( - Type => $type, - Email => $_ - ); - push @results, - $ticket->loc( "Ticket [_1]", $ticket->Id ) . ': ' . $msg; - } - } - return @results; -} - -sub UpdateCustomFields { - my $self = shift; - my $ticket = shift; - my $args = shift; - - my @results; - foreach my $arg (keys %{$args}) { - next unless $arg =~ /^CustomField-(\d+)$/; - my $cf = $1; - - my $CustomFieldObj = RT::CustomField->new($self->CurrentUser); - $CustomFieldObj->LoadById($cf); - - my @values; - if ($CustomFieldObj->Type =~ /text/i) { # Both Text and Wikitext - @values = ($args->{$arg}); - } else { - @values = split /\n/, $args->{$arg}; - } - - if ( ($CustomFieldObj->Type eq 'Freeform' - && ! $CustomFieldObj->SingleValue) || - $CustomFieldObj->Type =~ /text/i) { - foreach my $val (@values) { - $val =~ s/\r//g; - } - } - - foreach my $value (@values) { - next unless length($value); - my ( $val, $msg ) = $ticket->AddCustomFieldValue( - Field => $cf, - Value => $value - ); - push ( @results, $msg ); - } - } - return @results; -} - -sub PostProcess { - my $self = shift; - my $links = shift; - my $postponed = shift; - - # postprocessing: add links - - while ( my $template_id = shift(@$links) ) { - my $ticket = $T::Tickets{$template_id}; - $RT::Logger->debug( "Handling links for " . $ticket->Id ); - my %args = %{ shift(@$links) }; - - foreach my $type ( keys %LINKTYPEMAP ) { - next unless ( defined $args{$type} ); - foreach my $link ( - ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) ) - { - next unless $link; - - if ( $link =~ /^TOP$/i ) { - $RT::Logger->debug( "Building $type link for $link: " - . $T::Tickets{TOP}->Id ); - $link = $T::Tickets{TOP}->Id; - - } elsif ( $link !~ m/^\d+$/ ) { - my $key = "create-$link"; - if ( !exists $T::Tickets{$key} ) { - $RT::Logger->debug( - "Skipping $type link for $key (non-existent)"); - next; - } - $RT::Logger->debug( "Building $type link for $link: " - . $T::Tickets{$key}->Id ); - $link = $T::Tickets{$key}->Id; - } else { - $RT::Logger->debug("Building $type link for $link"); - } - - my ( $wval, $wmsg ) = $ticket->AddLink( - Type => $LINKTYPEMAP{$type}->{'Type'}, - $LINKTYPEMAP{$type}->{'Mode'} => $link, - Silent => 1 - ); - - $RT::Logger->warning("AddLink thru $link failed: $wmsg") - unless $wval; - - # push @non_fatal_errors, $wmsg unless ($wval); - } - - } - } - - # postponed actions -- Status only, currently - while ( my $template_id = shift(@$postponed) ) { - my $ticket = $T::Tickets{$template_id}; - $RT::Logger->debug( "Handling postponed actions for " . $ticket->id ); - my %args = %{ shift(@$postponed) }; - $ticket->SetStatus( $args{Status} ) if defined $args{Status}; - } - -} - -eval "require RT::Action::CreateTickets_Vendor"; -die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/CreateTickets_Vendor.pm} ); -eval "require RT::Action::CreateTickets_Local"; -die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/CreateTickets_Local.pm} ); - -1; - diff --git a/rt/lib/RT/Action/EscalatePriority.pm b/rt/lib/RT/Action/EscalatePriority.pm deleted file mode 100644 index 1a62aab01..000000000 --- a/rt/lib/RT/Action/EscalatePriority.pm +++ /dev/null @@ -1,167 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Action::EscalatePriority - -=head1 DESCRIPTION - -EscalatePriority is a ScripAction which is NOT intended to be called -per transaction. It's intended to be called by an RT escalation tool. -One such tool is called rt-crontool and is located in $RTHOME/bin (see -C for more details) - -EsclatePriority uses the following formula to change a ticket's priority: - - Priority = Priority + (( FinalPriority - Priority ) / ( DueDate-Today)) - -Unless the duedate is past, in which case priority gets bumped straight -to final priority. - -In this way, priority is either increased or decreased toward the final priority -as the ticket heads toward its due date. - - -=cut - - -package RT::Action::EscalatePriority; -require RT::Action::Generic; - -use strict; -use vars qw/@ISA/; -@ISA=qw(RT::Action::Generic); - -#Do what we need to do and send it out. - -#What does this type of Action does - -# {{{ sub Describe -sub Describe { - my $self = shift; - return (ref $self . " will move a ticket's priority toward its final priority."); -} -# }}} - - -# {{{ sub Prepare -sub Prepare { - my $self = shift; - - if ($self->TicketObj->Priority() == $self->TicketObj->FinalPriority()) { - # no update necessary. - return 0; - } - - #compute the number of days until the ticket is due - my $due = $self->TicketObj->DueObj(); - - - # If we don't have a due date, adjust the priority by one - # until we hit the final priority - if ($due->Unix() < 1) { - if ( $self->TicketObj->Priority > $self->TicketObj->FinalPriority ){ - $self->{'prio'} = ($self->TicketObj->Priority - 1); - return 1; - } - elsif ( $self->TicketObj->Priority < $self->TicketObj->FinalPriority ){ - $self->{'prio'} = ($self->TicketObj->Priority + 1); - return 1; - } - # otherwise the priority is at the final priority. we don't need to - # Continue - else { - return 0; - } - } - - # we've got a due date. now there are other things we should do - else { - my $diff_in_seconds = $due->Diff(time()); - my $diff_in_days = int( $diff_in_seconds / 86400); - - #if we haven't hit the due date yet - if ($diff_in_days > 0 ) { - - # compute the difference between the current priority and the - # final priority - - my $prio_delta = - $self->TicketObj->FinalPriority() - $self->TicketObj->Priority; - - my $inc_priority_by = int( $prio_delta / $diff_in_days ); - - #set the ticket's priority to that amount - $self->{'prio'} = $self->TicketObj->Priority + $inc_priority_by; - - } - #if $days is less than 1, set priority to final_priority - else { - $self->{'prio'} = $self->TicketObj->FinalPriority(); - } - - } - return 1; -} -# }}} - -sub Commit { - my $self = shift; - my ($val, $msg) = $self->TicketObj->SetPriority($self->{'prio'}); - - unless ($val) { - $RT::Logger->debug($self . " $msg\n"); - } -} - -eval "require RT::Action::EscalatePriority_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/EscalatePriority_Vendor.pm}); -eval "require RT::Action::EscalatePriority_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/EscalatePriority_Local.pm}); - -1; diff --git a/rt/lib/RT/Action/Generic.pm b/rt/lib/RT/Action/Generic.pm deleted file mode 100755 index 007d299c7..000000000 --- a/rt/lib/RT/Action/Generic.pm +++ /dev/null @@ -1,195 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -=head1 NAME - - RT::Action::Generic - a generic baseclass for RT Actions - -=head1 SYNOPSIS - - use RT::Action::Generic; - -=head1 DESCRIPTION - -=head1 METHODS - -=begin testing - -ok (require RT::Action::Generic); - -=end testing - -=cut - -package RT::Action::Generic; - -use strict; - -# {{{ sub new -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); - $self->_Init(@_); - return $self; -} -# }}} - -# {{{ sub new -sub loc { - my $self = shift; - return $self->{'ScripObj'}->loc(@_); -} -# }}} - -# {{{ sub _Init -sub _Init { - my $self = shift; - my %args = ( TransactionObj => undef, - TicketObj => undef, - ScripObj => undef, - TemplateObj => undef, - Argument => undef, - Type => undef, - @_ ); - - - $self->{'Argument'} = $args{'Argument'}; - $self->{'ScripObj'} = $args{'ScripObj'}; - $self->{'TicketObj'} = $args{'TicketObj'}; - $self->{'TransactionObj'} = $args{'TransactionObj'}; - $self->{'TemplateObj'} = $args{'TemplateObj'}; - $self->{'Type'} = $args{'Type'}; -} -# }}} - -# Access Scripwide data - -# {{{ sub Argument -sub Argument { - my $self = shift; - return($self->{'Argument'}); -} -# }}} - -# {{{ sub TicketObj -sub TicketObj { - my $self = shift; - return($self->{'TicketObj'}); -} -# }}} - -# {{{ sub TransactionObj -sub TransactionObj { - my $self = shift; - return($self->{'TransactionObj'}); -} -# }}} - -# {{{ sub TemplateObj -sub TemplateObj { - my $self = shift; - return($self->{'TemplateObj'}); -} -# }}} - -# {{{ sub ScripObj -sub ScripObj { - my $self = shift; - return($self->{'ScripObj'}); -} -# }}} - -# {{{ sub Type -sub Type { - my $self = shift; - return($self->{'Type'}); -} -# }}} - - -# Scrip methods - -#Do what we need to do and send it out. - -# {{{ sub Commit -sub Commit { - my $self = shift; - return(0, $self->loc("Commit Stubbed")); -} -# }}} - - -#What does this type of Action does - -# {{{ sub Describe -sub Describe { - my $self = shift; - return $self->loc("No description for [_1]", ref $self); -} -# }}} - - -#Parse the templates, get things ready to go. - -# {{{ sub Prepare -sub Prepare { - my $self = shift; - return (0, $self->loc("Prepare Stubbed")); -} -# }}} - - -#If this rule applies to this transaction, return true. - -# {{{ sub IsApplicable -sub IsApplicable { - my $self = shift; - return(undef); -} -# }}} - -# {{{ sub DESTROY -sub DESTROY { - my $self = shift; - - # We need to clean up all the references that might maybe get - # oddly circular - $self->{'TemplateObj'} =undef - $self->{'TicketObj'} = undef; - $self->{'TransactionObj'} = undef; - $self->{'ScripObj'} = undef; - - - -} - -# }}} - -eval "require RT::Action::Generic_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Generic_Vendor.pm}); -eval "require RT::Action::Generic_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Generic_Local.pm}); - -1; diff --git a/rt/lib/RT/Action/Notify.pm b/rt/lib/RT/Action/Notify.pm deleted file mode 100755 index 1e4e4c073..000000000 --- a/rt/lib/RT/Action/Notify.pm +++ /dev/null @@ -1,132 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -package RT::Action::Notify; -require RT::Action::SendEmail; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Action::SendEmail); - -# {{{ sub SetRecipients - -=head2 SetRecipients - -Sets the recipients of this meesage to Owner, Requestor, AdminCc, Cc or All. -Explicitly B notify the creator of the transaction by default - -=cut - -sub SetRecipients { - my $self = shift; - - my $arg = $self->Argument; - - $arg =~ s/\bAll\b/Owner,Requestor,AdminCc,Cc/; - - my ( @To, @PseudoTo, @Cc, @Bcc ); - - - if ($arg =~ /\bOtherRecipients\b/) { - if ($self->TransactionObj->Attachments->First) { - push (@Cc, $self->TransactionObj->Attachments->First->GetHeader('RT-Send-Cc')); - push (@Bcc, $self->TransactionObj->Attachments->First->GetHeader('RT-Send-Bcc')); - } - } - - if ( $arg =~ /\bRequestor\b/ ) { - push ( @To, $self->TicketObj->Requestors->MemberEmailAddresses ); - } - - - - if ( $arg =~ /\bCc\b/ ) { - - #If we have a To, make the Ccs, Ccs, otherwise, promote them to To - if (@To) { - push ( @Cc, $self->TicketObj->Cc->MemberEmailAddresses ); - push ( @Cc, $self->TicketObj->QueueObj->Cc->MemberEmailAddresses ); - } - else { - push ( @Cc, $self->TicketObj->Cc->MemberEmailAddresses ); - push ( @To, $self->TicketObj->QueueObj->Cc->MemberEmailAddresses ); - } - } - - if ( ( $arg =~ /\bOwner\b/ ) - && ( $self->TicketObj->OwnerObj->id != $RT::Nobody->id ) ) - { - - # If we're not sending to Ccs or requestors, - # then the Owner can be the To. - if (@To) { - push ( @Bcc, $self->TicketObj->OwnerObj->EmailAddress ); - } - else { - push ( @To, $self->TicketObj->OwnerObj->EmailAddress ); - } - - } - - if ( $arg =~ /\bAdminCc\b/ ) { - push ( @Bcc, $self->TicketObj->AdminCc->MemberEmailAddresses ); - push ( @Bcc, $self->TicketObj->QueueObj->AdminCc->MemberEmailAddresses ); - } - - if ($RT::UseFriendlyToLine) { - unless (@To) { - push ( - @PseudoTo, - sprintf($RT::FriendlyToLineFormat, $arg, $self->TicketObj->id), - ); - } - } - - my $creator = $self->TransactionObj->CreatorObj->EmailAddress(); - - #Strip the sender out of the To, Cc and AdminCc and set the - # recipients fields used to build the message by the superclass. - # unless a flag is set - if ($RT::NotifyActor) { - @{ $self->{'To'} } = @To; - @{ $self->{'Cc'} } = @Cc; - @{ $self->{'Bcc'} } = @Bcc; - } - else { - @{ $self->{'To'} } = grep ( !/^$creator$/, @To ); - @{ $self->{'Cc'} } = grep ( !/^$creator$/, @Cc ); - @{ $self->{'Bcc'} } = grep ( !/^$creator$/, @Bcc ); - } - @{ $self->{'PseudoTo'} } = @PseudoTo; - return (1); - -} - -# }}} - -eval "require RT::Action::Notify_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Notify_Vendor.pm}); -eval "require RT::Action::Notify_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/Notify_Local.pm}); - -1; diff --git a/rt/lib/RT/Action/NotifyAsComment.pm b/rt/lib/RT/Action/NotifyAsComment.pm deleted file mode 100755 index 210e4ab15..000000000 --- a/rt/lib/RT/Action/NotifyAsComment.pm +++ /dev/null @@ -1,55 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -package RT::Action::NotifyAsComment; -require RT::Action::Notify; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Action::Notify); - - -=head2 SetReturnAddress - -Tell SendEmail that this message should come out as a comment. -Calls SUPER::SetReturnAddress. - -=cut - -sub SetReturnAddress { - my $self = shift; - - # Tell RT::Action::SendEmail that this should come - # from the relevant comment email address. - $self->{'comment'} = 1; - - return($self->SUPER::SetReturnAddress(is_comment => 1)); -} - -eval "require RT::Action::NotifyAsComment_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/NotifyAsComment_Vendor.pm}); -eval "require RT::Action::NotifyAsComment_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/NotifyAsComment_Local.pm}); - -1; - diff --git a/rt/lib/RT/Action/RecordComment.pm b/rt/lib/RT/Action/RecordComment.pm deleted file mode 100644 index 285b33f04..000000000 --- a/rt/lib/RT/Action/RecordComment.pm +++ /dev/null @@ -1,120 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Action::RecordComment; -require RT::Action::Generic; -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Action::Generic); - -=head1 NAME - -RT::Action::RecordComment - An Action which can be used from an -external tool, or in any situation where a ticket transaction has not -been started, to make a comment on the ticket. - -=head1 SYNOPSIS - -my $action_obj = RT::Action::RecordComment->new('TicketObj' => $ticket_obj, - 'TemplateObj' => $template_obj, - ); -my $result = $action_obj->Prepare(); -$action_obj->Commit() if $result; - -=head1 METHODS - -=head2 Prepare - -Check for the existence of a Transaction. If a Transaction already -exists, and is of type "Comment" or "Correspond", abort because that -will give us a loop. - -=cut - - -sub Prepare { - my $self = shift; - if (defined $self->{'TransactionObj'} && - $self->{'TransactionObj'}->Type =~ /^(Comment|Correspond)$/) { - return undef; - } - return 1; -} - -=head2 Commit - -Create a Transaction by calling the ticket's Comment method on our -parsed Template, which may have an RT-Send-Cc or RT-Send-Bcc header. -The Transaction will be of type Comment. This Transaction can then be -used by the scrips that actually send the email. - -=cut - -sub Commit { - my $self = shift; - $self->CreateTransaction(); -} - -sub CreateTransaction { - my $self = shift; - - my ($result, $msg) = $self->{'TemplateObj'}->Parse( - TicketObj => $self->{'TicketObj'}); - return undef unless $result; - - my ($trans, $desc, $transaction) = $self->{'TicketObj'}->Comment( - MIMEObj => $self->TemplateObj->MIMEObj); - $self->{'TransactionObj'} = $transaction; -} - - -eval "require RT::Action::RecordComment_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/RecordComment_Vendor.pm}); -eval "require RT::Action::RecordComment_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/RecordComment_Local.pm}); - -1; diff --git a/rt/lib/RT/Action/RecordCorrespondence.pm b/rt/lib/RT/Action/RecordCorrespondence.pm deleted file mode 100644 index c01c89ac5..000000000 --- a/rt/lib/RT/Action/RecordCorrespondence.pm +++ /dev/null @@ -1,121 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Action::RecordCorrespondence; -require RT::Action::Generic; -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Action::Generic); - -=head1 NAME - -RT::Action::RecordCorrespondence - An Action which can be used from an -external tool, or in any situation where a ticket transaction has not -been started, to make a comment on the ticket. - -=head1 SYNOPSIS - -my $action_obj = RT::Action::RecordCorrespondence->new( - 'TicketObj' => $ticket_obj, - 'TemplateObj' => $template_obj, - ); -my $result = $action_obj->Prepare(); -$action_obj->Commit() if $result; - -=head1 METHODS - -=head2 Prepare - -Check for the existence of a Transaction. If a Transaction already -exists, and is of type "Comment" or "Correspond", abort because that -will give us a loop. - -=cut - - -sub Prepare { - my $self = shift; - if (defined $self->{'TransactionObj'} && - $self->{'TransactionObj'}->Type =~ /^(Comment|Correspond)$/) { - return undef; - } - return 1; -} - -=head2 Commit - -Create a Transaction by calling the ticket's Correspond method on our -parsed Template, which may have an RT-Send-Cc or RT-Send-Bcc header. -The Transaction will be of type Correspond. This Transaction can then -be used by the scrips that actually send the email. - -=cut - -sub Commit { - my $self = shift; - $self->CreateTransaction(); -} - -sub CreateTransaction { - my $self = shift; - - my ($result, $msg) = $self->{'TemplateObj'}->Parse( - TicketObj => $self->{'TicketObj'}); - return undef unless $result; - - my ($trans, $desc, $transaction) = $self->{'TicketObj'}->Correspond( - MIMEObj => $self->TemplateObj->MIMEObj); - $self->{'TransactionObj'} = $transaction; -} - - -eval "require RT::Action::RecordCorrespondence_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/RecordCorrespondence_Vendor.pm}); -eval "require RT::Action::RecordCorrespondence_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/RecordCorrespondence_Local.pm}); - -1; diff --git a/rt/lib/RT/Action/ResolveMembers.pm b/rt/lib/RT/Action/ResolveMembers.pm deleted file mode 100644 index 02ff3a58c..000000000 --- a/rt/lib/RT/Action/ResolveMembers.pm +++ /dev/null @@ -1,88 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# This Action will resolve all members of a resolved group ticket - -package RT::Action::ResolveMembers; -require RT::Action::Generic; -require RT::Links; - -use strict; -use vars qw/@ISA/; -@ISA=qw(RT::Action::Generic); - -#Do what we need to do and send it out. - -#What does this type of Action does - -# {{{ sub Describe -sub Describe { - my $self = shift; - return $self->loc("[_1] will resolve all members of a resolved group ticket.", ref $self); -} -# }}} - - -# {{{ sub Prepare -sub Prepare { - # nothing to prepare - return 1; -} -# }}} - -sub Commit { - my $self = shift; - - my $Links=RT::Links->new($RT::SystemUser); - $Links->Limit(FIELD => 'Type', VALUE => 'MemberOf'); - $Links->Limit(FIELD => 'Target', VALUE => $self->TicketObj->id); - - while (my $Link=$Links->Next()) { - # Todo: Try to deal with remote URIs as well - next unless $Link->BaseURI->IsLocal; - my $base=RT::Ticket->new($self->TicketObj->CurrentUser); - # Todo: Only work if Base is a plain ticket num: - $base->Load($Link->Base); - # I'm afraid this might be a major bottleneck if ResolveGroupTicket is on. - $base->Resolve; - } -} - - -# Applicability checked in Commit. - -# {{{ sub IsApplicable -sub IsApplicable { - my $self = shift; - 1; - return 1; -} -# }}} - -eval "require RT::Action::ResolveMembers_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/ResolveMembers_Vendor.pm}); -eval "require RT::Action::ResolveMembers_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/ResolveMembers_Local.pm}); - -1; - diff --git a/rt/lib/RT/Action/SendEmail.pm b/rt/lib/RT/Action/SendEmail.pm deleted file mode 100755 index dac8fc8e7..000000000 --- a/rt/lib/RT/Action/SendEmail.pm +++ /dev/null @@ -1,685 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Portions Copyright 2000 Tobias Brox - -package RT::Action::SendEmail; -require RT::Action::Generic; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Action::Generic); - -use MIME::Words qw(encode_mimeword); - -use RT::EmailParser; - -=head1 NAME - -RT::Action::SendEmail - An Action which users can use to send mail -or can subclassed for more specialized mail sending behavior. -RT::Action::AutoReply is a good example subclass. - -=head1 SYNOPSIS - - require RT::Action::SendEmail; - @ISA = qw(RT::Action::SendEmail); - - -=head1 DESCRIPTION - -Basically, you create another module RT::Action::YourAction which ISA -RT::Action::SendEmail. - -If you want to set the recipients of the mail to something other than -the addresses mentioned in the To, Cc, Bcc and headers in -the template, you should subclass RT::Action::SendEmail and override -either the SetRecipients method or the SetTo, SetCc, etc methods (see -the comments for the SetRecipients sub). - - -=begin testing - -ok (require RT::Action::SendEmail); - -=end testing - - -=head1 AUTHOR - -Jesse Vincent and Tobias Brox - -=head1 SEE ALSO - -perl(1). - -=cut - -# {{{ Scrip methods (_Init, Commit, Prepare, IsApplicable) - -# {{{ sub _Init -# We use _Init from RT::Action -# }}} - -# {{{ sub Commit -#Do what we need to do and send it out. -sub Commit { - my $self = shift; - - my $MIMEObj = $self->TemplateObj->MIMEObj; - my $msgid = $MIMEObj->head->get('Message-Id'); - chomp $msgid; - $RT::Logger->info($msgid." #".$self->TicketObj->id."/".$self->TransactionObj->id." - Scrip ". $self->ScripObj->id ." ".$self->ScripObj->Description); - #send the email - - # Weed out any RT addresses. We really don't want to talk to ourselves! - @{$self->{'To'}} = RT::EmailParser::CullRTAddresses("", @{$self->{'To'}}); - @{$self->{'Cc'}} = RT::EmailParser::CullRTAddresses("", @{$self->{'Cc'}}); - @{$self->{'Bcc'}} = RT::EmailParser::CullRTAddresses("", @{$self->{'Bcc'}}); - # If there are no recipients, don't try to send the message. - # If the transaction has content and has the header RT-Squelch-Replies-To - - if ( defined $self->TransactionObj->Attachments->First() ) { - - my $squelch = $self->TransactionObj->Attachments->First->GetHeader( 'RT-Squelch-Replies-To'); - - if ($squelch) { - my @blacklist = split ( /,/, $squelch ); - - # Cycle through the people we're sending to and pull out anyone on the - # system blacklist - - foreach my $person_to_yank (@blacklist) { - $person_to_yank =~ s/\s//g; - @{ $self->{'To'} } = - grep ( !/^$person_to_yank$/, @{ $self->{'To'} } ); - @{ $self->{'Cc'} } = - grep ( !/^$person_to_yank$/, @{ $self->{'Cc'} } ); - @{ $self->{'Bcc'} } = - grep ( !/^$person_to_yank$/, @{ $self->{'Bcc'} } ); - } - } - } - - # Go add all the Tos, Ccs and Bccs that we need to to the message to - # make it happy, but only if we actually have values in those arrays. - - $self->SetHeader( 'To', join ( ',', @{ $self->{'To'} } ) ) - if ( $self->{'To'} && @{ $self->{'To'} } ); - $self->SetHeader( 'Cc', join ( ',', @{ $self->{'Cc'} } ) ) - if ( $self->{'Cc'} && @{ $self->{'Cc'} } ); - $self->SetHeader( 'Bcc', join ( ',', @{ $self->{'Bcc'} } ) ) - if ( $self->{'Cc'} && @{ $self->{'Bcc'} } ); - - - $self->SetHeader('MIME-Version', '1.0'); - - # try to convert message body from utf-8 to $RT::EmailOutputEncoding - $self->SetHeader( 'Content-Type', 'text/plain; charset="utf-8"' ); - - RT::I18N::SetMIMEEntityToEncoding( $MIMEObj, $RT::EmailOutputEncoding, 'mime_words_ok' ); - $self->SetHeader( 'Content-Type', 'text/plain; charset="' . $RT::EmailOutputEncoding . '"' ); - - - # Build up a MIME::Entity that looks like the original message. - - my $do_attach = $self->TemplateObj->MIMEObj->head->get('RT-Attach-Message'); - - if ($do_attach) { - $self->TemplateObj->MIMEObj->head->delete('RT-Attach-Message'); - - my $attachments = RT::Attachments->new($RT::SystemUser); - $attachments->Limit( FIELD => 'TransactionId', - VALUE => $self->TransactionObj->Id ); - $attachments->OrderBy('id'); - - my $transaction_content_obj = $self->TransactionObj->ContentObj; - - # attach any of this transaction's attachments - while ( my $attach = $attachments->Next ) { - - # Don't attach anything blank - next unless ( $attach->ContentLength ); - - # We want to make sure that we don't include the attachment that's being sued as the "Content" of this message" - next - if ( $transaction_content_obj - && $transaction_content_obj->Id == $attach->Id - && $transaction_content_obj->ContentType =~ qr{text/plain}i - ); - $MIMEObj->make_multipart('mixed'); - $MIMEObj->attach( Type => $attach->ContentType, - Charset => $attach->OriginalEncoding, - Data => $attach->OriginalContent, - Filename => $self->MIMEEncodeString( $attach->Filename, $RT::EmailOutputEncoding ), - Encoding => '-SUGGEST'); - } - - } - - - my $retval = $self->SendMessage($MIMEObj); - - - return ($retval); -} - -# }}} - -# {{{ sub Prepare - -sub Prepare { - my $self = shift; - - # This actually populates the MIME::Entity fields in the Template Object - - unless ( $self->TemplateObj ) { - $RT::Logger->warning("No template object handed to $self\n"); - } - - unless ( $self->TransactionObj ) { - $RT::Logger->warning("No transaction object handed to $self\n"); - - } - - unless ( $self->TicketObj ) { - $RT::Logger->warning("No ticket object handed to $self\n"); - - } - - my ( $result, $message ) = $self->TemplateObj->Parse( - Argument => $self->Argument, - TicketObj => $self->TicketObj, - TransactionObj => $self->TransactionObj - ); - if ($result) { - - # Header - $self->SetSubject(); - $self->SetSubjectToken(); - $self->SetRecipients(); - $self->SetReturnAddress(); - $self->SetRTSpecialHeaders(); - if ($RT::EmailOutputEncoding) { - - # l10n related header - $self->SetHeaderAsEncoding( 'Subject', $RT::EmailOutputEncoding ); - } - } - - return $result; - -} - -# }}} - -# }}} - -# {{{ SendMessage -=head2 SendMessage MIMEObj - -sends the message using RT's preferred API. -TODO: Break this out to a seperate module - -=cut - -sub SendMessage { - my $self = shift; - my $MIMEObj = shift; - - my $msgid = $MIMEObj->head->get('Message-Id'); - - - #If we don't have any recipients to send to, don't send a message; - unless ( $MIMEObj->head->get('To') - || $MIMEObj->head->get('Cc') - || $MIMEObj->head->get('Bcc') ) { - $RT::Logger->info($msgid. " No recipients found. Not sending.\n"); - return (1); - } - - # PseudoTo (fake to headers) shouldn't get matched for message recipients. - # If we don't have any 'To' header, drop in the pseudo-to header. - - $self->SetHeader( 'To', join ( ',', @{ $self->{'PseudoTo'} } ) ) - if ( $self->{'PseudoTo'} && ( @{ $self->{'PseudoTo'} } ) - and ( !$MIMEObj->head->get('To') ) ); - if ( $RT::MailCommand eq 'sendmailpipe' ) { - eval { - open( MAIL, "|$RT::SendmailPath $RT::SendmailArguments" ); - print MAIL $MIMEObj->as_string; - close(MAIL); - }; - if ($@) { - $RT::Logger->crit($msgid. "Could not send mail. -".$@ ); - } - } - else { - my @mailer_args = ($RT::MailCommand); - local $ENV{MAILADDRESS}; - - if ( $RT::MailCommand eq 'sendmail' ) { - push @mailer_args, $RT::SendmailArguments; - } - elsif ( $RT::MailCommand eq 'smtp' ) { - $ENV{MAILADDRESS} = $RT::SMTPFrom || $MIMEObj->head->get('From'); - push @mailer_args, (Server => $RT::SMTPServer); - push @mailer_args, (Debug => $RT::SMTPDebug); - } - else { - push @mailer_args, $RT::MailParams; - } - - unless ( $MIMEObj->send( @mailer_args ) ) { - $RT::Logger->crit($msgid. "Could not send mail." ); - return (0); - } - } - - - my $success = ($msgid. " sent To: ".$MIMEObj->head->get('To') . " Cc: ".$MIMEObj->head->get('Cc') . " Bcc: ".$MIMEObj->head->get('Bcc')); - $success =~ s/\n//gi; - $RT::Logger->info($success); - - return (1); -} - -# }}} - -# {{{ Deal with message headers (Set* subs, designed for easy overriding) - -# {{{ sub SetRTSpecialHeaders - -=head2 SetRTSpecialHeaders - -This routine adds all the random headers that RT wants in a mail message -that don't matter much to anybody else. - -=cut - -sub SetRTSpecialHeaders { - my $self = shift; - - $self->SetReferences(); - - $self->SetMessageID(); - - $self->SetPrecedence(); - - $self->SetHeader( 'X-RT-Loop-Prevention', $RT::rtname ); - $self->SetHeader( 'RT-Ticket', - $RT::rtname . " #" . $self->TicketObj->id() ); - $self->SetHeader( 'Managed-by', - "RT $RT::VERSION (http://www.bestpractical.com/rt/)" ); - - $self->SetHeader( 'RT-Originator', - $self->TransactionObj->CreatorObj->EmailAddress ); - return (); - -} - -# {{{ sub SetReferences - -=head2 SetReferences - - # This routine will set the References: and In-Reply-To headers, -# autopopulating it with all the correspondence on this ticket so -# far. This should make RT responses threadable. - -=cut - -sub SetReferences { - my $self = shift; - - # TODO: this one is broken. What is this email really a reply to? - # If it's a reply to an incoming message, we'll need to use the - # actual message-id from the appropriate Attachment object. For - # incoming mails, we would like to preserve the In-Reply-To and/or - # References. - - $self->SetHeader( 'In-Reply-To', - "TicketObj->id() . "\@" . $RT::rtname . ">" ); - - # TODO We should always add References headers for all message-ids - # of previous messages related to this ticket. -} - -# }}} - -# {{{ sub SetMessageID - -=head2 SetMessageID - -Without this one, threading won't work very nice in email agents. -Anyway, I'm not really sure it's that healthy if we need to send -several separate/different emails about the same transaction. - -=cut - -sub SetMessageID { - my $self = shift; - - # TODO this one might be sort of broken. If we have several scrips +++ - # sending several emails to several different persons, we need to - # pull out different message-ids. I'd suggest message ids like - # "rt-ticket#-transaction#-scrip#-receipient#" - - $self->SetHeader( 'Message-ID', - "TicketObj->id() . "-" - . $self->TransactionObj->id() . "." - . rand(20) . "\@" - . $RT::Organization . ">" ) - unless $self->TemplateObj->MIMEObj->head->get('Message-ID'); -} - -# }}} - -# }}} - -# {{{ sub SetReturnAddress - -=head2 SetReturnAddress is_comment => BOOLEAN - -Calculate and set From and Reply-To headers based on the is_comment flag. - -=cut - -sub SetReturnAddress { - - my $self = shift; - my %args = ( is_comment => 0, - @_ ); - - # From and Reply-To - # $args{is_comment} should be set if the comment address is to be used. - my $replyto; - - if ( $args{'is_comment'} ) { - $replyto = $self->TicketObj->QueueObj->CommentAddress - || $RT::CommentAddress; - } - else { - $replyto = $self->TicketObj->QueueObj->CorrespondAddress - || $RT::CorrespondAddress; - } - - unless ( $self->TemplateObj->MIMEObj->head->get('From') ) { - if ($RT::UseFriendlyFromLine) { - my $friendly_name = $self->TransactionObj->CreatorObj->RealName; - if ( $friendly_name =~ /^"(.*)"$/ ) { # a quoted string - $friendly_name = $1; - } - - $friendly_name =~ s/"/\\"/g; - $self->SetHeader( 'From', - sprintf($RT::FriendlyFromLineFormat, - $self->MIMEEncodeString( $friendly_name, $RT::EmailOutputEncoding ), $replyto), - ); - } - else { - $self->SetHeader( 'From', $replyto ); - } - } - - unless ( $self->TemplateObj->MIMEObj->head->get('Reply-To') ) { - $self->SetHeader( 'Reply-To', "$replyto" ); - } - -} - -# }}} - -# {{{ sub SetHeader - -=head2 SetHeader FIELD, VALUE - -Set the FIELD of the current MIME object into VALUE. - -=cut - -sub SetHeader { - my $self = shift; - my $field = shift; - my $val = shift; - - chomp $val; - chomp $field; - $self->TemplateObj->MIMEObj->head->fold_length( $field, 10000 ); - $self->TemplateObj->MIMEObj->head->replace( $field, $val ); - return $self->TemplateObj->MIMEObj->head->get($field); -} - -# }}} - -# {{{ sub SetRecipients - -=head2 SetRecipients - -Dummy method to be overriden by subclasses which want to set the recipients. - -=cut - -sub SetRecipients { - my $self = shift; - return (); -} - -# }}} - -# {{{ sub SetTo - -=head2 SetTo - -Takes a string that is the addresses you want to send mail to - -=cut - -sub SetTo { - my $self = shift; - my $addresses = shift; - return $self->SetHeader( 'To', $addresses ); -} - -# }}} - -# {{{ sub SetCc - -=head2 SetCc - -Takes a string that is the addresses you want to Cc - -=cut - -sub SetCc { - my $self = shift; - my $addresses = shift; - - return $self->SetHeader( 'Cc', $addresses ); -} - -# }}} - -# {{{ sub SetBcc - -=head2 SetBcc - -Takes a string that is the addresses you want to Bcc - -=cut - -sub SetBcc { - my $self = shift; - my $addresses = shift; - - return $self->SetHeader( 'Bcc', $addresses ); -} - -# }}} - -# {{{ sub SetPrecedence - -sub SetPrecedence { - my $self = shift; - - unless ( $self->TemplateObj->MIMEObj->head->get("Precedence") ) { - $self->SetHeader( 'Precedence', "bulk" ); - } -} - -# }}} - -# {{{ sub SetSubject - -=head2 SetSubject - -This routine sets the subject. it does not add the rt tag. that gets done elsewhere -If $self->{'Subject'} is already defined, it uses that. otherwise, it tries to get -the transaction's subject. - -=cut - -sub SetSubject { - my $self = shift; - my $subject; - - unless ( $self->TemplateObj->MIMEObj->head->get('Subject') ) { - my $message = $self->TransactionObj->Attachments; - my $ticket = $self->TicketObj->Id; - - if ( $self->{'Subject'} ) { - $subject = $self->{'Subject'}; - } - elsif ( ( $message->First() ) - && ( $message->First->Headers ) ) { - my $header = $message->First->Headers(); - $header =~ s/\n\s+/ /g; - if ( $header =~ /^Subject: (.*?)$/m ) { - $subject = $1; - } - else { - $subject = $self->TicketObj->Subject(); - } - - } - else { - $subject = $self->TicketObj->Subject(); - } - - $subject =~ s/(\r\n|\n|\s)/ /gi; - - chomp $subject; - $self->SetHeader( 'Subject', $subject ); - - } - return ($subject); -} - -# }}} - -# {{{ sub SetSubjectToken - -=head2 SetSubjectToken - -This routine fixes the RT tag in the subject. It's unlikely that you want to overwrite this. - -=cut - -sub SetSubjectToken { - my $self = shift; - my $tag = "[$RT::rtname #" . $self->TicketObj->id . "]"; - my $sub = $self->TemplateObj->MIMEObj->head->get('Subject'); - unless ( $sub =~ /\Q$tag\E/ ) { - $sub =~ s/(\r\n|\n|\s)/ /gi; - chomp $sub; - $self->TemplateObj->MIMEObj->head->replace( 'Subject', "$tag $sub" ); - } -} - -# }}} - -# }}} - -# {{{ - -=head2 SetHeaderAsEncoding($field_name, $charset_encoding) - -This routine converts the field into specified charset encoding. - -=cut - -sub SetHeaderAsEncoding { - my $self = shift; - my ( $field, $enc ) = ( shift, shift ); - - if ($field eq 'From' and $RT::SMTPFrom) { - $self->TemplateObj->MIMEObj->head->replace( $field, $RT::SMTPFrom ); - return; - } - - my $value = $self->TemplateObj->MIMEObj->head->get($field); - - # don't bother if it's us-ascii - - # See RT::I18N, 'NOTES: Why Encode::_utf8_off before Encode::from_to' - - $value = $self->MIMEEncodeString($value, $enc); - - $self->TemplateObj->MIMEObj->head->replace( $field, $value ); - - -} -# }}} - -# {{{ MIMENcodeString - -=head2 MIMEEncodeString STRING ENCODING - -Takes a string and a possible encoding and returns the string wrapped in MIME goo. - -=cut - -sub MIMEEncodeString { - my $self = shift; - my $value = shift; - my $enc = shift; - - chomp $value; - return ($value) unless $value =~ /[^\x20-\x7e]/; - - $value =~ s/\s*$//; - Encode::_utf8_off($value); - my $res = Encode::from_to( $value, "utf-8", $enc ); - $value = encode_mimeword( $value, 'B', $enc ); -} - -# }}} - -eval "require RT::Action::SendEmail_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/SendEmail_Vendor.pm}); -eval "require RT::Action::SendEmail_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/SendEmail_Local.pm}); - -1; - diff --git a/rt/lib/RT/Action/SetPriority.pm b/rt/lib/RT/Action/SetPriority.pm deleted file mode 100644 index 4d74cc032..000000000 --- a/rt/lib/RT/Action/SetPriority.pm +++ /dev/null @@ -1,85 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Action::SetPriority; -require RT::Action::Generic; - -use strict; -use vars qw/@ISA/; -@ISA=qw(RT::Action::Generic); - -#Do what we need to do and send it out. - -#What does this type of Action does - -# {{{ sub Describe -sub Describe { - my $self = shift; - return (ref $self . " will set a ticket's priority to the argument provided."); -} -# }}} - - -# {{{ sub Prepare -sub Prepare { - # nothing to prepare - return 1; -} -# }}} - -sub Commit { - my $self = shift; - $self->TicketObj->SetPriority($self->Argument); - -} - -eval "require RT::Action::SetPriority_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/SetPriority_Vendor.pm}); -eval "require RT::Action::SetPriority_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/SetPriority_Local.pm}); - -1; diff --git a/rt/lib/RT/Action/UserDefined.pm b/rt/lib/RT/Action/UserDefined.pm deleted file mode 100644 index 6aec928b8..000000000 --- a/rt/lib/RT/Action/UserDefined.pm +++ /dev/null @@ -1,95 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} - - -package RT::Action::UserDefined; -use RT::Action::Generic; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Action::Generic); - -=head2 Prepare - -This happens on every transaction. it's always applicable - -=cut - -sub Prepare { - my $self = shift; - my $retval = eval $self->ScripObj->CustomPrepareCode; - if ($@) { - $RT::Logger->error("Scrip ".$self->ScripObj->Id. " Prepare failed: ".$@); - return (undef); - } - return ($retval); -} - -=head2 Commit - -This happens on every transaction. it's always applicable - -=cut - -sub Commit { - my $self = shift; - my $retval = eval $self->ScripObj->CustomCommitCode; - if ($@) { - $RT::Logger->error("Scrip ".$self->ScripObj->Id. " Commit failed: ".$@); - return (undef); - } - return ($retval); -} - -eval "require RT::Action::UserDefined_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/UserDefined_Vendor.pm}); -eval "require RT::Action::UserDefined_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/UserDefined_Local.pm}); - -1; - diff --git a/rt/lib/RT/Attachment.pm b/rt/lib/RT/Attachment.pm deleted file mode 100755 index 2ed520162..000000000 --- a/rt/lib/RT/Attachment.pm +++ /dev/null @@ -1,372 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::Attachment - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::Attachment; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('Attachments'); - $self->SUPER::_Init(@_); -} - - - - - -=item Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - int(11) 'TransactionId'. - int(11) 'Parent'. - varchar(160) 'MessageId'. - varchar(255) 'Subject'. - varchar(255) 'Filename'. - varchar(80) 'ContentType'. - varchar(80) 'ContentEncoding'. - longtext 'Content'. - longtext 'Headers'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - TransactionId => '0', - Parent => '0', - MessageId => '', - Subject => '', - Filename => '', - ContentType => '', - ContentEncoding => '', - Content => '', - Headers => '', - - @_); - $self->SUPER::Create( - TransactionId => $args{'TransactionId'}, - Parent => $args{'Parent'}, - MessageId => $args{'MessageId'}, - Subject => $args{'Subject'}, - Filename => $args{'Filename'}, - ContentType => $args{'ContentType'}, - ContentEncoding => $args{'ContentEncoding'}, - Content => $args{'Content'}, - Headers => $args{'Headers'}, -); - -} - - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item TransactionId - -Returns the current value of TransactionId. -(In the database, TransactionId is stored as int(11).) - - - -=item SetTransactionId VALUE - - -Set TransactionId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, TransactionId will be stored as a int(11).) - - -=cut - - -=item Parent - -Returns the current value of Parent. -(In the database, Parent is stored as int(11).) - - - -=item SetParent VALUE - - -Set Parent to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Parent will be stored as a int(11).) - - -=cut - - -=item MessageId - -Returns the current value of MessageId. -(In the database, MessageId is stored as varchar(160).) - - - -=item SetMessageId VALUE - - -Set MessageId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, MessageId will be stored as a varchar(160).) - - -=cut - - -=item Subject - -Returns the current value of Subject. -(In the database, Subject is stored as varchar(255).) - - - -=item SetSubject VALUE - - -Set Subject to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Subject will be stored as a varchar(255).) - - -=cut - - -=item Filename - -Returns the current value of Filename. -(In the database, Filename is stored as varchar(255).) - - - -=item SetFilename VALUE - - -Set Filename to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Filename will be stored as a varchar(255).) - - -=cut - - -=item ContentType - -Returns the current value of ContentType. -(In the database, ContentType is stored as varchar(80).) - - - -=item SetContentType VALUE - - -Set ContentType to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ContentType will be stored as a varchar(80).) - - -=cut - - -=item ContentEncoding - -Returns the current value of ContentEncoding. -(In the database, ContentEncoding is stored as varchar(80).) - - - -=item SetContentEncoding VALUE - - -Set ContentEncoding to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ContentEncoding will be stored as a varchar(80).) - - -=cut - - -=item Content - -Returns the current value of Content. -(In the database, Content is stored as longtext.) - - - -=item SetContent VALUE - - -Set Content to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Content will be stored as a longtext.) - - -=cut - - -=item Headers - -Returns the current value of Headers. -(In the database, Headers is stored as longtext.) - - - -=item SetHeaders VALUE - - -Set Headers to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Headers will be stored as a longtext.) - - -=cut - - -=item Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=item Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - - -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - TransactionId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - Parent => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - MessageId => - {read => 1, write => 1, type => 'varchar(160)', default => ''}, - Subject => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - Filename => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - ContentType => - {read => 1, write => 1, type => 'varchar(80)', default => ''}, - ContentEncoding => - {read => 1, write => 1, type => 'varchar(80)', default => ''}, - Content => - {read => 1, write => 1, type => 'longtext', default => ''}, - Headers => - {read => 1, write => 1, type => 'longtext', default => ''}, - Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, - - } -}; - - - eval "require RT::Attachment_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Attachment_Overlay.pm}) { - die $@; - }; - - eval "require RT::Attachment_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Attachment_Vendor.pm}) { - die $@; - }; - - eval "require RT::Attachment_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Attachment_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Attachment_Overlay, RT::Attachment_Vendor, RT::Attachment_Local - -=cut - - -1; diff --git a/rt/lib/RT/Attachment_Overlay.pm b/rt/lib/RT/Attachment_Overlay.pm deleted file mode 100644 index c4fe47b61..000000000 --- a/rt/lib/RT/Attachment_Overlay.pm +++ /dev/null @@ -1,618 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 SYNOPSIS - - use RT::Attachment; - - -=head1 DESCRIPTION - -This module should never be instantiated directly by client code. it's an internal -module which should only be instantiated through exported APIs in Ticket, Queue and other -similar objects. - - -=head1 METHODS - - -=begin testing - -ok (require RT::Attachment); - -=end testing - -=cut - - -package RT::Attachment; - -use strict; -no warnings qw(redefine); - -use MIME::Base64; -use MIME::QuotedPrint; - - -# {{{ sub _OverlayAccessible -sub _OverlayAccessible { - { - TransactionId => { 'read'=>1, 'public'=>1, 'write' => 0 }, - MessageId => { 'read'=>1, 'write' => 0 }, - Parent => { 'read'=>1, 'write' => 0 }, - ContentType => { 'read'=>1, 'write' => 0 }, - Subject => { 'read'=>1, 'write' => 0 }, - Content => { 'read'=>1, 'write' => 0 }, - ContentEncoding => { 'read'=>1, 'write' => 0 }, - Headers => { 'read'=>1, 'write' => 0 }, - Filename => { 'read'=>1, 'write' => 0 }, - Creator => { 'read'=>1, 'auto'=>1, }, - Created => { 'read'=>1, 'auto'=>1, }, - }; -} -# }}} - -# {{{ sub TransactionObj - -=head2 TransactionObj - -Returns the transaction object asscoiated with this attachment. - -=cut - -sub TransactionObj { - require RT::Transaction; - my $self=shift; - unless (exists $self->{_TransactionObj}) { - $self->{_TransactionObj}=RT::Transaction->new($self->CurrentUser); - $self->{_TransactionObj}->Load($self->TransactionId); - } - unless ($self->{_TransactionObj}->Id) { - $RT::Logger->crit("Attachment ".$self->id." can't find transaction ".$self->TransactionId." which it is ostensibly part of. That's bad"); - } - return $self->{_TransactionObj}; -} - -# }}} - -# {{{ sub Create - -=head2 Create - -Create a new attachment. Takes a paramhash: - - 'Attachment' Should be a single MIME body with optional subparts - 'Parent' is an optional id of the parent attachment - 'TransactionId' is the mandatory id of the transaction this attachment is associated with.; - -=cut - -sub Create { - my $self = shift; - my %args = ( id => 0, - TransactionId => 0, - Parent => 0, - Attachment => undef, - @_ ); - - #For ease of reference - my $Attachment = $args{'Attachment'}; - - #if we didn't specify a ticket, we need to bail - if ( $args{'TransactionId'} == 0 ) { - $RT::Logger->crit( "RT::Attachment->Create couldn't, as you didn't specify a transaction\n" ); - return (0); - - } - - #If we possibly can, collapse it to a singlepart - $Attachment->make_singlepart; - - #Get the subject - my $Subject = $Attachment->head->get( 'subject', 0 ); - defined($Subject) or $Subject = ''; - chomp($Subject); - - #Get the Message-ID - my $MessageId = $Attachment->head->get( 'Message-ID', 0 ); - defined($MessageId) or $MessageId = ''; - chomp ($MessageId); - $MessageId =~ s/^<(.*)>$/$1/go; - - - #Get the filename - my $Filename = $Attachment->head->recommended_filename; - - # If a message has no bodyhandle, that means that it has subparts (or appears to) - # and we should act accordingly. - unless ( defined $Attachment->bodyhandle ) { - - my $id = $self->SUPER::Create( - TransactionId => $args{'TransactionId'}, - Parent => 0, - ContentType => $Attachment->mime_type, - Headers => $Attachment->head->as_string, - MessageId => $MessageId, - Subject => $Subject - ); - - unless ($id) { - $RT::Logger->crit("Attachment insert failed - ".$RT::Handle->dbh->errstr); - } - - foreach my $part ( $Attachment->parts ) { - my $SubAttachment = new RT::Attachment( $self->CurrentUser ); - my ($id) = $SubAttachment->Create( - TransactionId => $args{'TransactionId'}, - Parent => $id, - Attachment => $part, - ); - unless ($id) { - $RT::Logger->crit("Attachment insert failed - ".$RT::Handle->dbh->errstr); - } - } - return ($id); - } - - #If it's not multipart - else { - - my ($ContentEncoding, $Body) = $self->_EncodeLOB( $Attachment->bodyhandle->as_string, - $Attachment->mime_type - ); - my $id = $self->SUPER::Create( - TransactionId => $args{'TransactionId'}, - ContentType => $Attachment->mime_type, - ContentEncoding => $ContentEncoding, - Parent => $args{'Parent'}, - Headers => $Attachment->head->as_string, - Subject => $Subject, - Content => $Body, - Filename => $Filename, - MessageId => $MessageId, - ); - unless ($id) { - $RT::Logger->crit("Attachment insert failed - ".$RT::Handle->dbh->errstr); - } - - return ($id); - } -} - -# }}} - - -=head2 Import - -Create an attachment exactly as specified in the named parameters. - -=cut - - -sub Import { - my $self = shift; - my %args = ( ContentEncoding => 'none', - - @_ ); - - - ($args{'ContentEncoding'}, $args{'Content'}) = $self->_EncodeLOB($args{'Content'}, $args{'MimeType'}); - - return($self->SUPER::Create(%args)); -} - -# {{{ sub Content - -=head2 Content - -Returns the attachment's content. if it's base64 encoded, decode it -before returning it. - -=cut - -sub Content { - my $self = shift; - $self->_DecodeLOB($self->ContentType, $self->ContentEncoding, $self->_Value('Content', decode_utf8 => 0)); -} - - -# }}} - - -# {{{ sub OriginalContent - -=head2 OriginalContent - -Returns the attachment's content as octets before RT's mangling. -Currently, this just means restoring text content back to its -original encoding. - -=cut - -sub OriginalContent { - my $self = shift; - - return $self->Content unless RT::I18N::IsTextualContentType($self->ContentType); - - my $enc = $self->OriginalEncoding; - - my $content; - if ( $self->ContentEncoding eq 'none' || ! $self->ContentEncoding ) { - $content = $self->_Value('Content', decode_utf8 => 0); - } elsif ( $self->ContentEncoding eq 'base64' ) { - $content = MIME::Base64::decode_base64($self->_Value('Content', decode_utf8 => 0)); - } elsif ( $self->ContentEncoding eq 'quoted-printable' ) { - $content = MIME::QuotedPrint::decode($self->_Value('Content', decode_utf8 => 0)); - } else { - return( $self->loc("Unknown ContentEncoding [_1]", $self->ContentEncoding)); - } - - # Turn *off* the SvUTF8 bits here so decode_utf8 and from_to below can work. - local $@; - Encode::_utf8_off($content); - - if (!$enc || $enc eq '' || $enc eq 'utf8' || $enc eq 'utf-8') { - # If we somehow fail to do the decode, at least push out the raw bits - eval {return( Encode::decode_utf8($content))} || return ($content); - } - - eval { Encode::from_to($content, 'utf8' => $enc) } if $enc; - if ($@) { - $RT::Logger->error("Could not convert attachment from assumed utf8 to '$enc' :".$@); - } - return $content; -} - -# }}} - - -# {{{ sub OriginalEncoding - -=head2 OriginalEncoding - -Returns the attachment's original encoding. - -=cut - -sub OriginalEncoding { - my $self = shift; - return $self->GetHeader('X-RT-Original-Encoding'); -} - -# }}} - -# {{{ sub Children - -=head2 Children - - Returns an RT::Attachments object which is preloaded with all Attachments objects with this Attachment\'s Id as their 'Parent' - -=cut - -sub Children { - my $self = shift; - - my $kids = new RT::Attachments($self->CurrentUser); - $kids->ChildrenOf($self->Id); - return($kids); -} - -# }}} - -# {{{ UTILITIES - -# {{{ sub Quote - - - -sub Quote { - my $self=shift; - my %args=(Reply=>undef, # Prefilled reply (i.e. from the KB/FAQ system) - @_); - - my ($quoted_content, $body, $headers); - my $max=0; - - # TODO: Handle Multipart/Mixed (eventually fix the link in the - # ShowHistory web template?) - if (RT::I18N::IsTextualContentType($self->ContentType)) { - $body=$self->Content; - - # Do we need any preformatting (wrapping, that is) of the message? - - # Remove quoted signature. - $body =~ s/\n-- \n(.*)$//s; - - # What's the longest line like? - foreach (split (/\n/,$body)) { - $max=length if ( length > $max); - } - - if ($max>76) { - require Text::Wrapper; - my $wrapper=new Text::Wrapper - ( - columns => 70, - body_start => ($max > 70*3 ? ' ' : ''), - par_start => '' - ); - $body=$wrapper->wrap($body); - } - - $body =~ s/^/> /gm; - - $body = '[' . $self->TransactionObj->CreatorObj->Name() . ' - ' . $self->TransactionObj->CreatedAsString() - . "]:\n\n" - . $body . "\n\n"; - - } else { - $body = "[Non-text message not quoted]\n\n"; - } - - $max=60 if $max<60; - $max=70 if $max>78; - $max+=2; - - return (\$body, $max); -} -# }}} - -# {{{ sub NiceHeaders - pulls out only the most relevant headers - -=head2 NiceHeaders - -Returns a multi-line string of the To, From, Cc, Date and Subject headers. - -=cut - -sub NiceHeaders { - my $self = shift; - my $hdrs = ""; - my @hdrs = $self->_SplitHeaders; - while (my $str = shift @hdrs) { - next unless $str =~ /^(To|From|RT-Send-Cc|Cc|Bcc|Date|Subject):/i; - $hdrs .= $str . "\n"; - $hdrs .= shift( @hdrs ) . "\n" while ($hdrs[0] =~ /^[ \t]+/); - } - return $hdrs; -} -# }}} - -# {{{ sub Headers - -=head2 Headers - -Returns this object's headers as a string. This method specifically -removes the RT-Send-Bcc: header, so as to never reveal to whom RT sent a Bcc. -We need to record the RT-Send-Cc and RT-Send-Bcc values so that we can actually send -out mail. (The mailing rules are separated from the ticket update code by -an abstraction barrier that makes it impossible to pass this data directly - -=cut - -sub Headers { - my $self = shift; - my $hdrs=""; - my @headers = grep { !/^RT-Send-Bcc/i } $self->_SplitHeaders; - return join("\n",@headers); - -} - - -# }}} - -# {{{ sub GetHeader - -=head2 GetHeader ( 'Tag') - -Returns the value of the header Tag as a string. This bypasses the weeding out -done in Headers() above. - -=cut - -sub GetHeader { - my $self = shift; - my $tag = shift; - foreach my $line ($self->_SplitHeaders) { - if ($line =~ /^\Q$tag\E:\s+(.*)$/si) { #if we find the header, return its value - return ($1); - } - } - - # we found no header. return an empty string - return undef; -} -# }}} - -# {{{ sub SetHeader - -=head2 SetHeader ( 'Tag', 'Value' ) - -Replace or add a Header to the attachment's headers. - -=cut - -sub SetHeader { - my $self = shift; - my $tag = shift; - my $newheader = ''; - - foreach my $line ($self->_SplitHeaders) { - if (defined $tag and $line =~ /^\Q$tag\E:\s+(.*)$/i) { - $newheader .= "$tag: $_[0]\n"; - undef $tag; - } - else { - $newheader .= "$line\n"; - } - } - - $newheader .= "$tag: $_[0]\n" if defined $tag; - $self->__Set( Field => 'Headers', Value => $newheader); -} -# }}} - -# {{{ sub _Value - -=head2 _Value - -Takes the name of a table column. -Returns its value as a string, if the user passes an ACL check - -=cut - -sub _Value { - - my $self = shift; - my $field = shift; - - #if the field is public, return it. - if ( $self->_Accessible( $field, 'public' ) ) { - return ( $self->__Value( $field, @_ ) ); - } - - #If it's a comment, we need to be extra special careful - elsif ( $self->TransactionObj->Type =~ /^Comment/ ) { - if ( $self->TransactionObj->CurrentUserHasRight('ShowTicketComments') ) - { - return ( $self->__Value( $field, @_ ) ); - } - } - elsif ( $self->TransactionObj->CurrentUserHasRight('ShowTicket') ) { - return ( $self->__Value( $field, @_ ) ); - } - - #if they ain't got rights to see, don't let em - else { - return (undef); - } - -} - -# }}} - -=head2 _SplitHeaders - -Returns an array of this attachment object's headers, with one header -per array entry. multiple lines are folded. - -=begin testing - -my $test1 = "From: jesse"; -my @headers = RT::Attachment->_SplitHeaders($test1); -is ($#headers, 0, $test1 ); - -my $test2 = qq{From: jesse -To: bobby -Subject: foo -}; - -@headers = RT::Attachment->_SplitHeaders($test2); -is ($#headers, 2, "testing a bunch of singline multiple headers" ); - - -my $test3 = qq{From: jesse -To: bobby, - Suzie, - Sally, - Joey: bizzy, -Subject: foo -}; - -@headers = RT::Attachment->_SplitHeaders($test3); -is ($#headers, 2, "testing a bunch of singline multiple headers" ); - - -=end testing - -=cut - -sub _SplitHeaders { - my $self = shift; - my $headers = (shift || $self->SUPER::Headers()); - my @headers; - for (split(/\n(?=\w|\z)/,$headers)) { - push @headers, $_; - - } - return(@headers); -} - - -sub ContentLength { - my $self = shift; - - unless ( (($self->TransactionObj->CurrentUserHasRight('ShowTicketComments')) and - ($self->TransactionObj->Type eq 'Comment') ) or - ($self->TransactionObj->CurrentUserHasRight('ShowTicket'))) { - return undef; - } - - if (my $len = $self->GetHeader('Content-Length')) { - return $len; - } - - { - use bytes; - my $len = length($self->Content); - $self->SetHeader('Content-Length' => $len); - return $len; - } -} - -# }}} - -# Transactions don't change. by adding this cache congif directiove, we don't lose pathalogically on long tickets. -sub _CacheConfig { - { - 'cache_p' => 1, - 'fast_update_p' => 1, - 'cache_for_sec' => 180, - } -} - -1; diff --git a/rt/lib/RT/Attachments.pm b/rt/lib/RT/Attachments.pm deleted file mode 100755 index 177cdd094..000000000 --- a/rt/lib/RT/Attachments.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::Attachments -- Class Description - -=head1 SYNOPSIS - - use RT::Attachments - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::Attachments; - -use RT::SearchBuilder; -use RT::Attachment; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'Attachments'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=item NewItem - -Returns an empty new RT::Attachment item - -=cut - -sub NewItem { - my $self = shift; - return(RT::Attachment->new($self->CurrentUser)); -} - - eval "require RT::Attachments_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Attachments_Overlay.pm}) { - die $@; - }; - - eval "require RT::Attachments_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Attachments_Vendor.pm}) { - die $@; - }; - - eval "require RT::Attachments_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Attachments_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Attachments_Overlay, RT::Attachments_Vendor, RT::Attachments_Local - -=cut - - -1; diff --git a/rt/lib/RT/Attachments_Overlay.pm b/rt/lib/RT/Attachments_Overlay.pm deleted file mode 100644 index 395cee1b1..000000000 --- a/rt/lib/RT/Attachments_Overlay.pm +++ /dev/null @@ -1,173 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Attachments - a collection of RT::Attachment objects - -=head1 SYNOPSIS - - use RT::Attachments; - -=head1 DESCRIPTION - -This module should never be called directly by client code. it's an internal module which -should only be accessed through exported APIs in Ticket, Queue and other similar objects. - - -=head1 METHODS - - -=begin testing - -ok (require RT::Attachments); - -=end testing - -=cut - - -package RT::Attachments; - -use strict; -no warnings qw(redefine); - -# {{{ sub _Init -sub _Init { - my $self = shift; - - $self->{'table'} = "Attachments"; - $self->{'primary_key'} = "id"; - $self->OrderBy ( FIELD => 'id', - ORDER => 'ASC'); - return ( $self->SUPER::_Init(@_)); -} -# }}} - - -# {{{ sub ContentType - -=head2 ContentType (VALUE => 'text/plain', ENTRYAGGREGATOR => 'OR', OPERATOR => '=' ) - -Limit result set to attachments of ContentType 'TYPE'... - -=cut - - -sub ContentType { - my $self = shift; - my %args = ( VALUE => 'text/plain', - OPERATOR => '=', - ENTRYAGGREGATOR => 'OR', - @_); - - $self->Limit ( FIELD => 'ContentType', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - ENTRYAGGREGATOR => $args{'ENTRYAGGREGATOR'}); -} -# }}} - -# {{{ sub ChildrenOf - -=head2 ChildrenOf ID - -Limit result set to children of Attachment ID - -=cut - - -sub ChildrenOf { - my $self = shift; - my $attachment = shift; - $self->Limit ( FIELD => 'Parent', - VALUE => $attachment); -} -# }}} - -# {{{ sub NewItem -sub NewItem { - my $self = shift; - - use RT::Attachment; - my $item = new RT::Attachment($self->CurrentUser); - return($item); -} -# }}} - -# {{{ sub Next -sub Next { - my $self = shift; - - my $Attachment = $self->SUPER::Next(); - if ((defined($Attachment)) and (ref($Attachment))) { - if ($Attachment->TransactionObj->__Value('Type') =~ /^Comment/ && - $Attachment->TransactionObj->TicketObj->CurrentUserHasRight('ShowTicketComments')) { - return($Attachment); - } elsif ($Attachment->TransactionObj->__Value('Type') !~ /^Comment/ && - $Attachment->TransactionObj->TicketObj->CurrentUserHasRight('ShowTicket')) { - return($Attachment); - } - - #If the user doesn't have the right to show this ticket - else { - return($self->Next()); - } - } - - #if there never was any ticket - else { - return(undef); - } -} -# }}} - - 1; - - - - diff --git a/rt/lib/RT/Attribute.pm b/rt/lib/RT/Attribute.pm deleted file mode 100644 index 89a856ea0..000000000 --- a/rt/lib/RT/Attribute.pm +++ /dev/null @@ -1,349 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::Attribute - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::Attribute; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('Attributes'); - $self->SUPER::_Init(@_); -} - - - - - -=head2 Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(255) 'Name'. - varchar(255) 'Description'. - text 'Content'. - varchar(16) 'ContentType'. - varchar(64) 'ObjectType'. - int(11) 'ObjectId'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Name => '', - Description => '', - Content => '', - ContentType => '', - ObjectType => '', - ObjectId => '', - - @_); - $self->SUPER::Create( - Name => $args{'Name'}, - Description => $args{'Description'}, - Content => $args{'Content'}, - ContentType => $args{'ContentType'}, - ObjectType => $args{'ObjectType'}, - ObjectId => $args{'ObjectId'}, -); - -} - - - -=head2 id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=head2 Name - -Returns the current value of Name. -(In the database, Name is stored as varchar(255).) - - - -=head2 SetName VALUE - - -Set Name to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Name will be stored as a varchar(255).) - - -=cut - - -=head2 Description - -Returns the current value of Description. -(In the database, Description is stored as varchar(255).) - - - -=head2 SetDescription VALUE - - -Set Description to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Description will be stored as a varchar(255).) - - -=cut - - -=head2 Content - -Returns the current value of Content. -(In the database, Content is stored as text.) - - - -=head2 SetContent VALUE - - -Set Content to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Content will be stored as a text.) - - -=cut - - -=head2 ContentType - -Returns the current value of ContentType. -(In the database, ContentType is stored as varchar(16).) - - - -=head2 SetContentType VALUE - - -Set ContentType to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ContentType will be stored as a varchar(16).) - - -=cut - - -=head2 ObjectType - -Returns the current value of ObjectType. -(In the database, ObjectType is stored as varchar(64).) - - - -=head2 SetObjectType VALUE - - -Set ObjectType to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ObjectType will be stored as a varchar(64).) - - -=cut - - -=head2 ObjectId - -Returns the current value of ObjectId. -(In the database, ObjectId is stored as int(11).) - - - -=head2 SetObjectId VALUE - - -Set ObjectId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ObjectId will be stored as a int(11).) - - -=cut - - -=head2 Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=head2 Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - -=head2 LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=head2 LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - - -sub _CoreAccessible { - { - - id => - {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - Name => - {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, - Description => - {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, - Content => - {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''}, - ContentType => - {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, - ObjectType => - {read => 1, write => 1, sql_type => 12, length => 64, is_blob => 0, is_numeric => 0, type => 'varchar(64)', default => ''}, - ObjectId => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - Creator => - {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - - } -}; - - - eval "require RT::Attribute_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Attribute_Overlay.pm}) { - die $@; - }; - - eval "require RT::Attribute_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Attribute_Vendor.pm}) { - die $@; - }; - - eval "require RT::Attribute_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Attribute_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Attribute_Overlay, RT::Attribute_Vendor, RT::Attribute_Local - -=cut - - -1; diff --git a/rt/lib/RT/Attribute_Overlay.pm b/rt/lib/RT/Attribute_Overlay.pm deleted file mode 100644 index 298f2e101..000000000 --- a/rt/lib/RT/Attribute_Overlay.pm +++ /dev/null @@ -1,469 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Attribute; - -use strict; -no warnings qw(redefine); -use Storable qw/nfreeze thaw/; -use MIME::Base64; - - -=head1 NAME - - RT::Attribute_Overlay - -=head1 Content - -=cut - -# the acl map is a map of "name of attribute" and "what right the user must have on the associated object to see/edit it - -our $ACL_MAP = { - SavedSearch => { create => 'EditSavedSearches', - update => 'EditSavedSearches', - delete => 'EditSavedSearches', - display => 'ShowSavedSearches' }, - -}; - -# There are a number of attributes that users should be able to modify for themselves, such as saved searches -# we could do this with a different set of "modify" rights, but that gets very hacky very fast. this is even faster and even -# hackier. we're hardcoding that a different set of rights are needed for attributes on oneself -our $PERSONAL_ACL_MAP = { - SavedSearch => { create => 'ModifySelf', - update => 'ModifySelf', - delete => 'ModifySelf', - display => 'allow' }, - -}; - -=head2 LookupObjectRight { ObjectType => undef, ObjectId => undef, Name => undef, Right => { create, update, delete, display } } - -Returns the right that the user needs to have on this attribute's object to perform the related attribute operation. Returns "allow" if the right is otherwise unspecified. - -=cut - -sub LookupObjectRight { - my $self = shift; - my %args = ( ObjectType => undef, - ObjectId => undef, - Right => undef, - Name => undef, - @_); - - # if it's an attribute on oneself, check the personal acl map - if (($args{'ObjectType'} eq 'RT::User') && ($args{'ObjectId'} eq $self->CurrentUser->Id)) { - return('allow') unless ($PERSONAL_ACL_MAP->{$args{'Name'}}); - return('allow') unless ($PERSONAL_ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); - return($PERSONAL_ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); - - } - # otherwise check the main ACL map - else { - return('allow') unless ($ACL_MAP->{$args{'Name'}}); - return('allow') unless ($ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); - return($ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); - } -} - - - - -=head2 Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(200) 'Name'. - varchar(255) 'Content'. - varchar(16) 'ContentType', - varchar(64) 'ObjectType'. - int(11) 'ObjectId'. - -You may pass a C instead of C and C. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Name => '', - Description => '', - Content => '', - ContentType => '', - Object => undef, - @_); - - if ($args{Object} and UNIVERSAL::can($args{Object}, 'Id')) { - $args{ObjectType} = ref($args{Object}); - $args{ObjectId} = $args{Object}->Id; - } else { - return(0, $self->loc("Required parameter '[_1]' not specified", 'Object')); - - } - - # object_right is the right that the user has to have on the object for them to have $right on this attribute - my $object_right = $self->LookupObjectRight( - Right => 'create', - ObjectId => $args{'ObjectId'}, - ObjectType => $args{'ObjectType'}, - Name => $args{'Name'} - ); - if ($object_right eq 'deny') { - return (0, $self->loc('Permission Denied')); - } - elsif ($object_right eq 'allow') { - # do nothing, we're ok - } - elsif (!$self->CurrentUser->HasRight( Object => $args{Object}, Right => $object_right)) { - return (0, $self->loc('Permission Denied')); - } - - - if (ref ($args{'Content'}) ) { - eval {$args{'Content'} = $self->_SerializeContent($args{'Content'}); }; - if ($@) { - return(0, $@); - } - $args{'ContentType'} = 'storable'; - } - - - $self->SUPER::Create( - Name => $args{'Name'}, - Content => $args{'Content'}, - ContentType => $args{'ContentType'}, - Description => $args{'Description'}, - ObjectType => $args{'ObjectType'}, - ObjectId => $args{'ObjectId'}, -); - -} - - -# {{{ sub LoadByNameAndObject - -=head2 LoadByNameAndObject (Object => OBJECT, Name => NAME) - -Loads the Attribute named NAME for Object OBJECT. - -=cut - -sub LoadByNameAndObject { - my $self = shift; - my %args = ( - Object => undef, - Name => undef, - @_, - ); - - return ( - $self->LoadByCols( - Name => $args{'Name'}, - ObjectType => ref($args{'Object'}), - ObjectId => $args{'Object'}->Id, - ) - ); - -} - -# }}} - - -=head2 _DeserializeContent - -DeserializeContent returns this Attribute's "Content" as a hashref. - - -=cut - -sub _DeserializeContent { - my $self = shift; - my $content = shift; - - my $hashref; - eval {$hashref = thaw(decode_base64($content))} ; - if ($@) { - $RT::Logger->error("Deserialization of attribute ".$self->Id. " failed"); - } - - return($hashref); - -} - - -=head2 Content - -Returns this attribute's content. If it's a scalar, returns a scalar -If it's data structure returns a ref to that data structure. - -=cut - -sub Content { - my $self = shift; - # Here we call _Value to get the ACL check. - my $content = $self->_Value('Content'); - if ($self->__Value('ContentType') eq 'storable') { - eval {$content = $self->_DeserializeContent($content); }; - if ($@) { - $RT::Logger->error("Deserialization of content for attribute ".$self->Id. " failed. Attribute was: ".$content); - } - } - - return($content); - -} - -sub _SerializeContent { - my $self = shift; - my $content = shift; - return( encode_base64(nfreeze($content))); -} - - -sub SetContent { - my $self = shift; - my $content = shift; - - # Call __Value to avoid ACL check. - if ($self->__Value('ContentType') eq 'storable') { - # We eval the serialization because it will lose on a coderef. - eval {$content = $self->_SerializeContent($content); }; - if ($@) { - $RT::Logger->error("For some reason, content couldn't be frozen"); - return(0, $@); - } - } - return ($self->SUPER::SetContent($content)); -} - -=head2 SubValue KEY - -Returns the subvalue for $key. - -=begin testing - -my $user = $RT::SystemUser; -my ($id, $msg) = $user->AddAttribute(Name => 'SavedSearch', Content => { Query => 'Foo'} ); -ok ($id, $msg); -my $attr = RT::Attribute->new($RT::SystemUser); -$attr->Load($id); -ok($attr->Name eq 'SavedSearch'); -$attr->SetSubValues( Format => 'baz'); - -my $format = $attr->SubValue('Format'); -is ($format , 'baz'); - -$attr->SetSubValues( Format => 'bar'); -$format = $attr->SubValue('Format'); -is ($format , 'bar'); - -$attr->DeleteAllSubValues(); -$format = $attr->SubValue('Format'); -is ($format, undef); - -$attr->SetSubValues(Format => 'This is a format'); - -my $attr2 = RT::Attribute->new($RT::SystemUser); -$attr2->Load($id); -is ($attr2->SubValue('Format'), 'This is a format'); -$attr2->Delete; -my $attr3 = RT::Attribute->new($RT::SystemUser); -my ($id) = $attr3->Load($id); -is ($id, 0); - -=end testing - -=cut - -sub SubValue { - my $self = shift; - my $key = shift; - my $values = $self->Content(); - return undef unless ref($values); - return($values->{$key}); -} - -=head2 DeleteSubValue NAME - -Deletes the subvalue with the key NAME - -=cut - -sub DeleteSubValue { - my $self = shift; - my $key = shift; - my %values = $self->Content(); - delete $values{$key}; - $self->SetContent(%values); - - - -} - - -=head2 DeleteAllSubValues - -Deletes all subvalues for this attribute - -=cut - - -sub DeleteAllSubValues { - my $self = shift; - $self->SetContent({}); -} - -=head2 SetSubValues { } - -Takes a hash of keys and values and stores them in the content of this attribute. - -Each key B the existing key with the same name - -Returns a tuple of (status, message) - -=cut - - -sub SetSubValues { - my $self = shift; - my %args = (@_); - my $values = ($self->Content() || {} ); - foreach my $key (keys %args) { - $values->{$key} = $args{$key}; - } - - $self->SetContent($values); - -} - - -sub Object { - my $self = shift; - my $object_type = $self->__Value('ObjectType'); - my $object; - eval { $object = $object_type->new($self->CurrentUser) }; - unless(UNIVERSAL::isa($object, $object_type)) { - $RT::Logger->error("Attribute ".$self->Id." has a bogus object type - $object_type (".$@.")"); - return(undef); - } - $object->Load($self->__Value('ObjectId')); - - return($object); - -} - - -sub Delete { - my $self = shift; - unless ($self->CurrentUserHasRight('delete')) { - return (0,$self->loc('Permission Denied')); - } - return($self->SUPER::Delete(@_)); -} - - -sub _Value { - my $self = shift; - unless ($self->CurrentUserHasRight('display')) { - return (0,$self->loc('Permission Denied')); - } - - return($self->SUPER::_Value(@_)); - - -} - - -sub _Set { - my $self = shift; - unless ($self->CurrentUserHasRight('modify')) { - - return (0,$self->loc('Permission Denied')); - } - return($self->SUPER::_Set(@_)); - -} - - -=head2 CurrentUserHasRight - -One of "display" "modify" "delete" or "create" and returns 1 if the user has that right for attributes of this name for this object.Returns undef otherwise. - -=cut - -sub CurrentUserHasRight { - my $self = shift; - my $right = shift; - - # object_right is the right that the user has to have on the object for them to have $right on this attribute - my $object_right = $self->LookupObjectRight( - Right => $right, - ObjectId => $self->__Value('ObjectId'), - ObjectType => $self->__Value('ObjectType'), - Name => $self->__Value('Name') - ); - - return (1) if ($object_right eq 'allow'); - return (0) if ($object_right eq 'deny'); - return(1) if ($self->CurrentUser->HasRight( Object => $self->Object, Right => $object_right)); - return(0); - -} - - -=head1 TODO - -We should be deserializing the content on load and then enver again, rather than at every access - -=cut - - -1; diff --git a/rt/lib/RT/Attributes.pm b/rt/lib/RT/Attributes.pm deleted file mode 100644 index 31694c194..000000000 --- a/rt/lib/RT/Attributes.pm +++ /dev/null @@ -1,139 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::Attributes -- Class Description - -=head1 SYNOPSIS - - use RT::Attributes - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::Attributes; - -use RT::SearchBuilder; -use RT::Attribute; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'Attributes'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=head2 NewItem - -Returns an empty new RT::Attribute item - -=cut - -sub NewItem { - my $self = shift; - return(RT::Attribute->new($self->CurrentUser)); -} - - eval "require RT::Attributes_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Attributes_Overlay.pm}) { - die $@; - }; - - eval "require RT::Attributes_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Attributes_Vendor.pm}) { - die $@; - }; - - eval "require RT::Attributes_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Attributes_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Attributes_Overlay, RT::Attributes_Vendor, RT::Attributes_Local - -=cut - - -1; diff --git a/rt/lib/RT/Attributes_Overlay.pm b/rt/lib/RT/Attributes_Overlay.pm deleted file mode 100644 index 47b333e20..000000000 --- a/rt/lib/RT/Attributes_Overlay.pm +++ /dev/null @@ -1,198 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Attributes - collection of RT::Attribute objects - -=head1 SYNOPSIS - - use RT::Attributes; -my $Attributes = new RT::Attributes($CurrentUser); - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - - -package RT::Attributes; - -use strict; -no warnings qw(redefine); - - -sub _DoSearch { - my $self = shift; - $self->SUPER::_DoSearch(); - $self->_BuildAccessTable(); -} - - -sub _BuildAccessTable { - my $self = shift; - delete $self->{'attr'}; - while (my $attr = $self->Next) { - push @{$self->{'attr'}->{$attr->Name}}, $attr; - } -} - - -sub _AttrHash { - my $self = shift; - $self->_DoSearch if ($self->{'must_redo_search'}); - unless ($self->{'attr'}) { - $self->{'attr'}->{'__none'} = RT::Attribute->new($self->CurrentUser); - } - return ($self->{'attr'}); -} - -=head2 Names - -Returns a list of the Names of all attributes for this object. - -=cut - -sub Names { - my $self = shift; - my @keys = keys %{$self->_AttrHash}; - return(@keys); - - -} - -=head2 Named STRING - -Returns an array of all the RT::Attribute objects with the name STRING - -=cut - -sub Named { - my $self = shift; - my $name = shift; - my @attributes; - if ($self->_AttrHash) { - @attributes = @{($self->_AttrHash->{$name}||[])}; - } - return (@attributes); -} - -=head2 WithId ID - -Returns the RT::Attribute objects with the id ID - -XXX TODO XXX THIS NEEDS A BETTER ACL CHECK - -=cut - -sub WithId { - my $self = shift; - my $id = shift; - - my $attr = RT::Attribute->new($self->CurrentUser); - $attr->LoadByCols( id => $id ); - return($attr); -} - -=head2 DeleteEntry { Name => Content => , id => } - -Deletes attributes with - the matching name - and the matching content or id - -If Content and id are both undefined, delete all attributes with -the matching name. - -=cut - - -sub DeleteEntry { - my $self = shift; - my %args = ( Name => undef, - Content => undef, - id => undef, - @_); - my $found = 0; - foreach my $attr ($self->Named($args{'Name'})){ - if ((!defined $args{'id'} and !defined $args{'Content'}) - or (defined $args{'id'} and $attr->id eq $args{'id'}) - or (defined $args{'Content'} and $attr->Content eq $args{'Content'})) { - my ($id, $msg) = $attr->Delete; - return ($id, $msg) unless $id; - $found = 1; - } - } - return (0, "No entry found") unless $found; - $self->_DoSearch(); - return (1, $self->loc('Attribute Deleted')); -} - - -# {{{ LimitToObject - -=head2 LimitToObject $object - -Limit the Attributes to rights for the object $object. It needs to be an RT::Record class. - -=cut - -sub LimitToObject { - my $self = shift; - my $obj = shift; - unless (defined($obj) && ref($obj) && UNIVERSAL::can($obj, 'id') && $obj->id) { - return undef; - } - $self->Limit(FIELD => 'ObjectType', OPERATOR=> '=', VALUE => ref($obj), ENTRYAGGREGATOR => 'OR'); - $self->Limit(FIELD => 'ObjectId', OPERATOR=> '=', VALUE => $obj->id, ENTRYAGGREGATOR => 'OR', QUOTEVALUE => 0); - -} - -# }}} - -1; diff --git a/rt/lib/RT/Base.pm b/rt/lib/RT/Base.pm deleted file mode 100644 index 791058867..000000000 --- a/rt/lib/RT/Base.pm +++ /dev/null @@ -1,173 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Base; -use Carp; -use Scalar::Util; - -use strict; -use vars qw(@EXPORT); - -@EXPORT=qw(loc CurrentUser); - -=head1 NAME - -RT::Base - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 FUNCTIONS - -=cut - -# {{{ sub CurrentUser - -=head2 CurrentUser - -If called with an argument, sets the current user to that user object. -This will affect ACL decisions, etc. The argument can be either -L or L object. - -Returns the current user object of L class. - -=cut - -sub CurrentUser { - my $self = shift; - - if (@_) { - $self->{'original_user'} = $self->{'user'}; - my $current_user = $_[0]; - if ( ref $current_user eq 'RT::User' ) { - $self->{'user'} = new RT::CurrentUser; - $self->{'user'}->Load( $current_user->id ); - } else { - $self->{'user'} = $current_user; - } - # We need to weaken the CurrentUser ($self->{'user'}) reference - # if the object in question is the currentuser object. - # This avoids memory leaks. - Scalar::Util::weaken($self->{'user'}) - if ref $self->{'user'} && $self->{'user'} == $self; - } - - unless ( ref $self->{'user'} && $self->{'user'}->isa('RT::CurrentUser') ) { - my $msg = "$self was created without a CurrentUser." - ." Any RT object which is subclass of RT::Base must be created" - ." with a RT::CurrentUser or a RT::User obejct as the first argument."; - $msg .= "\n". Carp::cluck() if @_; - - $RT::Logger->err( $msg ); - return $self->{'user'} = undef; - } - - return ( $self->{'user'} ); -} - -# }}} - -sub OriginalUser { - my $self = shift; - - if (@_) { - $self->{'original_user'} = shift; - Scalar::Util::weaken($self->{'original_user'}) - if (ref($self->{'original_user'}) && $self->{'original_user'} == $self ); - } - return ( $self->{'original_user'} || $self->{'user'} ); -} - - -=head2 loc LOC_STRING - -l is a method which takes a loc string -to this object's CurrentUser->LanguageHandle for localization. - -you call it like this: - - $self->loc("I have [quant,_1,concrete mixer].", 6); - -In english, this would return: - I have 6 concrete mixers. - - -=cut - -sub loc { - my $self = shift; - if (my $user = $self->OriginalUser) { - return $user->loc(@_); - } - else { - use Carp; - Carp::confess("No currentuser"); - return ("Critical error:$self has no CurrentUser", $self); - } -} - -sub loc_fuzzy { - my $self = shift; - if (my $user = $self->OriginalUser) { - return $user->loc_fuzzy(@_); - } - else { - use Carp; - Carp::confess("No currentuser"); - return ("Critical error:$self has no CurrentUser", $self); - } -} - -eval "require RT::Base_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Base_Vendor.pm}); -eval "require RT::Base_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Base_Local.pm}); - - -1; diff --git a/rt/lib/RT/CachedGroupMember.pm b/rt/lib/RT/CachedGroupMember.pm deleted file mode 100644 index a813dd76b..000000000 --- a/rt/lib/RT/CachedGroupMember.pm +++ /dev/null @@ -1,282 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::CachedGroupMember - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::CachedGroupMember; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('CachedGroupMembers'); - $self->SUPER::_Init(@_); -} - - - - - -=head2 Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - int(11) 'GroupId'. - int(11) 'MemberId'. - int(11) 'Via'. - int(11) 'ImmediateParentId'. - smallint(6) 'Disabled'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - GroupId => '', - MemberId => '', - Via => '', - ImmediateParentId => '', - Disabled => '0', - - @_); - $self->SUPER::Create( - GroupId => $args{'GroupId'}, - MemberId => $args{'MemberId'}, - Via => $args{'Via'}, - ImmediateParentId => $args{'ImmediateParentId'}, - Disabled => $args{'Disabled'}, -); - -} - - - -=head2 id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=head2 GroupId - -Returns the current value of GroupId. -(In the database, GroupId is stored as int(11).) - - - -=head2 SetGroupId VALUE - - -Set GroupId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, GroupId will be stored as a int(11).) - - -=cut - - -=head2 MemberId - -Returns the current value of MemberId. -(In the database, MemberId is stored as int(11).) - - - -=head2 SetMemberId VALUE - - -Set MemberId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, MemberId will be stored as a int(11).) - - -=cut - - -=head2 Via - -Returns the current value of Via. -(In the database, Via is stored as int(11).) - - - -=head2 SetVia VALUE - - -Set Via to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Via will be stored as a int(11).) - - -=cut - - -=head2 ImmediateParentId - -Returns the current value of ImmediateParentId. -(In the database, ImmediateParentId is stored as int(11).) - - - -=head2 SetImmediateParentId VALUE - - -Set ImmediateParentId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ImmediateParentId will be stored as a int(11).) - - -=cut - - -=head2 Disabled - -Returns the current value of Disabled. -(In the database, Disabled is stored as smallint(6).) - - - -=head2 SetDisabled VALUE - - -Set Disabled to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Disabled will be stored as a smallint(6).) - - -=cut - - - -sub _CoreAccessible { - { - - id => - {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - GroupId => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - MemberId => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - Via => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - ImmediateParentId => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - Disabled => - {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, - - } -}; - - - eval "require RT::CachedGroupMember_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/CachedGroupMember_Overlay.pm}) { - die $@; - }; - - eval "require RT::CachedGroupMember_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/CachedGroupMember_Vendor.pm}) { - die $@; - }; - - eval "require RT::CachedGroupMember_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/CachedGroupMember_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::CachedGroupMember_Overlay, RT::CachedGroupMember_Vendor, RT::CachedGroupMember_Local - -=cut - - -1; diff --git a/rt/lib/RT/CachedGroupMember_Overlay.pm b/rt/lib/RT/CachedGroupMember_Overlay.pm deleted file mode 100644 index 6ed428131..000000000 --- a/rt/lib/RT/CachedGroupMember_Overlay.pm +++ /dev/null @@ -1,366 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::CachedGroupMember; - -use strict; -no warnings qw(redefine); - -=head1 NAME - - RT::CachedGroupMember - -=head1 SYNOPSIS - - use RT::CachedGroupMember; - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -# {{ Create - -=head2 Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - 'Group' is the "top level" group we're building the cache for. This - is an RT::Principal object - - 'Member' is the RT::Principal of the user or group we're adding to - the cache. - - 'ImmediateParent' is the RT::Principal of the group that this - principal belongs to to get here - - int(11) 'Via' is an internal reference to CachedGroupMembers->Id of - the "parent" record of this cached group member. It should be empty if - this member is a "direct" member of this group. (In that case, it will - be set to this cached group member's id after creation) - - This routine should _only_ be called by GroupMember->Create - -=cut - -sub Create { - my $self = shift; - my %args = ( Group => '', - Member => '', - ImmediateParent => '', - Via => '0', - Disabled => '0', - @_ ); - - unless ( $args{'Member'} - && UNIVERSAL::isa( $args{'Member'}, 'RT::Principal' ) - && $args{'Member'}->Id ) { - $RT::Logger->debug("$self->Create: bogus Member argument"); - } - - unless ( $args{'Group'} - && UNIVERSAL::isa( $args{'Group'}, 'RT::Principal' ) - && $args{'Group'}->Id ) { - $RT::Logger->debug("$self->Create: bogus Group argument"); - } - - unless ( $args{'ImmediateParent'} - && UNIVERSAL::isa( $args{'ImmediateParent'}, 'RT::Principal' ) - && $args{'ImmediateParent'}->Id ) { - $RT::Logger->debug("$self->Create: bogus ImmediateParent argument"); - } - - # If the parent group for this group member is disabled, it's disabled too, along with all its children - if ( $args{'ImmediateParent'}->Disabled ) { - $args{'Disabled'} = $args{'ImmediateParent'}->Disabled; - } - - my $id = $self->SUPER::Create( - GroupId => $args{'Group'}->Id, - MemberId => $args{'Member'}->Id, - ImmediateParentId => $args{'ImmediateParent'}->Id, - Disabled => $args{'Disabled'}, - Via => $args{'Via'}, ); - - unless ($id) { - $RT::Logger->warning( "Couldn't create " - . $args{'Member'} - . " as a cached member of " - . $args{'Group'}->Id . " via " - . $args{'Via'} ); - return (undef); #this will percolate up and bail out of the transaction - } - if ( $self->__Value('Via') == 0 ) { - my ( $vid, $vmsg ) = $self->__Set( Field => 'Via', Value => $id ); - unless ($vid) { - $RT::Logger->warning( "Due to a via error, couldn't create " - . $args{'Member'} - . " as a cached member of " - . $args{'Group'}->Id . " via " - . $args{'Via'} ); - return (undef) - ; #this will percolate up and bail out of the transaction - } - } - - if ( $args{'Member'}->IsGroup() ) { - my $GroupMembers = $args{'Member'}->Object->MembersObj(); - while ( my $member = $GroupMembers->Next() ) { - my $cached_member = - RT::CachedGroupMember->new( $self->CurrentUser ); - my $c_id = $cached_member->Create( - Group => $args{'Group'}, - Member => $member->MemberObj, - ImmediateParent => $args{'Member'}, - Disabled => $args{'Disabled'}, - Via => $id ); - unless ($c_id) { - return (undef); #percolate the error upwards. - # the caller will log an error and abort the transaction - } - - } - } - - return ($id); - -} - -# }}} - -# {{{ Delete - -=head2 Delete - -Deletes the current CachedGroupMember from the group it's in and cascades -the delete to all submembers. This routine could be completely excised if -mysql supported foreign keys with cascading deletes. - -=cut - -sub Delete { - my $self = shift; - - - my $member = $self->MemberObj(); - if ( $member->IsGroup ) { - my $deletable = RT::CachedGroupMembers->new( $self->CurrentUser ); - - $deletable->Limit( FIELD => 'id', - OPERATOR => '!=', - VALUE => $self->id ); - $deletable->Limit( FIELD => 'Via', - OPERATOR => '=', - VALUE => $self->id ); - - while ( my $kid = $deletable->Next ) { - my $kid_err = $kid->Delete(); - unless ($kid_err) { - $RT::Logger->error( - "Couldn't delete CachedGroupMember " . $kid->Id ); - return (undef); - } - } - } - my $err = $self->SUPER::Delete(); - unless ($err) { - $RT::Logger->error( "Couldn't delete CachedGroupMember " . $self->Id ); - return (undef); - } - - # Unless $self->GroupObj still has the member recursively $self->MemberObj - # (Since we deleted the database row above, $self no longer counts) - unless ( $self->GroupObj->Object->HasMemberRecursively( $self->MemberObj ) ) { - - - # Find all ACEs granted to $self->GroupId - my $acl = RT::ACL->new($RT::SystemUser); - $acl->LimitToPrincipal( Id => $self->GroupId ); - - - while ( my $this_ace = $acl->Next() ) { - # Find all ACEs which $self-MemberObj has delegated from $this_ace - my $delegations = RT::ACL->new($RT::SystemUser); - $delegations->DelegatedFrom( Id => $this_ace->Id ); - $delegations->DelegatedBy( Id => $self->MemberId ); - - # For each delegation - while ( my $delegation = $delegations->Next ) { - # WHACK IT - my $del_ret = $delegation->_Delete(InsideTransaction => 1); - unless ($del_ret) { - $RT::Logger->crit("Couldn't delete an ACL delegation that we know exists ". $delegation->Id); - return(undef); - } - } - } - } - return ($err); -} - -# }}} - -# {{{ SetDisabled - -=head2 SetDisabled - -SetDisableds the current CachedGroupMember from the group it's in and cascades -the SetDisabled to all submembers. This routine could be completely excised if -mysql supported foreign keys with cascading SetDisableds. - -=cut - -sub SetDisabled { - my $self = shift; - my $val = shift; - - # if it's already disabled, we're good. - return {1} if ($self->__Value('Disabled') == $val); - my $err = $self->SUPER::SetDisabled($val); - my ($retval, $msg) = $err->as_array(); - unless ($retval) { - $RT::Logger->error( "Couldn't SetDisabled CachedGroupMember " . $self->Id .": $msg"); - return ($err); - } - - my $member = $self->MemberObj(); - if ( $member->IsGroup ) { - my $deletable = RT::CachedGroupMembers->new( $self->CurrentUser ); - - $deletable->Limit( FIELD => 'Via', OPERATOR => '=', VALUE => $self->id ); - $deletable->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $self->id ); - - while ( my $kid = $deletable->Next ) { - my $kid_err = $kid->SetDisabled($val ); - unless ($kid_err) { - $RT::Logger->error( "Couldn't SetDisabled CachedGroupMember " . $kid->Id ); - return ($kid_err); - } - } - } - - # Unless $self->GroupObj still has the member recursively $self->MemberObj - # (Since we SetDisabledd the database row above, $self no longer counts) - unless ( $self->GroupObj->Object->HasMemberRecursively( $self->MemberObj ) ) { - # Find all ACEs granted to $self->GroupId - my $acl = RT::ACL->new($RT::SystemUser); - $acl->LimitToPrincipal( Id => $self->GroupId ); - - while ( my $this_ace = $acl->Next() ) { - # Find all ACEs which $self-MemberObj has delegated from $this_ace - my $delegations = RT::ACL->new($RT::SystemUser); - $delegations->DelegatedFrom( Id => $this_ace->Id ); - $delegations->DelegatedBy( Id => $self->MemberId ); - - # For each delegation, blow away the delegation - while ( my $delegation = $delegations->Next ) { - # WHACK IT - my $del_ret = $delegation->_Delete(InsideTransaction => 1); - unless ($del_ret) { - $RT::Logger->crit("Couldn't delete an ACL delegation that we know exists ". $delegation->Id); - return(undef); - } - } - } - } - return ($err); -} - -# }}} - -# {{{ GroupObj - -=head2 GroupObj - -Returns the RT::Principal object for this group Group - -=cut - -sub GroupObj { - my $self = shift; - my $principal = RT::Principal->new( $self->CurrentUser ); - $principal->Load( $self->GroupId ); - return ($principal); -} - -# }}} - -# {{{ ImmediateParentObj - -=head2 ImmediateParentObj - -Returns the RT::Principal object for this group ImmediateParent - -=cut - -sub ImmediateParentObj { - my $self = shift; - my $principal = RT::Principal->new( $self->CurrentUser ); - $principal->Load( $self->ImmediateParentId ); - return ($principal); -} - -# }}} - -# {{{ MemberObj - -=head2 MemberObj - -Returns the RT::Principal object for this group member - -=cut - -sub MemberObj { - my $self = shift; - my $principal = RT::Principal->new( $self->CurrentUser ); - $principal->Load( $self->MemberId ); - return ($principal); -} - -# }}} -1; diff --git a/rt/lib/RT/CachedGroupMembers.pm b/rt/lib/RT/CachedGroupMembers.pm deleted file mode 100644 index 9d6703ddc..000000000 --- a/rt/lib/RT/CachedGroupMembers.pm +++ /dev/null @@ -1,139 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::CachedGroupMembers -- Class Description - -=head1 SYNOPSIS - - use RT::CachedGroupMembers - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::CachedGroupMembers; - -use RT::SearchBuilder; -use RT::CachedGroupMember; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'CachedGroupMembers'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=head2 NewItem - -Returns an empty new RT::CachedGroupMember item - -=cut - -sub NewItem { - my $self = shift; - return(RT::CachedGroupMember->new($self->CurrentUser)); -} - - eval "require RT::CachedGroupMembers_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/CachedGroupMembers_Overlay.pm}) { - die $@; - }; - - eval "require RT::CachedGroupMembers_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/CachedGroupMembers_Vendor.pm}) { - die $@; - }; - - eval "require RT::CachedGroupMembers_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/CachedGroupMembers_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::CachedGroupMembers_Overlay, RT::CachedGroupMembers_Vendor, RT::CachedGroupMembers_Local - -=cut - - -1; diff --git a/rt/lib/RT/CachedGroupMembers_Overlay.pm b/rt/lib/RT/CachedGroupMembers_Overlay.pm deleted file mode 100644 index 0d1c6b1ea..000000000 --- a/rt/lib/RT/CachedGroupMembers_Overlay.pm +++ /dev/null @@ -1,177 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::CachedGroupMembers - a collection of RT::GroupMember objects - -=head1 SYNOPSIS - - use RT::CachedGroupMembers; - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::CachedGroupMembers); - -=end testing - -=cut - - -package RT::CachedGroupMembers; - -use strict; -no warnings qw(redefine); - -# {{{ LimitToUsers - -=head2 LimitToUsers - -Limits this search object to users who are members of this group -This is really useful when you want to have your UI separate out -groups from users for display purposes - -=cut - -sub LimitToUsers { - my $self = shift; - - my $principals = $self->NewAlias('Principals'); - $self->Join( ALIAS1 => 'main', FIELD1 => 'MemberId', - ALIAS2 => $principals, FIELD2 =>'id'); - - $self->Limit( ALIAS => $principals, - FIELD => 'PrincipalType', - VALUE => 'User', - ENTRYAGGREGATOR => 'OR', - ); -} - -# }}} - - -# {{{ LimitToGroups - -=head2 LimitToGroups - -Limits this search object to Groups who are members of this group -This is really useful when you want to have your UI separate out -groups from users for display purposes - -=cut - -sub LimitToGroups { - my $self = shift; - - my $principals = $self->NewAlias('Principals'); - $self->Join( ALIAS1 => 'main', FIELD1 => 'MemberId', - ALIAS2 => $principals, FIELD2 =>'id'); - - $self->Limit( ALIAS => $principals, - FIELD => 'PrincipalType', - VALUE => 'Group', - ENTRYAGGREGATOR => 'OR', - ); -} - -# }}} - -# {{{ sub LimitToMembersOfGroup - -=head2 LimitToMembersOfGroup PRINCIPAL_ID - -Takes a Principal Id as its only argument. -Limits the current search principals which are _directly_ members -of the group which has PRINCIPAL_ID as its principal id. - -=cut - -sub LimitToMembersOfGroup { - my $self = shift; - my $group = shift; - - return ($self->Limit( - VALUE => $group, - FIELD => 'GroupId', - ENTRYAGGREGATOR => 'OR', - )); - -} -# }}} - -# {{{ sub LimitToGroupsWithMember - -=head2 LimitToGroupsWithMember PRINCIPAL_ID - -Takes a Principal Id as its only argument. -Limits the current search to groups which contain PRINCIPAL_ID as a member or submember. -This function gets used by GroupMember->Create to populate subgroups - -=cut - -sub LimitToGroupsWithMember { - my $self = shift; - my $member = shift; - - - - return ($self->Limit( - VALUE => $member || '0', - FIELD => 'MemberId', - ENTRYAGGREGATOR => 'OR', - QUOTEVALUE => 0 - )); - -} -# }}} -1; diff --git a/rt/lib/RT/Condition/AnyTransaction.pm b/rt/lib/RT/Condition/AnyTransaction.pm deleted file mode 100644 index 4519fcf5a..000000000 --- a/rt/lib/RT/Condition/AnyTransaction.pm +++ /dev/null @@ -1,51 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK - - -package RT::Condition::AnyTransaction; -require RT::Condition::Generic; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Condition::Generic); - - -=head2 IsApplicable - -This happens on every transaction. it's always applicable - -=cut - -sub IsApplicable { - my $self = shift; - return(1); -} - -eval "require RT::Condition::AnyTransaction_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/AnyTransaction_Vendor.pm}); -eval "require RT::Condition::AnyTransaction_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/AnyTransaction_Local.pm}); - -1; - diff --git a/rt/lib/RT/Condition/BeforeDue.pm b/rt/lib/RT/Condition/BeforeDue.pm deleted file mode 100644 index 88eadb6c2..000000000 --- a/rt/lib/RT/Condition/BeforeDue.pm +++ /dev/null @@ -1,88 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Condition::BeforeDue; -require RT::Condition::Generic; - -use RT::Date; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Condition::Generic); - - -sub IsApplicable { - my $self = shift; - - # Parse date string. Format is "1d2h3m4s" for 1 day and 2 hours - # and 3 minutes and 4 seconds. - my %e; - foreach (qw(d h m s)) { - my @vals = $self->Argument =~ m/(\d+)$_/; - $e{$_} = pop @vals || 0; - } - my $elapse = $e{'d'} * 24*60*60 + $e{'h'} * 60*60 + $e{'m'} * 60 + $e{'s'}; - - my $cur = new RT::Date( $RT::SystemUser ); - $cur->SetToNow(); - my $due = $self->TicketObj->DueObj; - return (undef) if $due->Unix <= 0; - - my $diff = $due->Diff($cur); - if ( $diff >= 0 and $diff <= $elapse ) { - return(1); - } else { - return(undef); - } -} - -eval "require RT::Condition::BeforeDue_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/BeforeDue_Vendor.pm}); -eval "require RT::Condition::BeforeDue_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/BeforeDue_Local.pm}); - -1; diff --git a/rt/lib/RT/Condition/Generic.pm b/rt/lib/RT/Condition/Generic.pm deleted file mode 100755 index bd269315e..000000000 --- a/rt/lib/RT/Condition/Generic.pm +++ /dev/null @@ -1,211 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -=head1 NAME - - RT::Condition::Generic - ; - -=head1 SYNOPSIS - - use RT::Condition::Generic; - my $foo = new RT::Condition::IsApplicable( - TransactionObj => $tr, - TicketObj => $ti, - ScripObj => $scr, - Argument => $arg, - Type => $type); - - if ($foo->IsApplicable) { - # do something - } - - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::Condition::Generic); - -=end testing - - -=cut - -package RT::Condition::Generic; - -use RT::Base; -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Base); - -# {{{ sub new -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); - $self->_Init(@_); - return $self; -} -# }}} - -# {{{ sub _Init -sub _Init { - my $self = shift; - my %args = ( TransactionObj => undef, - TicketObj => undef, - ScripObj => undef, - TemplateObj => undef, - Argument => undef, - ApplicableTransTypes => undef, - @_ ); - - $self->{'Argument'} = $args{'Argument'}; - $self->{'ScripObj'} = $args{'ScripObj'}; - $self->{'TicketObj'} = $args{'TicketObj'}; - $self->{'TransactionObj'} = $args{'TransactionObj'}; - $self->{'ApplicableTransTypes'} = $args{'ApplicableTransTypes'}; -} -# }}} - -# Access Scripwide data - -# {{{ sub Argument - -=head2 Argument - -Return the optional argument associated with this ScripCondition - -=cut - -sub Argument { - my $self = shift; - return($self->{'Argument'}); -} -# }}} - -# {{{ sub TicketObj - -=head2 TicketObj - -Return the ticket object we're talking about - -=cut - -sub TicketObj { - my $self = shift; - return($self->{'TicketObj'}); -} -# }}} - -# {{{ sub ScripObj - -=head2 ScripObj - -Return the Scrip object we're talking about - -=cut - -sub ScripObj { - my $self = shift; - return($self->{'ScripObj'}); -} -# }}} -# {{{ sub TransactionObj - -=head2 TransactionObj - -Return the transaction object we're talking about - -=cut - -sub TransactionObj { - my $self = shift; - return($self->{'TransactionObj'}); -} -# }}} - -# {{{ sub Type - -=head2 Type - - - -=cut - -sub ApplicableTransTypes { - my $self = shift; - return($self->{'ApplicableTransTypes'}); -} -# }}} - - -# Scrip methods - - -#What does this type of Action does - -# {{{ sub Describe -sub Describe { - my $self = shift; - return ($self->loc("No description for [_1]", ref $self)); -} -# }}} - - -#Parse the templates, get things ready to go. - -#If this rule applies to this transaction, return true. - -# {{{ sub IsApplicable -sub IsApplicable { - my $self = shift; - return(undef); -} -# }}} - -# {{{ sub DESTROY -sub DESTROY { - my $self = shift; - - # We need to clean up all the references that might maybe get - # oddly circular - $self->{'TemplateObj'} =undef - $self->{'TicketObj'} = undef; - $self->{'TransactionObj'} = undef; - $self->{'ScripObj'} = undef; - -} - -# }}} - -eval "require RT::Condition::Generic_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Generic_Vendor.pm}); -eval "require RT::Condition::Generic_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Generic_Local.pm}); - -1; diff --git a/rt/lib/RT/Condition/Overdue.pm b/rt/lib/RT/Condition/Overdue.pm deleted file mode 100644 index b4ce41cc1..000000000 --- a/rt/lib/RT/Condition/Overdue.pm +++ /dev/null @@ -1,92 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} - - - -=head1 NAME - -RT::Condition::Overdue - -=head1 DESCRIPTION - -Returns true if the ticket we're operating on is overdue - -=cut - -package RT::Condition::Overdue; -require RT::Condition::Generic; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Condition::Generic); - - -=head2 IsApplicable - -If the due date is before "now" return true - -=cut - -sub IsApplicable { - my $self = shift; - if ($self->TicketObj->DueObj->Unix > 0 and - $self->TicketObj->DueObj->Unix < time()) { - return(1); - } - else { - return(undef); - } -} - -eval "require RT::Condition::Overdue_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Overdue_Vendor.pm}); -eval "require RT::Condition::Overdue_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/Overdue_Local.pm}); - -1; - diff --git a/rt/lib/RT/Condition/OwnerChange.pm b/rt/lib/RT/Condition/OwnerChange.pm deleted file mode 100644 index 4052812c5..000000000 --- a/rt/lib/RT/Condition/OwnerChange.pm +++ /dev/null @@ -1,124 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} - - - -package RT::Condition::OwnerChange; -require RT::Condition::Generic; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Condition::Generic); - - -=head2 IsApplicable - -If we're changing the owner return true, otherwise return false - -=begin testing - -my $q = RT::Queue->new($RT::SystemUser); -$q->Create(Name =>'ownerChangeTest'); - -ok($q->Id, "Created a scriptest queue"); - -my $s1 = RT::Scrip->new($RT::SystemUser); -my ($val, $msg) =$s1->Create( Queue => $q->Id, - ScripAction => 'User Defined', - ScripCondition => 'On Owner Change', - CustomIsApplicableCode => '', - CustomPrepareCode => 'return 1', - CustomCommitCode => ' - $self->TicketObj->SetPriority($self->TicketObj->Priority+1); - return(1); - ', - Template => 'Blank' - ); -ok($val,$msg); - -my $ticket = RT::Ticket->new($RT::SystemUser); -my ($tv,$ttv,$tm) = $ticket->Create(Queue => $q->Id, - Subject => "hair on fire", - InitialPriority => '20' - ); -ok($tv, $tm); -ok($ticket->SetOwner('root')); -is ($ticket->Priority , '21', "Ticket priority is set right"); -ok($ticket->Steal); -is ($ticket->Priority , '22', "Ticket priority is set right"); -ok($ticket->Untake); -is ($ticket->Priority , '23', "Ticket priority is set right"); -ok($ticket->Take); -is ($ticket->Priority , '24', "Ticket priority is set right"); - - - - - -=end testing - - -=cut - -sub IsApplicable { - my $self = shift; - if ($self->TransactionObj->Field eq 'Owner') { - return(1); - } - else { - return(undef); - } -} - -eval "require RT::Condition::OwnerChange_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/OwnerChange_Vendor.pm}); -eval "require RT::Condition::OwnerChange_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/OwnerChange_Local.pm}); - -1; - diff --git a/rt/lib/RT/Condition/PriorityChange.pm b/rt/lib/RT/Condition/PriorityChange.pm deleted file mode 100644 index 60fa50ad7..000000000 --- a/rt/lib/RT/Condition/PriorityChange.pm +++ /dev/null @@ -1,82 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} - - - -package RT::Condition::PriorityChange; -require RT::Condition::Generic; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Condition::Generic); - - -=head2 IsApplicable - -If the argument passed in is equivalent to the new value of -the Priority Obj - -=cut - -sub IsApplicable { - my $self = shift; - if ($self->TransactionObj->Field eq 'Priority') { - return(1); - } - else { - return(undef); - } -} - -eval "require RT::Condition::PriorityChange_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/PriorityChange_Vendor.pm}); -eval "require RT::Condition::PriorityChange_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/PriorityChange_Local.pm}); - -1; - diff --git a/rt/lib/RT/Condition/PriorityExceeds.pm b/rt/lib/RT/Condition/PriorityExceeds.pm deleted file mode 100644 index 0b7ec8fa2..000000000 --- a/rt/lib/RT/Condition/PriorityExceeds.pm +++ /dev/null @@ -1,81 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} - - - -package RT::Condition::PriorityExceeds; -require RT::Condition::Generic; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Condition::Generic); - - -=head2 IsApplicable - -If the priority exceeds the argument value - -=cut - -sub IsApplicable { - my $self = shift; - if ($self->TicketObj->Priority > $self->Argument) { - return(1); - } - else { - return(undef); - } -} - -eval "require RT::Condition::PriorityExceeds_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/PriorityExceeds_Vendor.pm}); -eval "require RT::Condition::PriorityExceeds_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/PriorityExceeds_Local.pm}); - -1; - diff --git a/rt/lib/RT/Condition/QueueChange.pm b/rt/lib/RT/Condition/QueueChange.pm deleted file mode 100644 index 8b89e5641..000000000 --- a/rt/lib/RT/Condition/QueueChange.pm +++ /dev/null @@ -1,81 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} - - - -package RT::Condition::QueueChange; -require RT::Condition::Generic; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Condition::Generic); - - -=head2 IsApplicable - -If the queue has changed. - -=cut - -sub IsApplicable { - my $self = shift; - if ($self->TransactionObj->Field eq 'Queue') { - return(1); - } - else { - return(undef); - } -} - -eval "require RT::Condition::QueueChange_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/QueueChange_Vendor.pm}); -eval "require RT::Condition::QueueChange_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/QueueChange_Local.pm}); - -1; - diff --git a/rt/lib/RT/Condition/StatusChange.pm b/rt/lib/RT/Condition/StatusChange.pm deleted file mode 100644 index 8afabcda0..000000000 --- a/rt/lib/RT/Condition/StatusChange.pm +++ /dev/null @@ -1,59 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK - - - -package RT::Condition::StatusChange; -require RT::Condition::Generic; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Condition::Generic); - - -=head2 IsApplicable - -If the argument passed in is equivalent to the new value of -the Status Obj - -=cut - -sub IsApplicable { - my $self = shift; - if (($self->TransactionObj->Field eq 'Status') and - ($self->Argument eq $self->TransactionObj->NewValue())) { - return(1); - } - else { - return(undef); - } -} - -eval "require RT::Condition::StatusChange_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/StatusChange_Vendor.pm}); -eval "require RT::Condition::StatusChange_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/StatusChange_Local.pm}); - -1; - diff --git a/rt/lib/RT/Condition/UserDefined.pm b/rt/lib/RT/Condition/UserDefined.pm deleted file mode 100644 index 49d6293d0..000000000 --- a/rt/lib/RT/Condition/UserDefined.pm +++ /dev/null @@ -1,81 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} - - -package RT::Condition::UserDefined; - -use RT::Condition::Generic; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Condition::Generic); - - -=head2 IsApplicable - -This happens on every transaction. it's always applicable - -=cut - -sub IsApplicable { - my $self = shift; - my $retval = eval $self->ScripObj->CustomIsApplicableCode; - if ($@) { - $RT::Logger->error("Scrip ".$self->ScripObj->Id. " IsApplicable failed: ".$@); - return (undef); - } - return ($retval); -} - -eval "require RT::Condition::UserDefined_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/UserDefined_Vendor.pm}); -eval "require RT::Condition::UserDefined_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/UserDefined_Local.pm}); - -1; - diff --git a/rt/lib/RT/CurrentUser.pm b/rt/lib/RT/CurrentUser.pm deleted file mode 100755 index 4ca2f9891..000000000 --- a/rt/lib/RT/CurrentUser.pm +++ /dev/null @@ -1,374 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -=head1 NAME - - RT::CurrentUser - an RT object representing the current user - -=head1 SYNOPSIS - - use RT::CurrentUser - - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::CurrentUser); - -=end testing - -=cut - - -package RT::CurrentUser; - -use RT::Record; -use RT::I18N; - -use strict; -use vars qw/@ISA/; -@ISA= qw(RT::Record); - -# {{{ sub _Init - -#The basic idea here is that $self->CurrentUser is always supposed -# to be a CurrentUser object. but that's hard to do when we're trying to load -# the CurrentUser object - -sub _Init { - my $self = shift; - my $Name = shift; - - $self->{'table'} = "Users"; - - if (defined($Name)) { - $self->Load($Name); - } - - $self->CurrentUser($self); - -} -# }}} - -# {{{ sub Create - -sub Create { - my $self = shift; - return (0, $self->loc('Permission Denied')); -} - -# }}} - -# {{{ sub Delete - -sub Delete { - my $self = shift; - return (0, $self->loc('Permission Denied')); -} - -# }}} - -# {{{ sub UserObj - -=head2 UserObj - - Returns the RT::User object associated with this CurrentUser object. - -=cut - -sub UserObj { - my $self = shift; - - unless ($self->{'UserObj'}) { - use RT::User; - $self->{'UserObj'} = RT::User->new($self); - unless ($self->{'UserObj'}->Load($self->Id)) { - $RT::Logger->err($self->loc("Couldn't load [_1] from the users database.\n", $self->Id)); - } - - } - return ($self->{'UserObj'}); -} -# }}} - -# {{{ sub PrincipalObj - -=head2 PrincipalObj - - Returns this user's principal object. this is just a helper routine for - $self->UserObj->PrincipalObj - -=cut - -sub PrincipalObj { - my $self = shift; - return($self->UserObj->PrincipalObj); -} - - -# }}} - - -# {{{ sub PrincipalId - -=head2 PrincipalId - - Returns this user's principal Id. this is just a helper routine for - $self->UserObj->PrincipalId - -=cut - -sub PrincipalId { - my $self = shift; - return($self->UserObj->PrincipalId); -} - - -# }}} - - -# {{{ sub _Accessible -sub _Accessible { - my $self = shift; - my %Cols = ( - Name => 'read', - Gecos => 'read', - RealName => 'read', - Password => 'neither', - EmailAddress => 'read', - Privileged => 'read', - IsAdministrator => 'read' - ); - return($self->SUPER::_Accessible(@_, %Cols)); -} -# }}} - -# {{{ sub LoadByEmail - -=head2 LoadByEmail - -Loads a User into this CurrentUser object. -Takes the email address of the user to load. - -=cut - -sub LoadByEmail { - my $self = shift; - my $identifier = shift; - - $identifier = RT::User::CanonicalizeEmailAddress(undef, $identifier); - - $self->LoadByCol("EmailAddress",$identifier); - -} -# }}} - -# {{{ sub LoadByGecos - -=head2 LoadByGecos - -Loads a User into this CurrentUser object. -Takes a unix username as its only argument. - -=cut - -sub LoadByGecos { - my $self = shift; - my $identifier = shift; - - $self->LoadByCol("Gecos",$identifier); - -} -# }}} - -# {{{ sub LoadByName - -=head2 LoadByName - -Loads a User into this CurrentUser object. -Takes a Name. -=cut - -sub LoadByName { - my $self = shift; - my $identifier = shift; - $self->LoadByCol("Name",$identifier); - -} -# }}} - -# {{{ sub Load - -=head2 Load - -Loads a User into this CurrentUser object. -Takes either an integer (users id column reference) or a Name -The latter is deprecated. Instead, you should use LoadByName. -Formerly, this routine also took email addresses. - -=cut - -sub Load { - my $self = shift; - my $identifier = shift; - - #if it's an int, load by id. otherwise, load by name. - if ($identifier !~ /\D/) { - $self->SUPER::LoadById($identifier); - } - else { - # This is a bit dangerous, we might get false authen if somebody - # uses ambigous userids or real names: - $self->LoadByCol("Name",$identifier); - } -} - -# }}} - -# {{{ sub IsPassword - -=head2 IsPassword - -Takes a password as a string. Passes it off to IsPassword in this -user's UserObj. If it is the user's password and the user isn't -disabled, returns 1. - -Otherwise, returns undef. - -=cut - -sub IsPassword { - my $self = shift; - my $value = shift; - - return ($self->UserObj->IsPassword($value)); -} - -# }}} - -# {{{ sub Privileged - -=head2 Privileged - -Returns true if the current user can be granted rights and be -a member of groups. - -=cut - -sub Privileged { - my $self = shift; - return ($self->UserObj->Privileged()); -} - -# }}} - - -# {{{ sub HasRight - -=head2 HasRight - -calls $self->UserObj->HasRight with the arguments passed in - -=cut - -sub HasRight { - my $self = shift; - return ($self->UserObj->HasRight(@_)); -} - -# }}} - -# {{{ Localization - -=head2 LanguageHandle - -Returns this current user's langauge handle. Should take a language -specification. but currently doesn't - -=begin testing - -ok (my $cu = RT::CurrentUser->new('root')); -ok (my $lh = $cu->LanguageHandle); -ok ($lh != undef); -ok ($lh->isa('Locale::Maketext')); -ok ($cu->loc('TEST_STRING') eq "Concrete Mixer", "Localized TEST_STRING into English"); -ok ($lh = $cu->LanguageHandle('fr')); -ok ($cu->loc('Before') eq "Avant", "Localized TEST_STRING into Frenc"); - -=end testing - -=cut - -sub LanguageHandle { - my $self = shift; - if ((!defined $self->{'LangHandle'}) || - (!UNIVERSAL::can($self->{'LangHandle'}, 'maketext')) || - (@_)) { - $self->{'LangHandle'} = RT::I18N->get_handle(@_); - } - # Fall back to english. - unless ($self->{'LangHandle'}) { - die "We couldn't get a dictionary. Nye mogu naidti slovar. No puedo encontrar dictionario."; - } - return ($self->{'LangHandle'}); -} - -sub loc { - my $self = shift; - return '' if $_[0] eq ''; - - my $handle = $self->LanguageHandle; - - if (@_ == 1) { - # pre-scan the lexicon hashes to return _AUTO keys verbatim, - # to keep locstrings containing '[' and '~' from tripping over Maketext - return $_[0] unless grep { exists $_->{$_[0]} } @{ $handle->_lex_refs }; - } - - return $handle->maketext(@_); -} - -sub loc_fuzzy { - my $self = shift; - return '' if $_[0] eq ''; - - # XXX: work around perl's deficiency when matching utf8 data - return $_[0] if Encode::is_utf8($_[0]); - my $result = $self->LanguageHandle->maketext_fuzzy(@_); - - return($result); -} -# }}} - -eval "require RT::CurrentUser_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/CurrentUser_Vendor.pm}); -eval "require RT::CurrentUser_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/CurrentUser_Local.pm}); - -1; - diff --git a/rt/lib/RT/CustomField.pm b/rt/lib/RT/CustomField.pm deleted file mode 100644 index c0627935e..000000000 --- a/rt/lib/RT/CustomField.pm +++ /dev/null @@ -1,421 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::CustomField - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::CustomField; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('CustomFields'); - $self->SUPER::_Init(@_); -} - - - - - -=head2 Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(200) 'Name'. - varchar(200) 'Type'. - int(11) 'MaxValues'. - varchar(255) 'Pattern'. - smallint(6) 'Repeated'. - varchar(255) 'Description'. - int(11) 'SortOrder'. - varchar(255) 'LookupType'. - smallint(6) 'Disabled'. - - 'LookupType' is generally the result of either - RT::Ticket->CustomFieldLookupType or RT::Transaction->CustomFieldLookupType - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Name => '', - Type => '', - MaxValues => '', - Pattern => '', - Repeated => '0', - Description => '', - SortOrder => '0', - LookupType => '', - Disabled => '0', - - @_); - $self->SUPER::Create( - Name => $args{'Name'}, - Type => $args{'Type'}, - MaxValues => $args{'MaxValues'}, - Pattern => $args{'Pattern'}, - Repeated => $args{'Repeated'}, - Description => $args{'Description'}, - SortOrder => $args{'SortOrder'}, - LookupType => $args{'LookupType'}, - Disabled => $args{'Disabled'}, -); - -} - - - -=head2 id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=head2 Name - -Returns the current value of Name. -(In the database, Name is stored as varchar(200).) - - - -=head2 SetName VALUE - - -Set Name to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Name will be stored as a varchar(200).) - - -=cut - - -=head2 Type - -Returns the current value of Type. -(In the database, Type is stored as varchar(200).) - - - -=head2 SetType VALUE - - -Set Type to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Type will be stored as a varchar(200).) - - -=cut - - -=head2 MaxValues - -Returns the current value of MaxValues. -(In the database, MaxValues is stored as int(11).) - - - -=head2 SetMaxValues VALUE - - -Set MaxValues to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, MaxValues will be stored as a int(11).) - - -=cut - - -=head2 Pattern - -Returns the current value of Pattern. -(In the database, Pattern is stored as varchar(255).) - - - -=head2 SetPattern VALUE - - -Set Pattern to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Pattern will be stored as a varchar(255).) - - -=cut - - -=head2 Repeated - -Returns the current value of Repeated. -(In the database, Repeated is stored as smallint(6).) - - - -=head2 SetRepeated VALUE - - -Set Repeated to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Repeated will be stored as a smallint(6).) - - -=cut - - -=head2 Description - -Returns the current value of Description. -(In the database, Description is stored as varchar(255).) - - - -=head2 SetDescription VALUE - - -Set Description to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Description will be stored as a varchar(255).) - - -=cut - - -=head2 SortOrder - -Returns the current value of SortOrder. -(In the database, SortOrder is stored as int(11).) - - - -=head2 SetSortOrder VALUE - - -Set SortOrder to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, SortOrder will be stored as a int(11).) - - -=cut - - -=head2 LookupType - -Returns the current value of LookupType. -(In the database, LookupType is stored as varchar(255).) - - - -=head2 SetLookupType VALUE - - -Set LookupType to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, LookupType will be stored as a varchar(255).) - - -=cut - - -=head2 Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=head2 Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - -=head2 LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=head2 LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - -=head2 Disabled - -Returns the current value of Disabled. -(In the database, Disabled is stored as smallint(6).) - - - -=head2 SetDisabled VALUE - - -Set Disabled to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Disabled will be stored as a smallint(6).) - - -=cut - - - -sub _CoreAccessible { - { - - id => - {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - Name => - {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, - Type => - {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, - MaxValues => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - Pattern => - {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, - Repeated => - {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, - Description => - {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, - SortOrder => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - LookupType => - {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, - Creator => - {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - Disabled => - {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, - - } -}; - - - eval "require RT::CustomField_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomField_Overlay.pm}) { - die $@; - }; - - eval "require RT::CustomField_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomField_Vendor.pm}) { - die $@; - }; - - eval "require RT::CustomField_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomField_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::CustomField_Overlay, RT::CustomField_Vendor, RT::CustomField_Local - -=cut - - -1; diff --git a/rt/lib/RT/CustomFieldValue.pm b/rt/lib/RT/CustomFieldValue.pm deleted file mode 100644 index f4d776993..000000000 --- a/rt/lib/RT/CustomFieldValue.pm +++ /dev/null @@ -1,318 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::CustomFieldValue - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::CustomFieldValue; -use RT::Record; -use RT::CustomField; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('CustomFieldValues'); - $self->SUPER::_Init(@_); -} - - - - - -=head2 Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - int(11) 'CustomField'. - varchar(200) 'Name'. - varchar(255) 'Description'. - int(11) 'SortOrder'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - CustomField => '0', - Name => '', - Description => '', - SortOrder => '0', - - @_); - $self->SUPER::Create( - CustomField => $args{'CustomField'}, - Name => $args{'Name'}, - Description => $args{'Description'}, - SortOrder => $args{'SortOrder'}, -); - -} - - - -=head2 id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=head2 CustomField - -Returns the current value of CustomField. -(In the database, CustomField is stored as int(11).) - - - -=head2 SetCustomField VALUE - - -Set CustomField to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CustomField will be stored as a int(11).) - - -=cut - - -=head2 CustomFieldObj - -Returns the CustomField Object which has the id returned by CustomField - - -=cut - -sub CustomFieldObj { - my $self = shift; - my $CustomField = RT::CustomField->new($self->CurrentUser); - $CustomField->Load($self->__Value('CustomField')); - return($CustomField); -} - -=head2 Name - -Returns the current value of Name. -(In the database, Name is stored as varchar(200).) - - - -=head2 SetName VALUE - - -Set Name to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Name will be stored as a varchar(200).) - - -=cut - - -=head2 Description - -Returns the current value of Description. -(In the database, Description is stored as varchar(255).) - - - -=head2 SetDescription VALUE - - -Set Description to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Description will be stored as a varchar(255).) - - -=cut - - -=head2 SortOrder - -Returns the current value of SortOrder. -(In the database, SortOrder is stored as int(11).) - - - -=head2 SetSortOrder VALUE - - -Set SortOrder to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, SortOrder will be stored as a int(11).) - - -=cut - - -=head2 Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=head2 Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - -=head2 LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=head2 LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - - -sub _CoreAccessible { - { - - id => - {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - CustomField => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - Name => - {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, - Description => - {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, - SortOrder => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - Creator => - {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - - } -}; - - - eval "require RT::CustomFieldValue_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomFieldValue_Overlay.pm}) { - die $@; - }; - - eval "require RT::CustomFieldValue_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomFieldValue_Vendor.pm}) { - die $@; - }; - - eval "require RT::CustomFieldValue_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomFieldValue_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::CustomFieldValue_Overlay, RT::CustomFieldValue_Vendor, RT::CustomFieldValue_Local - -=cut - - -1; diff --git a/rt/lib/RT/CustomFieldValue_Overlay.pm b/rt/lib/RT/CustomFieldValue_Overlay.pm deleted file mode 100644 index 0f0c590f4..000000000 --- a/rt/lib/RT/CustomFieldValue_Overlay.pm +++ /dev/null @@ -1,97 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -use warnings; -use strict; - -package RT::CustomFieldValue; - -no warnings qw/redefine/; - - -=head2 ValidateName - -Override the default ValidateName method that stops custom field values -from being integers. - -=cut - -sub Create { - my $self = shift; - my %args = @_; - (defined $args{$_} or delete $args{$_}) for keys %args; - %args = ((CustomField => '0', - Name => '', - Description => '', - SortOrder => '0', - Category => ''), %args); - - my ($id, $msg) = $self->SUPER::Create( - map {$_ => $args{$_}} qw(CustomField Name Description SortOrder) - ); - if ($id and length $args{Category}) { - # $self would be loaded at this stage - $self->SetCategory($args{Category}); - } - return ($id, $msg); -} - -sub Category { - my $self = shift; - my $attr = $self->FirstAttribute('Category') or return undef; - return $attr->Content; -} - -sub SetCategory { - my $self = shift; - my $category = shift; - $self->SetAttribute(Name => 'Category', Content => $category); -} - -sub ValidateName { 1 }; - -1; diff --git a/rt/lib/RT/CustomFieldValues.pm b/rt/lib/RT/CustomFieldValues.pm deleted file mode 100644 index 64772128b..000000000 --- a/rt/lib/RT/CustomFieldValues.pm +++ /dev/null @@ -1,151 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::CustomFieldValues -- Class Description - -=head1 SYNOPSIS - - use RT::CustomFieldValues - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::CustomFieldValues; - -use RT::SearchBuilder; -use RT::CustomFieldValue; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'CustomFieldValues'; - $self->{'primary_key'} = 'id'; - - # By default, order by SortOrder - $self->OrderByCols( - { ALIAS => 'main', - FIELD => 'SortOrder', - ORDER => 'ASC' }, - { ALIAS => 'main', - FIELD => 'Name', - ORDER => 'ASC' }, - { ALIAS => 'main', - FIELD => 'id', - ORDER => 'ASC' }, - ); - - return ( $self->SUPER::_Init(@_) ); -} - - -=head2 NewItem - -Returns an empty new RT::CustomFieldValue item - -=cut - -sub NewItem { - my $self = shift; - return(RT::CustomFieldValue->new($self->CurrentUser)); -} - - eval "require RT::CustomFieldValues_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomFieldValues_Overlay.pm}) { - die $@; - }; - - eval "require RT::CustomFieldValues_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomFieldValues_Vendor.pm}) { - die $@; - }; - - eval "require RT::CustomFieldValues_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomFieldValues_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::CustomFieldValues_Overlay, RT::CustomFieldValues_Vendor, RT::CustomFieldValues_Local - -=cut - - -1; diff --git a/rt/lib/RT/CustomFieldValues_Overlay.pm b/rt/lib/RT/CustomFieldValues_Overlay.pm deleted file mode 100644 index 79c21614b..000000000 --- a/rt/lib/RT/CustomFieldValues_Overlay.pm +++ /dev/null @@ -1,73 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::CustomFieldValues; - -use strict; -no warnings qw(redefine); - -# {{{ sub LimitToCustomField - -=head2 LimitToCustomField FIELD - -Limits the returned set to values for the custom field with Id FIELD - -=cut - -sub LimitToCustomField { - my $self = shift; - my $cf = shift; - return ($self->Limit( FIELD => 'CustomField', - VALUE => $cf, - OPERATOR => '=')); - -} - -# }}} - -1; - diff --git a/rt/lib/RT/CustomField_Overlay.pm b/rt/lib/RT/CustomField_Overlay.pm deleted file mode 100644 index 5a4535ebf..000000000 --- a/rt/lib/RT/CustomField_Overlay.pm +++ /dev/null @@ -1,1300 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::CustomField; - -use strict; -no warnings qw(redefine); - -use vars qw(%FieldTypes $RIGHTS %FRIENDLY_OBJECT_TYPES); - -use RT::CustomFieldValues; -use RT::ObjectCustomFieldValues; - - -%FieldTypes = ( - Select => [ - 'Select multiple values', # loc - 'Select one value', # loc - 'Select up to [_1] values', # loc - ], - Freeform => [ - 'Enter multiple values', # loc - 'Enter one value', # loc - 'Enter up to [_1] values', # loc - ], - Text => [ - 'Fill in multiple text areas', # loc - 'Fill in one text area', # loc - 'Fill in up to [_1] text areas',# loc - ], - Wikitext => [ - 'Fill in multiple wikitext areas', # loc - 'Fill in one wikitext area', # loc - 'Fill in up to [_1] wikitext areas',# loc - ], - Image => [ - 'Upload multiple images', # loc - 'Upload one image', # loc - 'Upload up to [_1] images', # loc - ], - Binary => [ - 'Upload multiple files', # loc - 'Upload one file', # loc - 'Upload up to [_1] files', # loc - ], - Combobox => [ - 'Combobox: Select or enter multiple values', # loc - 'Combobox: Select or enter one value', # loc - 'Combobox: Select or enter up to [_1] values', # loc - ], -); - - -%FRIENDLY_OBJECT_TYPES = (); - -RT::CustomField->_ForObjectType( 'RT::Queue-RT::Ticket' => "Tickets", ); #loc -RT::CustomField->_ForObjectType( - 'RT::Queue-RT::Ticket-RT::Transaction' => "Ticket Transactions", ); #loc -RT::CustomField->_ForObjectType( 'RT::User' => "Users", ); #loc -RT::CustomField->_ForObjectType( 'RT::Group' => "Groups", ); #loc - -$RIGHTS = { - SeeCustomField => 'See custom fields', # loc_pair - AdminCustomField => 'Create, delete and modify custom fields', # loc_pair - ModifyCustomField => 'Add, delete and modify custom field values for objects' #loc_pair - -}; - -# Tell RT::ACE that this sort of object can get acls granted -$RT::ACE::OBJECT_TYPES{'RT::CustomField'} = 1; - -foreach my $right ( keys %{$RIGHTS} ) { - $RT::ACE::LOWERCASERIGHTNAMES{ lc $right } = $right; -} - -sub AvailableRights { - my $self = shift; - return($RIGHTS); -} - -=head1 NAME - - RT::CustomField_Overlay - -=head1 DESCRIPTION - -=head1 'CORE' METHODS - -=cut - - - -=head2 Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(200) 'Name'. - varchar(200) 'Type'. - int(11) 'MaxValues'. - varchar(255) 'Pattern'. - smallint(6) 'Repeated'. - varchar(255) 'Description'. - int(11) 'SortOrder'. - varchar(255) 'LookupType'. - smallint(6) 'Disabled'. - - 'LookupType' is generally the result of either - RT::Ticket->CustomFieldLookupType or RT::Transaction->CustomFieldLookupType - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Name => '', - Type => '', - MaxValues => '0', - Pattern => '', - Description => '', - Disabled => '0', - LookupType => '', - Repeated => '0', - - @_); - - unless ($self->CurrentUser->HasRight(Object => $RT::System, Right => 'AdminCustomField')) { - return (0, $self->loc('Permission Denied')); - } - - - if ($args{TypeComposite}) { - @args{'Type', 'MaxValues'} = split(/-/, $args{TypeComposite}, 2); - } - elsif ($args{Type} =~ s/(?:(Single)|Multiple)$//) { - # old style Type string - $args{'MaxValues'} = $1 ? 1 : 0; - } - - if ( !exists $args{'Queue'}) { - # do nothing -- things below are strictly backward compat - } - elsif ( ! $args{'Queue'} ) { - unless ( $self->CurrentUser->HasRight( Object => $RT::System, Right => 'AssignCustomFields') ) { - return ( 0, $self->loc('Permission Denied') ); - } - $args{'LookupType'} = 'RT::Queue-RT::Ticket'; - } - else { - my $queue = RT::Queue->new($self->CurrentUser); - $queue->Load($args{'Queue'}); - unless ($queue->Id) { - return (0, $self->loc("Queue not found")); - } - unless ( $queue->CurrentUserHasRight('AssignCustomFields') ) { - return ( 0, $self->loc('Permission Denied') ); - } - $args{'LookupType'} = 'RT::Queue-RT::Ticket'; - $args{'Queue'} = $queue->Id; - } - - my ($ok, $msg) = $self->_IsValidRegex($args{'Pattern'}); - if (!$ok) { - return (0, $self->loc("Invalid pattern: [_1]", $msg)); - } - - my $rv = $self->SUPER::Create( - Name => $args{'Name'}, - Type => $args{'Type'}, - MaxValues => $args{'MaxValues'}, - Pattern => $args{'Pattern'}, - Description => $args{'Description'}, - Disabled => $args{'Disabled'}, - LookupType => $args{'LookupType'}, - Repeated => $args{'Repeated'}, -); - - return $rv unless exists $args{'Queue'}; - - # Compat code -- create a new ObjectCustomField mapping - my $OCF = RT::ObjectCustomField->new($self->CurrentUser); - $OCF->Create( - CustomField => $self->Id, - ObjectId => $args{'Queue'}, - ); - - return $rv; -} - -=head2 Load ID/NAME - -Load a custom field. If the value handed in is an integer, load by custom field ID. Otherwise, Load by name. - -=cut - - -sub Load { - my $self = shift; - my $id = shift; - - if ($id =~ /^\d+$/) { - return ($self->SUPER::Load($id)); - } else { - return($self->LoadByName(Name => $id)); - } -} - - -# {{{ sub LoadByName - -=head2 LoadByName (Queue => QUEUEID, Name => NAME) - -Loads the Custom field named NAME. - -If a Queue parameter is specified, only look for ticket custom fields tied to that Queue. - -If the Queue parameter is '0', look for global ticket custom fields. - -If no queue parameter is specified, look for any and all custom fields with this name. - -BUG/TODO, this won't let you specify that you only want user or group CFs. - -=cut - -# Compatibility for API change after 3.0 beta 1 -*LoadNameAndQueue = \&LoadByName; -# Change after 3.4 beta. -*LoadByNameAndQueue = \&LoadByName; - -sub LoadByName { - my $self = shift; - my %args = ( - Queue => undef, - Name => undef, - @_, - ); - - # if we're looking for a queue by name, make it a number - if (defined $args{'Queue'} && $args{'Queue'} !~ /^\d+$/) { - my $QueueObj = RT::Queue->new($self->CurrentUser); - $QueueObj->Load($args{'Queue'}); - $args{'Queue'} = $QueueObj->Id; - } - - # XXX - really naive implementation. Slow. - not really. still just one query - - my $CFs = RT::CustomFields->new($self->CurrentUser); - - $CFs->Limit( FIELD => 'Name', VALUE => $args{'Name'}, CASESENSITIVE => 0); - # Don't limit to queue if queue is 0. Trying to do so breaks - # RT::Group type CFs. - if (defined $args{'Queue'}) { - $CFs->LimitToQueue( $args{'Queue'} ); - } - - # When loading by name, it's ok if they're disabled. That's not a big deal. - $CFs->{'find_disabled_rows'}=1; - - # We only want one entry. - $CFs->RowsPerPage(1); - unless ($CFs->First) { - return(0); - } - return($self->Load($CFs->First->id)); - -} - -# }}} - -# {{{ Dealing with custom field values - -=begin testing - -use_ok(RT::CustomField); -ok(my $cf = RT::CustomField->new($RT::SystemUser)); -ok(my ($id, $msg)= $cf->Create( Name => 'TestingCF', - Queue => '0', - SortOrder => '1', - Description => 'A Testing custom field', - Type=> 'SelectSingle'), 'Created a global CustomField'); -ok($id != 0, 'Global custom field correctly created'); -ok ($cf->SingleValue); -is($cf->Type, 'Select'); -is($cf->MaxValues, 1); - -my ($val, $msg) = $cf->SetMaxValues('0'); -ok($val, $msg); -is($cf->Type, 'Select'); -is($cf->MaxValues, 0); -ok(!$cf->SingleValue ); -ok(my ($bogus_val, $bogus_msg) = $cf->SetType('BogusType') , "Trying to set a custom field's type to a bogus type"); -ok($bogus_val == 0, "Unable to set a custom field's type to a bogus type"); - -ok(my $bad_cf = RT::CustomField->new($RT::SystemUser)); -ok(my ($bad_id, $bad_msg)= $cf->Create( Name => 'TestingCF-bad', - Queue => '0', - SortOrder => '1', - Description => 'A Testing custom field with a bogus Type', - Type=> 'SelectSingleton'), 'Created a global CustomField with a bogus type'); -ok($bad_id == 0, 'Global custom field correctly decided to not create a cf with a bogus type '); - -=end testing - -=cut - -# {{{ AddValue - -=head2 AddValue HASH - -Create a new value for this CustomField. Takes a paramhash containing the elements Name, Description and SortOrder - -=begin testing - -ok(my $cf = RT::CustomField->new($RT::SystemUser)); -$cf->Load(1); -ok($cf->Id == 1); -ok(my ($val,$msg) = $cf->AddValue(Name => 'foo' , Description => 'TestCFValue', SortOrder => '6')); -ok($val != 0); -ok (my ($delval, $delmsg) = $cf->DeleteValue($val)); -ok ($delval,"Deleting a cf value: $delmsg"); - -=end testing - -=cut - -sub AddValue { - my $self = shift; - my %args = @_; - - unless ($self->CurrentUserHasRight('AdminCustomField')) { - return (0, $self->loc('Permission Denied')); - } - - # allow zero value - if ( !defined $args{'Name'} || $args{'Name'} eq '' ) { - return(0, $self->loc("Can't add a custom field value without a name")); - } - - my $newval = RT::CustomFieldValue->new($self->CurrentUser); - return($newval->Create(%args, CustomField => $self->Id)); -} - - -# }}} - -# {{{ DeleteValue - -=head2 DeleteValue ID - -Deletes a value from this custom field by id. - -Does not remove this value for any article which has had it selected - -=cut - -sub DeleteValue { - my $self = shift; - my $id = shift; - unless ($self->CurrentUserHasRight('AdminCustomField')) { - return (0, $self->loc('Permission Denied')); - } - - my $val_to_del = RT::CustomFieldValue->new($self->CurrentUser); - $val_to_del->Load($id); - unless ($val_to_del->Id) { - return (0, $self->loc("Couldn't find that value")); - } - unless ($val_to_del->CustomField == $self->Id) { - return (0, $self->loc("That is not a value for this custom field")); - } - - my $retval = $val_to_del->Delete(); - if ($retval) { - return ($retval, $self->loc("Custom field value deleted")); - } else { - return(0, $self->loc("Custom field value could not be deleted")); - } -} - -# }}} - -# {{{ Values - -=head2 Values FIELD - -Return a CustomFieldeValues object of all acceptable values for this Custom Field. - - -=cut - -*ValuesObj = \&Values; - -sub Values { - my $self = shift; - - my $cf_values = RT::CustomFieldValues->new($self->CurrentUser); - # if the user has no rights, return an empty object - if ($self->id && $self->CurrentUserHasRight( 'SeeCustomField') ) { - $cf_values->LimitToCustomField($self->Id); - } - return ($cf_values); -} - -# }}} - -# }}} - -# {{{ Ticket related routines - -# {{{ ValuesForTicket - -=head2 ValuesForTicket TICKET - -Returns a RT::ObjectCustomFieldValues object of this Field's values for TICKET. -TICKET is a ticket id. - -This is deprecated -- use ValuesForObject instead. - - -=cut - -sub ValuesForTicket { - my $self = shift; - my $ticket_id = shift; - - $RT::Logger->debug( ref($self) . " -> ValuesForTicket deprecated in favor of ValuesForObject at (". join(":",caller).")"); - my $ticket = RT::Ticket->new($self->CurrentUser); - $ticket->Load($ticket_id); - - return $self->ValuesForObject($ticket); -} - -# }}} - -# {{{ AddValueForTicket - -=head2 AddValueForTicket HASH - -Adds a custom field value for a ticket. Takes a param hash of Ticket and Content - -This is deprecated -- use AddValueForObject instead. - -=cut - -sub AddValueForTicket { - my $self = shift; - my %args = ( Ticket => undef, - Content => undef, - @_ ); - $RT::Logger->debug( ref($self) . " -> AddValueForTicket deprecated in favor of AddValueForObject at (". join(":",caller).")"); - - - my $ticket = RT::Ticket->new($self->CurrentUser); - $ticket->Load($args{'Ticket'}); - return($self->AddValueForObject(Content => $args{'Content'}, Object => $ticket,@_)); - -} - - -# }}} - -# {{{ DeleteValueForTicket - -=head2 DeleteValueForTicket HASH - -Adds a custom field value for a ticket. Takes a param hash of Ticket and Content - -This is deprecated -- use DeleteValueForObject instead. - -=cut - -sub DeleteValueForTicket { - my $self = shift; - my %args = ( Ticket => undef, - Content => undef, - @_ ); - - $RT::Logger->debug( ref($self) . " -> DeleteValueForTicket deprecated in favor of DeleteValueForObject at (". join(":",caller).")"); - - - my $ticket = RT::Ticket->new($self->CurrentUser); - $ticket->load($args{'Ticket'}); - return ($self->DeleteValueForObject(Object => $ticket, Content => $args{'Content'}, @_)); - -} - -# }}} -# }}} - - -=head2 ValidateQueue Queue - -Make sure that the queue specified is a valid queue name - -=cut - -sub ValidateQueue { - my $self = shift; - my $id = shift; - - if ($id eq '0') { # 0 means "Global" null would _not_ be ok. - return (1); - } - - my $q = RT::Queue->new($RT::SystemUser); - $q->Load($id); - unless ($q->id) { - return undef; - } - return (1); - - -} - - -# {{{ Types - -=head2 Types - -Retuns an array of the types of CustomField that are supported - -=cut - -sub Types { - return (keys %FieldTypes); -} - -# }}} - -# {{{ IsSelectionType - -=head2 IsSelectionType - -Retuns a boolean value indicating whether the C method makes sense -to this Custom Field. - -=cut - -sub IsSelectionType { - my $self = shift; - $self->Type =~ /(?:Select|Combobox)/; -} - -# }}} - - -=head2 FriendlyType [TYPE, MAX_VALUES] - -Returns a localized human-readable version of the custom field type. -If a custom field type is specified as the parameter, the friendly type for that type will be returned - -=cut - -sub FriendlyType { - my $self = shift; - - my $type = @_ ? shift : $self->Type; - my $max = @_ ? shift : $self->MaxValues; - - if (my $friendly_type = $FieldTypes{$type}[$max>2 ? 2 : $max]) { - return ( $self->loc( $friendly_type, $max ) ); - } - else { - return ( $self->loc( $type ) ); - } -} - -sub FriendlyTypeComposite { - my $self = shift; - my $composite = shift || $self->TypeComposite; - return $self->FriendlyType(split(/-/, $composite, 2)); -} - - -=head2 ValidateType TYPE - -Takes a single string. returns true if that string is a value -type of custom field - -=begin testing - -ok(my $cf = RT::CustomField->new($RT::SystemUser)); -ok($cf->ValidateType('SelectSingle')); -ok($cf->ValidateType('SelectMultiple')); -ok(!$cf->ValidateType('SelectFooMultiple')); - -=end testing - -=cut - -sub ValidateType { - my $self = shift; - my $type = shift; - - if ($type =~ s/(?:Single|Multiple)$//) { - $RT::Logger->warning( "Prefix 'Single' and 'Multiple' to Type deprecated, use MaxValues instead at (". join(":",caller).")"); - } - - if( $FieldTypes{$type}) { - return(1); - } - else { - return undef; - } -} - - -sub SetType { - my $self = shift; - my $type = shift; - if ($type =~ s/(?:(Single)|Multiple)$//) { - $RT::Logger->warning("'Single' and 'Multiple' on SetType deprecated, use SetMaxValues instead at (". join(":",caller).")"); - $self->SetMaxValues($1 ? 1 : 0); - } - $self->SUPER::SetType($type); -} - -=head2 SetPattern STRING - -Takes a single string representing a regular expression. Performs basic -validation on that regex, and sets the C field for the CF if it -is valid. - -=cut - -sub SetPattern { - my $self = shift; - my $regex = shift; - - my ($ok, $msg) = $self->_IsValidRegex($regex); - if ($ok) { - return $self->SUPER::SetPattern($regex); - } - else { - return (0, $self->loc("Invalid pattern: [_1]", $msg)); - } -} - -=head2 _IsValidRegex(Str $regex) returns (Bool $success, Str $msg) - -Tests if the string contains an invalid regex. - -=cut - -sub _IsValidRegex { - my $self = shift; - my $regex = shift or return (1, 'valid'); - - local $^W; local $@; - $SIG{__DIE__} = sub { 1 }; - $SIG{__WARN__} = sub { 1 }; - - if (eval { qr/$regex/; 1 }) { - return (1, 'valid'); - } - - my $err = $@; - $err =~ s{[,;].*}{}; # strip debug info from error - chomp $err; - return (0, $err); -} - -# {{{ SingleValue - -=head2 SingleValue - -Returns true if this CustomField only accepts a single value. -Returns false if it accepts multiple values - -=cut - -sub SingleValue { - my $self = shift; - if ($self->MaxValues == 1) { - return 1; - } - else { - return undef; - } -} - -sub UnlimitedValues { - my $self = shift; - if ($self->MaxValues == 0) { - return 1; - } - else { - return undef; - } -} - -# }}} - -# {{{ sub CurrentUserHasRight - -=head2 CurrentUserHasRight RIGHT - -Helper function to call the custom field's queue's CurrentUserHasRight with the passed in args. - -=cut - -sub CurrentUserHasRight { - my $self = shift; - my $right = shift; - - return $self->CurrentUser->HasRight( - Object => $self, - Right => $right, - ); -} - -# }}} - -# {{{ sub _Set - -sub _Set { - my $self = shift; - - unless ( $self->CurrentUserHasRight('AdminCustomField') ) { - return ( 0, $self->loc('Permission Denied') ); - } - return ( $self->SUPER::_Set(@_) ); - -} - -# }}} - -# {{{ sub _Value - -=head2 _Value - -Takes the name of a table column. -Returns its value as a string, if the user passes an ACL check - -=cut - -sub _Value { - - my $self = shift; - my $field = shift; - - # we need to do the rights check - unless ( $self->id && $self->CurrentUserHasRight( 'SeeCustomField') ) { - return (undef); - } - return ( $self->__Value($field) ); - -} - -# }}} -# {{{ sub SetDisabled - -=head2 SetDisabled - -Takes a boolean. -1 will cause this custom field to no longer be avaialble for tickets. -0 will re-enable this queue - -=cut - -# }}} - -sub Queue { - $RT::Logger->debug( ref($_[0]) . " -> Queue deprecated at (". join(":",caller).")"); - - return 0; -} - -sub SetQueue { - $RT::Logger->debug( ref($_[0]) . " -> SetQueue deprecated at (". join(":",caller).")"); - - return 0; -} - -sub QueueObj { - $RT::Logger->debug( ref($_[0]) . " -> QueueObj deprecated at (". join(":",caller).")"); - - return undef; -} - -=head2 SetTypeComposite - -Set this custom field's type and maximum values as a composite value - - -=cut - -sub SetTypeComposite { - my $self = shift; - my $composite = shift; - my ($type, $max_values) = split(/-/, $composite, 2); - $self->SetType($type); - $self->SetMaxValues($max_values); -} - -=head2 SetLookupType - -Autrijus: care to doc how LookupTypes work? - -=cut - -sub SetLookupType { - my $self = shift; - my $lookup = shift; - if ($lookup ne $self->LookupType) { - # Okay... We need to invalidate our existing relationships - my $ObjectCustomFields = RT::ObjectCustomFields->new($self->CurrentUser); - $ObjectCustomFields->LimitToCustomField($self->Id); - $_->Delete foreach @{$ObjectCustomFields->ItemsArrayRef}; - } - $self->SUPER::SetLookupType($lookup); -} - -=head2 TypeComposite - -Returns a composite value composed of this object's type and maximum values - -=cut - - -sub TypeComposite { - my $self = shift; - join('-', $self->Type, $self->MaxValues); -} - -=head2 TypeComposites - -Returns an array of all possible composite values for custom fields. - -=cut - -sub TypeComposites { - my $self = shift; - return grep !/(?:[Tt]ext|Combobox)-0/, map { ("$_-1", "$_-0") } $self->Types; -} - -=head2 LookupTypes - -Returns an array of LookupTypes available - -=cut - - -sub LookupTypes { - my $self = shift; - return keys %FRIENDLY_OBJECT_TYPES; -} - -my @FriendlyObjectTypes = ( - "[_1] objects", # loc - "[_1]'s [_2] objects", # loc - "[_1]'s [_2]'s [_3] objects", # loc -); - -=head2 FriendlyTypeLookup - -=cut - -sub FriendlyLookupType { - my $self = shift; - my $lookup = shift || $self->LookupType; - - return ($self->loc( $FRIENDLY_OBJECT_TYPES{$lookup} )) - if (defined $FRIENDLY_OBJECT_TYPES{$lookup} ); - - my @types = map { s/^RT::// ? $self->loc($_) : $_ } - grep { defined and length } - split( /-/, $lookup ) - or return; - return ( $self->loc( $FriendlyObjectTypes[$#types], @types ) ); -} - - -=head2 AddToObject OBJECT - -Add this custom field as a custom field for a single object, such as a queue or group. - -Takes an object - -=cut - - -sub AddToObject { - my $self = shift; - my $object = shift; - my $id = $object->Id || 0; - - unless (index($self->LookupType, ref($object)) == 0) { - return ( 0, $self->loc('Lookup type mismatch') ); - } - - unless ( $object->CurrentUserHasRight('AssignCustomFields') ) { - return ( 0, $self->loc('Permission Denied') ); - } - - my $ObjectCF = RT::ObjectCustomField->new( $self->CurrentUser ); - - $ObjectCF->LoadByCols( ObjectId => $id, CustomField => $self->Id ); - if ( $ObjectCF->Id ) { - return ( 0, $self->loc("That is already the current value") ); - } - my ( $oid, $msg ) = - $ObjectCF->Create( ObjectId => $id, CustomField => $self->Id ); - - return ( $oid, $msg ); -} - - -=head2 RemoveFromObject OBJECT - -Remove this custom field for a single object, such as a queue or group. - -Takes an object - -=cut - - -sub RemoveFromObject { - my $self = shift; - my $object = shift; - my $id = $object->Id || 0; - - unless (index($self->LookupType, ref($object)) == 0) { - return ( 0, $self->loc('Object type mismatch') ); - } - - unless ( $object->CurrentUserHasRight('AssignCustomFields') ) { - return ( 0, $self->loc('Permission Denied') ); - } - - my $ObjectCF = RT::ObjectCustomField->new( $self->CurrentUser ); - - $ObjectCF->LoadByCols( ObjectId => $id, CustomField => $self->Id ); - unless ( $ObjectCF->Id ) { - return ( 0, $self->loc("This custom field does not apply to that object") ); - } - # XXX: Delete doesn't return anything - my ( $oid, $msg ) = $ObjectCF->Delete; - - return ( $oid, $msg ); -} - -# {{{ AddValueForObject - -=head2 AddValueForObject HASH - -Adds a custom field value for a record object of some kind. -Takes a param hash of - -Required: - - Object - Content - -Optional: - - LargeContent - ContentType - -=cut - -sub AddValueForObject { - my $self = shift; - my %args = ( - Object => undef, - Content => undef, - LargeContent => undef, - ContentType => undef, - @_ - ); - my $obj = $args{'Object'} or return; - - unless ( $self->CurrentUserHasRight('ModifyCustomField') ) { - return ( 0, $self->loc('Permission Denied') ); - } - - unless ( $self->MatchPattern($args{Content}) ) { - return ( 0, $self->loc('Input must match [_1]', $self->FriendlyPattern) ); - } - - $RT::Handle->BeginTransaction; - - my $current_values = $self->ValuesForObject($obj); - - if ( $self->MaxValues ) { - my $extra_values = ( $current_values->Count + 1 ) - $self->MaxValues; - - # (The +1 is for the new value we're adding) - - # If we have a set of current values and we've gone over the maximum - # allowed number of values, we'll need to delete some to make room. - # which former values are blown away is not guaranteed - - while ($extra_values) { - my $extra_item = $current_values->Next; - - unless ( $extra_item->id ) { - $RT::Logger->crit( -"We were just asked to delete a custom fieldvalue that doesn't exist!" - ); - $RT::Handle->Rollback(); - return (undef); - } - $extra_item->Delete; - $extra_values--; - - } - } - my $newval = RT::ObjectCustomFieldValue->new( $self->CurrentUser ); - my $val = $newval->Create( - ObjectType => ref($obj), - ObjectId => $obj->Id, - Content => $args{'Content'}, - LargeContent => $args{'LargeContent'}, - ContentType => $args{'ContentType'}, - CustomField => $self->Id - ); - - unless ($val) { - $RT::Handle->Rollback(); - return ($val); - } - - $RT::Handle->Commit(); - return ($val); - -} - -# }}} - -# {{{ MatchPattern - -=head2 MatchPattern STRING - -Tests the incoming string against the Pattern of this custom field object -and returns a boolean; returns true if the Pattern is empty. - -=cut - -sub MatchPattern { - my $self = shift; - my $regex = $self->Pattern; - - return 1 if !length($regex); - return ($_[0] =~ $regex); -} - - -# }}} - -# {{{ FriendlyPattern - -=head2 FriendlyPattern - -Prettify the pattern of this custom field, by taking the text in C<(?#text)> -and localizing it. - -=cut - -sub FriendlyPattern { - my $self = shift; - my $regex = $self->Pattern; - - return '' if !length($regex); - if ($regex =~ /\(\?#([^)]*)\)/) { - return '[' . $self->loc($1) . ']'; - } - else { - return $regex; - } -} - - -# }}} - -# {{{ DeleteValueForObject - -=head2 DeleteValueForObject HASH - -Deletes a custom field value for a ticket. Takes a param hash of Object and Content - -Returns a tuple of (STATUS, MESSAGE). If the call succeeded, the STATUS is true. otherwise it's false - -=cut - -sub DeleteValueForObject { - my $self = shift; - my %args = ( Object => undef, - Content => undef, - Id => undef, - @_ ); - - - unless ($self->CurrentUserHasRight('ModifyCustomField')) { - return (0, $self->loc('Permission Denied')); - } - - my $oldval = RT::ObjectCustomFieldValue->new($self->CurrentUser); - - if (my $id = $args{'Id'}) { - $oldval->Load($id); - } - unless ($oldval->id) { - $oldval->LoadByObjectContentAndCustomField( - Object => $args{'Object'}, - Content => $args{'Content'}, - CustomField => $self->Id, - ); - } - - - # check to make sure we found it - unless ($oldval->Id) { - return(0, $self->loc("Custom field value [_1] could not be found for custom field [_2]", $args{'Content'}, $self->Name)); - } - - # for single-value fields, we need to validate that empty string is a valid value for it - if ( $self->SingleValue and not $self->MatchPattern( '' ) ) { - return ( 0, $self->loc('Input must match [_1]', $self->FriendlyPattern) ); - } - - # delete it - - my $ret = $oldval->Delete(); - unless ($ret) { - return(0, $self->loc("Custom field value could not be found")); - } - return($oldval->Id, $self->loc("Custom field value deleted")); -} - - -=head2 ValuesForObject OBJECT - -Return an RT::ObjectCustomFieldValues object containing all of this custom field's values for OBJECT - -=cut - -sub ValuesForObject { - my $self = shift; - my $object = shift; - - my $values = new RT::ObjectCustomFieldValues($self->CurrentUser); - unless ($self->CurrentUserHasRight('SeeCustomField')) { - # Return an empty object if they have no rights to see - return ($values); - } - - - $values->LimitToCustomField($self->Id); - $values->LimitToEnabled(); - $values->LimitToObject($object); - - return ($values); -} - - -=head2 _ForObjectType PATH FRIENDLYNAME - -Tell RT that a certain object accepts custom fields - -Examples: - - 'RT::Queue-RT::Ticket' => "Tickets", # loc - 'RT::Queue-RT::Ticket-RT::Transaction' => "Ticket Transactions", # loc - 'RT::User' => "Users", # loc - 'RT::Group' => "Groups", # loc - -This is a class method. - -=cut - -sub _ForObjectType { - my $self = shift; - my $path = shift; - my $friendly_name = shift; - - $FRIENDLY_OBJECT_TYPES{$path} = $friendly_name; - -} - - -=head2 IncludeContentForValue [VALUE] (and SetIncludeContentForValue) - -Gets or sets the C for this custom field. RT -uses this field to automatically include content into the user's browser -as they display records with custom fields in RT. - -=cut - -sub SetIncludeContentForValue { - shift->IncludeContentForValue(@_); -} -sub IncludeContentForValue{ - my $self = shift; - $self->_URLTemplate('IncludeContentForValue', @_); -} - - - -=head2 LinkValueTo [VALUE] (and SetLinkValueTo) - -Gets or sets the C for this custom field. RT -uses this field to make custom field values into hyperlinks in the user's -browser as they display records with custom fields in RT. - -=cut - - -sub SetLinkValueTo { - shift->LinkValueTo(@_); -} - -sub LinkValueTo { - my $self = shift; - $self->_URLTemplate('LinkValueTo', @_); - -} - - -=head2 _URLTemplate NAME [VALUE] - -With one argument, returns the _URLTemplate named C, but only if -the current user has the right to see this custom field. - -With two arguments, attemptes to set the relevant template value. - -=cut - - - -sub _URLTemplate { - my $self = shift; - my $template_name = shift; - if (@_) { - - my $value = shift; - unless ( $self->CurrentUserHasRight('AdminCustomField') ) { - return ( 0, $self->loc('Permission Denied') ); - } - $self->SetAttribute( Name => $template_name, Content => $value ); - return ( 1, $self->loc('Updated') ); - } else { - unless ( $self->id && $self->CurrentUserHasRight('SeeCustomField') ) { - return (undef); - } - - my @attr = $self->Attributes->Named($template_name); - my $attr = shift @attr; - - if ($attr) { return $attr->Content } - - } -} -1; diff --git a/rt/lib/RT/CustomFields.pm b/rt/lib/RT/CustomFields.pm deleted file mode 100644 index fcab5a0be..000000000 --- a/rt/lib/RT/CustomFields.pm +++ /dev/null @@ -1,150 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::CustomFields -- Class Description - -=head1 SYNOPSIS - - use RT::CustomFields - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::CustomFields; - -use RT::SearchBuilder; -use RT::CustomField; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'CustomFields'; - $self->{'primary_key'} = 'id'; - - - - # By default, order by SortOrder - $self->OrderByCols( - { ALIAS => 'main', - FIELD => 'SortOrder', - ORDER => 'ASC' }, - { ALIAS => 'main', - FIELD => 'id', - ORDER => 'ASC' }, - ); - - return ( $self->SUPER::_Init(@_) ); -} - - -=head2 NewItem - -Returns an empty new RT::CustomField item - -=cut - -sub NewItem { - my $self = shift; - return(RT::CustomField->new($self->CurrentUser)); -} - - eval "require RT::CustomFields_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomFields_Overlay.pm}) { - die $@; - }; - - eval "require RT::CustomFields_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomFields_Vendor.pm}) { - die $@; - }; - - eval "require RT::CustomFields_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/CustomFields_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::CustomFields_Overlay, RT::CustomFields_Vendor, RT::CustomFields_Local - -=cut - - -1; diff --git a/rt/lib/RT/CustomFields_Overlay.pm b/rt/lib/RT/CustomFields_Overlay.pm deleted file mode 100644 index 16b86ba50..000000000 --- a/rt/lib/RT/CustomFields_Overlay.pm +++ /dev/null @@ -1,264 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::CustomFields - a collection of RT CustomField objects - -=head1 SYNOPSIS - - use RT::CustomFields; - -=head1 DESCRIPTION - -=head1 METHODS - - -=begin testing - -ok (require RT::CustomFields); - -=end testing - -=cut - - -package RT::CustomFields; - -use strict; -no warnings qw(redefine); -use DBIx::SearchBuilder::Unique; - - -sub _OCFAlias { - my $self = shift; - unless ($self->{_sql_ocfalias}) { - - $self->{'_sql_ocfalias'} = $self->NewAlias('ObjectCustomFields'); - $self->Join( ALIAS1 => 'main', - FIELD1 => 'id', - ALIAS2 => $self->_OCFAlias, - FIELD2 => 'CustomField' ); - } - return($self->{_sql_ocfalias}); -} - - -# {{{ sub LimitToGlobalOrQueue - -=head2 LimitToGlobalOrQueue QUEUEID - -Limits the set of custom fields found to global custom fields or those tied to the queue with ID QUEUEID - -=cut - -sub LimitToGlobalOrQueue { - my $self = shift; - my $queue = shift; - $self->LimitToGlobalOrObjectId( $queue ); - $self->LimitToLookupType( 'RT::Queue-RT::Ticket' ); -} - -# }}} - -# {{{ sub LimitToQueue - -=head2 LimitToQueue QUEUEID - -Takes a queue id (numerical) as its only argument. Makes sure that -Scopes it pulls out apply to this queue (or another that you've selected with -another call to this method - -=cut - -sub LimitToQueue { - my $self = shift; - my $queue = shift; - - $self->Limit (ALIAS => $self->_OCFAlias, - ENTRYAGGREGATOR => 'OR', - FIELD => 'ObjectId', - VALUE => "$queue") - if defined $queue; - $self->LimitToLookupType( 'RT::Queue-RT::Ticket' ); -} -# }}} - -# {{{ sub LimitToGlobal - -=head2 LimitToGlobal - -Makes sure that -Scopes it pulls out apply to all queues (or another that you've selected with -another call to this method or LimitToQueue - -=cut - - -sub LimitToGlobal { - my $self = shift; - - $self->Limit (ALIAS => $self->_OCFAlias, - ENTRYAGGREGATOR => 'OR', - FIELD => 'ObjectId', - VALUE => 0); - $self->LimitToLookupType( 'RT::Queue-RT::Ticket' ); -} -# }}} - - -# {{{ sub _DoSearch - -=head2 _DoSearch - -A subclass of DBIx::SearchBuilder::_DoSearch that makes sure that - _Disabled rows never get seen unless we're explicitly trying to see -them. - -=cut - -sub _DoSearch { - my $self = shift; - - #unless we really want to find disabled rows, make sure we\'re only finding enabled ones. - unless($self->{'find_disabled_rows'}) { - $self->LimitToEnabled(); - } - - return($self->SUPER::_DoSearch(@_)); - -} - -# }}} - -# {{{ sub Next - -=head2 Next - -Returns the next custom field that this user can see. - -=cut - -sub Next { - my $self = shift; - - - my $CF = $self->SUPER::Next(); - if ((defined($CF)) and (ref($CF))) { - - if ($CF->CurrentUserHasRight('SeeCustomField')) { - return($CF); - } - - #If the user doesn't have the right to show this queue - else { - return($self->Next()); - } - } - #if there never was any queue - else { - return(undef); - } - -} -# }}} - -sub LimitToLookupType { - my $self = shift; - my $lookup = shift; - - $self->Limit( FIELD => 'LookupType', VALUE => "$lookup" ); -} - -sub LimitToChildType { - my $self = shift; - my $lookup = shift; - - $self->Limit( FIELD => 'LookupType', VALUE => "$lookup" ); - $self->Limit( FIELD => 'LookupType', ENDSWITH => "$lookup" ); -} - -sub LimitToParentType { - my $self = shift; - my $lookup = shift; - - $self->Limit( FIELD => 'LookupType', VALUE => "$lookup" ); - $self->Limit( FIELD => 'LookupType', STARTSWITH => "$lookup" ); -} - -sub LimitToGlobalOrObjectId { - my $self = shift; - my $global_only = 1; - - - foreach my $id (@_) { - $self->Limit( ALIAS => $self->_OCFAlias, - FIELD => 'ObjectId', - OPERATOR => '=', - VALUE => $id || 0, - ENTRYAGGREGATOR => 'OR' ); - $global_only = 0 if $id; - } - - $self->Limit( ALIAS => $self->_OCFAlias, - FIELD => 'ObjectId', - OPERATOR => '=', - VALUE => 0, - ENTRYAGGREGATOR => 'OR' ) unless $global_only; - - $self->OrderByCols( - { ALIAS => $self->_OCFAlias, FIELD => 'ObjectId' }, - { ALIAS => $self->_OCFAlias, FIELD => 'SortOrder' }, - ); - - # This doesn't work on postgres. - #$self->OrderBy( ALIAS => $class_cfs , FIELD => "SortOrder", ORDER => 'ASC'); - -} - -1; - diff --git a/rt/lib/RT/Date.pm b/rt/lib/RT/Date.pm deleted file mode 100644 index 355370ada..000000000 --- a/rt/lib/RT/Date.pm +++ /dev/null @@ -1,557 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -=head1 NAME - - RT::Date - a simple Object Oriented date. - -=head1 SYNOPSIS - - use RT::Date - -=head1 DESCRIPTION - -RT Date is a simple Date Object designed to be speedy and easy for RT to use - -The fact that it assumes that a time of 0 means "never" is probably a bug. - -=begin testing - -ok (require RT::Date); - -=end testing - -=head1 METHODS - -=cut - - -package RT::Date; - -use Time::Local; - -use RT::Base; - -use strict; -use vars qw/@ISA/; -@ISA = qw/RT::Base/; - -use vars qw($MINUTE $HOUR $DAY $WEEK $MONTH $YEAR); - -$MINUTE = 60; -$HOUR = 60 * $MINUTE; -$DAY = 24 * $HOUR; -$WEEK = 7 * $DAY; -$MONTH = 4 * $WEEK; -$YEAR = 365 * $DAY; - -# {{{ sub new - -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); - $self->CurrentUser(@_); - $self->Unix(0); - return $self; -} - -# }}} - -# {{{ sub Set - -=head2 sub Set - -takes a param hash with the fields 'Format' and 'Value' - -if $args->{'Format'} is 'unix', takes the number of seconds since the epoch - -If $args->{'Format'} is ISO, tries to parse an ISO date. - -If $args->{'Format'} is 'unknown', require Time::ParseDate and make it figure -things out. This is a heavyweight operation that should never be called from -within RT's core. But it's really useful for something like the textbox date -entry where we let the user do whatever they want. - -If $args->{'Value'} is 0, assumes you mean never. - -=begin testing - -use_ok(RT::Date); -my $date = RT::Date->new($RT::SystemUser); -$date->Set(Format => 'unix', Value => '0'); -ok ($date->ISO eq '1970-01-01 00:00:00', "Set a date to midnight 1/1/1970 GMT"); - -=end testing - -=cut - -sub Set { - my $self = shift; - my %args = ( Format => 'unix', - Value => time, - @_ ); - if ( !$args{'Value'} - || ( ( $args{'Value'} =~ /^\d*$/ ) and ( $args{'Value'} == 0 ) ) ) { - $self->Unix(-1); - return ( $self->Unix() ); - } - - if ( $args{'Format'} =~ /^unix$/i ) { - $self->Unix( $args{'Value'} ); - } - - elsif ( $args{'Format'} =~ /^(sql|datemanip|iso)$/i ) { - $args{'Value'} =~ s!/!-!g; - - if (( $args{'Value'} =~ /^(\d{4}?)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/ ) - || ( $args{'Value'} =~ - /^(\d{4}?)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)$/ ) - || ( $args{'Value'} =~ - /^(\d{4}?)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)\+00$/ ) - || ($args{'Value'} =~ /^(\d{4}?)(\d\d)(\d\d)(\d\d):(\d\d):(\d\d)$/ ) - ) { - - my $year = $1; - my $mon = $2; - my $mday = $3; - my $hours = $4; - my $min = $5; - my $sec = $6; - - #timegm expects month as 0->11 - $mon--; - - #now that we've parsed it, deal with the case where everything - #was 0 - if ( $mon == -1 ) { - $self->Unix(-1); - } - else { - - #Dateamnip strings aren't in GMT. - if ( $args{'Format'} =~ /^datemanip$/i ) { - $self->Unix( - timelocal( $sec, $min, $hours, $mday, $mon, $year ) ); - } - - #ISO and SQL dates are in GMT - else { - $self->Unix( - timegm( $sec, $min, $hours, $mday, $mon, $year ) ); - } - - $self->Unix(-1) unless $self->Unix; - } - } - else { - use Carp; - Carp::cluck; - $RT::Logger->debug( - "Couldn't parse date $args{'Value'} as a $args{'Format'}"); - - } - } - elsif ( $args{'Format'} =~ /^unknown$/i ) { - require Time::ParseDate; - - #Convert it to an ISO format string - - my $date = Time::ParseDate::parsedate($args{'Value'}, - UK => $RT::DateDayBeforeMonth, - PREFER_PAST => $RT::AmbiguousDayInPast, - PREFER_FUTURE => !($RT::AmbiguousDayInPast)); - - #This date has now been set to a date in the _local_ timezone. - #since ISO dates are known to be in GMT (for RT's purposes); - - $RT::Logger->debug( "RT::Date used date::parse to make " - . $args{'Value'} - . " $date\n" ); - - return ( $self->Set( Format => 'unix', Value => "$date" ) ); - } - else { - die "Unknown Date format: " . $args{'Format'} . "\n"; - } - - return ( $self->Unix() ); -} - -# }}} - -# {{{ sub SetToMidnight - -=head2 SetToMidnight - -Sets the date to midnight (at the beginning of the day) GMT -Returns the unixtime at midnight. - -=cut - -sub SetToMidnight { - my $self = shift; - - use Time::Local; - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime($self->Unix); - $self->Unix(timegm (0,0,0,$mday,$mon,$year,$wday,$yday)); - - return ($self->Unix); - - -} - - -# }}} - -# {{{ sub SetToNow -sub SetToNow { - my $self = shift; - return($self->Set(Format => 'unix', Value => time)) -} -# }}} - -# {{{ sub Diff - -=head2 Diff - -Takes either an RT::Date object or the date in unixtime format as a string - -Returns the differnce between $self and that time as a number of seconds - -=cut - -sub Diff { - my $self = shift; - my $other = shift; - - if (ref($other) eq 'RT::Date') { - $other=$other->Unix; - } - return ($self->Unix - $other); -} -# }}} - -# {{{ sub DiffAsString - -=head2 sub DiffAsString - -Takes either an RT::Date object or the date in unixtime format as a string - -Returns the differnce between $self and that time as a number of seconds as -as string fit for human consumption - -=cut - -sub DiffAsString { - my $self = shift; - my $other = shift; - - - if ($other < 1) { - return (""); - } - if ($self->Unix < 1) { - return(""); - } - my $diff = $self->Diff($other); - - return ($self->DurationAsString($diff)); -} -# }}} - -# {{{ sub DurationAsString - - -=head2 DurationAsString - -Takes a number of seconds. returns a string describing that duration - -=cut - -sub DurationAsString { - - my $self = shift; - my $duration = shift; - - my ( $negative, $s ); - - $negative = 1 if ( $duration < 0 ); - - $duration = abs($duration); - - my $time_unit; - if ( $duration < $MINUTE ) { - $s = $duration; - $time_unit = $self->loc("sec"); - } - elsif ( $duration < ( 2 * $HOUR ) ) { - $s = int( $duration / $MINUTE ); - $time_unit = $self->loc("min"); - } - elsif ( $duration < ( 2 * $DAY ) ) { - $s = int( $duration / $HOUR ); - $time_unit = $self->loc("hours"); - } - elsif ( $duration < ( 2 * $WEEK ) ) { - $s = int( $duration / $DAY ); - $time_unit = $self->loc("days"); - } - elsif ( $duration < ( 2 * $MONTH ) ) { - $s = int( $duration / $WEEK ); - $time_unit = $self->loc("weeks"); - } - elsif ( $duration < $YEAR ) { - $s = int( $duration / $MONTH ); - $time_unit = $self->loc("months"); - } - else { - $s = int( $duration / $YEAR ); - $time_unit = $self->loc("years"); - } - if (0) { # For now, never display the "AGO" # $negative) { - return $self->loc( "[_1] [_2] ago", $s, $time_unit ); - } - else { - return $self->loc( "[_1] [_2]", $s, $time_unit ); - } -} - -# }}} - -# {{{ sub AgeAsString - -=head2 sub AgeAsString - -Takes nothing - -Returns a string that's the differnce between the time in the object and now - -=cut - -sub AgeAsString { - my $self = shift; - return ($self->DiffAsString(time)); - } -# }}} - -# {{{ sub AsString - -=head2 sub AsString - -Returns the object\'s time as a string with the current timezone. - -=cut - -sub AsString { - my $self = shift; - return ($self->loc("Not set")) if ($self->Unix <= 0); - - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($self->Unix); - - return $self->loc("[_1] [_2] [_3] [_4]:[_5]:[_6] [_7]", $self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)); -} -# }}} - -# {{{ GetWeekday -=head2 GetWeekday DAY - -Takes an integer day of week and returns a localized string for that day of week - -=cut - -sub GetWeekday { - my $self = shift; - my $dow = shift; - - return $self->loc('Mon.') if ($dow == 1); - return $self->loc('Tue.') if ($dow == 2); - return $self->loc('Wed.') if ($dow == 3); - return $self->loc('Thu.') if ($dow == 4); - return $self->loc('Fri.') if ($dow == 5); - return $self->loc('Sat.') if ($dow == 6); - return $self->loc('Sun.') if ($dow == 0); -} - -# }}} - -# {{{ GetMonth -=head2 GetMonth DAY - -Takes an integer month and returns a localized string for that month - -=cut - -sub GetMonth { - my $self = shift; - my $mon = shift; - - # We do this rather than an array so that we don't call localize 12x what we need to - return $self->loc('Jan.') if ($mon == 0); - return $self->loc('Feb.') if ($mon == 1); - return $self->loc('Mar.') if ($mon == 2); - return $self->loc('Apr.') if ($mon == 3); - return $self->loc('May.') if ($mon == 4); - return $self->loc('Jun.') if ($mon == 5); - return $self->loc('Jul.') if ($mon == 6); - return $self->loc('Aug.') if ($mon == 7); - return $self->loc('Sep.') if ($mon == 8); - return $self->loc('Oct.') if ($mon == 9); - return $self->loc('Nov.') if ($mon == 10); - return $self->loc('Dec.') if ($mon == 11); -} - -# }}} - -# {{{ sub AddSeconds - -=head2 sub AddSeconds - -Takes a number of seconds as a string - -Returns the new time - -=cut - -sub AddSeconds { - my $self = shift; - my $delta = shift; - - $self->Set(Format => 'unix', Value => ($self->Unix + $delta)); - - return ($self->Unix); - - -} - -# }}} - -# {{{ sub AddDays - -=head2 AddDays $DAYS - -Adds 24 hours * $DAYS to the current time - -=cut - -sub AddDays { - my $self = shift; - my $days = shift; - $self->AddSeconds($days * $DAY); - -} - -# }}} - -# {{{ sub AddDay - -=head2 AddDay - -Adds 24 hours to the current time - -=cut - -sub AddDay { - my $self = shift; - $self->AddSeconds($DAY); - -} - -# }}} - -# {{{ sub Unix - -=head2 sub Unix [unixtime] - -Optionally takes a date in unix seconds since the epoch format. -Returns the number of seconds since the epoch - -=cut - -sub Unix { - my $self = shift; - - $self->{'time'} = shift if (@_); - - return ($self->{'time'}); -} -# }}} - -# {{{ sub ISO - -=head2 ISO - -Takes nothing - -Returns the object's date in ISO format - -=cut - -sub ISO { - my $self=shift; - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst, $date) ; - - return ('1970-01-01 00:00:00') if ($self->Unix == -1); - - # 0 1 2 3 4 5 6 7 8 - ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($self->Unix); - #make the year YYYY - $year+=1900; - - #the month needs incrementing, as gmtime returns 0-11 - $mon++; - - $date = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $year,$mon,$mday, $hour,$min,$sec); - - return ($date); -} - -# }}} - - -# {{{ sub LocalTimezone -=head2 LocalTimezone - - Returns the current timezone. For now, draws off a system timezone, RT::Timezone. Eventually, this may -pull from a 'Timezone' attribute of the CurrentUser - -=cut - -sub LocalTimezone { - my $self = shift; - - return $self->CurrentUser->Timezone - if $self->CurrentUser and $self->CurrentUser->can('Timezone'); - - return ($RT::Timezone); -} - -# }}} - -eval "require RT::Date_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Date_Vendor.pm}); -eval "require RT::Date_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Date_Local.pm}); - -1; diff --git a/rt/lib/RT/EmailParser.pm b/rt/lib/RT/EmailParser.pm deleted file mode 100644 index 39c610580..000000000 --- a/rt/lib/RT/EmailParser.pm +++ /dev/null @@ -1,636 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::EmailParser; - - -use base qw/RT::Base/; - -use strict; -use Mail::Address; -use MIME::Entity; -use MIME::Head; -use MIME::Parser; -use File::Temp qw/tempdir/; - -=head1 NAME - - RT::EmailParser - helper functions for parsing parts from incoming - email messages - -=head1 SYNOPSIS - - -=head1 DESCRIPTION - - -=begin testing - -ok(require RT::EmailParser); - -=end testing - - -=head1 METHODS - -=head2 new - -Returns a new RT::EmailParser object - -=cut - -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); - return $self; -} - - -# {{{ sub SmartParseMIMEEntityFromScalar - -=head2 SmartParseMIMEEntityFromScalar { Message => SCALAR_REF, Decode => BOOL } - -Parse a message stored in a scalar from scalar_ref - -=cut - -sub SmartParseMIMEEntityFromScalar { - my $self = shift; - my %args = ( Message => undef, Decode => 1, @_ ); - - my ( $fh, $temp_file ); - eval { - - for ( 1 .. 10 ) { - - # on NFS and NTFS, it is possible that tempfile() conflicts - # with other processes, causing a race condition. we try to - # accommodate this by pausing and retrying. - last - if ( $fh, $temp_file ) = - eval { File::Temp::tempfile( undef, UNLINK => 0 ) }; - sleep 1; - } - if ($fh) { - - #thank you, windows - binmode $fh; - $fh->autoflush(1); - print $fh $args{'Message'}; - close($fh); - if ( -f $temp_file ) { - - # We have to trust the temp file's name -- untaint it - $temp_file =~ /(.*)/; - $self->ParseMIMEEntityFromFile( $1, $args{'Decode'} ); - unlink($1); - } - } - }; - - #If for some reason we weren't able to parse the message using a temp file - # try it with a scalar - if ( $@ || !$self->Entity ) { - $self->ParseMIMEEntityFromScalar( $args{'Message'}, $args{'Decode'} ); - } - -} - -# }}} - -# {{{ sub ParseMIMEEntityFromSTDIN - -=head2 ParseMIMEEntityFromSTDIN - -Parse a message from standard input - -=cut - -sub ParseMIMEEntityFromSTDIN { - my $self = shift; - my $postprocess = (@_ ? shift : 1); - return $self->ParseMIMEEntityFromFileHandle(\*STDIN, $postprocess); -} - -# }}} - -# {{{ ParseMIMEEntityFromScalar - -=head2 ParseMIMEEntityFromScalar $message - -Takes either a scalar or a reference to a scalr which contains a stringified MIME message. -Parses it. - -Returns true if it wins. -Returns false if it loses. - -=cut - -sub ParseMIMEEntityFromScalar { - my $self = shift; - my $message = shift; - my $postprocess = (@_ ? shift : 1); - $self->_ParseMIMEEntity($message,'parse_data', $postprocess); -} - -# }}} - -# {{{ ParseMIMEEntityFromFilehandle *FH - -=head2 ParseMIMEEntityFromFilehandle *FH - -Parses a mime entity from a filehandle passed in as an argument - -=cut - -sub ParseMIMEEntityFromFileHandle { - my $self = shift; - my $filehandle = shift; - my $postprocess = (@_ ? shift : 1); - $self->_ParseMIMEEntity($filehandle,'parse', $postprocess); -} - -# }}} - -# {{{ ParseMIMEEntityFromFile - -=head2 ParseMIMEEntityFromFile - -Parses a mime entity from a filename passed in as an argument - -=cut - -sub ParseMIMEEntityFromFile { - my $self = shift; - my $file = shift; - my $postprocess = (@_ ? shift : 1); - $self->_ParseMIMEEntity($file,'parse_open',$postprocess); -} - -# }}} - -# {{{ _ParseMIMEEntity -sub _ParseMIMEEntity { - my $self = shift; - my $message = shift; - my $method = shift; - my $postprocess = shift; - # Create a new parser object: - - my $parser = MIME::Parser->new(); - $self->_SetupMIMEParser($parser); - - - # TODO: XXX 3.0 we really need to wrap this in an eval { } - unless ( $self->{'entity'} = $parser->$method($message) ) { - $RT::Logger->crit("Couldn't parse MIME stream and extract the submessages"); - # Try again, this time without extracting nested messages - $parser->extract_nested_messages(0); - unless ( $self->{'entity'} = $parser->$method($message) ) { - $RT::Logger->crit("couldn't parse MIME stream"); - return ( undef); - } - } - if ($postprocess) { - $self->_PostProcessNewEntity() ; - } - -} - -# }}} - -# {{{ _PostProcessNewEntity - -=head2 _PostProcessNewEntity - -cleans up and postprocesses a newly parsed MIME Entity - -=cut - -sub _PostProcessNewEntity { - my $self = shift; - - #Now we've got a parsed mime object. - - # Unfold headers that are have embedded newlines - # Better do this before conversion or it will break - # with multiline encoded Subject (RFC2047) (fsck.com #5594) - - $self->Head->unfold; - - - # try to convert text parts into utf-8 charset - RT::I18N::SetMIMEEntityToEncoding($self->{'entity'}, 'utf-8'); - - - - -} - -# }}} - -# {{{ sub ParseTicketId - -sub ParseTicketId { - my $self = shift; - $RT::Logger->warnings("RT::EmailParser->ParseTicketId deprecated. You should be using RT::Interface::Email at (". join(":",caller).")"); - - require RT::Interface::Email; - RT::Interface::Email::ParseTicketId(@_); -} - -# }}} - - - -# {{{ ParseCcAddressesFromHead - -=head2 ParseCcAddressesFromHead HASHREF - -Takes a hashref object containing QueueObj, Head and CurrentUser objects. -Returns a list of all email addresses in the To and Cc -headers b the current Queue\'s email addresses, the CurrentUser\'s -email address and anything that the $RTAddressRegexp matches. - -=cut - -sub ParseCcAddressesFromHead { - - my $self = shift; - - my %args = ( - QueueObj => undef, - CurrentUser => undef, - @_ - ); - - my (@Addresses); - - my @ToObjs = Mail::Address->parse( $self->Head->get('To') ); - my @CcObjs = Mail::Address->parse( $self->Head->get('Cc') ); - - foreach my $AddrObj ( @ToObjs, @CcObjs ) { - my $Address = $AddrObj->address; - my $user = RT::User->new($RT::SystemUser); - $Address = $user->CanonicalizeEmailAddress($Address); - next if ( lc $args{'CurrentUser'}->EmailAddress eq lc $Address ); - next if ( lc $args{'QueueObj'}->CorrespondAddress eq lc $Address ); - next if ( lc $args{'QueueObj'}->CommentAddress eq lc $Address ); - next if ( $self->IsRTAddress($Address) ); - - push ( @Addresses, $Address ); - } - return (@Addresses); -} - -# }}} - -# {{{ ParseSenderAdddressFromHead - -=head2 ParseSenderAddressFromHead - -Takes a MIME::Header object. Returns a tuple: (user@host, friendly name) -of the From (evaluated in order of Reply-To:, From:, Sender) - -=cut - -sub ParseSenderAddressFromHead { - my $self = shift; - - #Figure out who's sending this message. - my $From = $self->Head->get('Reply-To') - || $self->Head->get('From') - || $self->Head->get('Sender'); - return ( $self->ParseAddressFromHeader($From) ); -} - -# }}} - -# {{{ ParseErrorsToAdddressFromHead - -=head2 ParseErrorsToAddressFromHead - -Takes a MIME::Header object. Return a single value : user@host -of the From (evaluated in order of Errors-To:,Reply-To:, From:, Sender) - -=cut - -sub ParseErrorsToAddressFromHead { - my $self = shift; - - #Figure out who's sending this message. - - foreach my $header ( 'Errors-To', 'Reply-To', 'From', 'Sender' ) { - - # If there's a header of that name - my $headerobj = $self->Head->get($header); - if ($headerobj) { - my ( $addr, $name ) = $self->ParseAddressFromHeader($headerobj); - - # If it's got actual useful content... - return ($addr) if ($addr); - } - } -} - -# }}} - -# {{{ ParseAddressFromHeader - -=head2 ParseAddressFromHeader ADDRESS - -Takes an address from $self->Head->get('Line') and returns a tuple: user@host, friendly name - -=cut - -sub ParseAddressFromHeader { - my $self = shift; - my $Addr = shift; - - # Perl 5.8.0 breaks when doing regex matches on utf8 - Encode::_utf8_off($Addr) if $] == 5.008; - my @Addresses = Mail::Address->parse($Addr); - - my $AddrObj = $Addresses[0]; - - unless ( ref($AddrObj) ) { - return ( undef, undef ); - } - - my $Name = ( $AddrObj->phrase || $AddrObj->comment || $AddrObj->address ); - - #Lets take the from and load a user object. - my $Address = $AddrObj->address; - - return ( $Address, $Name ); -} - -# }}} - -# {{{ IsRTAddress - -=head2 IsRTaddress ADDRESS - -Takes a single parameter, an email address. -Returns true if that address matches the $RTAddressRegexp. -Returns false, otherwise. - -=begin testing - -is(RT::EmailParser::IsRTAddress("","rt\@example.com"),1, "Regexp matched rt address" ); -is(RT::EmailParser::IsRTAddress("","frt\@example.com"),undef, "Regexp didn't match non-rt address" ); - -=end testing - -=cut - -sub IsRTAddress { - my $self = shift; - my $address = shift; - - # Example: the following rule would tell RT not to Cc - # "tickets@noc.example.com" - if ( defined($RT::RTAddressRegexp) && - $address =~ /$RT::RTAddressRegexp/i ) { - return(1); - } else { - return (undef); - } -} - -# }}} - - -# {{{ CullRTAddresses - -=head2 CullRTAddresses ARRAY - -Takes a single argument, an array of email addresses. -Returns the same array with any IsRTAddress()es weeded out. - -=begin testing - -@before = ("rt\@example.com", "frt\@example.com"); -@after = ("frt\@example.com"); -ok(eq_array(RT::EmailParser::CullRTAddresses("",@before),@after), "CullRTAddresses only culls RT addresses"); - -=end testing - -=cut - -sub CullRTAddresses { - my $self = shift; - my @addresses= (@_); - my @addrlist; - - foreach my $addr( @addresses ) { - # We use the class instead of the instance - # because sloppy code calls this method - # without a $self - push (@addrlist, $addr) unless RT::EmailParser->IsRTAddress($addr); - } - return (@addrlist); -} - -# }}} - - -# {{{ LookupExternalUserInfo - - -# LookupExternalUserInfo is a site-definable method for synchronizing -# incoming users with an external data source. -# -# This routine takes a tuple of EmailAddress and FriendlyName -# EmailAddress is the user's email address, ususally taken from -# an email message's From: header. -# FriendlyName is a freeform string, ususally taken from the "comment" -# portion of an email message's From: header. -# -# If you define an AutoRejectRequest template, RT will use this -# template for the rejection message. - - -=head2 LookupExternalUserInfo - - LookupExternalUserInfo is a site-definable method for synchronizing - incoming users with an external data source. - - This routine takes a tuple of EmailAddress and FriendlyName - EmailAddress is the user's email address, ususally taken from - an email message's From: header. - FriendlyName is a freeform string, ususally taken from the "comment" - portion of an email message's From: header. - - It returns (FoundInExternalDatabase, ParamHash); - - FoundInExternalDatabase must be set to 1 before return if the user - was found in the external database. - - ParamHash is a Perl parameter hash which can contain at least the - following fields. These fields are used to populate RT's users - database when the user is created. - - EmailAddress is the email address that RT should use for this user. - Name is the 'Name' attribute RT should use for this user. - 'Name' is used for things like access control and user lookups. - RealName is what RT should display as the user's name when displaying - 'friendly' names - -=cut - -sub LookupExternalUserInfo { - my $self = shift; - my $EmailAddress = shift; - my $RealName = shift; - - my $FoundInExternalDatabase = 1; - my %params; - - #Name is the RT username you want to use for this user. - $params{'Name'} = $EmailAddress; - $params{'EmailAddress'} = $EmailAddress; - $params{'RealName'} = $RealName; - - # See RT's contributed code for examples. - # http://www.fsck.com/pub/rt/contrib/ - return ($FoundInExternalDatabase, %params); -} - -# }}} - -# {{{ Accessor methods for parsed email messages - -=head2 Head - -Return the parsed head from this message - -=cut - -sub Head { - my $self = shift; - return $self->Entity->head; -} - -=head2 Entity - -Return the parsed Entity from this message - -=cut - -sub Entity { - my $self = shift; - return $self->{'entity'}; -} - -# }}} - -# {{{ _SetupMIMEParser - -=head2 _SetupMIMEParser $parser - -A private instance method which sets up a mime parser to do its job - -=cut - - - ## TODO: Does it make sense storing to disk at all? After all, we - ## need to put each msg as an in-core scalar before saving it to - ## the database, don't we? - - ## At the same time, we should make sure that we nuke attachments - ## Over max size and return them - -sub _SetupMIMEParser { - my $self = shift; - my $parser = shift; - - # Set up output directory for files: - - my $tmpdir = File::Temp::tempdir( TMPDIR => 1, CLEANUP => 1 ); - push ( @{ $self->{'AttachmentDirs'} }, $tmpdir ); - $parser->output_dir($tmpdir); - $parser->filer->ignore_filename(1); - - #If someone includes a message, extract it - $parser->extract_nested_messages(1); - - $parser->extract_uuencode(1); ### default is false - - # Set up the prefix for files with auto-generated names: - $parser->output_prefix("part"); - - # do _not_ store each msg as in-core scalar; - - $parser->output_to_core(0); - - # From the MIME::Parser docs: - # "Normally, tmpfiles are created when needed during parsing, and destroyed automatically when they go out of scope" - # Turns out that the default is to recycle tempfiles - # Temp files should never be recycled, especially when running under perl taint checking - - $parser->tmp_recycling(0) if $parser->can('tmp_recycling'); - -} - -# }}} - -sub DESTROY { - my $self = shift; - File::Path::rmtree([@{$self->{'AttachmentDirs'}}],0,1); -} - - - -eval "require RT::EmailParser_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/EmailParser_Vendor.pm}); -eval "require RT::EmailParser_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/EmailParser_Local.pm}); - -1; diff --git a/rt/lib/RT/Extension/ActivityReports.pm b/rt/lib/RT/Extension/ActivityReports.pm deleted file mode 100644 index 52d8ba6ab..000000000 --- a/rt/lib/RT/Extension/ActivityReports.pm +++ /dev/null @@ -1,3 +0,0 @@ -package RT::Extension::ActivityReports; - -our $VERSION = '0.2'; diff --git a/rt/lib/RT/Group.pm b/rt/lib/RT/Group.pm deleted file mode 100755 index 4dcef3f07..000000000 --- a/rt/lib/RT/Group.pm +++ /dev/null @@ -1,258 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::Group - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::Group; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('Groups'); - $self->SUPER::_Init(@_); -} - - - - - -=item Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(200) 'Name'. - varchar(255) 'Description'. - varchar(64) 'Domain'. - varchar(64) 'Type'. - varchar(64) 'Instance'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Name => '', - Description => '', - Domain => '', - Type => '', - Instance => '', - - @_); - $self->SUPER::Create( - Name => $args{'Name'}, - Description => $args{'Description'}, - Domain => $args{'Domain'}, - Type => $args{'Type'}, - Instance => $args{'Instance'}, -); - -} - - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item Name - -Returns the current value of Name. -(In the database, Name is stored as varchar(200).) - - - -=item SetName VALUE - - -Set Name to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Name will be stored as a varchar(200).) - - -=cut - - -=item Description - -Returns the current value of Description. -(In the database, Description is stored as varchar(255).) - - - -=item SetDescription VALUE - - -Set Description to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Description will be stored as a varchar(255).) - - -=cut - - -=item Domain - -Returns the current value of Domain. -(In the database, Domain is stored as varchar(64).) - - - -=item SetDomain VALUE - - -Set Domain to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Domain will be stored as a varchar(64).) - - -=cut - - -=item Type - -Returns the current value of Type. -(In the database, Type is stored as varchar(64).) - - - -=item SetType VALUE - - -Set Type to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Type will be stored as a varchar(64).) - - -=cut - - -=item Instance - -Returns the current value of Instance. -(In the database, Instance is stored as varchar(64).) - - - -=item SetInstance VALUE - - -Set Instance to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Instance will be stored as a varchar(64).) - - -=cut - - - -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, - Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - Domain => - {read => 1, write => 1, type => 'varchar(64)', default => ''}, - Type => - {read => 1, write => 1, type => 'varchar(64)', default => ''}, - Instance => - {read => 1, write => 1, type => 'varchar(64)', default => ''}, - - } -}; - - - eval "require RT::Group_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Group_Overlay.pm}) { - die $@; - }; - - eval "require RT::Group_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Group_Vendor.pm}) { - die $@; - }; - - eval "require RT::Group_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Group_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Group_Overlay, RT::Group_Vendor, RT::Group_Local - -=cut - - -1; diff --git a/rt/lib/RT/GroupMember.pm b/rt/lib/RT/GroupMember.pm deleted file mode 100755 index 8de1a73fe..000000000 --- a/rt/lib/RT/GroupMember.pm +++ /dev/null @@ -1,189 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::GroupMember - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::GroupMember; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('GroupMembers'); - $self->SUPER::_Init(@_); -} - - - - - -=item Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - int(11) 'GroupId'. - int(11) 'MemberId'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - GroupId => '0', - MemberId => '0', - - @_); - $self->SUPER::Create( - GroupId => $args{'GroupId'}, - MemberId => $args{'MemberId'}, -); - -} - - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item GroupId - -Returns the current value of GroupId. -(In the database, GroupId is stored as int(11).) - - - -=item SetGroupId VALUE - - -Set GroupId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, GroupId will be stored as a int(11).) - - -=cut - - -=item MemberId - -Returns the current value of MemberId. -(In the database, MemberId is stored as int(11).) - - - -=item SetMemberId VALUE - - -Set MemberId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, MemberId will be stored as a int(11).) - - -=cut - - - -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - GroupId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - MemberId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - - } -}; - - - eval "require RT::GroupMember_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/GroupMember_Overlay.pm}) { - die $@; - }; - - eval "require RT::GroupMember_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/GroupMember_Vendor.pm}) { - die $@; - }; - - eval "require RT::GroupMember_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/GroupMember_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::GroupMember_Overlay, RT::GroupMember_Vendor, RT::GroupMember_Local - -=cut - - -1; diff --git a/rt/lib/RT/GroupMember_Overlay.pm b/rt/lib/RT/GroupMember_Overlay.pm deleted file mode 100644 index 1cc0309f4..000000000 --- a/rt/lib/RT/GroupMember_Overlay.pm +++ /dev/null @@ -1,390 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::GroupMember - a member of an RT Group - -=head1 SYNOPSIS - -RT::GroupMember should never be called directly. It should ONLY -only be accessed through the helper functions in RT::Group; - -If you're operating on an RT::GroupMember object yourself, you B -doing something wrong. - -=head1 DESCRIPTION - - - - -=head1 METHODS - - -=begin testing - -ok (require RT::GroupMember); - -=end testing - - -=cut - - -package RT::GroupMember; - -use strict; -no warnings qw(redefine); -use RT::CachedGroupMembers; - -# {{{ sub Create - -=head2 Create { Group => undef, Member => undef } - -Add a Principal to the group Group. -if the Principal is a group, automatically inserts all -members of the principal into the cached members table recursively down. - -Both Group and Member are expected to be RT::Principal objects - -=cut - -sub Create { - my $self = shift; - my %args = ( - Group => undef, - Member => undef, - InsideTransaction => undef, - @_ - ); - - unless ($args{'Group'} && - UNIVERSAL::isa($args{'Group'}, 'RT::Principal') && - $args{'Group'}->Id ) { - - $RT::Logger->warning("GroupMember::Create called with a bogus Group arg"); - return (undef); - } - - unless($args{'Group'}->IsGroup) { - $RT::Logger->warning("Someone tried to add a member to a user instead of a group"); - return (undef); - } - - unless ($args{'Member'} && - UNIVERSAL::isa($args{'Member'}, 'RT::Principal') && - $args{'Member'}->Id) { - $RT::Logger->warning("GroupMember::Create called with a bogus Principal arg"); - return (undef); - } - - - #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - # TODO what about the groups key cache? - RT::Principal->InvalidateACLCache(); - - $RT::Handle->BeginTransaction() unless ($args{'InsideTransaction'}); - - # We really need to make sure we don't add any members to this group - # that contain the group itself. that would, um, suck. - # (and recurse infinitely) Later, we can add code to check this in the - # cache and bail so we can support cycling directed graphs - - if ($args{'Member'}->IsGroup) { - my $member_object = $args{'Member'}->Object; - if ($member_object->HasMemberRecursively($args{'Group'})) { - $RT::Logger->debug("Adding that group would create a loop"); - return(undef); - } - elsif ( $args{'Member'}->Id == $args{'Group'}->Id) { - $RT::Logger->debug("Can't add a group to itself"); - return(undef); - } - } - - - my $id = $self->SUPER::Create( - GroupId => $args{'Group'}->Id, - MemberId => $args{'Member'}->Id - ); - - unless ($id) { - $RT::Handle->Rollback() unless ($args{'InsideTransaction'}); - return (undef); - } - - my $cached_member = RT::CachedGroupMember->new( $self->CurrentUser ); - my $cached_id = $cached_member->Create( - Member => $args{'Member'}, - Group => $args{'Group'}, - ImmediateParent => $args{'Group'}, - Via => '0' - ); - - - #When adding a member to a group, we need to go back - #and popuplate the CachedGroupMembers of all the groups that group is part of . - - my $cgm = RT::CachedGroupMembers->new( $self->CurrentUser ); - - # find things which have the current group as a member. - # $group is an RT::Principal for the group. - $cgm->LimitToGroupsWithMember( $args{'Group'}->Id ); - - while ( my $parent_member = $cgm->Next ) { - my $parent_id = $parent_member->MemberId; - my $via = $parent_member->Id; - my $group_id = $parent_member->GroupId; - - my $other_cached_member = - RT::CachedGroupMember->new( $self->CurrentUser ); - my $other_cached_id = $other_cached_member->Create( - Member => $args{'Member'}, - Group => $parent_member->GroupObj, - ImmediateParent => $parent_member->MemberObj, - Via => $parent_member->Id - ); - unless ($other_cached_id) { - $RT::Logger->err( "Couldn't add " . $args{'Member'} - . " as a submember of a supergroup" ); - $RT::Handle->Rollback() unless ($args{'InsideTransaction'}); - return (undef); - } - } - - unless ($cached_id) { - $RT::Handle->Rollback() unless ($args{'InsideTransaction'}); - return (undef); - } - - $RT::Handle->Commit() unless ($args{'InsideTransaction'}); - - return ($id); -} - -# }}} - -# {{{ sub _StashUser - -=head2 _StashUser PRINCIPAL - -Create { Group => undef, Member => undef } - -Creates an entry in the groupmembers table, which lists a user -as a member of himself. This makes ACL checks a whole bunch easier. -This happens once on user create and never ever gets yanked out. - -PRINCIPAL is expected to be an RT::Principal object for a user - -This routine expects to be called inside a transaction by RT::User->Create - -=cut - -sub _StashUser { - my $self = shift; - my %args = ( - Group => undef, - Member => undef, - @_ - ); - - #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - # TODO what about the groups key cache? - RT::Principal->InvalidateACLCache(); - - - # We really need to make sure we don't add any members to this group - # that contain the group itself. that would, um, suck. - # (and recurse infinitely) Later, we can add code to check this in the - # cache and bail so we can support cycling directed graphs - - my $id = $self->SUPER::Create( - GroupId => $args{'Group'}->Id, - MemberId => $args{'Member'}->Id, - ); - - unless ($id) { - return (undef); - } - - my $cached_member = RT::CachedGroupMember->new( $self->CurrentUser ); - my $cached_id = $cached_member->Create( - Member => $args{'Member'}, - Group => $args{'Group'}, - ImmediateParent => $args{'Group'}, - Via => '0' - ); - - unless ($cached_id) { - return (undef); - } - - return ($id); -} - -# }}} - -# {{{ sub Delete - -=head2 Delete - -Takes no arguments. deletes the currently loaded member from the -group in question. - -Expects to be called _outside_ a transaction - -=cut - -sub Delete { - my $self = shift; - - - $RT::Handle->BeginTransaction(); - - # Find all occurrences of this member as a member of this group - # in the cache and nuke them, recursively. - - # The following code will delete all Cached Group members - # where this member's group is _not_ the primary group - # (Ie if we're deleting C as a member of B, and B happens to be - # a member of A, will delete C as a member of A without touching - # C as a member of B - - my $cached_submembers = RT::CachedGroupMembers->new( $self->CurrentUser ); - - $cached_submembers->Limit( - FIELD => 'MemberId', - OPERATOR => '=', - VALUE => $self->MemberObj->Id - ); - - $cached_submembers->Limit( - FIELD => 'ImmediateParentId', - OPERATOR => '=', - VALUE => $self->GroupObj->Id - ); - - - - - - while ( my $item_to_del = $cached_submembers->Next() ) { - my $del_err = $item_to_del->Delete(); - unless ($del_err) { - $RT::Handle->Rollback(); - $RT::Logger->warning("Couldn't delete cached group submember ".$item_to_del->Id); - return (undef); - } - } - - my ($err, $msg) = $self->SUPER::Delete(); - unless ($err) { - $RT::Logger->warning("Couldn't delete cached group submember ".$self->Id); - $RT::Handle->Rollback(); - return (undef); - } - - # Since this deletion may have changed the former member's - # delegation rights, we need to ensure that no invalid delegations - # remain. - $err = $self->MemberObj->_CleanupInvalidDelegations(InsideTransaction => 1); - unless ($err) { - $RT::Logger->warning("Unable to revoke delegated rights for principal ".$self->Id); - $RT::Handle->Rollback(); - return (undef); - } - - #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - # TODO what about the groups key cache? - RT::Principal->InvalidateACLCache(); - - $RT::Handle->Commit(); - return ($err); - -} - -# }}} - -# {{{ sub MemberObj - -=head2 MemberObj - -Returns an RT::Principal object for the Principal specified by $self->PrincipalId - -=cut - -sub MemberObj { - my $self = shift; - unless ( defined( $self->{'Member_obj'} ) ) { - $self->{'Member_obj'} = RT::Principal->new( $self->CurrentUser ); - $self->{'Member_obj'}->Load( $self->MemberId ) if ($self->MemberId); - } - return ( $self->{'Member_obj'} ); -} - -# }}} - -# {{{ sub GroupObj - -=head2 GroupObj - -Returns an RT::Principal object for the Group specified in $self->GroupId - -=cut - -sub GroupObj { - my $self = shift; - unless ( defined( $self->{'Group_obj'} ) ) { - $self->{'Group_obj'} = RT::Principal->new( $self->CurrentUser ); - $self->{'Group_obj'}->Load( $self->GroupId ); - } - return ( $self->{'Group_obj'} ); -} - -# }}} - -1; diff --git a/rt/lib/RT/GroupMembers.pm b/rt/lib/RT/GroupMembers.pm deleted file mode 100755 index 31cb9536f..000000000 --- a/rt/lib/RT/GroupMembers.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::GroupMembers -- Class Description - -=head1 SYNOPSIS - - use RT::GroupMembers - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::GroupMembers; - -use RT::SearchBuilder; -use RT::GroupMember; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'GroupMembers'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=item NewItem - -Returns an empty new RT::GroupMember item - -=cut - -sub NewItem { - my $self = shift; - return(RT::GroupMember->new($self->CurrentUser)); -} - - eval "require RT::GroupMembers_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/GroupMembers_Overlay.pm}) { - die $@; - }; - - eval "require RT::GroupMembers_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/GroupMembers_Vendor.pm}) { - die $@; - }; - - eval "require RT::GroupMembers_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/GroupMembers_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::GroupMembers_Overlay, RT::GroupMembers_Vendor, RT::GroupMembers_Local - -=cut - - -1; diff --git a/rt/lib/RT/GroupMembers_Overlay.pm b/rt/lib/RT/GroupMembers_Overlay.pm deleted file mode 100644 index eb2703134..000000000 --- a/rt/lib/RT/GroupMembers_Overlay.pm +++ /dev/null @@ -1,153 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::GroupMembers - a collection of RT::GroupMember objects - -=head1 SYNOPSIS - - use RT::GroupMembers; - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::GroupMembers); - -=end testing - -=cut - - -package RT::GroupMembers; - -use strict; -no warnings qw(redefine); - -# {{{ LimitToUsers - -=head2 LimitToUsers - -Limits this search object to users who are members of this group. -This is really useful when you want to have your UI separate out -groups from users for display purposes - -=cut - -sub LimitToUsers { - my $self = shift; - - my $principals = $self->NewAlias('Principals'); - $self->Join( ALIAS1 => 'main', FIELD1 => 'MemberId', - ALIAS2 => $principals, FIELD2 =>'id'); - - $self->Limit( ALIAS => $principals, - FIELD => 'PrincipalType', - VALUE => 'User', - ENTRYAGGREGATOR => 'OR', - ); -} - -# }}} - - -# {{{ LimitToGroups - -=head2 LimitToGroups - -Limits this search object to Groups who are members of this group. -This is really useful when you want to have your UI separate out -groups from users for display purposes - -=cut - -sub LimitToGroups { - my $self = shift; - - my $principals = $self->NewAlias('Principals'); - $self->Join( ALIAS1 => 'main', FIELD1 => 'MemberId', - ALIAS2 => $principals, FIELD2 =>'id'); - - $self->Limit( ALIAS => $principals, - FIELD => 'PrincipalType', - VALUE => 'Group', - ENTRYAGGREGATOR => 'OR', - ); -} - -# }}} - -# {{{ sub LimitToMembersOfGroup - -=head2 LimitToMembersOfGroup PRINCIPAL_ID - -Takes a Principal Id as its only argument. -Limits the current search principals which are _directly_ members -of the group which has PRINCIPAL_ID as its principal id. - -=cut - -sub LimitToMembersOfGroup { - my $self = shift; - my $group = shift; - - return ($self->Limit( - VALUE => $group, - FIELD => 'GroupId', - ENTRYAGGREGATOR => 'OR', - QUOTEVALUE => 0 - )); - -} -# }}} - -1; diff --git a/rt/lib/RT/Group_Overlay.pm b/rt/lib/RT/Group_Overlay.pm deleted file mode 100644 index d2e2364ea..000000000 --- a/rt/lib/RT/Group_Overlay.pm +++ /dev/null @@ -1,1383 +0,0 @@ - -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Released under the terms of version 2 of the GNU Public License - -=head1 NAME - - RT::Group - RT\'s group object - -=head1 SYNOPSIS - -use RT::Group; -my $group = new RT::Group($CurrentUser); - -=head1 DESCRIPTION - -An RT group object. - -=head1 METHODS - - -=begin testing - -# {{{ Tests -ok (require RT::Group); - -ok (my $group = RT::Group->new($RT::SystemUser), "instantiated a group object"); -ok (my ($id, $msg) = $group->CreateUserDefinedGroup( Name => 'TestGroup', Description => 'A test group', - ), 'Created a new group'); -ok ($id != 0, "Group id is $id"); -ok ($group->Name eq 'TestGroup', "The group's name is 'TestGroup'"); -my $ng = RT::Group->new($RT::SystemUser); - -ok($ng->LoadUserDefinedGroup('TestGroup'), "Loaded testgroup"); -ok(($ng->id == $group->id), "Loaded the right group"); - - -ok (($id,$msg) = $ng->AddMember('1'), "Added a member to the group"); -ok($id, $msg); -ok (($id,$msg) = $ng->AddMember('2' ), "Added a member to the group"); -ok($id, $msg); -ok (($id,$msg) = $ng->AddMember('3' ), "Added a member to the group"); -ok($id, $msg); - -# Group 1 now has members 1, 2 ,3 - -my $group_2 = RT::Group->new($RT::SystemUser); -ok (my ($id_2, $msg_2) = $group_2->CreateUserDefinedGroup( Name => 'TestGroup2', Description => 'A second test group'), , 'Created a new group'); -ok ($id_2 != 0, "Created group 2 ok- $msg_2 "); -ok (($id,$msg) = $group_2->AddMember($ng->PrincipalId), "Made TestGroup a member of testgroup2"); -ok($id, $msg); -ok (($id,$msg) = $group_2->AddMember('1' ), "Added member RT_System to the group TestGroup2"); -ok($id, $msg); - -# Group 2 how has 1, g1->{1, 2,3} - -my $group_3 = RT::Group->new($RT::SystemUser); -ok (($id_3, $msg) = $group_3->CreateUserDefinedGroup( Name => 'TestGroup3', Description => 'A second test group'), 'Created a new group'); -ok ($id_3 != 0, "Created group 3 ok - $msg"); -ok (($id,$msg) =$group_3->AddMember($group_2->PrincipalId), "Made TestGroup a member of testgroup2"); -ok($id, $msg); - -# g3 now has g2->{1, g1->{1,2,3}} - -my $principal_1 = RT::Principal->new($RT::SystemUser); -$principal_1->Load('1'); - -my $principal_2 = RT::Principal->new($RT::SystemUser); -$principal_2->Load('2'); - -ok (($id,$msg) = $group_3->AddMember('1' ), "Added member RT_System to the group TestGroup2"); -ok($id, $msg); - -# g3 now has 1, g2->{1, g1->{1,2,3}} - -ok($group_3->HasMember($principal_2) == undef, "group 3 doesn't have member 2"); -ok($group_3->HasMemberRecursively($principal_2), "group 3 has member 2 recursively"); -ok($ng->HasMember($principal_2) , "group ".$ng->Id." has member 2"); -my ($delid , $delmsg) =$ng->DeleteMember($principal_2->Id); -ok ($delid !=0, "Sucessfully deleted it-".$delid."-".$delmsg); - -#Gotta reload the group objects, since we've been messing with various internals. -# we shouldn't need to do this. -#$ng->LoadUserDefinedGroup('TestGroup'); -#$group_2->LoadUserDefinedGroup('TestGroup2'); -#$group_3->LoadUserDefinedGroup('TestGroup'); - -# G1 now has 1, 3 -# Group 2 how has 1, g1->{1, 3} -# g3 now has 1, g2->{1, g1->{1, 3}} - -ok(!$ng->HasMember($principal_2) , "group ".$ng->Id." no longer has member 2"); -ok($group_3->HasMemberRecursively($principal_2) == undef, "group 3 doesn't have member 2"); -ok($group_2->HasMemberRecursively($principal_2) == undef, "group 2 doesn't have member 2"); -ok($ng->HasMember($principal_2) == undef, "group 1 doesn't have member 2");; -ok($group_3->HasMemberRecursively($principal_2) == undef, "group 3 has member 2 recursively"); - -# }}} - -=end testing - - - -=cut - - -package RT::Group; - -use strict; -no warnings qw(redefine); - -use RT::Users; -use RT::GroupMembers; -use RT::Principals; -use RT::ACL; - -use vars qw/$RIGHTS/; - -$RIGHTS = { - AdminGroup => 'Modify group metadata or delete group', # loc_pair - AdminGroupMembership => - 'Modify membership roster for this group', # loc_pair - ModifyOwnMembership => 'Join or leave this group', # loc_pair - EditSavedSearches => 'Edit saved searches for this group', # loc_pair - ShowSavedSearches => 'Display saved searches for this group', # loc_pair - SeeGroup => 'Make this group visible to user', # loc_pair -}; - -# Tell RT::ACE that this sort of object can get acls granted -$RT::ACE::OBJECT_TYPES{'RT::Group'} = 1; - - -# - -# TODO: This should be refactored out into an RT::ACLedObject or something -# stuff the rights into a hash of rights that can exist. - -foreach my $right ( keys %{$RIGHTS} ) { - $RT::ACE::LOWERCASERIGHTNAMES{ lc $right } = $right; -} - - -=head2 AvailableRights - -Returns a hash of available rights for this object. The keys are the right names and the values are a description of what the rights do - -=cut - -sub AvailableRights { - my $self = shift; - return($RIGHTS); -} - - -# {{{ sub SelfDescription - -=head2 SelfDescription - -Returns a user-readable description of what this group is for and what it's named. - -=cut - -sub SelfDescription { - my $self = shift; - if ($self->Domain eq 'ACLEquivalence') { - my $user = RT::Principal->new($self->CurrentUser); - $user->Load($self->Instance); - return $self->loc("user [_1]",$user->Object->Name); - } - elsif ($self->Domain eq 'UserDefined') { - return $self->loc("group '[_1]'",$self->Name); - } - elsif ($self->Domain eq 'Personal') { - my $user = RT::User->new($self->CurrentUser); - $user->Load($self->Instance); - return $self->loc("personal group '[_1]' for user '[_2]'",$self->Name, $user->Name); - } - elsif ($self->Domain eq 'RT::System-Role') { - return $self->loc("system [_1]",$self->Type); - } - elsif ($self->Domain eq 'RT::Queue-Role') { - my $queue = RT::Queue->new($self->CurrentUser); - $queue->Load($self->Instance); - return $self->loc("queue [_1] [_2]",$queue->Name, $self->Type); - } - elsif ($self->Domain eq 'RT::Ticket-Role') { - return $self->loc("ticket #[_1] [_2]",$self->Instance, $self->Type); - } - elsif ($self->Domain eq 'SystemInternal') { - return $self->loc("system group '[_1]'",$self->Type); - } - else { - return $self->loc("undescribed group [_1]",$self->Id); - } -} - -# }}} - -# {{{ sub Load - -=head2 Load ID - -Load a group object from the database. Takes a single argument. -If the argument is numerical, load by the column 'id'. Otherwise, -complain and return. - -=cut - -sub Load { - my $self = shift; - my $identifier = shift || return undef; - - #if it's an int, load by id. otherwise, load by name. - if ( $identifier !~ /\D/ ) { - $self->SUPER::LoadById($identifier); - } - else { - $RT::Logger->crit("Group -> Load called with a bogus argument"); - return undef; - } -} - -# }}} - -# {{{ sub LoadUserDefinedGroup - -=head2 LoadUserDefinedGroup NAME - -Loads a system group from the database. The only argument is -the group's name. - - -=cut - -sub LoadUserDefinedGroup { - my $self = shift; - my $identifier = shift; - - $self->LoadByCols( "Domain" => 'UserDefined', - "Name" => $identifier ); -} - -# }}} - -# {{{ sub LoadACLEquivalenceGroup - -=head2 LoadACLEquivalenceGroup PRINCIPAL - -Loads a user's acl equivalence group. Takes a principal object. -ACL equivalnce groups are used to simplify the acl system. Each user -has one group that only he is a member of. Rights granted to the user -are actually granted to that group. This greatly simplifies ACL checks. -While this results in a somewhat more complex setup when creating users -and granting ACLs, it _greatly_ simplifies acl checks. - - - -=cut - -sub LoadACLEquivalenceGroup { - my $self = shift; - my $princ = shift; - - $self->LoadByCols( "Domain" => 'ACLEquivalence', - "Type" => 'UserEquiv', - "Instance" => $princ->Id); -} - -# }}} - -# {{{ sub LoadPersonalGroup - -=head2 LoadPersonalGroup {Name => NAME, User => USERID} - -Loads a personal group from the database. - -=cut - -sub LoadPersonalGroup { - my $self = shift; - my %args = ( Name => undef, - User => undef, - @_); - - $self->LoadByCols( "Domain" => 'Personal', - "Instance" => $args{'User'}, - "Type" => '', - "Name" => $args{'Name'} ); -} - -# }}} - -# {{{ sub LoadSystemInternalGroup - -=head2 LoadSystemInternalGroup NAME - -Loads a Pseudo group from the database. The only argument is -the group's name. - - -=cut - -sub LoadSystemInternalGroup { - my $self = shift; - my $identifier = shift; - - $self->LoadByCols( "Domain" => 'SystemInternal', - "Type" => $identifier ); -} - -# }}} - -# {{{ sub LoadTicketRoleGroup - -=head2 LoadTicketRoleGroup { Ticket => TICKET_ID, Type => TYPE } - -Loads a ticket group from the database. - -Takes a param hash with 2 parameters: - - Ticket is the TicketId we're curious about - Type is the type of Group we're trying to load: - Requestor, Cc, AdminCc, Owner - -=cut - -sub LoadTicketRoleGroup { - my $self = shift; - my %args = (Ticket => '0', - Type => undef, - @_); - $self->LoadByCols( Domain => 'RT::Ticket-Role', - Instance =>$args{'Ticket'}, - Type => $args{'Type'} - ); -} - -# }}} - -# {{{ sub LoadQueueRoleGroup - -=head2 LoadQueueRoleGroup { Queue => Queue_ID, Type => TYPE } - -Loads a Queue group from the database. - -Takes a param hash with 2 parameters: - - Queue is the QueueId we're curious about - Type is the type of Group we're trying to load: - Requestor, Cc, AdminCc, Owner - -=cut - -sub LoadQueueRoleGroup { - my $self = shift; - my %args = (Queue => undef, - Type => undef, - @_); - $self->LoadByCols( Domain => 'RT::Queue-Role', - Instance =>$args{'Queue'}, - Type => $args{'Type'} - ); -} - -# }}} - -# {{{ sub LoadSystemRoleGroup - -=head2 LoadSystemRoleGroup Type - -Loads a System group from the database. - -Takes a single param: Type - - Type is the type of Group we're trying to load: - Requestor, Cc, AdminCc, Owner - -=cut - -sub LoadSystemRoleGroup { - my $self = shift; - my $type = shift; - $self->LoadByCols( Domain => 'RT::System-Role', - Type => $type - ); -} - -# }}} - -# {{{ sub Create - -=head2 Create - -You need to specify what sort of group you're creating by calling one of the other -Create_____ routines. - -=cut - -sub Create { - my $self = shift; - $RT::Logger->crit("Someone called RT::Group->Create. this method does not exist. someone's being evil"); - return(0,$self->loc('Permission Denied')); -} - -# }}} - -# {{{ sub _Create - -=head2 _Create - -Takes a paramhash with named arguments: Name, Description. - -Returns a tuple of (Id, Message). If id is 0, the create failed - -=cut - -sub _Create { - my $self = shift; - my %args = ( - Name => undef, - Description => undef, - Domain => undef, - Type => undef, - Instance => '0', - InsideTransaction => undef, - _RecordTransaction => 1, - @_ - ); - - $RT::Handle->BeginTransaction() unless ($args{'InsideTransaction'}); - # Groups deal with principal ids, rather than user ids. - # When creating this group, set up a principal Id for it. - my $principal = RT::Principal->new( $self->CurrentUser ); - my $principal_id = $principal->Create( - PrincipalType => 'Group', - ObjectId => '0' - ); - $principal->__Set(Field => 'ObjectId', Value => $principal_id); - - - $self->SUPER::Create( - id => $principal_id, - Name => $args{'Name'}, - Description => $args{'Description'}, - Type => $args{'Type'}, - Domain => $args{'Domain'}, - Instance => ($args{'Instance'} || '0') - ); - my $id = $self->Id; - unless ($id) { - return ( 0, $self->loc('Could not create group') ); - } - - # If we couldn't create a principal Id, get the fuck out. - unless ($principal_id) { - $RT::Handle->Rollback() unless ($args{'InsideTransaction'}); - $RT::Logger->crit( "Couldn't create a Principal on new user create. Strange things are afoot at the circle K" ); - return ( 0, $self->loc('Could not create group') ); - } - - # Now we make the group a member of itself as a cached group member - # this needs to exist so that group ACL checks don't fall over. - # you're checking CachedGroupMembers to see if the principal in question - # is a member of the principal the rights have been granted too - - # in the ordinary case, this would fail badly because it would recurse and add all the members of this group as - # cached members. thankfully, we're creating the group now...so it has no members. - my $cgm = RT::CachedGroupMember->new($self->CurrentUser); - $cgm->Create(Group =>$self->PrincipalObj, Member => $self->PrincipalObj, ImmediateParent => $self->PrincipalObj); - - - if ( $args{'_RecordTransaction'} ) { - $self->_NewTransaction( Type => "Create" ); - } - - $RT::Handle->Commit() unless ($args{'InsideTransaction'}); - - return ( $id, $self->loc("Group created") ); -} - -# }}} - -# {{{ CreateUserDefinedGroup - -=head2 CreateUserDefinedGroup { Name => "name", Description => "Description"} - -A helper subroutine which creates a system group - -Returns a tuple of (Id, Message). If id is 0, the create failed - -=cut - -sub CreateUserDefinedGroup { - my $self = shift; - - unless ( $self->CurrentUserHasRight('AdminGroup') ) { - $RT::Logger->warning( $self->CurrentUser->Name - . " Tried to create a group without permission." ); - return ( 0, $self->loc('Permission Denied') ); - } - - return($self->_Create( Domain => 'UserDefined', Type => '', Instance => '', @_)); -} - -# }}} - -# {{{ _CreateACLEquivalenceGroup - -=head2 _CreateACLEquivalenceGroup { Principal } - -A helper subroutine which creates a group containing only -an individual user. This gets used by the ACL system to check rights. -Yes, it denormalizes the data, but that's ok, as we totally win on performance. - -Returns a tuple of (Id, Message). If id is 0, the create failed - -=cut - -sub _CreateACLEquivalenceGroup { - my $self = shift; - my $princ = shift; - - my $id = $self->_Create( Domain => 'ACLEquivalence', - Type => 'UserEquiv', - Name => 'User '. $princ->Object->Id, - Description => 'ACL equiv. for user '.$princ->Object->Id, - Instance => $princ->Id, - InsideTransaction => 1); - unless ($id) { - $RT::Logger->crit("Couldn't create ACL equivalence group"); - return undef; - } - - # We use stashuser so we don't get transactions inside transactions - # and so we bypass all sorts of cruft we don't need - my $aclstash = RT::GroupMember->new($self->CurrentUser); - my ($stash_id, $add_msg) = $aclstash->_StashUser(Group => $self->PrincipalObj, - Member => $princ); - - unless ($stash_id) { - $RT::Logger->crit("Couldn't add the user to his own acl equivalence group:".$add_msg); - # We call super delete so we don't get acl checked. - $self->SUPER::Delete(); - return(undef); - } - return ($id); -} - -# }}} - -# {{{ CreatePersonalGroup - -=head2 CreatePersonalGroup { PrincipalId => PRINCIPAL_ID, Name => "name", Description => "Description"} - -A helper subroutine which creates a personal group. Generally, -personal groups are used for ACL delegation and adding to ticket roles -PrincipalId defaults to the current user's principal id. - -Returns a tuple of (Id, Message). If id is 0, the create failed - -=cut - -sub CreatePersonalGroup { - my $self = shift; - my %args = ( - Name => undef, - Description => undef, - PrincipalId => $self->CurrentUser->PrincipalId, - @_ - ); - - if ( $self->CurrentUser->PrincipalId == $args{'PrincipalId'} ) { - - unless ( $self->CurrentUserHasRight('AdminOwnPersonalGroups') ) { - $RT::Logger->warning( $self->CurrentUser->Name - . " Tried to create a group without permission." ); - return ( 0, $self->loc('Permission Denied') ); - } - - } - else { - unless ( $self->CurrentUserHasRight('AdminAllPersonalGroups') ) { - $RT::Logger->warning( $self->CurrentUser->Name - . " Tried to create a group without permission." ); - return ( 0, $self->loc('Permission Denied') ); - } - - } - - return ( - $self->_Create( - Domain => 'Personal', - Type => '', - Instance => $args{'PrincipalId'}, - Name => $args{'Name'}, - Description => $args{'Description'} - ) - ); -} - -# }}} - -# {{{ CreateRoleGroup - -=head2 CreateRoleGroup { Domain => DOMAIN, Type => TYPE, Instance => ID } - -A helper subroutine which creates a ticket group. (What RT 2.0 called Ticket watchers) -Type is one of ( "Requestor" || "Cc" || "AdminCc" || "Owner") -Domain is one of (RT::Ticket-Role || RT::Queue-Role || RT::System-Role) -Instance is the id of the ticket or queue in question - -This routine expects to be called from {Ticket||Queue}->CreateTicketGroups _inside of a transaction_ - -Returns a tuple of (Id, Message). If id is 0, the create failed - -=cut - -sub CreateRoleGroup { - my $self = shift; - my %args = ( Instance => undef, - Type => undef, - Domain => undef, - @_ ); - unless ( $args{'Type'} =~ /^(?:Cc|AdminCc|Requestor|Owner)$/ ) { - return ( 0, $self->loc("Invalid Group Type") ); - } - - - return ( $self->_Create( Domain => $args{'Domain'}, - Instance => $args{'Instance'}, - Type => $args{'Type'}, - InsideTransaction => 1 ) ); -} - -# }}} - -# {{{ sub Delete - -=head2 Delete - -Delete this object - -=cut - -sub Delete { - my $self = shift; - - unless ( $self->CurrentUserHasRight('AdminGroup') ) { - return ( 0, 'Permission Denied' ); - } - - $RT::Logger->crit("Deleting groups violates referential integrity until we go through and fix this"); - # TODO XXX - - # Remove the principal object - # Remove this group from anything it's a member of. - # Remove all cached members of this group - # Remove any rights granted to this group - # remove any rights delegated by way of this group - - return ( $self->SUPER::Delete(@_) ); -} - -# }}} - -=head2 SetDisabled BOOL - -If passed a positive value, this group will be disabled. No rights it commutes or grants will be honored. -It will not appear in most group listings. - -This routine finds all the cached group members that are members of this group (recursively) and disables them. - -=cut - - # }}} - - sub SetDisabled { - my $self = shift; - my $val = shift; - if ($self->Domain eq 'Personal') { - if ($self->CurrentUser->PrincipalId == $self->Instance) { - unless ( $self->CurrentUserHasRight('AdminOwnPersonalGroups')) { - return ( 0, $self->loc('Permission Denied') ); - } - } else { - unless ( $self->CurrentUserHasRight('AdminAllPersonalGroups') ) { - return ( 0, $self->loc('Permission Denied') ); - } - } - } - else { - unless ( $self->CurrentUserHasRight('AdminGroup') ) { - return (0, $self->loc('Permission Denied')); - } - } - $RT::Handle->BeginTransaction(); - $self->PrincipalObj->SetDisabled($val); - - - - - # Find all occurrences of this member as a member of this group - # in the cache and nuke them, recursively. - - # The following code will delete all Cached Group members - # where this member's group is _not_ the primary group - # (Ie if we're deleting C as a member of B, and B happens to be - # a member of A, will delete C as a member of A without touching - # C as a member of B - - my $cached_submembers = RT::CachedGroupMembers->new( $self->CurrentUser ); - - $cached_submembers->Limit( FIELD => 'ImmediateParentId', OPERATOR => '=', VALUE => $self->Id); - - #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - # TODO what about the groups key cache? - RT::Principal->InvalidateACLCache(); - - - - while ( my $item = $cached_submembers->Next() ) { - my $del_err = $item->SetDisabled($val); - unless ($del_err) { - $RT::Handle->Rollback(); - $RT::Logger->warning("Couldn't disable cached group submember ".$item->Id); - return (undef); - } - } - - $RT::Handle->Commit(); - return (1, $self->loc("Succeeded")); - -} - -# }}} - - - -sub Disabled { - my $self = shift; - $self->PrincipalObj->Disabled(@_); -} - - -# {{{ DeepMembersObj - -=head2 DeepMembersObj - -Returns an RT::CachedGroupMembers object of this group's members, -including all members of subgroups. - -=cut - -sub DeepMembersObj { - my $self = shift; - my $members_obj = RT::CachedGroupMembers->new( $self->CurrentUser ); - - #If we don't have rights, don't include any results - # TODO XXX WHY IS THERE NO ACL CHECK HERE? - $members_obj->LimitToMembersOfGroup( $self->PrincipalId ); - - return ( $members_obj ); - -} - -# }}} - -# {{{ UserMembersObj - -=head2 UserMembersObj - -Returns an RT::Users object of this group's members, including -all members of subgroups - -=cut - -sub UserMembersObj { - my $self = shift; - - my $users = RT::Users->new($self->CurrentUser); - - #If we don't have rights, don't include any results - # TODO XXX WHY IS THERE NO ACL CHECK HERE? - - my $cached_members = $users->NewAlias('CachedGroupMembers'); - $users->Join(ALIAS1 => $cached_members, FIELD1 => 'MemberId', - ALIAS2 => $users->PrincipalsAlias, FIELD2 => 'id'); - $users->Limit(ALIAS => $cached_members, - FIELD => 'GroupId', - OPERATOR => '=', - VALUE => $self->PrincipalId); - - return ( $users); - -} - -# }}} - -# {{{ MembersObj - -=head2 MembersObj - -Returns an RT::GroupMembers object of this group's direct members. - -=cut - -sub MembersObj { - my $self = shift; - my $members_obj = RT::GroupMembers->new( $self->CurrentUser ); - - #If we don't have rights, don't include any results - # TODO XXX WHY IS THERE NO ACL CHECK HERE? - $members_obj->LimitToMembersOfGroup( $self->PrincipalId ); - - return ( $members_obj ); - -} - -# }}} - -# {{{ MemberEmailAddresses - -=head2 MemberEmailAddresses - -Returns an array of the email addresses of all of this group's members - - -=cut - -sub MemberEmailAddresses { - my $self = shift; - - my %addresses; - my $members = $self->UserMembersObj(); - while (my $member = $members->Next) { - $addresses{$member->EmailAddress} = 1; - } - return(sort keys %addresses); -} - -# }}} - -# {{{ MemberEmailAddressesAsString - -=head2 MemberEmailAddressesAsString - -Returns a comma delimited string of the email addresses of all users -who are members of this group. - -=cut - - -sub MemberEmailAddressesAsString { - my $self = shift; - return (join(', ', $self->MemberEmailAddresses)); -} - -# }}} - -# {{{ AddMember - -=head2 AddMember PRINCIPAL_ID - -AddMember adds a principal to this group. It takes a single principal id. -Returns a two value array. the first value is true on successful -addition or 0 on failure. The second value is a textual status msg. - -=cut - -sub AddMember { - my $self = shift; - my $new_member = shift; - - - - if ($self->Domain eq 'Personal') { - if ($self->CurrentUser->PrincipalId == $self->Instance) { - unless ( $self->CurrentUserHasRight('AdminOwnPersonalGroups')) { - return ( 0, $self->loc('Permission Denied') ); - } - } else { - unless ( $self->CurrentUserHasRight('AdminAllPersonalGroups') ) { - return ( 0, $self->loc('Permission Denied') ); - } - } - } - - else { - # We should only allow membership changes if the user has the right - # to modify group membership or the user is the principal in question - # and the user has the right to modify his own membership - unless ( ($new_member == $self->CurrentUser->PrincipalId && - $self->CurrentUserHasRight('ModifyOwnMembership') ) || - $self->CurrentUserHasRight('AdminGroupMembership') ) { - #User has no permission to be doing this - return ( 0, $self->loc("Permission Denied") ); - } - - } - $self->_AddMember(PrincipalId => $new_member); -} - -# A helper subroutine for AddMember that bypasses the ACL checks -# this should _ONLY_ ever be called from Ticket/Queue AddWatcher -# when we want to deal with groups according to queue rights -# In the dim future, this will all get factored out and life -# will get better - -# takes a paramhash of { PrincipalId => undef, InsideTransaction } - -sub _AddMember { - my $self = shift; - my %args = ( PrincipalId => undef, - InsideTransaction => undef, - @_); - my $new_member = $args{'PrincipalId'}; - - unless ($self->Id) { - $RT::Logger->crit("Attempting to add a member to a group which wasn't loaded. 'oops'"); - return(0, $self->loc("Group not found")); - } - - unless ($new_member =~ /^\d+$/) { - $RT::Logger->crit("_AddMember called with a parameter that's not an integer."); - } - - - my $new_member_obj = RT::Principal->new( $self->CurrentUser ); - $new_member_obj->Load($new_member); - - - unless ( $new_member_obj->Id ) { - $RT::Logger->debug("Couldn't find that principal"); - return ( 0, $self->loc("Couldn't find that principal") ); - } - - if ( $self->HasMember( $new_member_obj ) ) { - - #User is already a member of this group. no need to add it - return ( 0, $self->loc("Group already has member") ); - } - if ( $new_member_obj->IsGroup && - $new_member_obj->Object->HasMemberRecursively($self->PrincipalObj) ) { - - #This group can't be made to be a member of itself - return ( 0, $self->loc("Groups can't be members of their members")); - } - - - my $member_object = RT::GroupMember->new( $self->CurrentUser ); - my $id = $member_object->Create( - Member => $new_member_obj, - Group => $self->PrincipalObj, - InsideTransaction => $args{'InsideTransaction'} - ); - if ($id) { - return ( 1, $self->loc("Member added") ); - } - else { - return(0, $self->loc("Couldn't add member to group")); - } -} -# }}} - -# {{{ HasMember - -=head2 HasMember RT::Principal - -Takes an RT::Principal object returns a GroupMember Id if that user is a -member of this group. -Returns undef if the user isn't a member of the group or if the current -user doesn't have permission to find out. Arguably, it should differentiate -between ACL failure and non membership. - -=cut - -sub HasMember { - my $self = shift; - my $principal = shift; - - - unless (UNIVERSAL::isa($principal,'RT::Principal')) { - $RT::Logger->crit("Group::HasMember was called with an argument that". - "isn't an RT::Principal. It's $principal"); - return(undef); - } - - unless ($principal->Id) { - return(undef); - } - - my $member_obj = RT::GroupMember->new( $self->CurrentUser ); - $member_obj->LoadByCols( MemberId => $principal->id, - GroupId => $self->PrincipalId ); - - #If we have a member object - if ( defined $member_obj->id ) { - return ( $member_obj->id ); - } - - #If Load returns no objects, we have an undef id. - else { - #$RT::Logger->debug($self." does not contain principal ".$principal->id); - return (undef); - } -} - -# }}} - -# {{{ HasMemberRecursively - -=head2 HasMemberRecursively RT::Principal - -Takes an RT::Principal object and returns true if that user is a member of -this group. -Returns undef if the user isn't a member of the group or if the current -user doesn't have permission to find out. Arguably, it should differentiate -between ACL failure and non membership. - -=cut - -sub HasMemberRecursively { - my $self = shift; - my $principal = shift; - - unless (UNIVERSAL::isa($principal,'RT::Principal')) { - $RT::Logger->crit("Group::HasMemberRecursively was called with an argument that". - "isn't an RT::Principal. It's $principal"); - return(undef); - } - my $member_obj = RT::CachedGroupMember->new( $self->CurrentUser ); - $member_obj->LoadByCols( MemberId => $principal->Id, - GroupId => $self->PrincipalId , - Disabled => 0 - ); - - #If we have a member object - if ( defined $member_obj->id ) { - return ( 1); - } - - #If Load returns no objects, we have an undef id. - else { - return (undef); - } -} - -# }}} - -# {{{ DeleteMember - -=head2 DeleteMember PRINCIPAL_ID - -Takes the principal id of a current user or group. -If the current user has apropriate rights, -removes that GroupMember from this group. -Returns a two value array. the first value is true on successful -addition or 0 on failure. The second value is a textual status msg. - -=cut - -sub DeleteMember { - my $self = shift; - my $member_id = shift; - - - # We should only allow membership changes if the user has the right - # to modify group membership or the user is the principal in question - # and the user has the right to modify his own membership - - if ($self->Domain eq 'Personal') { - if ($self->CurrentUser->PrincipalId == $self->Instance) { - unless ( $self->CurrentUserHasRight('AdminOwnPersonalGroups')) { - return ( 0, $self->loc('Permission Denied') ); - } - } else { - unless ( $self->CurrentUserHasRight('AdminAllPersonalGroups') ) { - return ( 0, $self->loc('Permission Denied') ); - } - } - } - else { - unless ( (($member_id == $self->CurrentUser->PrincipalId) && - $self->CurrentUserHasRight('ModifyOwnMembership') ) || - $self->CurrentUserHasRight('AdminGroupMembership') ) { - #User has no permission to be doing this - return ( 0, $self->loc("Permission Denied") ); - } - } - $self->_DeleteMember($member_id); -} - -# A helper subroutine for DeleteMember that bypasses the ACL checks -# this should _ONLY_ ever be called from Ticket/Queue DeleteWatcher -# when we want to deal with groups according to queue rights -# In the dim future, this will all get factored out and life -# will get better - -sub _DeleteMember { - my $self = shift; - my $member_id = shift; - - my $member_obj = RT::GroupMember->new( $self->CurrentUser ); - - $member_obj->LoadByCols( MemberId => $member_id, - GroupId => $self->PrincipalId); - - - #If we couldn't load it, return undef. - unless ( $member_obj->Id() ) { - $RT::Logger->debug("Group has no member with that id"); - return ( 0,$self->loc( "Group has no such member" )); - } - - #Now that we've checked ACLs and sanity, delete the groupmember - my $val = $member_obj->Delete(); - - if ($val) { - return ( $val, $self->loc("Member deleted") ); - } - else { - $RT::Logger->debug("Failed to delete group ".$self->Id." member ". $member_id); - return ( 0, $self->loc("Member not deleted" )); - } -} - -# }}} - -# {{{ sub _CleanupInvalidDelegations - -=head2 _CleanupInvalidDelegations { InsideTransaction => undef } - -Revokes all ACE entries delegated by members of this group which are -inconsistent with their current delegation rights. Does not perform -permission checks. Should only ever be called from inside the RT -library. - -If called from inside a transaction, specify a true value for the -InsideTransaction parameter. - -Returns a true value if the deletion succeeded; returns a false value -and logs an internal error if the deletion fails (should not happen). - -=cut - -# XXX Currently there is a _CleanupInvalidDelegations method in both -# RT::User and RT::Group. If the recursive cleanup call for groups is -# ever unrolled and merged, this code will probably want to be -# factored out into RT::Principal. - -sub _CleanupInvalidDelegations { - my $self = shift; - my %args = ( InsideTransaction => undef, - @_ ); - - unless ( $self->Id ) { - $RT::Logger->warning("Group not loaded."); - return (undef); - } - - my $in_trans = $args{InsideTransaction}; - - # TODO: Can this be unrolled such that the number of DB queries is constant rather than linear in exploded group size? - my $members = $self->DeepMembersObj(); - $members->LimitToUsers(); - $RT::Handle->BeginTransaction() unless $in_trans; - while ( my $member = $members->Next()) { - my $ret = $member->MemberObj->_CleanupInvalidDelegations(InsideTransaction => 1, - Object => $args{Object}); - unless ($ret) { - $RT::Handle->Rollback() unless $in_trans; - return (undef); - } - } - $RT::Handle->Commit() unless $in_trans; - return(1); -} - -# }}} - -# {{{ ACL Related routines - -# {{{ sub _Set -sub _Set { - my $self = shift; - my %args = ( - Field => undef, - Value => undef, - TransactionType => 'Set', - RecordTransaction => 1, - @_ - ); - - if ($self->Domain eq 'Personal') { - if ($self->CurrentUser->PrincipalId == $self->Instance) { - unless ( $self->CurrentUserHasRight('AdminOwnPersonalGroups')) { - return ( 0, $self->loc('Permission Denied') ); - } - } else { - unless ( $self->CurrentUserHasRight('AdminAllPersonalGroups') ) { - return ( 0, $self->loc('Permission Denied') ); - } - } - } - else { - unless ( $self->CurrentUserHasRight('AdminGroup') ) { - return ( 0, $self->loc('Permission Denied') ); - } - } - - my $Old = $self->SUPER::_Value("$args{'Field'}"); - - my ($ret, $msg) = $self->SUPER::_Set( Field => $args{'Field'}, - Value => $args{'Value'} ); - - #If we can't actually set the field to the value, don't record - # a transaction. instead, get out of here. - if ( $ret == 0 ) { return ( 0, $msg ); } - - if ( $args{'RecordTransaction'} == 1 ) { - - my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction( - Type => $args{'TransactionType'}, - Field => $args{'Field'}, - NewValue => $args{'Value'}, - OldValue => $Old, - TimeTaken => $args{'TimeTaken'}, - ); - return ( $Trans, scalar $TransObj->Description ); - } - else { - return ( $ret, $msg ); - } -} - -# }}} - - - - -=head2 CurrentUserHasRight RIGHTNAME - -Returns true if the current user has the specified right for this group. - - - TODO: we don't deal with membership visibility yet - -=cut - - -sub CurrentUserHasRight { - my $self = shift; - my $right = shift; - - - - if ($self->Id && - $self->CurrentUser->HasRight( Object => $self, - Right => $right )) { - return(1); - } - elsif ( $self->CurrentUser->HasRight(Object => $RT::System, Right => $right )) { - return (1); - } else { - return(undef); - } - -} - -# }}} - - - - -# {{{ 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::Group->new($RT::SystemUser)); -ok($u->Load(4), "Loaded the first user"); -ok($u->PrincipalObj->ObjectId == 4, "user 4 is the fourth principal"); -ok($u->PrincipalObj->PrincipalType eq 'Group' , "Principal 4 is a group"); - -=end testing - -=cut - - -sub PrincipalObj { - my $self = shift; - unless ($self->{'PrincipalObj'} && - ($self->{'PrincipalObj'}->ObjectId == $self->Id) && - ($self->{'PrincipalObj'}->PrincipalType eq 'Group')) { - - $self->{'PrincipalObj'} = RT::Principal->new($self->CurrentUser); - $self->{'PrincipalObj'}->LoadByCols('ObjectId' => $self->Id, - 'PrincipalType' => 'Group') ; - } - return($self->{'PrincipalObj'}); -} - - -=head2 PrincipalId - -Returns this user's PrincipalId - -=cut - -sub PrincipalId { - my $self = shift; - return $self->Id; -} - -# }}} - -sub BasicColumns { - ( - [ Name => 'Name' ], - [ Description => 'Description' ], - ); -} - -1; - -=head1 AUTHOR - -Jesse Vincent, jesse@bestpractical.com - -=head1 SEE ALSO - -RT - diff --git a/rt/lib/RT/Groups.pm b/rt/lib/RT/Groups.pm deleted file mode 100755 index 29f12a5a0..000000000 --- a/rt/lib/RT/Groups.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::Groups -- Class Description - -=head1 SYNOPSIS - - use RT::Groups - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::Groups; - -use RT::SearchBuilder; -use RT::Group; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'Groups'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=item NewItem - -Returns an empty new RT::Group item - -=cut - -sub NewItem { - my $self = shift; - return(RT::Group->new($self->CurrentUser)); -} - - eval "require RT::Groups_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Groups_Overlay.pm}) { - die $@; - }; - - eval "require RT::Groups_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Groups_Vendor.pm}) { - die $@; - }; - - eval "require RT::Groups_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Groups_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Groups_Overlay, RT::Groups_Vendor, RT::Groups_Local - -=cut - - -1; diff --git a/rt/lib/RT/Groups_Overlay.pm b/rt/lib/RT/Groups_Overlay.pm deleted file mode 100644 index 5e2bfa57a..000000000 --- a/rt/lib/RT/Groups_Overlay.pm +++ /dev/null @@ -1,536 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Groups - a collection of RT::Group objects - -=head1 SYNOPSIS - - use RT::Groups; - my $groups = $RT::Groups->new($CurrentUser); - $groups->UnLimit(); - while (my $group = $groups->Next()) { - print $group->Id ." is a group id\n"; - } - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::Groups); - -=end testing - -=cut - - -package RT::Groups; - -use strict; -no warnings qw(redefine); - -use RT::Users; - -# XXX: below some code is marked as subject to generalize in Groups, Users classes. -# RUZ suggest name Principals::Generic or Principals::Base as abstract class, but -# Jesse wants something that doesn't imply it's a Principals.pm subclass. -# See comments below for candidats. - - -# {{{ 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"; - $self->{'primary_key'} = "id"; - - my @result = $self->SUPER::_Init(@_); - - $self->OrderBy( ALIAS => 'main', - FIELD => 'Name', - ORDER => 'ASC'); - - # XXX: this code should be generalized - $self->{'princalias'} = $self->Join( - ALIAS1 => 'main', - FIELD1 => 'id', - TABLE2 => 'Principals', - FIELD2 => 'id' - ); - - # even if this condition is useless and ids in the Groups table - # only match principals with type 'Group' this could speed up - # searches in some DBs. - $self->Limit( ALIAS => $self->{'princalias'}, - FIELD => 'PrincipalType', - VALUE => 'Group', - ); - - return (@result); -} -# }}} - -=head2 PrincipalsAlias - -Returns the string that represents this Users object's primary "Principals" alias. - -=cut - -# XXX: should be generalized, code duplication -sub PrincipalsAlias { - my $self = shift; - return($self->{'princalias'}); - -} - - -# {{{ LimiToSystemInternalGroups - -=head2 LimitToSystemInternalGroups - -Return only SystemInternal Groups, such as "privileged" "unprivileged" and "everyone" - -=cut - - -sub LimitToSystemInternalGroups { - my $self = shift; - $self->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'SystemInternal'); - # All system internal groups have the same instance. No reason to limit down further - #$self->Limit(FIELD => 'Instance', OPERATOR => '=', VALUE => '0'); -} - - -# }}} - -# {{{ LimiToUserDefinedGroups - -=head2 LimitToUserDefined Groups - -Return only UserDefined Groups - -=cut - - -sub LimitToUserDefinedGroups { - my $self = shift; - $self->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined'); - # All user-defined groups have the same instance. No reason to limit down further - #$self->Limit(FIELD => 'Instance', OPERATOR => '=', VALUE => ''); -} - - -# }}} - -# {{{ LimiToPersonalGroups - -=head2 LimitToPersonalGroupsFor PRINCIPAL_ID - -Return only Personal Groups for the user whose principal id -is PRINCIPAL_ID - -=cut - - -sub LimitToPersonalGroupsFor { - my $self = shift; - my $princ = shift; - - $self->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'Personal'); - $self->Limit( FIELD => 'Instance', - OPERATOR => '=', - VALUE => $princ); -} - - -# }}} - -# {{{ LimitToRolesForQueue - -=head2 LimitToRolesForQueue QUEUE_ID - -Limits the set of groups found to role groups for queue QUEUE_ID - -=cut - -sub LimitToRolesForQueue { - my $self = shift; - my $queue = shift; - $self->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'RT::Queue-Role'); - $self->Limit(FIELD => 'Instance', OPERATOR => '=', VALUE => $queue); -} - -# }}} - -# {{{ LimitToRolesForTicket - -=head2 LimitToRolesForTicket Ticket_ID - -Limits the set of groups found to role groups for Ticket Ticket_ID - -=cut - -sub LimitToRolesForTicket { - my $self = shift; - my $Ticket = shift; - $self->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'RT::Ticket-Role'); - $self->Limit(FIELD => 'Instance', OPERATOR => '=', VALUE => '$Ticket'); -} - -# }}} - -# {{{ LimitToRolesForSystem - -=head2 LimitToRolesForSystem System_ID - -Limits the set of groups found to role groups for System System_ID - -=cut - -sub LimitToRolesForSystem { - my $self = shift; - $self->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'RT::System-Role'); -} - -# }}} - -=head2 WithMember {PrincipalId => PRINCIPAL_ID, Recursively => undef} - -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 - -sub WithMember { - my $self = shift; - my %args = ( PrincipalId => undef, - Recursively => undef, - @_); - my $members; - - if ($args{'Recursively'}) { - $members = $self->NewAlias('CachedGroupMembers'); - } else { - $members = $self->NewAlias('GroupMembers'); - } - $self->Join(ALIAS1 => 'main', FIELD1 => 'id', - ALIAS2 => $members, FIELD2 => 'GroupId'); - - $self->Limit(ALIAS => $members, FIELD => 'MemberId', OPERATOR => '=', VALUE => $args{'PrincipalId'}); -} - - -=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 - -#XXX: should be generilized -sub WithRight { - my $self = shift; - my %args = ( Right => undef, - Object => => undef, - IncludeSystemRights => 1, - IncludeSuperusers => undef, - IncludeSubgroupMembers => 0, - EquivObjects => [ ], - @_ ); - - my $from_role = $self->Clone; - $from_role->WithRoleRight( %args ); - - my $from_group = $self->Clone; - $from_group->WithGroupRight( %args ); - - #XXX: DIRTY HACK - use DBIx::SearchBuilder::Union; - my $union = new DBIx::SearchBuilder::Union; - $union->add($from_role); - $union->add($from_group); - %$self = %$union; - bless $self, ref($union); - - return; -} - -#XXX: methods are active aliases to Users class to prevent code duplication -# should be generalized -sub _JoinGroups { - my $self = shift; - my %args = (@_); - return 'main' unless $args{'IncludeSubgroupMembers'}; - return $self->RT::Users::_JoinGroups( %args ); -} -sub _JoinGroupMembers { - my $self = shift; - my %args = (@_); - return 'main' unless $args{'IncludeSubgroupMembers'}; - return $self->RT::Users::_JoinGroupMembers( %args ); -} -sub _JoinGroupMembersForGroupRights { - my $self = shift; - my %args = (@_); - my $group_members = $self->_JoinGroupMembers( %args ); - unless( $group_members eq 'main' ) { - return $self->RT::Users::_JoinGroupMembersForGroupRights( %args ); - } - $self->Limit( ALIAS => $args{'ACLAlias'}, - FIELD => 'PrincipalId', - VALUE => "main.id", - QUOTEVALUE => 0, - ); -} -sub _JoinACL { return (shift)->RT::Users::_JoinACL( @_ ) } -sub _RoleClauses { return (shift)->RT::Users::_RoleClauses( @_ ) } -sub _WhoHaveRoleRightSplitted { return (shift)->RT::Users::_WhoHaveRoleRightSplitted( @_ ) } -sub _GetEquivObjects { return (shift)->RT::Users::_GetEquivObjects( @_ ) } -sub WithGroupRight { return (shift)->RT::Users::WhoHaveGroupRight( @_ ) } -sub WithRoleRight { return (shift)->RT::Users::WhoHaveRoleRight( @_ ) } - -# {{{ sub LimitToEnabled - -=head2 LimitToEnabled - -Only find items that haven\'t been disabled - -=cut - -sub LimitToEnabled { - my $self = shift; - - $self->Limit( ALIAS => $self->PrincipalsAlias, - FIELD => 'Disabled', - VALUE => '0', - OPERATOR => '=', - ); -} -# }}} - -# {{{ sub LimitToDisabled - -=head2 LimitToDeleted - -Only find items that have been deleted. - -=cut - -sub LimitToDeleted { - my $self = shift; - - $self->{'find_disabled_rows'} = 1; - $self->Limit( ALIAS => $self->PrincipalsAlias, - FIELD => 'Disabled', - OPERATOR => '=', - VALUE => 1, - ); -} -# }}} - -# {{{ sub Next - -sub Next { - my $self = shift; - - # Don't show groups which the user isn't allowed to see. - - my $Group = $self->SUPER::Next(); - if ((defined($Group)) and (ref($Group))) { - unless ($Group->CurrentUserHasRight('SeeGroup')) { - return $self->Next(); - } - - return $Group; - } - else { - return undef; - } -} - - - -sub _DoSearch { - my $self = shift; - - #unless we really want to find disabled rows, make sure we\'re only finding enabled ones. - unless($self->{'find_disabled_rows'}) { - $self->LimitToEnabled(); - } - - return($self->SUPER::_DoSearch(@_)); - -} - -1; - diff --git a/rt/lib/RT/Handle.pm b/rt/lib/RT/Handle.pm deleted file mode 100644 index 5cdb65e5b..000000000 --- a/rt/lib/RT/Handle.pm +++ /dev/null @@ -1,101 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -=head1 NAME - - RT::Handle - RT's database handle - -=head1 SYNOPSIS - - use RT::Handle; - -=head1 DESCRIPTION - -=begin testing - -ok(require RT::Handle); - -=end testing - -=head1 METHODS - -=cut - -package RT::Handle; - -use strict; -use vars qw/@ISA/; - -eval "use DBIx::SearchBuilder::Handle::$RT::DatabaseType; -\@ISA= qw(DBIx::SearchBuilder::Handle::$RT::DatabaseType);"; -#TODO check for errors here. - -=head2 Connect - -Connects to RT's database handle. -Takes nothing. Calls SUPER::Connect with the needed args - -=cut - -sub Connect { -my $self=shift; - -# Unless the database port is a positive integer, we really don't want to pass it. - -$self->SUPER::Connect( - User => $RT::DatabaseUser, - Password => $RT::DatabasePassword, - ); - -} - -=item BuildDSN - -Build the DSN for the RT database. doesn't take any parameters, draws all that -from the config file. - -=cut - - -sub BuildDSN { - my $self = shift; -$RT::DatabasePort = undef unless (defined $RT::DatabasePort && $RT::DatabasePort =~ /^(\d+)$/); -$RT::DatabaseHost = undef unless (defined $RT::DatabaseHost && $RT::DatabaseHost ne ''); - - $self->SUPER::BuildDSN(Host => $RT::DatabaseHost, - Database => $RT::DatabaseName, - Port => $RT::DatabasePort, - Driver => $RT::DatabaseType, - RequireSSL => $RT::DatabaseRequireSSL, - DisconnectHandleOnDestroy => 1 - ); - - -} - -eval "require RT::Handle_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Handle_Vendor.pm}); -eval "require RT::Handle_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Handle_Local.pm}); - -1; diff --git a/rt/lib/RT/I18N.pm b/rt/lib/RT/I18N.pm deleted file mode 100644 index 9d0b2b5a1..000000000 --- a/rt/lib/RT/I18N.pm +++ /dev/null @@ -1,501 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - -RT::I18N - a base class for localization of RT - -=cut - -package RT::I18N; - -use strict; -use warnings; - -use Locale::Maketext 1.04; -use Locale::Maketext::Lexicon 0.25; -use base ('Locale::Maketext::Fuzzy'); - -use Encode; -use MIME::Entity; -use MIME::Head; - -# I decree that this project's first language is English. - -our %Lexicon = ( - 'TEST_STRING' => 'Concrete Mixer', - - '__Content-Type' => 'text/plain; charset=utf-8', - - '_AUTO' => 1, - # That means that lookup failures can't happen -- if we get as far - # as looking for something in this lexicon, and we don't find it, - # then automagically set $Lexicon{$key} = $key, before possibly - # compiling it. - - # The exception is keys that start with "_" -- they aren't auto-makeable. - -); -# End of lexicon. - -=head2 Init - -Initializes the lexicons used for localization. - -=begin testing - -use_ok (RT::I18N); -ok(RT::I18N->Init); - -=end testing - -=cut - -sub Init { - require File::Glob; - - # Load language-specific functions - foreach my $language ( File::Glob::bsd_glob(substr(__FILE__, 0, -3) . "/*.pm")) { - if ($language =~ /^([-\w\s.\/\\~:]+)$/) { - require $1; - } - else { - warn("$language is tainted. not loading"); - } - } - - my @lang = @RT::LexiconLanguages; - @lang = ('*') unless @lang; - - # Acquire all .po files and iterate them into lexicons - Locale::Maketext::Lexicon->import({ - _decode => 1, map { - $_ => [ - Gettext => (substr(__FILE__, 0, -3) . "/$_.po"), - Gettext => "$RT::LocalLexiconPath/*/$_.po", - Gettext => "$RT::LocalLexiconPath/$_.po", - ], - } @lang - }); - - return 1; -} - -=head2 encoding - -Returns the encoding of the current lexicon, as yanked out of __ContentType's "charset" field. -If it can't find anything, it returns 'ISO-8859-1' - -=begin testing - -ok(my $chinese = RT::I18N->get_handle('zh_tw')); -ok(UNIVERSAL::can($chinese, 'maketext')); -ok($chinese->maketext('__Content-Type') =~ /utf-8/i, "Found the utf-8 charset for traditional chinese in the string ".$chinese->maketext('__Content-Type')); -ok($chinese->encoding eq 'utf-8', "The encoding is 'utf-8' -".$chinese->encoding); - -ok(my $en = RT::I18N->get_handle('en')); -ok(UNIVERSAL::can($en, 'maketext')); -ok($en->encoding eq 'utf-8', "The encoding ".$en->encoding." is 'utf-8'"); - -=end testing - - -=cut - - -sub encoding { 'utf-8' } - -# {{{ SetMIMEEntityToUTF8 - -=head2 SetMIMEEntityToUTF8 $entity - -An utility function which will try to convert entity body into utf8. -It's now a wrap-up of SetMIMEEntityToEncoding($entity, 'utf-8'). - -=cut - -sub SetMIMEEntityToUTF8 { - RT::I18N::SetMIMEEntityToEncoding(shift, 'utf-8'); -} - -# }}} - -# {{{ IsTextualContentType - -=head2 IsTextualContentType $type - -An utility function that determines whether $type is I, meaning -that it can sensibly be converted to Unicode text. - -Currently, it returns true iff $type matches this regular expression -(case-insensitively): - - ^(?:text/(?:plain|html)|message/rfc822)\b - -# }}} - -=cut - -sub IsTextualContentType { - my $type = shift; - ($type =~ m{^(?:text/(?:plain|html)|message/rfc822)\b}i) ? 1 : 0; -} - -# {{{ SetMIMEEntityToEncoding - -=head2 SetMIMEEntityToEncoding $entity, $encoding - -An utility function which will try to convert entity body into specified -charset encoding (encoded as octets, *not* unicode-strings). It will -iterate all the entities in $entity, and try to convert each one into -specified charset if whose Content-Type is 'text/plain'. - -This function doesn't return anything meaningful. - -=cut - -sub SetMIMEEntityToEncoding { - my ( $entity, $enc, $preserve_words ) = ( shift, shift, shift ); - - # do the same for parts first of all - SetMIMEEntityToEncoding( $_, $enc, $preserve_words ) foreach $entity->parts; - - my $charset = _FindOrGuessCharset($entity) or return; - # one and only normalization - $charset = 'utf-8' if $charset =~ /^utf-?8$/i; - $enc = 'utf-8' if $enc =~ /^utf-?8$/i; - - SetMIMEHeadToEncoding( - $entity->head, - _FindOrGuessCharset($entity, 1) => $enc, - $preserve_words - ); - - my $head = $entity->head; - - # convert at least MIME word encoded attachment filename - foreach my $attr (qw(content-type.name content-disposition.filename)) { - if ( my $name = $head->mime_attr($attr) and !$preserve_words ) { - $head->mime_attr( $attr => DecodeMIMEWordsToUTF8($name) ); - } - } - - # If this is a textual entity, we'd need to preserve its original encoding - $head->add( "X-RT-Original-Encoding" => $charset ) - if $head->mime_attr('content-type.charset') or IsTextualContentType($head->mime_type); - - return unless IsTextualContentType($head->mime_type); - - my $body = $entity->bodyhandle; - - if ( $enc ne $charset && $body) { - my @lines = $body->as_lines or return; - - # {{{ Convert the body - eval { - $RT::Logger->debug("Converting '$charset' to '$enc' for ". $head->mime_type . " - ". ($head->get('subject') || 'Subjectless message')); - - # NOTE:: see the comments at the end of the sub. - Encode::_utf8_off( $lines[$_] ) foreach ( 0 .. $#lines ); - Encode::from_to( $lines[$_], $charset => $enc ) for ( 0 .. $#lines ); - }; - - if ($@) { - $RT::Logger->error( "Encoding error: " . $@ . " defaulting to ISO-8859-1 -> UTF-8" ); - eval { - Encode::from_to( $lines[$_], 'iso-8859-1' => $enc ) foreach ( 0 .. $#lines ); - }; - if ($@) { - $RT::Logger->crit( "Totally failed to convert to utf-8: " . $@ . " I give up" ); - } - } - # }}} - - my $new_body = MIME::Body::InCore->new( \@lines ); - - # set up the new entity - $head->mime_attr( "content-type" => 'text/plain' ) - unless ( $head->mime_attr("content-type") ); - $head->mime_attr( "content-type.charset" => $enc ); - $entity->bodyhandle($new_body); - } -} - -# NOTES: Why Encode::_utf8_off before Encode::from_to -# -# All the strings in RT are utf-8 now. Quotes from Encode POD: -# -# [$length =] from_to($octets, FROM_ENC, TO_ENC [, CHECK]) -# ... The data in $octets must be encoded as octets and not as -# characters in Perl's internal format. ... -# -# Not turning off the UTF-8 flag in the string will prevent the string -# from conversion. - -# }}} - -# {{{ DecodeMIMEWordsToUTF8 - -=head2 DecodeMIMEWordsToUTF8 $raw - -An utility method which mimics MIME::Words::decode_mimewords, but only -limited functionality. This function returns an utf-8 string. - -It returns the decoded string, or the original string if it's not -encoded. Since the subroutine converts specified string into utf-8 -charset, it should not alter a subject written in English. - -Why not use MIME::Words directly? Because it fails in RT when I -tried. Maybe it's ok now. - -=cut - -sub DecodeMIMEWordsToUTF8 { - my $str = shift; - DecodeMIMEWordsToEncoding($str, 'utf-8'); -} - -sub DecodeMIMEWordsToEncoding { - my $str = shift; - my $enc = shift; - - @_ = $str =~ m/(.*?)=\?([^?]+)\?([QqBb])\?([^?]+)\?=([^=]*)/gcs; - return ($str) unless (@_); - - # add everything that hasn't matched to the end of the latest - # string in array this happen when we have 'key="=?encoded?="; key="plain"' - $_[-1] .= substr($str, pos $str); - - $str = ""; - while (@_) { - my ($prefix, $charset, $encoding, $enc_str, $trailing) = - (shift, shift, lc shift, shift, shift); - - $trailing =~ s/\s?\t?$//; # Observed from Outlook Express - - if ( $encoding eq 'q' ) { - use MIME::QuotedPrint; - $enc_str =~ tr/_/ /; # Observed from Outlook Express - $enc_str = decode_qp($enc_str); - } elsif ( $encoding eq 'b' ) { - use MIME::Base64; - $enc_str = decode_base64($enc_str); - } else { - $RT::Logger->warning("Incorrect encoding '$encoding' in '$str', " - ."only Q(uoted-printable) and B(ase64) are supported"); - } - - # now we have got a decoded subject, try to convert into the encoding - unless ($charset eq $enc) { - eval { Encode::from_to($enc_str, $charset, $enc) }; - if ($@) { - $charset = _GuessCharset( $enc_str ); - Encode::from_to($enc_str, $charset, $enc); - } - } - - # XXX TODO: RT doesn't currently do the right thing with mime-encoded headers - # We _should_ be preserving them encoded until after parsing is completed and - # THEN undo the mime-encoding. - # - # This routine should be translating the existing mimeencoding to utf8 but leaving - # things encoded. - # - # It's legal for headers to contain mime-encoded commas and semicolons which - # should not be treated as address separators. (Encoding == quoting here) - # - # until this is fixed, we must escape any string containing a comma or semicolon - # this is only a bandaid - - $enc_str = qq{"$enc_str"} if ($enc_str =~ /[,;]/); - $str .= $prefix . $enc_str . $trailing; - } - - # We might have \n without trailing whitespace, which will result in - # invalid headers. - $str =~ s/\n//g; - - return ($str) -} - -# }}} - -# {{{ _FindOrGuessCharset - -=head2 _FindOrGuessCharset MIME::Entity, $head_only - -When handed a MIME::Entity will first attempt to read what charset the message is encoded in. Failing that, will use Encode::Guess to try to figure it out - -If $head_only is true, only guesses charset for head parts. This is because header's encoding (e.g. filename="...") may be different from that of body's. - -=cut - -sub _FindOrGuessCharset { - my $entity = shift; - my $head_only = shift; - my $head = $entity->head; - - if ( my $charset = $head->mime_attr("content-type.charset") ) { - return $charset; - } - - if ( !$head_only and $head->mime_type =~ m{^text/}) { - my $body = $entity->bodyhandle or return; - return _GuessCharset( $body->as_string ); - } - else { - # potentially binary data -- don't guess the body - return _GuessCharset( $head->as_string ); - } -} - -# }}} - -# {{{ _GuessCharset - -=head2 _GuessCharset STRING - -use Encode::Guess to try to figure it out the string's encoding. - -=cut - -sub _GuessCharset { - my $fallback = 'iso-8859-1'; - my $charset; - - if ( @RT::EmailInputEncodings and eval { require Encode::Guess; 1 } ) { - Encode::Guess->set_suspects(@RT::EmailInputEncodings); - my $decoder = Encode::Guess->guess( $_[0] ); - - if ( defined($decoder) ) { - if ( ref $decoder ) { - $charset = $decoder->name; - $RT::Logger->debug("Guessed encoding: $charset"); - return $charset; - } - elsif ($decoder =~ /(\S+ or .+)/) { - my %matched = map { $_ => 1 } split(/ or /, $1); - return 'utf-8' if $matched{'utf8'}; # one and only normalization - - foreach my $suspect (@RT::EmailInputEncodings) { - next unless $matched{$suspect}; - $RT::Logger->debug("Encode::Guess ambiguous ($decoder); using $suspect"); - $charset = $suspect; - last; - } - } - else { - $RT::Logger->warning("Encode::Guess failed: $decoder; fallback to $fallback"); - } - } - else { - $RT::Logger->warning("Encode::Guess failed: decoder is undefined; fallback to $fallback"); - } - } - else { - $RT::Logger->warning("Cannot Encode::Guess; fallback to $fallback"); - } - - return($charset || $fallback); -} - -# }}} - -# {{{ SetMIMEHeadToEncoding - -=head2 SetMIMEHeadToEncoding HEAD OLD_CHARSET NEW_CHARSET - -Converts a MIME Head from one encoding to another. This totally violates the RFC. -We should never need this. But, Surprise!, MUAs are badly broken and do this kind of stuff -all the time - - -=cut - -sub SetMIMEHeadToEncoding { - my ( $head, $charset, $enc, $preserve_words ) = ( shift, shift, shift, shift ); - - $charset = 'utf-8' if $charset eq 'utf8'; - $enc = 'utf-8' if $enc eq 'utf8'; - - return if $charset eq $enc and $preserve_words; - - foreach my $tag ( $head->tags ) { - next unless $tag; # seen in wild: headers with no name - my @values = $head->get_all($tag); - $head->delete($tag); - foreach my $value (@values) { - if ( $charset ne $enc ) { - - eval { - Encode::_utf8_off($value); - Encode::from_to( $value, $charset => $enc ); - }; - if ($@) { - $RT::Logger->error( "Encoding error: " . $@ - . " defaulting to ISO-8859-1 -> UTF-8" ); - eval { Encode::from_to( $value, 'iso-8859-1' => $enc ) }; - if ($@) { - $RT::Logger->crit( "Totally failed to convert to utf-8: " . $@ . " I give up" ); - } - } - } - $value = DecodeMIMEWordsToEncoding( $value, $enc ) unless $preserve_words; - $head->add( $tag, $value ); - } - } - -} -# }}} - -eval "require RT::I18N_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/I18N_Vendor.pm}); -eval "require RT::I18N_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/I18N_Local.pm}); - -1; # End of module. - diff --git a/rt/lib/RT/I18N/cs.pm b/rt/lib/RT/I18N/cs.pm deleted file mode 100644 index 9b96be1dc..000000000 --- a/rt/lib/RT/I18N/cs.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::I18N::cs; - -# # CZECH TRANSLATORS COMMENTS see Locale::Maketext::TPJ13 -# Obecne parametry musi byt docela slozite (v pripade Slavistickych jazyku) -# typu pocet, slovo, pad a rod -# -#pad 1., rod muzsky: -#0 krecku -#1 krecek -#2..4 krecci -#5.. krecku (nehodi se zde resit pravidlo mod 1,2,3,4 krom mod 11,12,13,14) -# -#0 kabatu -#1 kabat -#2..4 kabaty -#5 kabatu -# -# => Vyplati se udelat quant s parametry typu pocet, slovo1, slovo2..4, slovo5 a slovo0 -# - -sub quant { - my($handle, $num, @forms) = @_; - - return $num if @forms == 0; # what should this mean? - return $forms[3] if @forms > 3 and $num == 0; # special zeroth case - - # Normal case: - # Note that the formatting of $num is preserved. - #return( $handle->numf($num) . ' ' . $handle->numerate($num, @forms) ); - return( $handle->numerate($num, @forms) ); - # Most human languages put the number phrase before the qualified phrase. -} - - -sub numerate { - # return this lexical item in a form appropriate to this number - my($handle, $num, @forms) = @_; - my $s = ($num == 1); - - return '' unless @forms; - return - $s ? $forms[0] : - ( $num > 1 && $num < 5 ) ? $forms[1] : - $forms[2]; -} - -#-------------------------------------------------------------------------- - -sub numf { - my($handle, $num) = @_[0,1]; - if($num < 10_000_000_000 and $num > -10_000_000_000 and $num == int($num)) { - $num += 0; # Just use normal integer stringification. - # Specifically, don't let %G turn ten million into 1E+007 - } else { - $num = CORE::sprintf("%G", $num); - # "CORE::" is there to avoid confusion with the above sub sprintf. - } - while( $num =~ s/^([-+]?\d+)(\d{3})/$1,$2/s ) {1} # right from perlfaq5 - # The initial \d+ gobbles as many digits as it can, and then we - # backtrack so it un-eats the rightmost three, and then we - # insert the comma there. - - $num =~ tr<.,><,.> if ref($handle) and $handle->{'numf_comma'}; - # This is just a lame hack instead of using Number::Format - return $num; -} - -1; diff --git a/rt/lib/RT/I18N/cs.po b/rt/lib/RT/I18N/cs.po deleted file mode 100644 index ebc8af5b5..000000000 --- a/rt/lib/RT/I18N/cs.po +++ /dev/null @@ -1,6201 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"POT-Creation-Date: 2002-05-02 11:36+0800\n" -"PO-Revision-Date: 2007-06-07 22:25+0200\n" -"Last-Translator: Daniel Kastner \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 smazán." - -#: html/Widgets/SavedSearch:47 -#. ($self->{CurrentSearch}{Description}, $args->{Description}) -msgid " %1 renamed to %2." -msgstr "%1 přejmenován na %2." - -#: html/Widgets/SavedSearch:60 -#. ($args->{Description}) -msgid " %1 saved." -msgstr "%1 uložen." - -#: 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 "%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 "%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 přidán" - -#: 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 změněno na %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 smazán" - -#: 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 se vzorem %3" - -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 tento požadavek\\n" - -#: html/Ticket/Elements/ShowAttachments:72 -#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) -msgid "%1 (%2) by %3" -msgstr "%1 (%2) vytvořil %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 (Nezměněn)" - -#: NOT FOUND IN SOURCE -msgid "%1 - %2 shown" -msgstr "%1. až %2. zobrazený" - -#: 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 - argument k předání %2" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - Výstupní stav jde do STDOUT" - -#: bin/rt-crontool:253 -#. ("--template-id") -msgid "%1 - Specify id of the template you want to use" -msgstr "%1 - Zadejte id vzoru, který chcete použít" - -#: bin/rt-crontool:256 -#. ("--transaction") -msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction" -msgstr "%1 - Zadejte, zda chcete použít transakci 'first' nebo 'last'" - -#: bin/rt-crontool:247 -#. ("--action") -msgid "%1 - Specify the action module you want to use" -msgstr "%1 - Jaký akční modul chcete použít" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Jaký podmínkový modul chcete použít" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Jaký vyhledávací modul chcete použít" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -msgstr "%1 - Zadejte typ transakce, kterou chcete použít" - -#: html/Elements/Footer:56 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -msgid "%1 RT %2 Copyright 1996-%3 %4." -msgstr "%1 RT %2 Copyright 1996-%3 %4." - -#: lib/RT/ScripAction_Overlay.pm:150 -#. ($self->Id) -msgid "%1 ScripAction loaded" -msgstr "ScripAction %1 nahrána" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "%1 přidáno jako hodnota pro %2" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on" -msgstr "%1 aliasy vyžadují k činnosti TicketId" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "%1 aliasy vyžadují k činnosti TicketId (odesílatel %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 vypadá jako lokální objekt, ale není v databázi" - -#: 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 uživatelem %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 změněno z %2 na %3" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "kopie %1" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1 nemůže být nastaveno na %2." - -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1 nemůže začít transakci (%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 nemůže nastavit stav na vyřeÅ¡en. Databáze RT může být nekonzistentní." - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "%1 vytvořen" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "%1 smazán" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "%1 nejdůležitějších požadavků, které vlastním" - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I requested..." -msgstr "%1 nejdůležitějších požadavků, které žádám..." - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 je nástroj zpracující požadavky z vnějšího plánovacího nástroje jako je cron" - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 již není %2 této fronty." - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 již není %2 tohoto požadavku." - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a value for custom field %2" -msgstr "%1 již není hodnotou uživatelské položky %2" - -#: NOT FOUND IN SOURCE -msgid "%1 isn't a valid Queue id." -msgstr "%1 není platným identifikátorem fronty." - -#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49 -#. ($minutes) -msgid "%1 min" -msgstr "%1 %quant(%1,minuta,minuty,minut,minut)" - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "%1 nejnovějších nevlastněných požadavků" - -#: NOT FOUND IN SOURCE -msgid "%1 not shown" -msgstr "%1 nezobrazeno" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "%1 objekty" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "práva %1" - -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "%1 provedeno\\n" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "typ %1 neznámý pro $MessageId" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "typ %1 neznámý pro %2" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 vyřeší vÅ¡echny členy skupiny vyřeÅ¡eného požadavku." - -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "%1 odloží [místní] BÁZI, je-li závislá [či členem] na spjatém požadavku." - -#: 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 "Uložené dotazy patřící %1" - -#: lib/RT/Transaction_Overlay.pm:481 -#. ($self) -msgid "%1: no attachment specified" -msgstr "%1: neudána příloha" - -#: html/Ticket/Elements/ShowTransactionAttachments:78 -#. ($size) -msgid "%1b" -msgstr "%1 B" - -#: html/Ticket/Elements/ShowTransactionAttachments:75 -#. (int( $size / 102.4 ) / 10) -msgid "%1k" -msgstr "%1 kB" - -#: 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 je neplatnou hodnotou pro stav" - -#: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "%1 je neznámá akce." - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete scrip)" -msgstr "(Zatrhněte pro smazání scripu)" - -#: 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 "(Zatrhněte pro smazání)" - -#: html/Ticket/Elements/PreviewScrips:99 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(Zatrhněte pro zakázání upozorňování uvedených příjemců)" - -#: html/Ticket/Elements/PreviewScrips:123 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "(Zatrhněte pro povolení upozorňování uvedených příjemců)" - -#: html/Ticket/Create.html:218 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(Zadejte identifikátory či URL požadavku, oddělené mezerami)" - -#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1)" -msgstr "(Pro prázdné pole se použije %1)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Žádné uživatelské položky)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Žádní členové)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Žádné scripy)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Žádné vzory)" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(Žádné)" - -#: 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 "(ZaÅ¡le skrytou kopii této aktualizace čárkami oddělenému seznamu e-mail adres. Neovlivňuje příjemce budoucích aktualizací.)" - -#: 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 "(ZaÅ¡le skrytou kopii této aktualizace čárkami oddělenému seznamu e-mail adres. Neovlivňuje příjemce budoucích aktualizací.)" - -#: 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 "(ZaÅ¡le skrytou kopii této aktualizace čárkami oddělenému seznamu e-mail adres. Neovlivňuje příjemce budoucích aktualizací.)" - -#: 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 "(ZaÅ¡le kopii této aktualizace čárkami oddělenému seznamu e-mail adres. Tito lidé budou dostávat budoucí aktualizace.)" - -#: 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 "(ZaÅ¡le kopii této aktualizace čárkami oddělenému seznamu e-mail adres. Tito lidé budou dostávat budoucí aktualizace.)" - -#: 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 "(ZaÅ¡le kopii této aktualizace čárkami oddělenému seznamu e-mail adres. Nemění příjemce budoucích aktualizací" - -#: 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 "(ZaÅ¡le kopii této aktualizace čárkami oddělenému seznamu e-mail adres. Neovlivňuje příjemce budoucích aktualizací.)" - -#: 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 "(ZaÅ¡le kopii této aktualizace čárkami oddělenému seznamu e-mail adres. Neovlivňuje příjemce budoucích aktualizací.)" - -#: 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 "(ZaÅ¡le kopii této aktualizace čárkami oddělenému seznamu e-mail adres. Tito lidé budou dostávat budoucí aktualizace.)" - -#: 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 "(ZaÅ¡le kopii této aktualizace čárkami oddělenému seznamu e-mail adres. Tito lidé budou dostávat budoucí aktualizace.)" - -#: html/Admin/Elements/EditScrip:96 -msgid "(Use these fields when you choose 'User Defined' for a condition or action)" -msgstr "(Použijte tyto položky, pokud jste v podmínce nebo akci vybrali hodnotu 'Uživatelem definované')" - -#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53 -msgid "(Will not be sent email)" -msgstr "(Nebude odeslán email)" - -#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 -msgid "(empty)" -msgstr "(prázdná)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(žádné jméno nebylo vypsáno)" - -#: NOT FOUND IN SOURCE -msgid "(no subject)" -msgstr "(bez předmětu)" - -#: 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 "(bez hodnoty)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(bez hodnot)" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(jen jeden požadavek)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(očekávájící schválení)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "(probíhá jiná Sbírka)" - -#: NOT FOUND IN SOURCE -msgid "(pending other tickets)" -msgstr "(jiné očekávající požadavky)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(povinné)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(nepojmenováno)" - -#: html/Ticket/Elements/Reminders:133 -msgid "(yyyy/mm/dd)" -msgstr "(yyyy/mm/dd)" - -#: html/Elements/EditCustomFieldSelect:57 -msgid "-" -msgstr "-" - -#: bin/rt-crontool:95 -msgid "--transaction argument could be only 'first' or 'last'" -msgstr "--parametrem požadavku může být pouze 'first' nebo 'last'" - -#: html/Ticket/Elements/ShowBasics: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 "Prázdný vzor" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "Heslo nebylo nastaveno, uživatel se nebude moci přihlásit." - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE nenalezeno" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACE mohou být pouze vytvářeny nebo ruÅ¡eny." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "AND" - -#: NOT FOUND IN SOURCE -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "PřeruÅ¡eno k zamezení nežádoucích změn požadavku.\\n" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "O mně" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Řízení přístupu" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Akce" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "Akce %1 nenalezena" - -#: NOT FOUND IN SOURCE -msgid "Action committed." -msgstr "Akce provedena." - -#: bin/rt-crontool:171 -msgid "Action committed.\\n" -msgstr "Akce provedena.\\n" - -#: lib/RT/Scrip_Overlay.pm:168 -msgid "Action is mandatory argument" -msgstr "Akce je povinným parametrem" - -#: bin/rt-crontool:167 -msgid "Action prepared..." -msgstr "Akce připravena..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Přidat" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Přidat AdminCc" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Přidat Cc" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Přidat sloupce" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Přidat podmínku" - -#: html/Ticket/Create.html:147 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Přidat další soubory" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Přidat žadatele" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Přidat hodnotu" - -#: NOT FOUND IN SOURCE -msgid "Add a new a global scrip" -msgstr "Přidat nový globální scrip" - -#: NOT FOUND IN SOURCE -msgid "Add a scrip to this queue" -msgstr "Přidat scrip k této frontě" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Přidat scrip platný ve vÅ¡ech frontách" - -#: NOT FOUND IN SOURCE -msgid "Add additional criteria" -msgstr "Přidat dodatečnou podmínku" - -#: html/Search/Build.html:109 html/Search/Build.html:94 -msgid "Add and Search" -msgstr "Přidat a vyhledat" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "Přidat komentáře či odpovědi k vybraným požadavkům" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Přidat členy" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Přidat nové pozorovatele" - -#: html/Search/Build.html:85 -msgid "Add these terms to your search" -msgstr "Přidat tyto podmínky k dotazu" - -#: html/Search/Bulk.html:158 -msgid "Add values" -msgstr "Přidat hodnoty" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "Add, delete and modify custom field values for objects" -msgstr "Přidat, smazat nebo upravit hodnoty uživatelských položek pro objekty" - -#: NOT FOUND IN SOURCE -msgid "AddNextState" -msgstr "Přidat další stav" - -#: lib/RT/Queue_Overlay.pm:763 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "Uživatel přidán do této fronty jako %1" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Uživatel přidán k tomuto požadavku jako %1" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Adresa1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Adresa2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "Admin Cc" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "Administrativní komentář" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "Administrativní korespondence" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Správa front" - -#: NOT FOUND IN SOURCE -msgid "Admin users" -msgstr "Správa uživatelů" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Správa/Globální konfigurace" - -#: NOT FOUND IN SOURCE -msgid "Admin/Groups" -msgstr "Správa/Skupiny" - -#: NOT FOUND IN SOURCE -msgid "Admin/Queue/Basics" -msgstr "Správa/Fronta/Základní údaje" - -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "Spravovat vÅ¡echny osobní skupiny" - -#: 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 "AdminComment" - -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" -msgstr "AdminCorrespondence" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "Spravovat uživatelskou položku" - -#: NOT FOUND IN SOURCE -msgid "AdminCustomFields" -msgstr "Spravovat uživatelské položky" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "Spravovat skupinu" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "Spravovat členství ve skupinách" - -#: lib/RT/System.pm:80 -msgid "AdminOwnPersonalGroups" -msgstr "Spravovat vlastní osobní skupiny" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "AdminQueue" -msgstr "Spravovat frontu" - -#: lib/RT/System.pm:81 -msgid "AdminUsers" -msgstr "Spravovat uživatele" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Administrativní Cc" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Pokročilé" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "Pokročilé vyhledávání" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "Po" - -#: NOT FOUND IN SOURCE -msgid "Age" -msgstr "Stáří" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "Operátor" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "VÅ¡echna schvalování proÅ¡la" - -#: NOT FOUND IN SOURCE -msgid "All Custom Fields" -msgstr "VÅ¡echny uživatelské položky" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "VÅ¡echny fronty" - -#: NOT FOUND IN SOURCE -msgid "Always sends a message to the requestors independent of message sender" -msgstr "Vždy posílá zprávu žadatelům nezávisle na odesílateli" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "And/Or" - -#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "Vztahuje se na" - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Provést" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Provést změny" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Schvalování" - -#: 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 "Schválení #%1: $2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Schválení #%1: Poznámky neuloženy kvůli systémové chybě" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Schválení #%1: Poznámky uloženy" - -#: NOT FOUND IN SOURCE -msgid "Approval Details" -msgstr "Detaily schválení" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Schvalování proÅ¡lo" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Schvalování odmítnuto" - -#: NOT FOUND IN SOURCE -msgid "Approval diagram" -msgstr "Schvalovací diagram" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Schválit" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Poznámky schvalovatele: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "dub" - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "Vzestupně" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Vzestupně" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Assign and remove custom fields" -msgstr "Přidělit a odebrat uživatelské položky" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "AssignCustomFields" -msgstr "Přidělit uživatelské položky" - -#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116 -msgid "Attach" -msgstr "Přiložit" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Připojit soubor" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Připojený soubor" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Příloha '%1' nemůže být nahrána" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Příloha vytvořena" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Jméno souboru přílohy" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Přílohy" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "Atribut smazán" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "srp" - -#: NOT FOUND IN SOURCE -msgid "AuthSystem" -msgstr "AuthSystem" - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "Automatická odpověď" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Automaticky odpověz žadatelům" - -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "Automatická odpověď žadatelům" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "Dostupné" - -#: NOT FOUND IN SOURCE -msgid "Available Columns" -msgstr "Dostupné položky" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "Chybná PGP signatura: %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "Chybný identifikátor přílohy. Nelze nalézt přílohu'%1'\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad data in %1" -msgstr "Chybná data v %1" - -#: NOT FOUND IN SOURCE -msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "Chybné číslo transakce u přílohy. %1 má být %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 "Základní údaje" - -#: 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 "Nezapomeňte uložit své změny" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "Před" - -#: NOT FOUND IN SOURCE -msgid "Begin Approval" -msgstr "Začátek schvalování" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "Best Practical Solutions, LLC corporate logo" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Prázdný" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "Tučné" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "Uložitelný odkaz" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Zkrácené hlavičky" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "Hromadná úprava" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Hromadná úprava požadavků" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Nelze měnit systémové uživatele" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Může tento uživatel vidět tuto frontu" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Uživatelské položce nelze přidat hodnotu beze jména" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($Class) -msgid "Can't find a collection class for '%1'" -msgstr "Nelze nalézt třídu collection pro '%1'" - -#: html/Search/Build.html:286 -msgid "Can't find a saved search to work with" -msgstr "Nelze nalézt uložený dotaz ke zpracování" - -#: lib/RT/Link_Overlay.pm:159 -msgid "Can't link a ticket to itself" -msgstr "Požadavek nelze svázat se sebou samým" - -#: NOT FOUND IN SOURCE -msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Nelze sloučit do sloučeného požadavku. To by se vám nemělo nikdy stát." - -#: html/Widgets/SavedSearch:63 -#. (loc($self->{SearchType})) -msgid "Can't save %1" -msgstr "Nelze uložit %1" - -#: html/Search/Build.html:290 -msgid "Can't save this search" -msgstr "Tento dotaz nelze uložit" - -#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "Nelze zadat zároveň zdroj i cíl" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Nelze vytvořit uživatele: %1" - -#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58 -msgid "Category" -msgstr "Kategorie" - -#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112 -msgid "Cc" -msgstr "Cc" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -msgstr "Změna hesla" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Označ vÅ¡e" - -#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "ZaÅ¡rtnutím odstraníte" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Zatrhněte k odebrání práva" - -#: 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 "Potomci" - -#: html/NoAuth/js/util.js:201 -msgid "Choose a date" -msgstr "Vybrat datum" - -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 -msgid "City" -msgstr "Město" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Odznač vÅ¡e" - -#: html/Helpers/CalPopup.html:51 -msgid "Close window" -msgstr "Zavřít okno" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Uzavřen" - -#: NOT FOUND IN SOURCE -msgid "Closed Tickets" -msgstr "Uzavřené požadavky" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Uzavřené požadavky" - -#: lib/RT/CustomField_Overlay.pm:89 -msgid "Combobox: Select or enter multiple values" -msgstr "Combobox: Vybrat nebo zadat více hodnot" - -#: lib/RT/CustomField_Overlay.pm:90 -msgid "Combobox: Select or enter one value" -msgstr "Combobox: Vybrat nebo zadat jednu hodnotu" - -#: lib/RT/CustomField_Overlay.pm:91 -msgid "Combobox: Select or enter up to %1 values" -msgstr "Combobox: Vybrat nebo zadat nejvýše %1 %quant(%1,hodnotu,hodnoty,hodnot)" - -#: NOT FOUND IN SOURCE -msgid "Command not understood!\\n" -msgstr "Neznámý příkaz!\\n" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Komentovat" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Adresa pro komentáře" - -#: NOT FOUND IN SOURCE -msgid "Comment not recorded" -msgstr "Komentář nezaznamenán" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Komentovat požadavky" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "Komentovat požadavky" - -#: NOT FOUND IN SOURCE -msgid "Comments" -msgstr "Poznámky" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Komentář (Neposílá se žadatelům)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Komentář (nepoÅ¡le se žadatelům)" - -#: NOT FOUND IN SOURCE -msgid "Comments about %1" -msgstr "Poznámky o %1" - -#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Poznámky o tomto uživateli" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Komentáře přidány" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "Commit v zárodku" - -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "Omezení překladu" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Podmínka" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "Podmínka je povinným parametrem" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "Podmínky splněny..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Podmínka nenalezena" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Správa" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Potvrzení" - -#: NOT FOUND IN SOURCE -msgid "ContactInfoSystem" -msgstr "Kontaktní informační systém" - -#: NOT FOUND IN SOURCE -msgid "Contacted date '%1' could not be parsed" -msgstr "Datum kontaktu '%1' nemůže být rozpoznáno" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Obsah" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "Content-Type" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Kopírovat" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Korespondence" - -#: NOT FOUND IN SOURCE -msgid "Correspondence Address" -msgstr "Adresa pro korespondenci" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Korespondence zaznamenána" - -#: NOT FOUND IN SOURCE -msgid "Correspondence not recorded" -msgstr "Korespondence nebyla zaznamenána" - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. " -msgstr "K požadavku nelze přidat novou hodnotu uživatelské položky. " - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "Nelze přidat novou hodnotu uživatelské položky." - -#: lib/RT/Record.pm:1660 -#. (, $value_msg) -msgid "Could not add new custom field value. %1 " -msgstr "Nelze přidat novou hodnotu uživatelské položky. %1" - -#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073 -msgid "Could not change owner. " -msgstr "Nelze změnit vlastníka. " - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Nelze vytvořit uživatelskou položku" - -#: html/Admin/Elements/EditCustomField:113 -#. ($msg) -msgid "Could not create CustomField: %1" -msgstr "Nelze vytvořit uživatelskou položku: %1" - -#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "Nelze vytvořit skupinu" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "Nelze vytvořit vzor: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Nelze vytvořit požadavek. Nenastavena fronta" - -#: 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 "Nelze vytvořit uživatele" - -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" -msgstr "Nelze nalézt požadavek s identifikátorem %1" - -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." -msgstr "Nelze nalézt skupinu %1." - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "Tohoto uživatele nelze nalézt nebo vytvořit" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "Nelze naléze tohoto uživatele" - -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." -msgstr "Nelze nalézt uživatele %1." - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "Nelze nahrát uživatelskou položku %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 "Nelze načíst skupinu" - -#: lib/RT/SavedSearch.pm:119 -#. ($privacy) -msgid "Could not load object for %1" -msgstr "Nelze nahrát objekt pro %1" - -#: lib/RT/SavedSearch.pm:197 -msgid "Could not load search attribute" -msgstr "Nelze nahrát atribut dotazu" - -#: lib/RT/Queue_Overlay.pm:761 -#. ($args{'Type'}) -msgid "Could not make that principal a %1 for this queue" -msgstr "Tento uživatel nemůže být %1 této fronty" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "Tento uživatel nemůže být %1 tohoto požadavku" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Tento uživatel nemůže být odstraněn jako %1 této fronty" - -#: NOT FOUND IN SOURCE -msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Tento uživatel nemůže být odstraněn jako %1 tohoto požadavku" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "Nelze nastavit uživatelské informace" - -#: lib/RT/Transaction_Overlay.pm:159 -msgid "Couldn't add attachment" -msgstr "Nelze přidat přílohu" - -#: lib/RT/Group_Overlay.pm:1003 -msgid "Couldn't add member to group" -msgstr "Do skupiny nelze přidat člena" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "Nelze vytvořit transakci: %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "Nelze zjistit co dělat s gpg odpovědí\\n" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find group\\n" -msgstr "Skupinu nelze nalézt\\n" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "Nemohu nalézt řádek" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Tohoto uživatele nelze nalézt" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Tuto hodnotu nelze nalézt" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "Uživatele nelze nalézt\\n" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "Z databáze uživatelů nelze načíst %1.\\n" - -#: html/Admin/CustomFields/UserRights.html:149 -#. ($id) -msgid "Couldn't load Class %1" -msgstr "Nelze načíst třídu %1" - -#: html/Admin/CustomFields/GroupRights.html:107 -#. ($id) -msgid "Couldn't load CustomField %1" -msgstr "Nelze načíst uživatelskou položku %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" -msgstr "Konfigurační soubor RT '%1'nelze načíst %2" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "Scripy nelze načíst." - -#: lib/RT/Ticket_Overlay.pm:2016 -#. ($self->Id) -msgid "Couldn't load copy of ticket #%1." -msgstr "Nelze načíst kopii požadavku #%1." - -#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 -#. ($id) -msgid "Couldn't load group %1" -msgstr "Skupinu %1 nelze načíst" - -#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238 -msgid "Couldn't load link" -msgstr "Vazbu nelze načíst" - -#: 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 "Nelze nahrát objekt %1" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "Frontu nelze načíst" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "Frontu %1 nelze načíst" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "Scrip nelze načíst" - -#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167 -#. ($id) -msgid "Couldn't load scrip #%1" -msgstr "Nelze načíst scrip #%1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load template" -msgstr "Vzor nelze načíst" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load that user (%1)" -msgstr "Uživatele (%1) nelze načíst" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "Požadavek '%1' nelze načíst" - -#: lib/RT/Ticket_Overlay.pm:2643 -#. ($args{'URI'}) -msgid "Couldn't resolve '%1' into a URI." -msgstr "Nelze přeložit '%1' do URI." - -#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 -msgid "Country" -msgstr "Země" - -#: 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 "Vytvořit" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Vytvořit požadavky" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Vytvořit uživatelskou položku" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "Vytvoření uživatelské položky pro frontu %1" - -#: NOT FOUND IN SOURCE -msgid "Create a CustomField which applies to all queues" -msgstr "Vytvoření uživatelské položky pro vÅ¡echny front" - -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "Vytvořit novou uživatelskou položku" - -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "Vytvořit nový globální scrip" - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Vytvořit novou skupinu" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Vytvořit novou vlastní skupinu" - -#: NOT FOUND IN SOURCE -msgid "Create a new queue" -msgstr "Vytvořit novou frontu" - -#: NOT FOUND IN SOURCE -msgid "Create a new scrip" -msgstr "Vytvořit nový scrip" - -#: NOT FOUND IN SOURCE -msgid "Create a new template" -msgstr "Vytvořit nový vzor" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Vytvoření nového požadavku" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Vytvořit nového uživatele" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Vytvořit frontu" - -#: NOT FOUND IN SOURCE -msgid "Create a queue called" -msgstr "Vytvořit frontu nazvanou" - -#: NOT FOUND IN SOURCE -msgid "Create a request" -msgstr "Vytvořit požadavek" - -#: html/Admin/Queues/Scrip.html:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Vytvořit scrips pro frontu %1" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Vytvořit vzor" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Vytvořit požadavek" - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Vytvářet požadavky podle tohoto vzoru scripu" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Vytvořit požadavek" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Vytvářet požadavky v této frontě" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Vytvářet, mazat a měnit uživatelem definované položky" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Vytvářet, mazat a měnit fronty" - -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "Vytvářet, mazat a měnit členy osobních skupin vÅ¡ech uživatelů" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Vytvářet, mazat a měnit členy osobních skupin" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Vytvářet, mazat a měnit uživatele" - -#: lib/RT/System.pm:87 -msgid "CreateSavedSearch" -msgstr "Vytvořit uložený dotaz" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "CreateTicket" -msgstr "Vytvořit požadavek" - -#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169 -msgid "Created" -msgstr "Vytvořeno" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "Uživatelská položka %1 vytvořena" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "Vytvořené za období" - -#: NOT FOUND IN SOURCE -msgid "Created template %1" -msgstr "Vzor %1 vytvořen" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "Vytvořené požadavky za období, seskupené dle stavu" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Tvůrce" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Aktuální relace" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Aktuální scripy" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Aktuální členové" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Aktuální práva" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "Aktuální dotaz" - -#: NOT FOUND IN SOURCE -msgid "Current search criteria" -msgstr "Aktuální vyhledávací podmínky" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Aktuální pozorovatelé" - -#: NOT FOUND IN SOURCE -msgid "Custom Field #%1" -msgstr "Uživatelská položka #%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 "Uživatelské položky" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "Uživatelské položky pro %1" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Čistící kód uživatelské akce" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Přípravný kód uživatelské akce" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Uživatelská podmínka" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 %2 %3" -msgstr "Uživatelská položka %1 %2 %3" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "Uživatelská položka %1 má hodnotu." - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "Uživatelská položka %1 nemá hodnotu." - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Uživatelská položka %1 nenalezena" - -#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121 -#. ($cf) -#. ($obj->Name) -msgid "Custom field '%1'" -msgstr "Uživatelská položka '%1'" - -#: NOT FOUND IN SOURCE -msgid "Custom field deleted" -msgstr "Uživatelská položka smazána" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Uživatelská položka nenalezena" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Hodnota %1 nemůže být nalezena v uživatelské položce %2" - -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "Hodnota uživatelské položky změněna z %1 na %2" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "Hodnota uživatelské položky nemůže být smazána" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "Hodnota uživatelské položky nemůže být nalezena" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Hodnota uživatelské položky smazána" - -#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "Uživatelská položka" - -#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75 -msgid "Customize" -msgstr "Upravit" - -#: 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 "Datumy" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "pro" - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Implicitní vzor automatické odpovědi" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Implicitní fronta" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Implicitní žadatel" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Implicitní vzor administrativního komentáře" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Implicitní vzor administrativní korespondence" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Implicitní korespondenční vzor" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Implicitní transakční vzor" - -#: NOT FOUND IN SOURCE -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Výchozí hodnota: %1/%2 změněno z %3 na %4" - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Delegovat práva" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "Delegovat specifická práva, která vám byla poskytnuta." - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "Delegovat práva" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Pověření" - -#: 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 "Smazat" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "Smazat vzor" - -#: lib/RT/SavedSearch.pm:220 -#. ($msg) -msgid "Delete failed: %1" -msgstr "Nelze smazat: %1" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Smazat vybrané scripy" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Smazat požadavky" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "Smazat hodnoty" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "Smazat požadavek" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "Dotaz smazán" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object could break referential integrity" -msgstr "Smazání tohoto objektu mohlo poruÅ¡it referenční integritu" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "Smazání tohoto objektu by mohlo poruÅ¡it referenční integritu" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Smazání tohoto objektu by mohlo naruÅ¡it referenční integritu" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Zamítnout" - -#: 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 "Je rekvizitou pro" - -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "Závislosti: \\n" - -#: lib/RT/Transaction_Overlay.pm:718 -#. ($value) -msgid "Dependency by %1 added" -msgstr "Přidána závislost %1" - -#: lib/RT/Transaction_Overlay.pm:758 -#. ($value) -msgid "Dependency by %1 deleted" -msgstr "Závislost %1 smazána" - -#: lib/RT/Transaction_Overlay.pm:715 -#. ($value) -msgid "Dependency on %1 added" -msgstr "Přidána závislost na %1" - -#: lib/RT/Transaction_Overlay.pm:755 -#. ($value) -msgid "Dependency on %1 deleted" -msgstr "Závislost na %1 smazána" - -#: 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 "Závisející na" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "Sestupně" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Sestupně" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "PopiÅ¡te případ níže" - -#: 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 "Popis" - -#: NOT FOUND IN SOURCE -msgid "Details" -msgstr "Podrobnosti" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Zobrazit" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Zobrazit přístupová práva" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Zobrazované položky" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Zobrazovat vzory scripů pro tuto frontu" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Zobrazovat scripy pro tuto frontu" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Režim zobrazení" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "Zobraz uložené dotazy pro tuto skupinu" - -#: html/Elements/Footer:61 -msgid "Distributed under version 2 of the GNU GPL." -msgstr "Šířeno pod verzí 2 GNU GPL." - -#: lib/RT/System.pm:75 -msgid "Do anything and everything" -msgstr "Dělat cokoli a vÅ¡echno" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Neobčerstvovat tuto stránku." - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Stáhnout" - -#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Stáhnout jako soubor oddělený tabelátory" - -#: 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 "Termín dokončení" - -#: NOT FOUND IN SOURCE -msgid "Due date '%1' could not be parsed" -msgstr "Datum termínu dokončení '%1' nemůže být rozpoznán" - -#: NOT FOUND IN SOURCE -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "CHYBA: Nelze načíst požadavek '%1': %2.\\n" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Upravit" - -#: html/Search/Bulk.html:149 -msgid "Edit Custom Fields" -msgstr "Upravit uživatelské položky" - -#: 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 "Upravit uživatelské položky pro %1" - -#: html/Admin/Global/CustomFields/Groups.html:54 -msgid "Edit Custom Fields for all groups" -msgstr "Upravit uživatelské položky pro vÅ¡echny skupiny" - -#: html/Admin/Global/CustomFields/Users.html:54 -msgid "Edit Custom Fields for all users" -msgstr "Upravit uživatelské položky pro vÅ¡echny uživatele" - -#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54 -msgid "Edit Custom Fields for tickets in all queues" -msgstr "Upravit uživatelské položky pro požadavky ve vÅ¡ech frontách" - -#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Upravit vazby" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Upravit dotaz" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "Úprava dotazu" - -#: html/Admin/Queues/Templates.html:63 -#. ($QueueObj->Name) -msgid "Edit Templates for queue %1" -msgstr "Upravit vzory pro frontu %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "Upravit uložené dotazy pro tuto skupinu" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Úprava systémových vzorů" - -#: NOT FOUND IN SOURCE -msgid "Edit templates for %1" -msgstr "Upravit vzory pro %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "Upravovat uložené dotazy" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "Úprava konfigurace pro frontu %1" - -#: NOT FOUND IN SOURCE -msgid "Editing Configuration for user %1" -msgstr "Úprava konfigurace pro uživatele %1" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Úprava uživatelské položky %1" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Úprava členství ve skupině %1" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Úprava členství ve vlastní skupině %1" - -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "Úprava vzoru %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 "Zdroj či cíl musí být zadán" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "Email" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "Emailová adresa je použita" - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "Emailová adresa" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "Kódování emailu" - -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Povolena (zruÅ¡ením zatrhnutí zablokujete tuto uživatelskou položky)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Povolena (zruÅ¡ením zatrhnutí zablokujete tuto skupinu)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Povoleno (zruÅ¡ení zatrhnutí zablokuje tuto frontu)" - -#: NOT FOUND IN SOURCE -msgid "Enabled Custom Fields" -msgstr "Povolené uživatelské položky" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Povolené fronty" - -#: 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 "Povolen stav %1" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -msgstr "Povolen stav: 1" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Vyplnit více hodnot" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Zadejte objekty či URI k provázání. Více položek oddělujte mezerami." - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Vyplnit jednu hodnotu" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Zadejte fronty či URI k provázání. Více položek oddělujte mezerami." - -#: html/Elements/EditLinks:119 html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Zadejte požadavky či URI k provázání. Více položek oddělujte mezerami." - -#: NOT FOUND IN SOURCE -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "Zadejte požadavky či URI se nimiž požadavky svázat. Oddělte více položek mezerami." - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Zadejte nejvýše %1 %quant(%1,hodnotu,hodnoty,hodnot)" - -#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47 -msgid "Error" -msgstr "Chyba" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Chyba v parametrech do Queue->AddWatcher" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Chyba v parametrech do Queue->DeleteWatcher" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Chyba v parametrech do Ticket->AddWatcher" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Chyba v parametrech do Ticket->DeleteWatcher" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "Eskalovat požadavky" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Odhadovaný" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Kdokoli" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Příklad:" - -#: NOT FOUND IN SOURCE -msgid "ExternalAuthId" -msgstr "Identifikátor externí autentizace" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr "Identifikátor externího kontaktu" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Doplňkové údaje" - -#: lib/RT/SavedSearch.pm:177 -msgid "Failed to create search attribute" -msgstr "Nelze vytvořit atribut dotazu" - -#: lib/RT/User_Overlay.pm:376 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Nenalezena pseudoskupina uživatelů 'Privilegovaný'." - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Nenalezena pseudoskupina uživatelů 'Neprivilegovaný'" - -#: bin/rt-crontool:206 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "Nelze načíst modul %1. (%2)" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "Nelze načíst objekt pro %1" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "úno" - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "Název souboru" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Vyplnit více textových oblastí" - -#: lib/RT/CustomField_Overlay.pm:74 -msgid "Fill in multiple wikitext areas" -msgstr "Vyplnit více wiki textových oblastí" - -#: lib/RT/CustomField_Overlay.pm:70 -msgid "Fill in one text area" -msgstr "Vyplnit jednu textovou oblast" - -#: lib/RT/CustomField_Overlay.pm:75 -msgid "Fill in one wikitext area" -msgstr "Vyplnit jednu wiki textovou oblast" - -#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118 -msgid "Fill in this field with a URL." -msgstr "Do této položky zadejte URL." - -#: lib/RT/CustomField_Overlay.pm:71 -msgid "Fill in up to %1 text areas" -msgstr "Vyplnit nejvýše %1 %quant(%1,textovou oblast,textové oblasti,textových oblastí)" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "Vyplnit nejvýše %1 wiki %quant(%1,textovou oblast,textové oblasti,textových oblastí)" - -#: NOT FOUND IN SOURCE -msgid "Fin" -msgstr "Kon" - -#: 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 "Koncová priorita" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "Koncová priorita" - -#: NOT FOUND IN SOURCE -msgid "Find group whose" -msgstr "Najít skupinu jejíž" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Najít skupiny jejichž" - -#: NOT FOUND IN SOURCE -msgid "Find new/open tickets" -msgstr "Najít nové/otevřené požadavky" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Najít osoby, jejichž" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Nalézt požadavky" - -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "Záverečné schválení" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "První" - -#: NOT FOUND IN SOURCE -msgid "First page" -msgstr "První stránka" - -#: 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 "Vynutit změnu" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Formát" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "Nalezen%quant(%1,,y,o) %numf(%1) %quant(%1,požadavek,požadavky,požadavků)" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Nalezen objekt" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "Kontaktní údaje ve volné podobě" - -#: NOT FOUND IN SOURCE -msgid "FreeformMultiple" -msgstr "Volná forma vícenásobně" - -#: NOT FOUND IN SOURCE -msgid "FreeformSingle" -msgstr "Volná forma jedinkrát" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "pá" - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Celé hlavičky" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Vzít vzor ze souboru" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "Předáno %1" - -#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 -msgid "Global" -msgstr "Globální" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "Globální uživatelské položky" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "Globální konfigurace uživatelských položek" - -#: html/Admin/Global/MyRT.html:48 -#. ($pane) -msgid "Global portlet %1 saved." -msgstr "Globální portlet %1 uložen." - -#: html/Admin/Elements/SelectTemplate:59 -#. (loc($Template->Name)) -msgid "Global template: %1" -msgstr "Globální vzor: %1" - -#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89 -msgid "Go" -msgstr "Provést" - -#: 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 "SpusÅ¥!" - -#: NOT FOUND IN SOURCE -msgid "Good pgp sig from %1\\n" -msgstr "Správný PGP podpis od %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Goto page" -msgstr "Přejít na stránku" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Přejít na požadavek" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Skupina" - -#: NOT FOUND IN SOURCE -msgid "Group %1 %2: %3" -msgstr "Skupina %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 "Práva skupiny" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Skupina již má člena" - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "Skupina nemůže být založena: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Skupina vytvořena" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Skupina nemá takového člena" - -#: 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 "Skupina nenalezena" - -#: NOT FOUND IN SOURCE -msgid "Group not found.\\n" -msgstr "Skupina nenalezena.\\n" - -#: NOT FOUND IN SOURCE -msgid "Group not specified.\\n" -msgstr "Skupina nezadána.\\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 "Skupiny" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Skupiny nemohou být svými členy" - -#: html/Admin/Groups/index.html:86 -msgid "Groups matching search criteria" -msgstr "Skupiny splňující vyhledávací podmínku" - -#: html/Ticket/Elements/ShowRequestor:77 -msgid "Groups this user belongs to" -msgstr "Skupiny, do nichž uživatel patří" - -#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 -msgid "Hello!" -msgstr "Ahoj!" - -#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 -#. ($name) -msgid "Hello, %1" -msgstr "Ahoj, %1" - -#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Historie" - -#: html/Admin/Groups/History.html:62 -#. ($GroupObj->Name) -msgid "History of the group %1" -msgstr "Historie skupiny %1" - -#: html/Admin/Users/History.html:62 -#. ($UserObj->Name) -msgid "History of the user %1" -msgstr "Historie uživatele %1" - -#: NOT FOUND IN SOURCE -msgid "HomePhone" -msgstr "Telefon domů" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Domovská stránka" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "Hodin" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "Mám %quant(%1,míchačku,míchačky,míchaček)" - -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." -msgstr "I have [quant,_1,concrete mixer]." - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "Jsem ztracen" - -#msgstr "Mám [quant,_1,Míchačku na beton,Míchačky na beton,Míchaček na beton]." -#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766 -msgid "Id" -msgstr "Identifikátor" - -#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 -msgid "Identity" -msgstr "Identita" - -#: etc/initialdata:429 -msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "Odmítni původce a zruÅ¡ stávající schválení, bylo-li zamítnuto schválení" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "Nebyl-li zadán Žadatel, vytvářejte požadavky jako tento žadatel." - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Nebyla-li zadána fronta, vytvářejte požadavky v této frontě" - -#: bin/rt-crontool:267 -msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT." -msgstr "Pokud by byl tento nástroj setgid, místní uživatel by jej mohl použit k získaní administrativního přístupu k RT" - -#: html/Admin/Queues/People.html: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 "Pokud jste změnili cokoli nahoře, nezapomeňte" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Neplatná hodnota pro %1" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Neměnná položka" - -#: NOT FOUND IN SOURCE -msgid "Include disabled custom fields in listing." -msgstr "Zahrnout do výpisu blokované uživatelské položky" - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Zahrnout blokované skupiny ve výpisu." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Zahrnout blokované fronty do výpisu." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Zahrnout blokované uživatele do vyhledávání." - -#: html/Admin/CustomFields/Modify.html:113 -msgid "Include page" -msgstr "Zahrnout stránku" - -#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441 -msgid "Incomplete Query" -msgstr "Neúplný dotaz" - -#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438 -msgid "Incomplete query" -msgstr "Neúplný dotaz" - -#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816 -msgid "Initial Priority" -msgstr "Počáteční priorita" - -#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "Počáteční priorita" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Chyba na vstupu" - -#: 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 "Vstup musí odpovídat %1" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Vnitřní chyba" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Vnitřní chyba: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Neplatný typ skupiny" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Neplatné právo" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Neplatná data" - -#: NOT FOUND IN SOURCE -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Neplatný vlastník. Použije se 'nobody'." - -#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678 -#. ($msg) -msgid "Invalid pattern: %1" -msgstr "Neplatný vzor: %1" - -#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244 -msgid "Invalid queue" -msgstr "Neplatná fronta" - -#: 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 "Neplatné právo" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "Neplatná hodnota pro %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Neplatná hodnota pro uživatelskou položku" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Neplatná hodnota pro stav" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Je nesmírně důležité, aby neprivilegovaní uživatelé nemohli spustit tento nástroj." - -#: bin/rt-crontool: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 "Pro spuÅ¡tění tohoto nástroje se doporučuje založení neprivilegovaného UNIXového uživatele se správným skupinovým členstvím a přístupem do RT." - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Používá několik parametrů:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "Kurzíva" - -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" -msgstr "Položky očekávající mé schválení" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "led" - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Přidat se či odebrat z této skupiny" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "čec" - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Maxi" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "čen" - -#: NOT FOUND IN SOURCE -msgid "Keyword" -msgstr "Klíčové slovo" - -#: NOT FOUND IN SOURCE -msgid "Lang" -msgstr "Jazyk" - -#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 -msgid "Language" -msgstr "Jazyk" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "Velké" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Poslední" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Poslední kontakt" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Naposledy kontaktován" - -#: NOT FOUND IN SOURCE -msgid "Last Notified" -msgstr "Naposledy upozorněn" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Naposledy aktualizován" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "Naposledy aktualizoval(a)" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Zbývá" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Umožnit tomuto uživateli přístup k RT" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Umožnit dávat tomuto uživateli práva" - -#: NOT FOUND IN SOURCE -msgid "Limiting owner to %1 %2" -msgstr "Vlastník omezen na %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Limiting queue to %1 %2" -msgstr "Fronta omezena na %1 %2" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "Odkaz" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Vazba již existuje" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Vazba nemůže být vytvořena" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Vazba vytvořena (%1)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Vazba zruÅ¡ena (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Vazba nenalezena" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Svázat požadavek #%1" - -#: html/Admin/CustomFields/Modify.html:102 -msgid "Link values to" -msgstr "Odkazuje na" - -#: lib/RT/Ticket_Overlay.pm:700 -msgid "Linking. Permission denied" -msgstr "Spojování. Přístup nepovolen" - -#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 -msgid "Links" -msgstr "Vazby" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "Načíst" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Načíst uložený dotaz:" - -#: lib/RT/System.pm:86 -msgid "LoadSavedSearch" -msgstr "Načíst uložený dotaz" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Načtené perlovské moduly" - -#: lib/RT/SavedSearch.pm:111 -#. ($self->Name) -msgid "Loaded search %1" -msgstr "Načtený dotaz %1" - -#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 -msgid "Location" -msgstr "Umístění" - -#: NOT FOUND IN SOURCE -msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "Logovací adresář %1 nenalezen nebo do ňeho nemůže být zapisováno.\\ RT nemůže běžet." - -#: html/Elements/Header:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "Přihlášen jako %1" - -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Přihlásit" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Odhlásit" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "Nevhodný typ vyhledávání" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Nastavit vlastníka" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Nastavit stav" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Nastavit datum termínu dokončení" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Nastavit datum vyřeÅ¡ení" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Nastavit datum, kdy začal" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Nastavit datum, kdy začne" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Nastavit datum posledního kontaktu" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Nastavit prioritu" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Nastavit frontu" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Nastavit předmět" - -#: lib/RT/Group_Overlay.pm:169 -msgid "Make this group visible to user" -msgstr "Zviditelnit tuto skupinu uživateli" - -#: html/Admin/index.html:78 -msgid "Manage custom fields and custom field values" -msgstr "Správa uživatelských položek a jejich hodnot" - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Správa skupin a členství v nich" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Správa vlastností a konfigurace platné pro vÅ¡echny fronty" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Správa front a jim přísluÅ¡ných vlastností" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Správa uživatelů a hesel" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "bře" - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "kvě" - -#: lib/RT/Transaction_Overlay.pm:731 -#. ($value) -msgid "Member %1 added" -msgstr "Člen %1 přidán" - -#: lib/RT/Transaction_Overlay.pm:771 -#. ($value) -msgid "Member %1 deleted" -msgstr "Člen %1 odebrán" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Člen přidán" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Člen odebrán" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Člen neodebrán" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Člen" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Členové" - -#: lib/RT/Transaction_Overlay.pm:728 -#. ($value) -msgid "Membership in %1 added" -msgstr "Členství v %1 přidáno" - -#: lib/RT/Transaction_Overlay.pm:768 -#. ($value) -msgid "Membership in %1 deleted" -msgstr "Členství v %1 zruÅ¡eno" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Členství" - -#: html/Admin/Users/Memberships.html:60 -#. ($UserObj->Name) -msgid "Memberships of the user %1" -msgstr "Členství uživatele %1" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Sloučení úspěšné" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Sloučení se nepodařilo. Nelze nastavit EffectiveId" - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "Sloučení se nepodařilo. Nelze nastavit Status" - -#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Sloučit do" - -#: lib/RT/Transaction_Overlay.pm:734 -#. ($value) -msgid "Merged into %1" -msgstr "Sloučen do %1" - -#: html/Search/Bulk.html:143 html/Ticket/Update.html:118 -msgid "Message" -msgstr "Zpráva" - -#: html/Ticket/Elements/ShowTransactionAttachments:164 -msgid "Message body not shown because it is too large or is not plain text." -msgstr "Tělo zprávy nezobrazeno, protože je příliÅ¡ velké nebo nejde o holý text." - -#: lib/RT/Ticket_Overlay.pm:2451 -msgid "Message could not be recorded" -msgstr "Zpráva nemůže být zaznamenána" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Zpráva zaznamenána" - -#: html/Ticket/Elements/PreviewScrips:122 -msgid "Messages about this ticket will not be sent to..." -msgstr "Zprávy o tomto požadavku NEBUDOU zaslány na..." - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -msgstr "Minut" - -#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445 -msgid "Mismatched parentheses" -msgstr "Nevhodné závorky" - -#: lib/RT/Record.pm:954 -msgid "Missing a primary key?: %1" -msgstr "Chybí primární klíč?: %1" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Mobilní telefon" - -#: NOT FOUND IN SOURCE -msgid "MobilePhone" -msgstr "Mobilní telefon" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Upravovat seznam přístupových práv" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "Upravit uživatelskou položku %1" - -#: html/Admin/Elements/ObjectCustomFields:96 -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "Upravit uživatelské položky, platné pro %1, pro vÅ¡echny %2" - -#: html/Admin/Elements/ObjectCustomFields:98 -#. (loc(lc($Types))) -msgid "Modify Custom Fields which apply to all %1" -msgstr "Upravit uživatelské položky platné pro vÅ¡echny %1" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Fields which apply to all queues" -msgstr "Úprava uživatelských položek pro vÅ¡echny fronty" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Úprava skupinových práv" - -#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Upravit členy" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Upravit práva" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Modify Scrip templates for this queue" -msgstr "Upravovat vzory scripů této fronty" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Upravovat scripy této fronty" - -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" -msgstr "Upravovat vzor %1" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Upravit práva uživatelů" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "Upravovat uživatelskou položku pro frontu %1" - -#: NOT FOUND IN SOURCE -msgid "Modify a CustomField which applies to all queues" -msgstr "Upravovat uživatelskou položku pro vÅ¡echny fronty" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "Upravovat scrip pro frontu %1" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Upravovat scrip platný pro vÅ¡echny fronty" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "Upravovat přiřazené objekty k %1" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "Upravit datumy pro #%1" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Úprava datumů pro požadavek # %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 -msgid "Modify global custom fields" -msgstr "Úprava globálních uživatelských položek" - -#: 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 "Úprava globálních skupinových práv" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Úprava globálních skupinových práv." - -#: NOT FOUND IN SOURCE -msgid "Modify global scrips" -msgstr "Úprava globálních scripů" - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Úprava globálních uživatelských práv" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Úprava globálních uživatelských práv." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Upravovat metadata skupiny nebo smazat skupinu" - -#: html/Admin/CustomFields/GroupRights.html:164 -#. ($CustomFieldObj->Name) -msgid "Modify group rights for custom field %1" -msgstr "Úprava skupinových práv pro uživatelskou položku %1" - -#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 -#. ($GroupObj->Name) -msgid "Modify group rights for group %1" -msgstr "Úprava skupinových práv pro %1" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "Úprava skupinových práv pro frontu %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Upravovat seznam členů pro tuto skupinu" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Upravovat vlastní RT účet" - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "Úprava uživatelů fronty %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 "Úprava uživatelů souvisejících s požadavkem #%1" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Úprava scripů pro frontu %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 "Úprava scripů platných ve vÅ¡ech frontách" - -#: 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 "Úprava vzoru %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Upravit vzory pro vÅ¡echny fronty" - -#: html/Admin/Global/index.html:85 -msgid "Modify the default \"RT at a glance\" view" -msgstr "Úprava výchozího vzhledu stránky \"Přehled RT\"" - -#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 -#. ($Group->Name) -msgid "Modify the group %1" -msgstr "Úprava skupiny %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Upravovat pozorovatele fronty" - -#: html/Admin/Users/Modify.html:309 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "Úprava uživatele %1" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "Úprava požadavku # %1" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "Úprava požadavku #%1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Upravovat požadavky" - -#: html/Admin/CustomFields/UserRights.html:157 -#. ($CustomFieldObj->Name) -msgid "Modify user rights for custom field %1" -msgstr "Upravit práva uživatelů k uživatelské položce %1" - -#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 -#. ($GroupObj->Name) -msgid "Modify user rights for group %1" -msgstr "Úprava práv uživatelů ke skupině %1" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Úprava práv uživatelů k frontě %1" - -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "Úprava pozorovatelů fronty '%1'" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ModifyACL" -msgstr "Upravovat seznam přístupových práv" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "Upravovat uživatelskou položku" - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "Upravovat členství ve skupině" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyQueueWatchers" -msgstr "Upravovat pozorovale fronty" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ModifyScrips" -msgstr "Upravovat scripy" - -#: lib/RT/System.pm:82 -msgid "ModifySelf" -msgstr "Upravovat sebe" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "ModifyTemplate" -msgstr "Upravovat vzor" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "ModifyTicket" -msgstr "Upravovat požadavek" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "po" - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "Více o %1" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Dát níže" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Dát výše" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Vícenásobná" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "Nutno zadat atribut 'Jméno'" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "Mé požadavky ve stavu %1" - -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "Mnou schválené" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "Můj den" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Mnou schválené" - -#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Mé uložené dotazy" - -#: 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 "Jméno" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Jméno je použito" - -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "Je třeba schválení správcem systému" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Nikdy" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Nové" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Nové vazby" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Nové heslo" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Nová probíhající schválení" - -#: NOT FOUND IN SOURCE -msgid "New Query" -msgstr "Nový dotaz" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Nové vyhledávání" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Vytvořit uživatelskou položku" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Založit skupinu" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Nové heslo" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Oznámení o novém hesle zasláno" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Vytvoření fronty" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "Nová upomínka:" - -#: NOT FOUND IN SOURCE -msgid "New request" -msgstr "Nový požadavek" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Nová práva" - -#: 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 "Vytvoření scripu" - -#: NOT FOUND IN SOURCE -msgid "New search" -msgstr "Nové vyhledání" - -#: 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 "Vytvořit vzor" - -#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Nový požadavek" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "Nový požadavek neexistuje" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Vytvořit uživatele" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Nový uživatel jména" - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Nový pozorovatel" - -#: NOT FOUND IN SOURCE -msgid "New window setting" -msgstr "Nové nastavení okna" - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Další" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Další stránka" - -#: NOT FOUND IN SOURCE -msgid "Next page" -msgstr "Další stránka" - -#: NOT FOUND IN SOURCE -msgid "NickName" -msgstr "Přezdívka" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Přezdívka" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "Nedefinována žádná třída" - -#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "Žádná uživatelská položka" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Nedefinována žádná uživatelská položka" - -#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Nedefinována žádná skupina" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "Prázdný dotaz" - -#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "Nedefinována žádná fronta" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Žádný uživatel RT nenalezen. Prosím poraďte se se správcem RT.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Žádný vzor" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket " -msgstr "Neudán požadavek. PřeruÅ¡uje se požadavek " - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket modifications\\n\\n" -msgstr "Neudán požadavek. PřeruÅ¡ují se úpravy požadavku\\n\\n" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "bez akce" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "Neudán sloupec" - -#: NOT FOUND IN SOURCE -msgid "No command found\\n" -msgstr "Příkaz nenalezen\\n" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Poznámky k tomuto uživateli neudány" - -#: NOT FOUND IN SOURCE -msgid "No correspondence attached" -msgstr "Žádná připojená korespondence" - -#: 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 "Pro %1 není popis" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Neudána skupina" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "Žádná skupina neodpovídá vyhledávací podmínce." - -#: lib/RT/Ticket_Overlay.pm:2393 -msgid "No message attached" -msgstr "Zpráva nepřipojena" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "Heslo nenastaveno" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Nedostatek práv k vytváření front" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "Nedostatek práv k vytváření požadavků ve frontě '%1'" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Nedostatek práv k vytváření uživatelů" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Nedostatek práv k zobrazení tohoto požadavku" - -#: lib/RT/SavedSearch.pm:156 -msgid "No permission to save system-wide searches" -msgstr "Nedostatek práv k uložení dotazů pro celý systém" - -#: html/SelfService/Update.html:117 -msgid "No permission to view update ticket" -msgstr "Nedostatek práv k zobrazení aktualizace požadavku" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Nezadán uživatel" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Nevybráni uživatelé." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Nenalezeny žádné fronty odpovídající vyhledávací podmínce." - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Práva nenalezena" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Nepřidělena žádná práva." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "Dotaz nenačten" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Bez vyhledání nelze pracovat." - -#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Žádný předmět" - -#: NOT FOUND IN SOURCE -msgid "No ticket id specified" -msgstr "Neudán identifikátor požadavku" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Neudán typ transakce" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Nenalezeni žádní uživatelé odpovídající vyhledávací podmínce." - -#: NOT FOUND IN SOURCE -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Nenalezen platný uživatel RT. Ovladač RT CVS uvolněn. Prosím poraďte se se svým správcem RT.\\n" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "Žádná z hodnot nanastavena na _Set!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Nikdo" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Neexistující položka?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "Nenastaven" - -#: NOT FOUND IN SOURCE -msgid "Not logged in" -msgstr "Nepřihlášen" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Nepřihlášen." - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Nenastaven" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Zatím neimplementováno." - -#: NOT FOUND IN SOURCE -msgid "Not yet implemented...." -msgstr "Zatím neimplementováno..." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Poznámky" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Upozornění nemůže být zasláno" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "Zaslat vÅ¡em AdminCc" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "Zaslat vÅ¡em AdminCc jako komentář" - -#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 -msgid "Notify Ccs" -msgstr "Upozornit vÅ¡echny Cc" - -#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "Upozornit vÅ¡echny Cc jako komentář" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "Zaslat ostatním příjemcům" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Zaslat ostatním příjemcům jako komentář" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "Zaslat vlastníkovi" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "Zaslat vlastníkovi jako komentář" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "Upozornění vlastníka o zamítnutí požadavku" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "Upozornění vlastníka, že požadavek byl vÅ¡emi schválen" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "Upozornění vlastníka, že požadavek byl někým schválen" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Zaslat vlastníkům a vÅ¡em AdminCc nové případy očekávající jejich schválení" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "Zaslat žadatelům" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "Zaslat žadatelům a vÅ¡em Cc" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "Zaslat žadatelům a vÅ¡em Cc jako komentář" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Zaslat žadatelům, vÅ¡em Cc a vÅ¡em AdminCc" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Zaslat žadatelům, včem Cc a včem AdminCc jako komentář" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "lis" - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "OR" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "Objekt nemůže být vytvořen" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "Objekt nemůže být smazán" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Objekt vytvořen" - -#: lib/RT/Record.pm:120 -msgid "Object deleted" -msgstr "Objekt smazán" - -#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 -#. ($ObjectType) -#. ($LookupType) -msgid "Object of type %1 cannot take custom fields" -msgstr "Objektu typu %1 nemohou být přiděleny uživatelské položky" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "Nevhodný typ objektu" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "říj" - -#: html/Tools/Elements/Tabs:55 -msgid "Offline" -msgstr "Off-line" - -#: html/Tools/Offline.html:49 -msgid "Offline edits" -msgstr "Úpravy off-line" - -#: html/Tools/Offline.html:46 -msgid "Offline upload" -msgstr "Off-line načtení" - -#: html/Elements/SelectDateRelation:56 -msgid "On" -msgstr "Dne" - -#: lib/RT/Transaction_Overlay.pm:326 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "Dne %1, %2 napsal(a):" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Při komentáři" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "Při korespondenci" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Při založení" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Při změně vlastníka" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "Při změně priority" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Při změně fronty" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Při vyřeÅ¡ení" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Při změně stavu" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Při transakci" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Zobrazit jen schvalování pro požadavky založené po %1" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "Zobrazit jen schvalování pro požadavky založení před %1" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "Zobrazit jen uživatelské položky pro:" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Otevřené" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "Otevřené požadavky" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Otevřít" - -#: NOT FOUND IN SOURCE -msgid "Open requests" -msgstr "Otevřené požadavky" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Otevřené požadavky" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in a new window" -msgstr "Otevřít požadavky (ze seznamu) v novém okně" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in another window" -msgstr "Otevřít požadavky (ze seznamu) v jiném okně" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Otevřít požadavky při korespondenci" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "Volby" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Řadit podle" - -#: NOT FOUND IN SOURCE -msgid "Ordering and sorting" -msgstr "Řazení a třídění" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Organizace" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Původní požadavek: #%1" - -#: lib/RT/Transaction_Overlay.pm:622 -msgid "Outgoing email about a comment recorded" -msgstr "Odchozí zpráva o komentáři zaznamenána" - -#: lib/RT/Transaction_Overlay.pm:626 -msgid "Outgoing email recorded" -msgstr "Odchozí zpráva zaznamenána" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Časem se priorita posouvá k" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Vlastnit požadavky" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "Vlastnit požadavek" - -#: 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 "Vlastník" - -#: NOT FOUND IN SOURCE -msgid "Owner changed from %1 to %2" -msgstr "Vlastník změněn z %1 na %2" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "Vlastník nemůže být nastaven." - -#: lib/RT/Transaction_Overlay.pm:672 -#. ($Old->Name , $New->Name) -msgid "Owner forcibly changed from %1 to %2" -msgstr "Vlastník nuceně změněn z %1 na %2" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "Vlastník" - -#: html/Elements/TicketList:78 -#. ($Page, int($TotalFound/$Rows)+$oddRows) -msgid "Page %1 of %2" -msgstr "Stránka %1 z %2" - -#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96 -msgid "Pager" -msgstr "Pager" - -#: NOT FOUND IN SOURCE -msgid "PagerPhone" -msgstr "Číslo pageru" - -#: 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 "Rodiče" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Heslo" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Připomínač hesel" - -#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045 -msgid "Password changed" -msgstr "Heslo změněno" - -#: 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 "Heslo musí být dlouhé nejméně %1 %quant(%1,znak,znaky,znaků)" - -#: lib/RT/User_Overlay.pm:1044 -msgid "Password set" -msgstr "Heslo je nastaveno" - -#: NOT FOUND IN SOURCE -msgid "Password too short" -msgstr "Heslo je příliÅ¡ krátké" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Heslo: %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "Heslo: Přístup odmítnut" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "Hesla nesouhlasí." - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "Hesla nesouhlasí. VaÅ¡e heslo nebylo změněno" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Uživatelé" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Provedení uživatelem definované akce" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Konfigurace Perlu" - -#: 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 "Přístup nepovolen" - -#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247 -msgid "Permission denied" -msgstr "Přístup nepovolen" - -#: lib/RT/Template_Overlay.pm:372 -msgid "Permissions denied" -msgstr "Přístupy nepovoleny" - -#: html/User/Elements/Tabs:56 -msgid "Personal Groups" -msgstr "Osobní skupiny" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Vlastní skupiny" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Vlastní skupiny:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Čísla telefonů" - -#: NOT FOUND IN SOURCE -msgid "Placeholder" -msgstr "Zábor místa" - -#: 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 "Nastavení" - -#: html/Admin/Users/MyRT.html:75 -#. ($pane, $UserObj->Name) -msgid "Preferences %1 for user %2 ." -msgstr "Nastavení %1 uživatele %2." - -#: html/Prefs/MyRT.html:141 -#. ($pane) -msgid "Preferences saved for %1." -msgstr "Nastavení pro %1 uloženo." - -#: NOT FOUND IN SOURCE -msgid "Prefs" -msgstr "Nastavení" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Předchozí" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "Předchozí stránka" - -#: NOT FOUND IN SOURCE -msgid "Previous page" -msgstr "Předchozí stránka" - -#: 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 "Uživatel %1 nenalezen." - -#: 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 "Priorita" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "Priorita začíná na" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Vlastní:" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Privilegovaný" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Privilegovaný stav: %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Privilegovaní uživatelé" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Pseudoskupina pro vnitřní použití" - -#: NOT FOUND IN SOURCE -msgid "Query" -msgstr "Dotaz" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Tvůrce dotazu" - -#: html/Search/Elements/Chart:101 -msgid "Query:" -msgstr "Dotaz:" - -#: 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 "Fronta" - -#: 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 "Fronta %1 nenalezena" - -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "Fronta '%1' nenalezena\\n" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Název fronty" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "Scripy fronty" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "Fronta již existuje" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "Fronta nemůže být vytvořena" - -#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "Fronta nemůže být načtena." - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Fronta vytvořena" - -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "Není zadána fronta." - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Fronta nenalezena" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Fronty" - -#: html/Elements/MyAdminQueues:46 -msgid "Queues I administer" -msgstr "Fronty mnou spravované" - -#: html/Elements/MySupportQueues:46 -msgid "Queues I'm an AdminCc for" -msgstr "Fronty v nichž jsem AdminCc" - -#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70 -msgid "Quick search" -msgstr "Rychlé hledání" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Rychlé založení požadavku" - -#: 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 "RT %1 pro %2" - -#: NOT FOUND IN SOURCE -msgid "RT %1 from Best Practical Solutions, LLC." -msgstr "RT %1 od Best Practival Solutions, LLC." - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-%1 Jesse Vincent \\n" -msgstr "RT %1. Copyright 1996-%1 Jesse Vincent \\n" - -#: html/Admin/index.html:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "Správa RT" - -#: NOT FOUND IN SOURCE -msgid "RT Authentication error." -msgstr "Autentizační chyba RT." - -#: NOT FOUND IN SOURCE -msgid "RT Bounce: %1" -msgstr "RT Bounce: %1" - -#: NOT FOUND IN SOURCE -msgid "RT Configuration error" -msgstr "Konfigurační chyba RT" - -#: NOT FOUND IN SOURCE -msgid "RT Critical error. Message not recorded!" -msgstr "Kritická chyba RT. Zpráva nezaznamenána!" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "Chyba RT" - -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." -msgstr "RT přijal poÅ¡tu (%1) od sebe samého." - -#: NOT FOUND IN SOURCE -msgid "RT Self Service / Closed Tickets" -msgstr "RT Samoobsluha / Uzavřené požadavky" - -#: html/Admin/Tools/Configuration.html:73 -msgid "RT Variables" -msgstr "Proměnné 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 "Přehled RT" - -#: html/Admin/Users/MyRT.html:30 -#. ($UserObj->Name) -msgid "RT at a glance for the user %1" -msgstr "Přehled RT pro uživatele %1" - -#: html/Admin/CustomFields/Modify.html:117 -msgid "RT can include content from another web service when showing this custom field." -msgstr "RT může včlenit obsah jiné webové stránky při zobrazení této uživatelské položky." - -#: html/Admin/CustomFields/Modify.html:106 -msgid "RT can make this custom field's values into hyperlinks to another service." -msgstr "RT může z hodnoty této uživatelské položky vytvořit odkaz na jinou stránku." - -#: NOT FOUND IN SOURCE -msgid "RT couldn't authenticate you" -msgstr "RT vás nemůže autentizovat" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find requestor via its external database lookup" -msgstr "RT nemůže nalézt žadatele přes hledání v externí databázi" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find the queue: %1" -msgstr "RT nemůže nalézt frontu: %1" - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "RT nemůže uložit vaÅ¡e sezení." - -#: NOT FOUND IN SOURCE -msgid "RT couldn't validate this PGP signature. \\n" -msgstr "RT nemůže ověřit tento PGP podpis. \\n" - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr "RT pro %1" - -#: NOT FOUND IN SOURCE -msgid "RT for %1: %2" -msgstr "RT pro %1: %2" - -#: NOT FOUND IN SOURCE -msgid "RT has proccessed your commands" -msgstr "RT zpracoval vaÅ¡e příkazy" - -#: 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 je © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Šířeno pod verzí 2 GNU General Public License." - -#: NOT FOUND IN SOURCE -msgid "RT thinks this message may be a bounce" -msgstr "RT považuje tuto zprávu za bounce" - -#: html/Search/Simple.html:58 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "VÅ¡e ostatní, co zadáte, bude RT hledat v předmětech požadavků." - -#: NOT FOUND IN SOURCE -msgid "RT will process this message as if it were unsigned.\\n" -msgstr "RT zpracuje tuto zprávu tak, jako by byla nepodepsaná.\\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 nahradí __id__ a __CustomField__ identifikátorem záznamu a hodnotou uživatelské položky (v uvedeném pořadí)" - -#: 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 "Emailový příkazový režim RT vyžaduje PGP autentizaci. Nepodepsal jste vaÅ¡i zprávu nebo váš podpis nemůže být ověřen." - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Skutečné jméno" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "Skutečné jméno" - -#: lib/RT/Transaction_Overlay.pm:725 -#. ($value) -msgid "Reference by %1 added" -msgstr "Přidán odkaz z %1" - -#: lib/RT/Transaction_Overlay.pm:765 -#. ($value) -msgid "Reference by %1 deleted" -msgstr "Smazán odkaz z %1" - -#: lib/RT/Transaction_Overlay.pm:722 -#. ($value) -msgid "Reference to %1 added" -msgstr "Přidán odkaz na %1" - -#: lib/RT/Transaction_Overlay.pm:762 -#. ($value) -msgid "Reference to %1 deleted" -msgstr "Smazán odkaz na %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 "Je odkazem z" - -#: 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 "Odkazuje na" - -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "Zjemnit" - -#: NOT FOUND IN SOURCE -msgid "Refine search" -msgstr "Zjemnit vyhledání" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Obnovit tuto stránku %quant(%1,každou,každé,každých) %numf(%1) %quant(%1,minutu,minuty,minut)." - -#: lib/RT/Transaction_Overlay.pm:811 -#. ($ticket->Subject) -msgid "Reminder '%1' added" -msgstr "Upomínka '%1' přidána" - -#: lib/RT/Transaction_Overlay.pm:824 -#. ($ticket->Subject) -msgid "Reminder '%1' completed" -msgstr "Upomínka '%1' ukončena" - -#: lib/RT/Transaction_Overlay.pm:817 -#. ($ticket->Subject) -msgid "Reminder '%1' reopened" -msgstr "Upomínka '%1' znovuotevřena" - -#: html/Ticket/Reminders.html:46 -#. ($Ticket->Id) -msgid "Reminder ticket #%1" -msgstr "Upomínka požadavku #%1" - -#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52 -msgid "Reminders" -msgstr "Upomínky" - -#: html/Ticket/Reminders.html:50 -#. ($Ticket->Id) -msgid "Reminders for ticket #%1" -msgstr "Upomínky pro požadavek #%1" - -#: html/Search/Bulk.html:94 -msgid "Remove AdminCc" -msgstr "Odstranit AdminCc" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Odstranit Cc" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Odstranit žadatele" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Odpovědět" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Adresa pro odpověď" - -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Odpověď žadatelům" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Odpovědět na požadavky" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "Odpovídat na požadavky" - -#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47 -msgid "Reports" -msgstr "Sestavy" - -#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111 -msgid "Requestor" -msgstr "Žadatel" - -#: NOT FOUND IN SOURCE -msgid "Requestor email address" -msgstr "Emailová adresa žadatele" - -#: NOT FOUND IN SOURCE -msgid "Requestor(s)" -msgstr "Žadatel(é)" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Žadatelé" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "Požadavky mají být vyřeÅ¡eny do" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "Povinný parametr '%1' nezadán" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Vymazat" - -#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60 -msgid "Reset to default" -msgstr "Obnovit výchozí" - -#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84 -msgid "Residence" -msgstr "BydliÅ¡tě" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "VyřeÅ¡it" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "VyřeÅ¡ení požadavku #%1 (%2)" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "VyřeÅ¡en" - -#: html/Tools/Reports/Elements/Tabs:55 -msgid "Resolved by owner" -msgstr "VyřeÅ¡ené vlastníkem" - -#: html/Tools/Reports/Elements/Tabs:59 -msgid "Resolved in date range" -msgstr "VyřeÅ¡ené za období" - -#: html/Tools/Reports/ResolvedByDates.html:52 -msgid "Resolved tickets in period, grouped by owner" -msgstr "VyřeÅ¡ené požadavky za období, seskupené dle vlastníka" - -#: html/Tools/Reports/ResolvedByOwner.html:50 -msgid "Resolved tickets, grouped by owner" -msgstr "VyřeÅ¡ené požadavky, seskupené dle vlastníka" - -#: NOT FOUND IN SOURCE -msgid "Response to requestors" -msgstr "Odpověď žadatelům" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Výsledky" - -#: NOT FOUND IN SOURCE -msgid "Results per page" -msgstr "Výsledků na stránku" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Zopakujte heslo" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "Vrátit" - -#: NOT FOUND IN SOURCE -msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" -msgstr "Nenalezeno právo %1 pro %2 %3 v mezích %4 (%5)" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Právo delegováno" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Právo přidáno" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Právo načteno" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Právo nemůže být odebráno" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Právo nenalezeno" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Právo nenačteno." - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Právo odebráno" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Práva" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "Práva pro %1 nemohou být přidělena" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "Práva nemohou být %1 odebrána" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Pravidla" - -#: NOT FOUND IN SOURCE -msgid "RootApproval" -msgstr "Kořenový schvalovatel" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "Řádků na oddíl" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Řádků na stránku" - -#: lib/RT/Date.pm:422 -msgid "Sat." -msgstr "so" - -#: 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 "Uložit" - -#: 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 "Uložit změny" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Uložit nastavení" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Nezapomeňte uložit změny - " - -#: lib/RT/SavedSearch.pm:173 -#. ($name) -msgid "Saved search %1" -msgstr "Uložený dotaz %1" - -#: NOT FOUND IN SOURCE -msgid "Saved searches" -msgstr "Uložené dotazy" - -#: 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 vytvořen" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Položky scripu" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Scrip smazán" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Scripy" - -#: NOT FOUND IN SOURCE -msgid "Scrips for %1\\n" -msgstr "Scripy fro %1\\n" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Scripy platné ve vÅ¡ech frontách" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Vyhledat" - -#: NOT FOUND IN SOURCE -msgid "Search Criteria" -msgstr "Podmínky vyhledávání" - -#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50 -msgid "Search Preferences" -msgstr "Nastavení hledání" - -#: lib/RT/SavedSearch.pm:115 -msgid "Search attribute load failure" -msgstr "Chyba při načítání atributu dotazu" - -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Vyhledávání schvalování" - -#: html/Search/Simple.html:67 -msgid "Search for tickets" -msgstr "Hledat požadavky" - -#: 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 "Pro vyhledání požadavků zadejte buď identifikátor číslem nebo frontu jménem nebo vlastníka jménem uživatele nebo žadatele emailovou adresou. VÅ¡e ostatní, co zadáte, bude RT hledat v textech požadavků a jejich přílohách." - -#: html/User/Elements/Tabs:62 -msgid "Search options" -msgstr "Volby pro hledání" - -#: html/Search/Chart.html:56 -#. ($PrimaryGroupBy) -msgid "Search results grouped by %1" -msgstr "Výsledky hledání seskupit podle %1" - -#: lib/RT/SavedSearch.pm:203 -#. ($msg) -msgid "Search update: %1" -msgstr "Aktualizovat dotaz: %1" - -#: 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 "Fulltextové vyhledávání nad vÅ¡emi požadavky může trvat dlouho, ale pokud to potřebujete, můžete hledat libovolné slovo v celé historii požadavku zadáním fulltext:slovo." - -#: bin/rt-crontool:265 -msgid "Security:" -msgstr "Zabezpeční:" - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "Viz také:" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Vidět uživatelské položky" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "See exact outgoing email messages and their recipeients" -msgstr "Vidět přesnou odchozí zprávu a její příjemce" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket private commentary" -msgstr "Vidět soukromé komentáře požadavku" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "See ticket summaries" -msgstr "Vidět sumárně požadavek" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "Vidět uživatelskou položku" - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "Vidět skupinu" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "SeeQueue" -msgstr "Vidět frontu" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Výběr uživatelské položky" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Výběr skupiny" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Výběr fronty" - -#: html/SelfService/CreateTicketInQueue.html:48 -msgid "Select a queue for your new ticket" -msgstr "Výběr fronty pro váš nový požadavek" - -#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Výběr uživatele" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Vybrat uživatelskou položku" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Vybrat uživatelské položky pro vÅ¡echny skupiny uživatelů" - -#: html/Admin/Global/CustomFields/index.html:65 -msgid "Select custom fields for all users" -msgstr "Vybrat uživatelské položky pro vÅ¡echny uživatele" - -#: html/Admin/Global/CustomFields/index.html:76 -msgid "Select custom fields for tickets in all queues" -msgstr "Vybrat uživatelské položky pro požadavky ve vÅ¡ech frontách" - -#: html/Admin/Global/CustomFields/index.html:83 -msgid "Select custom fields for transactions on tickets in all queues" -msgstr "Vybrat uživatelské položky pro transakce s požadavky ve vÅ¡ech frontách" - -#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Vybrat skupinu" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Vybrat více hodnot" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Vybrat jednu hodnotu" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Výběr fronty" - -#: html/Prefs/Quicksearch.html:53 -msgid "Select queues to be displayed on the \"RT at a glance\" page" -msgstr "Výběr front, které budou zobrazeny na stránce \"Přehled RT\"" - -#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73 -msgid "Select scrip" -msgstr "Výběr scripu" - -#: 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 "Vybrat vzor" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Výběr nejvýše %1 %quant(%1,hodnoty,hodnot,hodnot)" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Výběr uživatele" - -#: NOT FOUND IN SOURCE -msgid "SelectMultiple" -msgstr "Výběr vícenásobný" - -#: NOT FOUND IN SOURCE -msgid "SelectSingle" -msgstr "Výbět jedinečný" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Vybrané uživatelské položky" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "Vybrané objekty" - -#: html/Widgets/SelectionBox:209 -msgid "Selections modified. Please save your changes" -msgstr "Výběr upraven. Prosím uložte si své změny" - -#: NOT FOUND IN SOURCE -msgid "Self Service" -msgstr "Samoobsluha" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Zaslat e-mail vÅ¡em pozorovatelům" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Zaslat e-mail vÅ¡em pozorovatelům jako \"komentář\"" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Zaslat e-mail žadatelům a vÅ¡em Cc" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Zaslat e-mail žadatelům a vÅ¡em Ccs jako komentář" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Posílá zprávu žadatelům" - -#: etc/initialdata:125 etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Posílá e-mail vÅ¡em přesně vyjmenovaným Cc a Bcc" - -#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 -msgid "Sends mail to the Ccs" -msgstr "Posílá e-mail vÅ¡em Cc" - -#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 -msgid "Sends mail to the Ccs as a comment" -msgstr "Posílá e-mail vÅ¡em Cc jako komentář" - -#: etc/initialdata:102 -msgid "Sends mail to the administrative Ccs" -msgstr "Posílá e-mail vÅ¡em administrativním Cc" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Posílá e-mail vÅ¡em administrativním Cc jako komentář" - -#: etc/initialdata:82 etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Posílá e-mail vlastníkovi" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "zář" - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Zobrazit" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Zobrazit schválení" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Zobrazit sloupce" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Zobrazit výsledky" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Zobrazit schválené požadavky" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Zobrazit základní údaje" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Zobrazit odepřené požadavky" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Zobrazit podrobnosti" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Zobrazit trvající požadavky" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Zobrazit požadavky čekající na jejich schválení" - -#: NOT FOUND IN SOURCE -msgid "Show ticket private commentary" -msgstr "Zobrazovat soukromé komentáře požadavku" - -#: NOT FOUND IN SOURCE -msgid "Show ticket summaries" -msgstr "Zobrazovat výsledky požadavku" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "ShowACL" -msgstr "Zobrazovat seznam přístupových práv" - -#: lib/RT/System.pm:85 -msgid "ShowConfigTab" -msgstr "Zobrazit záložku Správa" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "ShowOutgoingEmail" -msgstr "Zobrazit odchozí e-mail" - -#: lib/RT/Group_Overlay.pm:168 -msgid "ShowSavedSearches" -msgstr "Zobrazit uložené dotazy" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "ShowScrips" -msgstr "Zobrazit scripy" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "ShowTemplate" -msgstr "Zobrazit vzor" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowTicket" -msgstr "Zobrazit požadavek" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicketComments" -msgstr "Zobrazit komentáře požadavku" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "Být žadatelem či Cc požadavku nebo fronty" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Být AdminCc požadavku nebo fronty" - -#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168 -msgid "Signature" -msgstr "Podpis" - -#: NOT FOUND IN SOURCE -msgid "Signed in as %1" -msgstr "Příhlášen jako %1" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "Jednoduché vyhledávání" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Jednoduchá" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "Velikost" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Přeskočit menu" - -#: html/Search/Elements/EditFormat:78 -msgid "Small" -msgstr "Malé" - -#: html/Admin/CustomFields/Modify.html:120 -msgid "Some browsers may only load content from the same domain as your RT server." -msgstr "Některé prohlížeče mohou nahrát obsah pouze ze stejné domény jako je váš RT server." - -#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 -msgid "Sort" -msgstr "Pořadí" - -#: NOT FOUND IN SOURCE -msgid "Sort key" -msgstr "Třídící klíč" - -#: NOT FOUND IN SOURCE -msgid "Sort results by" -msgstr "Třídit výsledky dle" - -#: NOT FOUND IN SOURCE -msgid "SortOrder" -msgstr "Třídící pořadí" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "Fáze" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "Odložené" - -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "Úvodní stránka" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Započato" - -#: NOT FOUND IN SOURCE -msgid "Started date '%1' could not be parsed" -msgstr "Datum započetí '%1' nemůže být rozpoznáno" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Začíná" - -#: NOT FOUND IN SOURCE -msgid "Starts By" -msgstr "Začíná" - -#: NOT FOUND IN SOURCE -msgid "Starts date '%1' could not be parsed" -msgstr "Datum začínání '%1' nemůže být rozpoznáno" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Stát" - -#: 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 "Stav" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "Změna stavu" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Stav změněn z %1 na %2" - -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "Změna stavu" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Převzít" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Převzít požadavky" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "Převzít požadavek" - -#: lib/RT/Transaction_Overlay.pm:678 -#. ($Old->Name) -msgid "Stolen from %1" -msgstr "Převzato od %1" - -#: html/Search/Elements/EditFormat:81 -msgid "Style" -msgstr "Styl" - -#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733 -msgid "Subject" -msgstr "Předmět" - -#: 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 "Předmět změněn na %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Odeslat" - -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "Potvrdit model zpracování" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Úspěšné" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "ne" - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "Super uživatel" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Systém" - -#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Systémová konfigurace" - -#: 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 "Systémová chyba" - -#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230 -#. ($msg) -msgid "System Error: %1" -msgstr "Systémová chyba: %1" - -#: html/Admin/Tools/index.html:47 -msgid "System Tools" -msgstr "Systémové nástroje" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Systémová chyba. Právo nedelegováno." - -#: 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 "Systémová chyba. Právo nepřiděleno." - -#: 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 "Systémové skupiny" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "Skupina systémovýh pravidel pro vnitřní použití" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "Míchačka na beton" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Vzít" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Take tickets" -msgstr "Vzít požadavky" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "Vzít požadavek" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Vzal" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Vzor" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Vzor #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Vzor smazán" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "Vzor je povinným parametrem" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Vzor nenalezen" - -#: NOT FOUND IN SOURCE -msgid "Template not found\\n" -msgstr "Vzor nenalezen\\n" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Vzor rozpoznán" - -#: lib/RT/Template_Overlay.pm:391 -msgid "Template parsing error" -msgstr "Chyba při rozpoznávání vzoru" - -#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 -msgid "Templates" -msgstr "Vzory" - -#: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "Vzory pro %1\\n" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Toto je již aktuální hodnota" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "Toto není hodnota pro tuto uživatelskou položku" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Toto je shodná hodnota" - -#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "Tento uživatel již toto práva má" - -#: lib/RT/Queue_Overlay.pm:753 -#. ($args{'Type'}) -msgid "That principal is already a %1 for this queue" -msgstr "Tento uživatel je již v této frontě %1" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Tento uživatel je již u tohoto požadavku %1" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Tento uživatel není v této frontě %1" - -#: NOT FOUND IN SOURCE -msgid "That principal is not a %1 for this ticket" -msgstr "Tento uživatel není u tohoto požadavku %1" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Tato fronta neexistuje" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "Tento požadavek má nevyřeÅ¡ené závislosti" - -#: NOT FOUND IN SOURCE -msgid "That user already has that right" -msgstr "Tento uživatel již má toto právo" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Tento uživatel již tento požadavek vlastní" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Tento uživatel neexistuje" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Tento uživatel je již privilegován" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Tento uživatel je již neprivilegován" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Uživatel je nyní privilegován" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Uživatel je nyní neprivilegován" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "V této frontě nemůže tento uživatel vlastnit požadavky" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "Toto není číselný identifikátor" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Základní údaje" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "Cc požadavku" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The administrative CC of a ticket" -msgstr "Administrativní Cc požadavku" - -#: NOT FOUND IN SOURCE -msgid "The comment has been recorded" -msgstr "Komentář byl zaznamenán" - -#: 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 "Následující příkaz najde vÅ¡echny aktivní požadavky ve frontě 'general' a nastaví jejich prioritu na 99, pokud nebyly tknuty poslední 4 hodiny:" - -#: NOT FOUND IN SOURCE -msgid "The following commands were not proccessed:\\n\\n" -msgstr "Následující příkazy nebyly zpracovány\\n\\n" - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "Nová hodnota nastavena." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "Vlastník požadavku" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "Žadatel požadavku" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Tyto komentáře nejsou běžně viditelné uživateli" - -#: lib/RT/CustomField_Overlay.pm:978 -msgid "This custom field does not apply to that object" -msgstr "Tato uživatelská položka se nevztahuje k tomuto objektu" - -#: html/Admin/Tools/Configuration.html:50 -msgid "This feature is only available to system administrators" -msgstr "Tato funkce je dostupná jen správcům systému" - -#: html/Ticket/Elements/PreviewScrips:96 -msgid "This message will be sent to..." -msgstr "Tato zpráva BUDE poslána na..." - -#: NOT FOUND IN SOURCE -msgid "This ticket %1 %2 (%3)\\n" -msgstr "Tento požadavek %1 %2 (%3)\\n" - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Tento nástroj umožňuje uživateli spustit libovolné perl moduly z RT." - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Tato transakce vypadá, že nemá obsah" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "%1 nejdůležitější%quant(%1, požadavek,požadavky,ch požadavků) tohoto uživatele" - -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "25 nejdůležitějších požadavků tohoto uživatele" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "čt" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "Požadavek # %1 %2" - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Požadavek #%1 Maxi aktualizace: %2" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Požadavek #%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 "Požadavek %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 "Požadavek %1 vytvořen ve frontě '%2'" - -#: NOT FOUND IN SOURCE -msgid "Ticket %1 loaded\\n" -msgstr "Požadavek %1 načten\\n" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Požadavek %1: %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Uživatelské položky požadavků" - -#: html/Ticket/History.html:46 html/Ticket/History.html:49 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket History # %1 %2" -msgstr "Historie požadavku # %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket Id" -msgstr "Identifikátor požadavku" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Požadavek vyřeÅ¡en" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "Transakce s požadavky" - -#: NOT FOUND IN SOURCE -msgid "Ticket attachment" -msgstr "Příloha požadavku" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Obsah požadavku" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Content type požadavku" - -#: 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 "Požadaven nemůže být vytvořen pro vnitřní chybu" - -#: NOT FOUND IN SOURCE -msgid "Ticket created" -msgstr "Požadavek vytvořen" - -#: NOT FOUND IN SOURCE -msgid "Ticket creation failed" -msgstr "Nezdařilo se vytvoření požadavku" - -#: NOT FOUND IN SOURCE -msgid "Ticket deleted" -msgstr "Požadavek smazán" - -#: NOT FOUND IN SOURCE -msgid "Ticket id not found" -msgstr "Id požadavku nenalezeno" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Metadata požadavku" - -#: NOT FOUND IN SOURCE -msgid "Ticket not found" -msgstr "Požadavek nenalezen" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Stav požadavku změněn" - -#: NOT FOUND IN SOURCE -msgid "Ticket watchers" -msgstr "Pozorovatelé požadavku" - -#: lib/RT/Search/FromSQL.pm:82 -#. (ref $self) -msgid "TicketSQL search module" -msgstr "TicketSQL vyhledávací modul" - -#: 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 "Požadavky" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 %2" -msgstr "Požadavky %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 by %2" -msgstr "Požadavky %1 dle %2" - -#: html/Tools/Reports/CreatedByDates.html:86 -msgid "Tickets created after" -msgstr "Požadavky vytvořené po" - -#: html/Tools/Reports/CreatedByDates.html:88 -msgid "Tickets created before" -msgstr "Požadavky vytvořené před" - -#: NOT FOUND IN SOURCE -msgid "Tickets from %1" -msgstr "Požadavky z %1" - -#: html/Tools/Reports/ResolvedByDates.html:87 -msgid "Tickets resolved after" -msgstr "Požadavky vyřeÅ¡ené po" - -#: html/Tools/Reports/ResolvedByDates.html:89 -msgid "Tickets resolved before" -msgstr "Požadavky vyřeÅ¡ené před" - -#: html/Approvals/Elements/ShowDependency:48 -msgid "Tickets which depend on this approval:" -msgstr "Požadavky, které záleží na tomto schválení:" - -#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72 -msgid "Time Estimated" -msgstr "Předpokládaný čas" - -#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85 -msgid "Time Left" -msgstr "Zbývající čas" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Čas práce" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Zbývající čas" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Čas k zobrazení" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Čas práce" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "Čas práce" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "Nadpis" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:" -msgstr "Vytvořit diff tohoto commitu:" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:\\n" -msgstr "Vytvořit diff tohoto commitu:\\n" - -#: html/Elements/Footer:62 -#. ('sales@bestpractical.com') -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "K získání informací o podpoře, tréninku, zákaznických úpravách či licencování kontaktujte prosím %1." - -#: lib/RT/Ticket_Overlay.pm:1170 -msgid "Told" -msgstr "Poslední kontakt" - -#: 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 "Nástroje" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "Celkem" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transakce" - -#: lib/RT/Transaction_Overlay.pm:805 -#. ($self->Data) -msgid "Transaction %1 purged" -msgstr "Transakce %1 vymazána" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Transakce vytvořena" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Uživatelské položky transakcí" - -#: NOT FOUND IN SOURCE -msgid "Transaction->Create couldn't, as you didn't specify a ticket id" -msgstr "Bez udání id požadavku nelze volat Transaction->Create" - -#: lib/RT/Transaction_Overlay.pm:128 -msgid "Transaction->Create couldn't, as you didn't specify an object type and id" -msgstr "Bez udání typu objektu a id nelze volat Transaction->Create" - -#: lib/RT/Transaction_Overlay.pm:870 -msgid "Transactions are immutable" -msgstr "Transakce jsou neměnné" - -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "Pokus o smazání práva: %1" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "út" - -#: 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 "Typ" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "Neimplementováno" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Unixový login" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "Unixové uživatelské jméno" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "Neznámé kódování obsahu %1" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "Neznámé pole: $key" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Neomezeně" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Nepojmenovaný dotaz" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Neprivilegovaný" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Nevybrané uživatelské položky" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "Nevybrané objekty" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "Vrácen" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Aktualizace" - -#: NOT FOUND IN SOURCE -msgid "Update All" -msgstr "Aktualizovat vÅ¡echny" - -#: NOT FOUND IN SOURCE -msgid "Update ID" -msgstr "Identifikátor aktualizace" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Aktualizovat požadavek" - -#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Typ aktualizace" - -#: NOT FOUND IN SOURCE -msgid "Update all these tickets at once" -msgstr "Aktualizovat společně vÅ¡echny tyty požadavky" - -#: NOT FOUND IN SOURCE -msgid "Update email" -msgstr "Aktualizovat email" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Aktualizovat hromadně požadavky" - -#: NOT FOUND IN SOURCE -msgid "Update name" -msgstr "Aktualizovat jméno" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Aktualizace nezaznamenána" - -#: NOT FOUND IN SOURCE -msgid "Update selected tickets" -msgstr "Aktualizovat vybrané požadavky" - -#: NOT FOUND IN SOURCE -msgid "Update signature" -msgstr "Aktualizace podpisu" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Aktualizace požadavku" - -#: NOT FOUND IN SOURCE -msgid "Update ticket # %1" -msgstr "Aktualizace požadavku # %1" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Aktualizace požadavku #%1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Aktualizace požadavku #%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr "Typ aktualizace nebyl ani korespondence ani komentář." - -#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Aktualizováno" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Odeslat" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Odeslat více souborů" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Odeslat více obrázků" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Odeslat jeden soubor" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Odeslat jeden obrázek" - -#: lib/RT/CustomField_Overlay.pm:86 -msgid "Upload up to %1 files" -msgstr "Odeslat nejvýše %1 %quant(%1,soubor,soubory,souborů)" - -#: lib/RT/CustomField_Overlay.pm:81 -msgid "Upload up to %1 images" -msgstr "Odeslat nejvýše %1 %quant(%1,obrázek,obrázky,obrázků)" - -#: html/Tools/Offline.html:93 -msgid "Upload your changes" -msgstr "Načíst vaÅ¡e změny" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "Další administrativní nástroje RT" - -#: NOT FOUND IN SOURCE -msgid "User %1 %2: %3\\n" -msgstr "Uživatel %1 %2: %3\\n" - -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" -msgstr "Heslo uživatele %1: %2\\n" - -#: lib/RT/Ticket_Overlay.pm:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "Uživatel '%1' nemůže být nalezen" - -#: etc/initialdata:132 etc/initialdata:206 -msgid "User Defined" -msgstr "Uživatelem definované" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "Uživatelem definované podmínky a akce" - -#: NOT FOUND IN SOURCE -msgid "User ID" -msgstr "Identifikátor uživatele" - -#: NOT FOUND IN SOURCE -msgid "User Id" -msgstr "Identifikátor uživatele" - -#: 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 "Práva uživatele" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "Uživatel nemůže být vytvořen: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Uživatel vytvořen" - -#: 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 "Uživatelem definované skupiny" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Uživatel načten" - -#: NOT FOUND IN SOURCE -msgid "User notified" -msgstr "Uživatel upozorněn" - -#: NOT FOUND IN SOURCE -msgid "User view" -msgstr "Uživatelský pohled" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Uživatelem definované skupiny" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Uživatelské jméno" - -#: 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 "Uživatelé" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Uživatelé odpovídající vyhledávací podmínce" - -#: bin/rt-crontool:134 -#. ($transaction->id) -msgid "Using transaction #%1..." -msgstr "Používám transakci #%1..." - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Platný dotaz" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "Validace" - -#: NOT FOUND IN SOURCE -msgid "ValueOfQueue" -msgstr "Hodnota fronty" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Hodnoty" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "Být pozorovatelem" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "Být AdminCc pozorovatelem" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Pozorovatelé" - -#: NOT FOUND IN SOURCE -msgid "WebEncoding" -msgstr "Kódování WWW" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "st" - -#: html/Tools/MyDay.html:75 -msgid "What I did today" -msgstr "Dnes jsem udělal" - -#: etc/initialdata:521 -msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" -msgstr "Přidat korespondenci k původnímu požadavku, pokud byl požadavek schválen vÅ¡emi" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "Přidat korespondenci k původnímu požadavku, pokud byl požadavek kýmkoli schválen" - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "Když je požadavek vytvořen" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "Upozornit vlastníka a vÅ¡echny AdminCc, jejichž schválení se očekává, při vytvoření schvalovaného požadavku" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "Stane-li se cokoli" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "Je-li vyřeÅ¡en požadavek" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "Změní-li se vlastník požadavku" - -#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "Při změně priority požadavku" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "Změní-li se fronta požadavku" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "Změní-li se stav požadavku" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "Splní-li se uživatelská podmínka" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "Přijde-li komentář" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "Přijde-li korespondence" - -#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88 -msgid "Work" -msgstr "Zaměstnání" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "Pracovat off-line" - -#: NOT FOUND IN SOURCE -msgid "WorkPhone" -msgstr "Telefon do zaměstnání" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Odpracováno" - -#: NOT FOUND IN SOURCE -msgid "XXX CHANGEME You are not an authorized user" -msgstr "XXX ZMĚNIT Nejste autorizovaný uživatel" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Požadavek již vlastníte" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Nejste autorizovaný uživatel" - -#: html/Prefs/Search.html:56 -msgid "You can also edit the predefined search itself" -msgstr "Můžeti si také upravit předvolený dotaz" - -#: lib/RT/Ticket_Overlay.pm:3025 -msgid "You can only reassign tickets that you own or that are unowned" -msgstr "Můžete přidělit pouze požadavky, které jsou vaÅ¡e nebo nejsou vlastněny" - -#: lib/RT/Ticket_Overlay.pm:3021 -msgid "You can only take tickets that are unowned" -msgstr "Můžete vzít pouze požadavky, které nikdo nevlastní" - -#: NOT FOUND IN SOURCE -msgid "You don't have permission to view that ticket.\\n" -msgstr "Nemáte právo k zobrazení tohoto požadavku.\\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 "Nalezl jste %1 požadavků ve frontě %2" - -#??? quant -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Byl jste odhlášen od RT." - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "V této frontě nemáte práva vytvářet požadavky." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "V této frontě nemůžete vytvářet požadavky." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Jste vítáni k dalšímu přihlášení" - -#: NOT FOUND IN SOURCE -msgid "Your %1 requests" -msgstr "%quant(%1,Váš %1 požadavek,VaÅ¡e %1 požadavky,VaÅ¡ich %1 požadavků)" - -#: NOT FOUND IN SOURCE -msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" -msgstr "Váš správce RT chybně nastavil poÅ¡tovní aliasy, které volají RT" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Váš požadavek byl schválen uživatelem %1. Další schválení mohou být jeÅ¡tě očekávána." - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "Váš požadavek byl schválen." - -#: NOT FOUND IN SOURCE -msgid "Your request was rejected" -msgstr "Váš požadavek byl odmítnut" - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "Váš požadavek byl odmítnut." - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "VaÅ¡e uživatelské jméno či heslo je nesprávné" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "PSČ" - -#: lib/RT/System.pm:87 -msgid "allow creation of saved searches" -msgstr "umožnit vytváření uložených dotazů" - -#: lib/RT/System.pm:86 -msgid "allow loading of saved searches" -msgstr "umožnit načítání uložených dotazů" - -#: html/User/Elements/DelegateRights:80 -#. ($right->PrincipalObj->Object->SelfDescription) -msgid "as granted to %1" -msgstr "jak je dovoleno %1" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "graf" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "uzavřen" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 -msgid "contains" -msgstr "obsahuje" - -#: NOT FOUND IN SOURCE -msgid "content" -msgstr "obsah" - -#: NOT FOUND IN SOURCE -msgid "content-type" -msgstr "content-type" - -#: NOT FOUND IN SOURCE -msgid "correspondence (probably) not sent" -msgstr "korespondence (zřejmě) neposlána" - -#: NOT FOUND IN SOURCE -msgid "correspondence sent" -msgstr "korespondence poslána" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "dnů" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "smazat" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "smazán" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "neodpovídá" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "neobsahuje" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "je rovno" - -#: html/Search/Build.html:547 -msgid "error: can't move down" -msgstr "chyba: nelze přesunout dolů" - -#: html/Search/Build.html:569 -msgid "error: can't move left" -msgstr "chyba: nelze přesunout doleva" - -#: html/Search/Build.html:528 -msgid "error: can't move up" -msgstr "chyba: nelze přesunout nahorů" - -#: html/Search/Build.html:612 -msgid "error: nothing to delete" -msgstr "chyba: není co smazat" - -#: 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 "chyba: není co přesunout" - -#: html/Search/Build.html:630 -msgid "error: nothing to toggle" -msgstr "chyba: není co přepnout" - -#: NOT FOUND IN SOURCE -msgid "filename" -msgstr "název souboru" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "větší než" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr "skupina '%1'" - -#: html/Search/Results.html:88 -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -msgid "grouped by %1" -msgstr "seskupit podle %1" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "hodin" - -#: html/Search/Elements/PickBasics:48 -msgid "id" -msgstr "Identifikátor" - -#: 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 "je" - -#: 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 "není" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "menší než" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "odpovídá" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "min" - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "minut" - -#: NOT FOUND IN SOURCE -msgid "modifications\\n\\n" -msgstr "úpravy\\n\\n" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "měsíců" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "nový" - -#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "bez jména" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "bez hodnoty" - -#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "žádný" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "není rovno" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "otevřený" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "vlastní skupina '%1' pro uživatele '%2'" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "fronta %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "zamítnutý" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "vyřeÅ¡ený" - -#: lib/RT/Date.pm:334 -msgid "sec" -msgstr "sek" - -#: lib/RT/System.pm:85 -msgid "show Configuration tab" -msgstr "zobrazit záložku Správa" - -#: html/Search/Results.html:80 -msgid "spreadsheet" -msgstr "tabulka" - -#: lib/RT/Queue_Overlay.pm:84 -msgid "stalled" -msgstr "odložený" - -#: html/Search/Results.html:89 -#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle')) -msgid "style: %1" -msgstr "styl: %1" - -#: html/Prefs/MyRT.html:93 -msgid "summary rows" -msgstr "počet řádků" - -#: lib/RT/Group_Overlay.pm:222 -#. ($self->Type) -msgid "system %1" -msgstr "systém %1" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "systémová skupina '%1'" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "volající komponenta neudala důvod" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "požadavek #%1 %2" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "nepopsaná skupina %1" - -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "nepopsaná skupina %1" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "uživatel %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "týdnů" - -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "se vzorem %1" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "roků" - diff --git a/rt/lib/RT/I18N/da.po b/rt/lib/RT/I18N/da.po deleted file mode 100644 index 4f24ea92b..000000000 --- a/rt/lib/RT/I18N/da.po +++ /dev/null @@ -1,7074 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2007-03-16 13:02+0100\n" -"Last-Translator: Heidi Senderovitz\n" -"Language-Team: rt-devel \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. ($self->{CurrentSearch}{Object}->Description) -#: html/Widgets/SavedSearch:70 -msgid " %1 deleted." -msgstr " %1 slettet." - -#. ($self->{CurrentSearch}{Description}, $args->{Description}) -#: html/Widgets/SavedSearch:47 -msgid " %1 renamed to %2." -msgstr " %1 omdøbt til %2." - -#. ($args->{Description}) -#: html/Widgets/SavedSearch:60 -msgid " %1 saved." -msgstr " %1 gemt." - -#: NOT FOUND IN SOURCE -msgid "#" -msgstr "#" - -#: NOT FOUND IN SOURCE -msgid "#%1" -msgstr "#%1" - -#. ($TicketObj->Id, $TicketObj->Subject) -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#. ($ticket->Id, $ticket->Subject) -#. ($Ticket->id, $Ticket->Subject) -#: html/Approvals/Elements/Approve:48 -#: html/Approvals/Elements/ShowDependency:71 -#: html/SelfService/Display.html:46 -#: html/Ticket/Display.html:47 -#: html/Ticket/Display.html:51 -msgid "#%1: %2" -msgstr "#%1: %2" - -#: html/Elements/ShowSearch:104 -msgid "$1" -msgstr "$1" - -#. ($label) -#: lib/RT/Record.pm:940 -msgid "$prefix %1" -msgstr "$præfiks %1" - -#. ($self->ObjectType, $self->Object->Id) -#: lib/RT/URI/fsck_com_rt.pm:256 -msgid "%1 #%2" -msgstr "%1 #%2" - -#. ($s, $time_unit) -#: lib/RT/Date.pm:365 -msgid "%1 %2" -msgstr "%1 %2" - -#: NOT FOUND IN SOURCE -msgid "%1 %2 %3" -msgstr "%1 %2 %3" - -#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) -#: lib/RT/Date.pm:401 -msgid "%1 %2 %3 %4:%5:%6 %7" -msgstr "%2 %1 %3 %4:%5:%6 %7" - -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -#: lib/RT/Record.pm:1685 -#: lib/RT/Transaction_Overlay.pm:647 -#: lib/RT/Transaction_Overlay.pm:690 -msgid "%1 %2 added" -msgstr "%1 %2 tilføjet" - -#. ($s, $time_unit) -#: lib/RT/Date.pm:362 -msgid "%1 %2 ago" -msgstr "%1 %2 siden" - -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -#: lib/RT/Record.pm:1692 -#: lib/RT/Transaction_Overlay.pm:654 -msgid "%1 %2 changed to %3" -msgstr "%1 %2 ændret til %3" - -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -#: lib/RT/Record.pm:1689 -#: lib/RT/Transaction_Overlay.pm:650 -#: lib/RT/Transaction_Overlay.pm:696 -msgid "%1 %2 deleted" -msgstr "%1 %2 slettet" - -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -#: html/Admin/Elements/EditScrips:65 -#: html/Admin/Elements/ListGlobalScrips:63 -#: html/Ticket/Elements/PreviewScrips:103 -msgid "%1 %2 with template %3" -msgstr "%1 %2 med skabelon %3" - -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 denne sag\\n" - -#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) -#: html/Ticket/Elements/ShowAttachments:72 -msgid "%1 (%2) by %3" -msgstr "%1 (%2) af %3" - -#. (loc($Ticket->Status())) -#. (loc($TicketObj->Status)) -#. ($TicketObj->OwnerObj->Name()) -#. (loc($DefaultStatus)) -#: html/SelfService/Update.html:60 -#: html/Ticket/Elements/EditBasics:108 -#: html/Ticket/Update.html:61 -#: html/Ticket/Update.html:63 -#: html/Tools/MyDay.html:66 -msgid "%1 (Unchanged)" -msgstr "%1 (Uændret)" - -#: NOT FOUND IN SOURCE -msgid "%1 - %2 shown" -msgstr "%1 - %2 vist" - -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -#: bin/rt-crontool:237 -#: bin/rt-crontool:244 -#: bin/rt-crontool:250 -msgid "%1 - An argument to pass to %2" -msgstr "%1 - En parameter til afsendelse til %2" - -#. ("--verbose") -#: bin/rt-crontool:262 -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - Send statusopdateringer til STDOUT" - -#. ("--template-id") -#: bin/rt-crontool:253 -msgid "%1 - Specify id of the template you want to use" -msgstr "%1 - Angiv ID pÃ¥ den skabelon, du vil bruge" - -#. ("--transaction") -#: bin/rt-crontool:256 -msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction" -msgstr "%1 - Angiv om du vil bruge enten 'første' eller 'sidste' transaktion" - -#. ("--action") -#: bin/rt-crontool:247 -msgid "%1 - Specify the action module you want to use" -msgstr "%1 - Angiv det handlingsmodul, du vil bruge" - -#. ("--condition") -#: bin/rt-crontool:241 -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Angiv det betingelsesmodul, du vil bruge" - -#. ("--search") -#: bin/rt-crontool:234 -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Angiv det søgemodul, du vil bruge" - -#. ("--transaction-type") -#: bin/rt-crontool:259 -msgid "%1 - Specify the type of a transaction you want to use" -msgstr "%1 - Angiv typen pÃ¥ den transaktion, du vil bruge" - -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -#: html/Elements/Footer:56 -msgid "%1 RT %2 Copyright 1996-%3 %4." -msgstr "%1 RT %2 Copyright 1996-%3 %4." - -#. ($self->Id) -#: lib/RT/ScripAction_Overlay.pm:150 -msgid "%1 ScripAction loaded" -msgstr "%1 Scrip-handling indlæst" - -#. ($args{'Value'}, $cf->Name) -#: lib/RT/Record.pm:1722 -msgid "%1 added as a value for %2" -msgstr "%1 tilføjet som en værdi til %2" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on" -msgstr "et %1 alias skal tilknyttes et sagsnummer" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "et %1 alias skal tilknyttes et sagsnummer (fra %2) %3" - -#. ($args{'Base'}) -#. ($args{'Target'}) -#: lib/RT/Link_Overlay.pm:144 -#: lib/RT/Link_Overlay.pm:151 -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "%1 er tilsyneladende et lokalt objekt, men eksisterer ikke i databasen" - -#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) -#. ($self->BriefDescription , $self->CreatorObj->Name) -#: html/Ticket/Elements/ShowDates:73 -#: lib/RT/Transaction_Overlay.pm:531 -msgid "%1 by %2" -msgstr "%1 af %2" - -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -#: lib/RT/Transaction_Overlay.pm:788 -#: lib/RT/Transaction_Overlay.pm:797 -#: lib/RT/Transaction_Overlay.pm:800 -msgid "%1 changed from %2 to %3" -msgstr "%1 ændret fra %2 til %3" - -#. ($Description) -#: html/Search/Build.html:213 -msgid "%1 copy" -msgstr "%1 kopi" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1 kunne ikke sættes til %2" - -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1 kunne ikke igangsætte en handling (%2)\\n" - -#. ($self) -#: lib/RT/Ticket_Overlay.pm:2787 -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 kunne ikke sætte status til afsluttet. Der er muligvis inkonsekvens i RT-databasen." - -#. ($obj_type) -#: lib/RT/Transaction_Overlay.pm:571 -msgid "%1 created" -msgstr "%1 oprettet" - -#. ($obj_type) -#: lib/RT/Transaction_Overlay.pm:576 -msgid "%1 deleted" -msgstr "%1 slettet" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "Mine %1 højest prioriterede sager" - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I own..." -msgstr "Mine %1 højest prioriterede sager..." - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I requested..." -msgstr "De %1 højest prioriterede sager, jeg har rekvireret" - -#. ($0) -#: bin/rt-crontool:229 -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 er et værktøj, der arbejder med sager fra et bestemt planlægningsværktøj som f.eks. cron." - -#. ($principal->Object->Name, $args{'Type'}) -#: lib/RT/Queue_Overlay.pm:863 -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 er ikke længere en %2 til denne kø." - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 er ikke længere en %2 til denne sag." - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a value for custom field %2" -msgstr "%1 er ikke længere en værdi til ekstrafelt %2" - -#: NOT FOUND IN SOURCE -msgid "%1 isn't a valid Queue id." -msgstr "%1 er ikke et lovligt kø-ID." - -#. ($minutes) -#: html/Ticket/Elements/ShowTime:47 -#: html/Ticket/Elements/ShowTime:49 -msgid "%1 min" -msgstr "%1 min." - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "%1 nyeste sager uden ejer" - -#: NOT FOUND IN SOURCE -msgid "%1 not shown" -msgstr "%1 ikke vist" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "%1 objekter" - -#. (loc($ObjectType =~ /^RT::(.*)$/)) -#: html/User/Elements/DelegateRights:97 -msgid "%1 rights" -msgstr "%1 rettigheder" - -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "%1 lykkedes" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "%1 type ukendt for $MessageId" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "%1 type ukendt for %2" - -#. (ref $self) -#: lib/RT/Action/ResolveMembers.pm:63 -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 vil løse alle medlemmer af en løst gruppesag." - -#: 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 sætte en [lokal] BASE i bero, hvis den er afhængig [eller medlem] af en tilknyttet sag." - -#: lib/RT/CustomField_Overlay.pm:894 -msgid "%1's %2 objects" -msgstr "%1's %2 objekter" - -#: lib/RT/CustomField_Overlay.pm:895 -msgid "%1's %2's %3 objects" -msgstr "%1's %2's %3 objekter" - -#. ($Object->Name) -#. ($object->Name) -#: html/Search/Elements/SearchPrivacy:52 -#: html/Search/Elements/SelectSearchObject:55 -#: html/Search/Elements/SelectSearchesForObjects:57 -msgid "%1's saved searches" -msgstr "%1's gemte søgninger" - -#. ($self) -#: lib/RT/Transaction_Overlay.pm:481 -msgid "%1: no attachment specified" -msgstr "%1: ingen vedhæftet fil er angivet" - -#. ($size) -#: html/Ticket/Elements/ShowTransactionAttachments:78 -msgid "%1b" -msgstr "%1b" - -#. (int( $size / 102.4 ) / 10) -#: html/Ticket/Elements/ShowTransactionAttachments:75 -msgid "%1k" -msgstr "%1k" - -#. (sprintf("%.1f",$minutes / 60)) -#: html/Ticket/Elements/ShowTime:49 -msgid "%quant(%1,hour)" -msgstr "%quant(%1,time)" - -#. ($args{'Status'}) -#: lib/RT/Ticket_Overlay.pm:1142 -msgid "'%1' is an invalid value for status" -msgstr "'%1' er ikke en gyldig statusværdi" - -#: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "'%1' er ikke en anerkendt handling. " - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete scrip)" -msgstr "(Markér for at slette scrip)" - -#: html/Admin/Elements/EditCustomFieldValues:50 -#: html/Admin/Elements/EditQueueWatchers:50 -#: html/Admin/Elements/EditScrips:56 -#: html/Admin/Elements/EditTemplates:57 -#: html/Admin/Groups/Members.html:73 -#: html/Elements/EditLinks:54 -#: html/Ticket/Elements/EditPeople:67 -#: html/User/Groups/Members.html:76 -msgid "(Check box to delete)" -msgstr "(Markér for at slette)" - -#: html/Ticket/Elements/PreviewScrips:99 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(Markér for at fravælge besked til de angive modtagere)" - -#: html/Ticket/Elements/PreviewScrips:123 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "(Markér for at tilvælge besked til de angivne modtagere)" - -#: html/Ticket/Create.html:218 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(Indtast sagsnummer eller URL'er, adskilt af mellemrum)" - -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -#: html/Admin/Queues/Modify.html:75 -#: html/Admin/Queues/Modify.html:81 -msgid "(If left blank, will default to %1)" -msgstr "(Hvis intet angives, vil det som standard være %1)" - -#: html/Admin/Elements/EditCustomFields:74 -#: html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Ingen ekstrafelter)" - -#: 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 skabeloner)" - -#: html/Admin/Elements/PickCustomFields:47 -#: html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(Ingen)" - -#: NOT FOUND IN SOURCE -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does not change who will receive future updates.)" -msgstr "(Sender en blind kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Ændrer ikke, hvem der vil modtage fremtidige opdateringer)." - -#: 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 blind kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Ændrer ikke, hvem der vil modtage fremtidige opdateringer)." - -#: 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 "(Sender en blind kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Ændrer ikke hvem der vil modtage fremtidige opdateringer)." - -#: 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 af denne opdatering til en kommasepareret liste af administrative e-mail-adresser. Disse personer vil modtage fremtidige opdateringer)." - -#: 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 "(Sender en kopi af denne opdatering til en kommasepareret liste af administrative e-mail-adresser. Disse personer vil modtage fremtidige opdateringer)." - -#: 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 af denne opdatering til en kommasepareret liste af e-mail-adresser. Ændrer IKKE, hvem der vil modtage fremtidige opdateringer)." - -#: 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 af denne opdatering til en kommasepareret liste af e-mail-adresser. Ændrer IKKE, hvem der vil modtage fremtidige opdateringer)." - -#: 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 "(Sender en kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Ændrer ikke hvem der vil modtage fremtidige opdateringer)." - -#: 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 af denne opdatering til en kommasepareret liste af e-mail-adresser. Disse personer vil modtage fremtidige opdateringer)." - -#: 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 "(Sender en kopi af denne opdatering til en kommasepareret liste af e-mail-adresser. Disse personer vil modtage fremtidige opdateringer)." - -#: html/Admin/Elements/EditScrip:96 -msgid "(Use these fields when you choose 'User Defined' for a condition or action)" -msgstr "(Brug disse felter, nÃ¥r du vælger 'brugerdefineret' som betingelse eller handling)" - -#: html/Ticket/Elements/EditWatchers:60 -#: html/Ticket/Elements/ShowUserEntry:53 -msgid "(Will not be sent email)" -msgstr "(E-mail vil ikke blive sendt)" - -#: html/Admin/Groups/index.html:57 -#: html/User/Groups/index.html:54 -msgid "(empty)" -msgstr "(tom)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(intet navn angivet)" - -#: NOT FOUND IN SOURCE -msgid "(no subject)" -msgstr "(intet emne)" - -#: html/Admin/Elements/SelectRights:72 -#: html/Elements/EditCustomFieldSelect:69 -#: html/Elements/SelectCustomFieldValue:51 -#: html/Elements/ShowCustomFields:54 -#: html/Search/Chart:56 -#: html/Search/Elements/Chart:76 -#: lib/RT/Transaction_Overlay.pm:591 -msgid "(no value)" -msgstr "(ingen værdi)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(ingen værdier)" - -#: html/Elements/EditLinks:132 -#: html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(kun én sag)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(afventer godkendelse)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "(afventer anden gruppe)" - -#: NOT FOUND IN SOURCE -msgid "(pending other tickets)" -msgstr "(afventer andre sager)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(obligatorisk)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(uden titel)" - -#: html/Ticket/Elements/Reminders:133 -msgid "(yyyy/mm/dd)" -msgstr "(åååå/mm/dd)" - -#: html/Elements/EditCustomFieldSelect:57 -msgid "-" -msgstr "-" - -#: bin/rt-crontool:95 -msgid "--transaction argument could be only 'first' or 'last'" -msgstr "--transaktionsparameter kan kun være 'først' eller 'sidst'" - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I own..." -msgstr "Mine 25 højest prioriterede sager..." - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "De 25 højest prioriterede sager, jeg rekvirerede..." - -#: 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%>" - -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -#: html/Elements/CreateTicket:47 -msgid " %1" -msgstr " %1" - -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -#: docs/design_docs/string-extraction-guide.txt:54 -#: lib/RT/StyleGuide.pod:787 -msgid " %1" -msgstr " %1" - -#: etc/initialdata:218 -msgid "A blank template" -msgstr "En tom skabelon" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "Adgangskode er ikke blevet tildelt, sÃ¥ brugeren kan ikke logge ind." - -#: lib/RT/ACE_Overlay.pm:174 -#: lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE ikke fundet" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACE'er kan kun oprettes og slettes." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "OG" - -#: NOT FOUND IN SOURCE -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Afbryder for at undgÃ¥ utilsigtede sagsændringer.\\n" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Om mig" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Adgangskontrol" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Handling" - -#. ($args{'ScripAction'}) -#: lib/RT/Scrip_Overlay.pm:172 -msgid "Action %1 not found" -msgstr "Handling %1 ikke fundet" - -#: NOT FOUND IN SOURCE -msgid "Action committed." -msgstr "Handling igangsat." - -#: bin/rt-crontool:171 -msgid "Action committed.\\n" -msgstr "Handling igangsat.\\n" - -#: lib/RT/Scrip_Overlay.pm:168 -msgid "Action is mandatory argument" -msgstr "Handlingen er en obligatorisk parameter" - -#: bin/rt-crontool:167 -msgid "Action prepared..." -msgstr "Handling forberedt..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Tilføj" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Tilføj AdminCc" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Tilføj Cc" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Tilføj kolonner" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Tilføj kriterier" - -#: html/Ticket/Create.html:147 -#: html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Tilføj flere filer" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Tilføj rekvirent" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Tilføj værdi" - -#: NOT FOUND IN SOURCE -msgid "Add a new a global scrip" -msgstr "Tilføj en ny global scrip" - -#: NOT FOUND IN SOURCE -msgid "Add a scrip to this queue" -msgstr "Tilføj en scrip til denne kø" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Tilføj en scrip, som vil gælde for alle køer" - -#: NOT FOUND IN SOURCE -msgid "Add additional criteria" -msgstr "Tilføj yderligere kriterier" - -#: html/Search/Build.html:109 -#: html/Search/Build.html:94 -msgid "Add and Search" -msgstr "Tilføj og søg" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "Tilføj kommentarer til eller svar pÃ¥ de udvalgte sager" - -#: html/Admin/Groups/Members.html:63 -#: html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Tilføj medlemmer" - -#: html/Admin/Queues/People.html:87 -#: html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Tilføj nye observatører" - -#: html/Search/Build.html:85 -msgid "Add these terms to your search" -msgstr "Tilføj disse ord til din søgning" - -#: html/Search/Bulk.html:158 -msgid "Add values" -msgstr "Tilføj værdier" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "Add, delete and modify custom field values for objects" -msgstr "Tilføj, slet og rediger ekstrafeltværdier for objekter" - -#: NOT FOUND IN SOURCE -msgid "AddNextState" -msgstr "TilføjNæsteStatus" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:763 -msgid "Added principal as a %1 for this queue" -msgstr "Tilføjede principal som %1 for denne kø" - -#. ($self->loc($args{'Type'})) -#: lib/RT/Ticket_Overlay.pm:1455 -msgid "Added principal as a %1 for this ticket" -msgstr "Tilføjede principal som %1 for denne sag" - -#: html/Admin/Users/Modify.html:146 -#: html/User/Prefs.html:133 -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 korrespondance" - -#: html/Admin/Queues/index.html:46 -#: html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Admin køer" - -#: NOT FOUND IN SOURCE -msgid "Admin users" -msgstr "Admin brugere" - -#: html/Admin/Global/index.html:47 -#: html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Amin/Global konfiguration" - -#: NOT FOUND IN SOURCE -msgid "Admin/Groups" -msgstr "Admin/Grupper" - -#: NOT FOUND IN SOURCE -msgid "Admin/Queue/Basics" -msgstr "Admin/Køer/Stamdata" - -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "AdminAllePersonligeGrupper" - -#: 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 "AdminKorrespondance" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "AdminEkstrafelt" - -#: NOT FOUND IN SOURCE -msgid "AdminCustomFields" -msgstr "AdminEkstrafelter" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "AdminGruppe" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "AdminGruppeMedlemskab" - -#: 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 "AdminBrugere" - -#: html/Admin/Queues/People.html:69 -#: html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Administrativ Cc" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Avanceret" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "Avanceret søgning" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "Efter" - -#: NOT FOUND IN SOURCE -msgid "Age" -msgstr "Alder" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "Aggregator" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "Alle godkendelser accepteret" - -#: NOT FOUND IN SOURCE -msgid "All Custom Fields" -msgstr "Alle ekstrafelter" - -#: 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 "Sender altid en besked til rekvirenten uafhængigt af beskedens afsender" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "Og/eller" - -#: html/Admin/CustomFields/Modify.html:73 -#: html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "Gælder for" - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Anvend" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Anvend dine ændringer" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Godkendelse" - -#. ($ticket->id, $msg) -#. ($Ticket->Id, $Ticket->Subject) -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#: html/Approvals/Display.html:65 -#: html/Approvals/Elements/ShowDependency:63 -#: html/Approvals/index.html:86 -msgid "Approval #%1: %2" -msgstr "Godkendelse #%1: %2" - -#. ($ticket->Id) -#: html/Approvals/index.html:75 -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Godkendelse #%1: Noter ikke gemt pÃ¥ grund af en systemfejl" - -#. ($ticket->Id) -#: html/Approvals/index.html:73 -msgid "Approval #%1: Notes recorded" -msgstr "Godkendelse #%1: Noter blev gemt" - -#: NOT FOUND IN SOURCE -msgid "Approval Details" -msgstr "Godkendelsesdetaljer" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Godkendelse accepteret" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Godkendelse afvist" - -#: NOT FOUND IN SOURCE -msgid "Approval diagram" -msgstr "Godkendelsesdiagram" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Godkend" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Godkenderens noter: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Apr." - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "Stigende" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Stigende" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Assign and remove custom fields" -msgstr "Tilknyt og slet ekstrafelter" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "AssignCustomFields" -msgstr "TilknytEkstrafelter" - -#: html/Search/Bulk.html:142 -#: html/SelfService/Update.html:87 -#: html/Ticket/ModifyAll.html:115 -#: html/Ticket/Update.html:116 -msgid "Attach" -msgstr "Vedhæft" - -#: html/SelfService/Create.html:92 -#: html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Vedhæft fil" - -#: html/SelfService/Update.html:75 -#: html/Ticket/Create.html:131 -#: html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Vedhæftet fil" - -#. ($Attachment) -#: html/Ticket/ShowEmailRecord.html:52 -#: html/Ticket/ShowEmailRecord.html:56 -#: html/Ticket/ShowEmailRecord.html:59 -msgid "Attachment '%1' could not be loaded" -msgstr "Vedhæftede fil '%1' kunne ikke indlæses" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Vedhæftet fil oprettet" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Navn pÃ¥ vedhæftet fil" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Vedhæftede filer" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "Egenskab slettet" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Aug." - -#: NOT FOUND IN SOURCE -msgid "AuthSystem" -msgstr "AuthSystem" - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "Autosvar" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Autosvar til rekvirenter" - -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "AutoSvarTilRekvirenter" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "Tilgængelig" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "Ubrugelig PGP-signatur: %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "Ubrugelig vedhæftnings-ID. Kunne ikke finde vedhæftet fil '%1'\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad data in %1" -msgstr "Ubrugelige data i %1" - -#: NOT FOUND IN SOURCE -msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "" -"Ubrugeligt transaktionsnummer for vedhæftet fil. %1 skulle være %2\\n" -"." - -#: html/Admin/Elements/CustomFieldTabs:65 -#: html/Admin/Elements/GroupTabs:60 -#: html/Admin/Elements/QueueTabs:60 -#: html/Admin/Elements/UserTabs:58 -#: html/Ticket/Elements/Tabs:113 -#: html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Stamdata" - -#: 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 at gemme dine ændringer" - -#: html/Elements/SelectDateRelation:55 -#: lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "Før" - -#: NOT FOUND IN SOURCE -msgid "Begin Approval" -msgstr "PÃ¥begynd godkendelse" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "Best Practical Solutions, LLC firmalogo" - -#: NOT FOUND IN SOURCE -msgid "Binary" -msgstr "Binær" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Tom" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "Fed" - -#: NOT FOUND IN SOURCE -msgid "Bookmarkable URL for this search" -msgstr "URL for denne søgning kan bogmærkes" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "Reference kan bogmærkes" - -#: html/Ticket/Elements/ShowHistory:64 -#: html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Korte overskrifter" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "Masseopdatering" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Masse-sagsopdatering" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Kan ikke rette systembrugere" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Kan denne principal se denne kø" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Kan ikke tilføje ekstrafeltværdier uden navn" - -#. ($Class) -#: html/Admin/CustomFields/Objects.html:86 -msgid "Can't find a collection class for '%1'" -msgstr "Kan ikke finde gruppeklasse for '%1'" - -#: html/Search/Build.html:286 -msgid "Can't find a saved search to work with" -msgstr "Kan ikke finde en gemt søgning at arbejde med" - -#: lib/RT/Link_Overlay.pm:159 -msgid "Can't link a ticket to itself" -msgstr "Kan ikke referere en sag til sig selv" - -#: NOT FOUND IN SOURCE -msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Kan ikke føjes ind i en sammenføjet sag. Denne fejl skulle aldrig opstÃ¥." - -#. (loc($self->{SearchType})) -#: html/Widgets/SavedSearch:63 -msgid "Can't save %1" -msgstr "Kan ikke gemme %1" - -#: html/Search/Build.html:290 -msgid "Can't save this search" -msgstr "Kan ikke gemme denne søgning" - -#: lib/RT/Record.pm:1282 -#: lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "Kan ikke angive bÃ¥de kilde og destination" - -#. ($msg) -#: html/autohandler:204 -msgid "Cannot create user: %1" -msgstr "Kan ikke oprette bruger: %1" - -#: html/Admin/Elements/AddCustomFieldValue:62 -#: html/Admin/Elements/EditCustomFieldValues:58 -msgid "Category" -msgstr "Kategori" - -#: etc/initialdata:50 -#: html/Admin/Queues/People.html:65 -#: html/SelfService/Create.html:71 -#: html/Ticket/Create.html:88 -#: html/Ticket/Elements/EditPeople:72 -#: html/Ticket/Elements/ShowPeople:56 -#: html/Ticket/Update.html:83 -#: lib/RT/ACE_Overlay.pm:112 -msgid "Cc" -msgstr "Cc" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -msgstr "Skift adgangskode" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Vælg alle" - -#: html/SelfService/Update.html:78 -#: html/Ticket/Create.html:134 -#: html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "Markér for at slette" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Markér for at inddrage rettighed" - -#: html/Elements/EditLinks:148 -#: html/Elements/EditLinks:85 -#: html/Elements/ShowLinks:78 -#: html/Ticket/Create.html:223 -#: html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Børn" - -#: html/NoAuth/js/util.js:201 -msgid "Choose a date" -msgstr "Vælg en dato" - -#: html/Admin/Users/Modify.html:156 -#: html/User/Prefs.html:141 -msgid "City" -msgstr "By" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Fravælg alle" - -#: html/Helpers/CalPopup.html:51 -msgid "Close window" -msgstr "Luk vindue" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Lukket" - -#: NOT FOUND IN SOURCE -msgid "Closed Tickets" -msgstr "Lukkede sager" - -#: NOT FOUND IN SOURCE -msgid "Closed requests" -msgstr "Lukkede sager" - -#: html/SelfService/Closed.html:46 -#: html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Lukkede sager" - -#: lib/RT/CustomField_Overlay.pm:89 -msgid "Combobox: Select or enter multiple values" -msgstr "Combobox: Vælg eller indtast flere værdier" - -#: lib/RT/CustomField_Overlay.pm:90 -msgid "Combobox: Select or enter one value" -msgstr "Combobox: Vælg eller indtast en værdi" - -#: lib/RT/CustomField_Overlay.pm:91 -msgid "Combobox: Select or enter up to %1 values" -msgstr "Combobox: Vælg eller indtast op til %1 værdier" - -#: NOT FOUND IN SOURCE -msgid "Command not understood!\\n" -msgstr "Kommando ikke forstÃ¥et!\\n" - -#: html/Ticket/Elements/ShowTransaction:190 -#: html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Kommentar" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Kommentar - adresse" - -#: NOT FOUND IN SOURCE -msgid "Comment not recorded" -msgstr "Kommentar ikke gemt" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Kommentar pÃ¥ sager" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "KommentarPÃ¥Sag" - -#: 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 sendt til rekvirenter)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Kommentarer (ikke sendt til rekvirenter)" - -#: NOT FOUND IN SOURCE -msgid "Comments about %1" -msgstr "Kommentarer om %1" - -#: html/Admin/Users/Modify.html:225 -#: html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Kommentarer om denne bruger" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Kommentarer tilføjet" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "Commit tømt" - -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "Kompilere afgrænsninger" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Betingelse" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "Betingelsen er en obligatorisk parameter" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "Betingelser stemmer overens..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Betingelse ikke fundet" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Konfiguration" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Bekræft" - -#: NOT FOUND IN SOURCE -msgid "ContactInfoSystem" -msgstr "KontaktInfoSystem" - -#: NOT FOUND IN SOURCE -msgid "Contacted date '%1' could not be parsed" -msgstr "Dato kontaktet '%1' kunne ikke fortolkes" - -#: html/Admin/Elements/ModifyTemplate:65 -#: html/Elements/SelectAttachmentField:48 -#: html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Indhold" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "Indhold-Type" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Kopi" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Korrespondance" - -#: NOT FOUND IN SOURCE -msgid "Correspondence Address" -msgstr "Korrespondanceadresse" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Korrespondance tilføjet" - -#: NOT FOUND IN SOURCE -msgid "Correspondence not recorded" -msgstr "Korrespondance ikke gemt" - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. " -msgstr "Kunne ikke tilføje ny ekstrafeltværdi til sag." - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "Kunne ikke tilføje ny ekstrafeltværdi." - -#. (, $value_msg) -#: lib/RT/Record.pm:1660 -msgid "Could not add new custom field value. %1 " -msgstr "Kunne ikke tilføje ny ekstrafeltværdi. %1" - -#: lib/RT/Ticket_Overlay.pm:3048 -#: lib/RT/Ticket_Overlay.pm:3056 -#: lib/RT/Ticket_Overlay.pm:3073 -msgid "Could not change owner. " -msgstr "Kunne ikke at skifte ejer." - -#. ($msg) -#: html/Admin/CustomFields/Modify.html:161 -msgid "Could not create CustomField" -msgstr "Kunne ikke oprette ekstrafelt" - -#. ($msg) -#: html/Admin/Elements/EditCustomField:113 -msgid "Could not create CustomField: %1" -msgstr "Kunne ikke oprette ekstrafelt: %1" - -#: html/User/Groups/Modify.html:98 -#: lib/RT/Group_Overlay.pm:494 -#: lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "Kunne ikke oprette gruppe" - -#. ($msg) -#: html/Admin/Global/Template.html:96 -#: html/Admin/Queues/Template.html:93 -msgid "Could not create template: %1" -msgstr "Kunne ikke oprette skabelon: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 -#: lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Kunne ikke at oprette sag. Kø ikke sat." - -#: lib/RT/User_Overlay.pm:255 -#: lib/RT/User_Overlay.pm:269 -#: lib/RT/User_Overlay.pm:278 -#: lib/RT/User_Overlay.pm:287 -#: lib/RT/User_Overlay.pm:296 -#: lib/RT/User_Overlay.pm:310 -#: lib/RT/User_Overlay.pm:320 -#: lib/RT/User_Overlay.pm:496 -msgid "Could not create user" -msgstr "Kunne ikke oprette bruger" - -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" -msgstr "Kunne ikke finde sag med ID %1" - -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." -msgstr "Kunne ikke finde gruppe %1." - -#: lib/RT/Queue_Overlay.pm:741 -#: lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "Kunne ikke finde eller oprette den bruger" - -#: lib/RT/Queue_Overlay.pm:802 -#: lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "Kunne ikke finde den principal" - -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." -msgstr "Kunne ikke finde bruger %1." - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "Kunne ikke indlæse ekstrafelt %1" - -#: html/Admin/Groups/Members.html:112 -#: html/User/Groups/Members.html:111 -#: html/User/Groups/Modify.html:103 -msgid "Could not load group" -msgstr "Kunne ikke indlæse gruppe" - -#. ($privacy) -#: lib/RT/SavedSearch.pm:119 -msgid "Could not load object for %1" -msgstr "Kunne ikke indlæse objekt til %1" - -#: lib/RT/SavedSearch.pm:197 -msgid "Could not load search attribute" -msgstr "Kunne ikke indlæse søgeegenskab" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:761 -msgid "Could not make that principal a %1 for this queue" -msgstr "Kunne ikke gøre den principal til %1 for denne kø" - -#. ($self->loc($args{'Type'})) -#: lib/RT/Ticket_Overlay.pm:1444 -msgid "Could not make that principal a %1 for this ticket" -msgstr "Kunne ikke gøre den prinicipal til %1 for denne sag" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:860 -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Kunne ikke slette den principal som %1 for denne kø" - -#: NOT FOUND IN SOURCE -msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Kunne ikke slette den principal som %1 for denne sag" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "Kunne ikke angive brugerinfo" - -#: lib/RT/Transaction_Overlay.pm:159 -msgid "Couldn't add attachment" -msgstr "Kunne ikke tilføje fil" - -#: lib/RT/Group_Overlay.pm:1003 -msgid "Couldn't add member to group" -msgstr "Kunne ikke tilføje medlem til gruppe" - -#. ($Msg) -#: lib/RT/Record.pm:1719 -#: lib/RT/Record.pm:1771 -msgid "Couldn't create a transaction: %1" -msgstr "Kunne ikke oprette en transaktion: %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "Kunne ikke afgøre, hvad der skulle foretages ud fra GPG's svar\\n" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find group\\n" -msgstr "Kunne ikke finde gruppe\\n" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "Kunne ikke finde række" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Kunne ikke finde den principal" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Kunne ikke finde den værdi" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "Kunne ikke finde bruger\\n" - -#. ($self->Id) -#: lib/RT/CurrentUser.pm:145 -msgid "Couldn't load %1 from the users database.\\n" -msgstr "Kunne ikke indlæse %1 fra brugerdatabase.\\n" - -#. ($id) -#: html/Admin/CustomFields/UserRights.html:149 -msgid "Couldn't load Class %1" -msgstr "Kunne ikke indlæse klasse %1" - -#. ($id) -#: html/Admin/CustomFields/GroupRights.html:107 -msgid "Couldn't load CustomField %1" -msgstr "Kunne ikke indlæse ekstrafelt %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" -msgstr "Kunne ikke indlæse RT-konfigurationsfil '%1' %2" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "Kunne ikke indlæse scrips." - -#. ($self->Id) -#: lib/RT/Ticket_Overlay.pm:2016 -msgid "Couldn't load copy of ticket #%1." -msgstr "Kunne ikke indlæse kopi af sag #%1." - -#. ($id) -#: html/Admin/Groups/GroupRights.html:109 -#: html/Admin/Groups/UserRights.html:96 -msgid "Couldn't load group %1" -msgstr "Kunne ikke indlæse gruppe %1" - -#: lib/RT/Link_Overlay.pm:202 -#: lib/RT/Link_Overlay.pm:211 -#: lib/RT/Link_Overlay.pm:238 -msgid "Couldn't load link" -msgstr "Kunne ikke indlæse reference" - -#. ($id) -#: html/Admin/Elements/ObjectCustomFields:83 -#: html/Admin/Queues/CustomFields.html:59 -#: html/Admin/Users/CustomFields.html:59 -msgid "Couldn't load object %1" -msgstr "Kunne ikke indlæse objekt %1" - -#. ($id) -#: html/Admin/Queues/People.html:142 -msgid "Couldn't load queue" -msgstr "Kunne ikke indlæse kø" - -#. ($id) -#: html/Admin/Queues/GroupRights.html:122 -#: html/Admin/Queues/UserRights.html:93 -msgid "Couldn't load queue %1" -msgstr "Kunne ikke indlæse kø %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "Kunne ikke indlæse scrip" - -#. ($id) -#: html/Admin/Elements/EditScrip:126 -#: html/Admin/Elements/EditScrip:167 -msgid "Couldn't load scrip #%1" -msgstr "Kunne ikke indlæse scrip #%1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load template" -msgstr "Kunne ikke indlæse skabelon" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load that user (%1)" -msgstr "Kunne ikke indlæse den bruger (%1)" - -#. ($id) -#: html/SelfService/Display.html:158 -#: lib/RT/Action/CreateTickets.pm:680 -msgid "Couldn't load ticket '%1'" -msgstr "Kunne ikke indlæse sag '%1'" - -#. ($args{'URI'}) -#: lib/RT/Ticket_Overlay.pm:2643 -msgid "Couldn't resolve '%1' into a URI." -msgstr "Kunne ikke konvertere '%1' til en URL." - -#: html/Admin/Users/Modify.html:173 -#: html/User/Prefs.html:153 -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 "Opret" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Opret sager" - -#: html/Admin/CustomFields/Modify.html:150 -#: html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Opret et ekstrafelt" - -#. ($QueueObj->Name()) -#: html/Admin/Queues/CustomField.html:69 -msgid "Create a CustomField for queue %1" -msgstr "Opret et ekstrafelt til kø %1" - -#: NOT FOUND IN SOURCE -msgid "Create a CustomField which applies to all queues" -msgstr "Opret et ekstrafelt, der gælder for alle køer" - -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "Opret et nyt ekstrafelt" - -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "Opret en ny global scrip" - -#: html/Admin/Groups/Modify.html:125 -#: html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Opret en ny gruppe" - -#: html/User/Groups/Modify.html:113 -#: html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Opret en ny personlig gruppe" - -#: NOT FOUND IN SOURCE -msgid "Create a new queue" -msgstr "Opret en ny kø" - -#: NOT FOUND IN SOURCE -msgid "Create a new scrip" -msgstr "Opret en ny scrip" - -#: NOT FOUND IN SOURCE -msgid "Create a new template" -msgstr "Opret en ny skabelon" - -#: html/Ticket/Create.html:47 -#: html/Ticket/Create.html:51 -#: html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Opret en ny sag" - -#: html/Admin/Users/Modify.html:252 -#: html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Opret en ny bruger" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Opret en ny kø" - -#: NOT FOUND IN SOURCE -msgid "Create a queue called" -msgstr "Opret en kø med ved navn" - -#: NOT FOUND IN SOURCE -msgid "Create a request" -msgstr "Opret en sag" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Scrip.html:89 -msgid "Create a scrip for queue %1" -msgstr "Opret en scrip for kø %1" - -#: html/Admin/Global/Template.html:90 -#: html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Opret en skabelon" - -#: html/SelfService/Create.html:46 -#: html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Opret en sag" - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Opret en ny sag baseret pÃ¥ denne scrips skabelon" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Opret sag" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Opret sager i denne kø" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Opret, slet og rediger ekstrafelter" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Opret, slet og rediger køer" - -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "Opret, slet og rediger medlemmerne af hvilken som helst brugers personlige grupper" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Opret, slet og rediger medlemmernes personlige grupper" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Opret, slet og rediger brugere" - -#: lib/RT/System.pm:87 -msgid "CreateSavedSearch" -msgstr "OpretGemtSøgning" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "CreateTicket" -msgstr "OpretSag" - -#: html/Elements/SelectDateType:47 -#: html/Ticket/Elements/ShowDates:48 -#: lib/RT/Ticket_Overlay.pm:1169 -msgid "Created" -msgstr "Oprettet" - -#. ($CustomFieldObj->Name()) -#: html/Admin/CustomFields/Modify.html:163 -#: html/Admin/Elements/EditCustomField:117 -msgid "Created CustomField %1" -msgstr "Ekstrafelt %1 oprettet" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "Oprettet i et datointerval" - -#: NOT FOUND IN SOURCE -msgid "Created template %1" -msgstr "Skabelon %1 oprettet" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "Sager oprettet i en periode, fordelt pr. status" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Opretter" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Aktuelle referencer" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Aktuelle scrips" - -#: html/Admin/Groups/Members.html:60 -#: html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Aktuelle medlemmer" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Aktuelle rettigheder" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "Aktiv søgning" - -#: NOT FOUND IN SOURCE -msgid "Current search criteria" -msgstr "Aktuelle søgekriterier" - -#: html/Admin/Queues/People.html:62 -#: html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Aktuelle observatører" - -#: NOT FOUND IN SOURCE -msgid "Custom Field #%1" -msgstr "Ekstrafelt #%1" - -#: html/Admin/Elements/SystemTabs:61 -#: html/Admin/Elements/Tabs:62 -#: html/Admin/Global/index.html:71 -#: html/Admin/Users/Modify.html:205 -#: html/Admin/index.html:77 -#: html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "Ekstrafelter" - -#. ($lookup) -#: html/Admin/CustomFields/index.html:60 -msgid "Custom Fields for %1" -msgstr "Ekstrafelter for %1" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Oprydningskode for specialtilpasset handling" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Ekstrahandling til forberedelseskode" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Ekstra betingelse" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 %2 %3" -msgstr "Ekstrafelt %1 %2 %3" - -#. ($CF->Name) -#: lib/RT/Tickets_Overlay.pm:2424 -msgid "Custom field %1 has a value." -msgstr "Ekstrafelt %1 har en værdi." - -#. ($CF->Name) -#: lib/RT/Tickets_Overlay.pm:2420 -msgid "Custom field %1 has no value." -msgstr "Ekstrafelt %1 har ingen værdi." - -#. ($args{'Field'}) -#: lib/RT/Record.pm:1592 -#: lib/RT/Record.pm:1754 -msgid "Custom field %1 not found" -msgstr "Ekstrafelt %1 ikke fundet" - -#. ($cf) -#. ($obj->Name) -#: lib/RT/Report/Tickets.pm:118 -#: lib/RT/Report/Tickets.pm:121 -msgid "Custom field '%1'" -msgstr "Ekstrafelt '%1'" - -#: NOT FOUND IN SOURCE -msgid "Custom field deleted" -msgstr "Ekstrafelt slettet" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Ekstrafelt ikke fundet" - -#. ($args{'Content'}, $self->Name) -#: lib/RT/CustomField_Overlay.pm:1157 -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Ekstrafeltværdi %1 kunne ikke findes til ekstrafelt %2" - -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "Ekstrafeltværdi ændret fra %1 til %2" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "Ekstrafeltværdi kunne ikke slettes" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "Ekstrafeltværdi kunne ikke findes" - -#: lib/RT/CustomField_Overlay.pm:1171 -#: lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Ekstrafeltværdi slettet" - -#: html/Elements/SelectGroups:51 -#: html/Elements/SelectUsers:51 -#: lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "Ekstrafelt" - -#: html/Prefs/MyRT.html:78 -#: html/Prefs/Quicksearch.html:70 -#: html/Prefs/Search.html:75 -msgid "Customize" -msgstr "Tilpas" - -#: html/SelfService/Display.html:61 -#: html/Ticket/Create.html:203 -#: html/Ticket/Elements/ShowSummary:83 -#: html/Ticket/Elements/Tabs:116 -#: html/Ticket/ModifyAll.html:65 -msgid "Dates" -msgstr "Datoer" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Dec." - -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" -msgstr "Standard Autosvarskabelon" - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Standard Autosvarskabelon" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Standard kø" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Standard rekvirent" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Standard administrator kommentarskabelon" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Standard administrator korrespondanceskabelon" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Standard korrespondanceskabelon" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Standard transaktionsskabelon" - -#: NOT FOUND IN SOURCE -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Standard: %1/%2 ændret fra %3 til %4" - -#: html/User/Delegation.html:46 -#: html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Overdrag rettigheder" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "Overdrag specifikke rettigheder, som er blevet tildelt til dig." - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "OverdragRettigheder" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Overdragelse" - -#: html/Admin/Elements/EditScrips:75 -#: html/Search/Elements/EditFormat:103 -#: html/Search/Elements/EditQuery:57 -#: html/Search/Elements/EditSearches:63 -#: html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "Slet" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "Slet skabelon" - -#. ($msg) -#: lib/RT/SavedSearch.pm:220 -msgid "Delete failed: %1" -msgstr "Sletning mislykkedes: %1" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Slet valgte scrips" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Slet sager" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "Slet værdier" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "SletSag" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "Søgning slettet" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object could break referential integrity" -msgstr "Sletning af dette objekt kan ødelægge referentiel integritet" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "Sletning af dette objekt vil ødelægge referentiel integritet" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Sletning af dette objekt vil stride mod referentiel integritet" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Afvis" - -#: html/Elements/EditLinks:140 -#: html/Elements/EditLinks:66 -#: html/Elements/ShowLinks:58 -#: html/Ticket/Create.html:221 -#: html/Ticket/Elements/BulkLinks:56 -#: html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "Afhængighed til" - -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "Afhængigheder: \\n" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:718 -msgid "Dependency by %1 added" -msgstr "Afhængighed til %1 tilføjet" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:758 -msgid "Dependency by %1 deleted" -msgstr "Afhængighed til %1 slettet" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:715 -msgid "Dependency on %1 added" -msgstr "Afhængighed af %1 tilføjet" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:755 -msgid "Dependency on %1 deleted" -msgstr "Afhængighed af %1 slettet" - -#: html/Elements/EditLinks:136 -#: html/Elements/EditLinks:57 -#: html/Elements/SelectLinkType:48 -#: html/Elements/ShowLinks:48 -#: html/Ticket/Create.html:220 -#: html/Ticket/Elements/BulkLinks:52 -#: html/Ticket/Elements/ShowDependencies:46 -msgid "Depends on" -msgstr "Afhængig af" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "Faldende" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Faldende" - -#: html/SelfService/Create.html:100 -#: html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Beskriv problemet nedenfor" - -#: html/Admin/CustomFields/Modify.html:61 -#: html/Admin/Elements/AddCustomFieldValue:57 -#: html/Admin/Elements/EditCustomField:60 -#: html/Admin/Elements/EditCustomFieldValues:56 -#: html/Admin/Elements/EditScrip:55 -#: html/Admin/Elements/ModifyTemplate:57 -#: html/Admin/Groups/Modify.html:71 -#: html/Admin/Queues/Modify.html:69 -#: html/Search/Elements/EditSearches:56 -#: html/User/Groups/Modify.html:70 -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 adgangskontrolliste" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Vis kolonner" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Vis scrip-skabeloner for denne kø" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Vis scrips for denne kø" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Vis tilstand" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "Vis gemte søgninger for denne gruppe" - -#: NOT FOUND IN SOURCE -msgid "Display ticket #%1" -msgstr "Vis sag #%1" - -#: html/Elements/Footer:61 -msgid "Distributed under version 2 of the GNU GPL." -msgstr "Distribueret under version 2 af GNU GPL'en." - -#: lib/RT/System.pm:75 -msgid "Do anything and everything" -msgstr "Gør hvad som helst" - -#: NOT FOUND IN SOURCE -msgid "Do the Search" -msgstr "Udfør søgningen" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Opdater ikke denne side." - -#: NOT FOUND IN SOURCE -msgid "Don't show search results" -msgstr "Vis ikke søgeresultater" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Download" - -#: html/Admin/Groups/index.html:61 -#: html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Download som en tabulatoropdelt fil" - -#: html/Elements/SelectDateType:53 -#: html/Ticket/Create.html:209 -#: html/Ticket/Elements/EditDates:66 -#: html/Ticket/Elements/Reminders:133 -#: html/Ticket/Elements/ShowDates:64 -#: lib/RT/Ticket_Overlay.pm:1173 -msgid "Due" -msgstr "Forfalden" - -#: NOT FOUND IN SOURCE -msgid "Due date '%1' could not be parsed" -msgstr "Forfaldsdato '%1' kunne ikke fortolkes" - -#: NOT FOUND IN SOURCE -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "FEJL: Kunne ikke indlæse sag '%1': %2.\\n" - -#: html/Elements/Quicksearch:48 -#: html/Elements/ShowSearch:49 -#: html/index.html:107 -msgid "Edit" -msgstr "Rediger" - -#: html/Search/Bulk.html:149 -msgid "Edit Custom Fields" -msgstr "Rediger ekstrafelter" - -#. ($Object->Name) -#: html/Admin/Elements/ObjectCustomFields:92 -#: html/Admin/Queues/CustomFields.html:64 -#: html/Admin/Users/CustomFields.html:64 -msgid "Edit Custom Fields for %1" -msgstr "Rediger ekstrafelter for %1" - -#: html/Admin/Global/CustomFields/Groups.html:54 -msgid "Edit Custom Fields for all groups" -msgstr "Rediger ekstrafelter for alle grupper" - -#: html/Admin/Global/CustomFields/Users.html:54 -msgid "Edit Custom Fields for all users" -msgstr "Rediger ekstrafelter for alle brugere" - -#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 -#: html/Admin/Global/CustomFields/Queue-Transactions.html:54 -msgid "Edit Custom Fields for tickets in all queues" -msgstr "Rediger ekstrafelter for sager i alle køer" - -#: html/Search/Bulk.html:188 -#: html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Rediger referencer" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Rediger søgning" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "Rediger søgning" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Templates.html:63 -msgid "Edit Templates for queue %1" -msgstr "Rediger skabeloner for kø %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "Rediger gemte søgninger for denne gruppe" - -#: 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 systemskabeloner" - -#: NOT FOUND IN SOURCE -msgid "Edit templates for %1" -msgstr "Rediger skabeloner for %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "RedigerGemteSøgninger" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Modify.html:140 -msgid "Editing Configuration for queue %1" -msgstr "Redigerer konfiguration for kø %1" - -#: NOT FOUND IN SOURCE -msgid "Editing Configuration for user %1" -msgstr "Redigerer konfiguration for bruger %1" - -#. ($CustomFieldObj->Name()) -#: html/Admin/CustomFields/Modify.html:167 -#: html/Admin/Elements/EditCustomField:120 -msgid "Editing CustomField %1" -msgstr "Redigerer ekstrafelt %1" - -#. ($Group->Name) -#: html/Admin/Groups/Members.html:53 -msgid "Editing membership for group %1" -msgstr "Redigerer medlemskab for gruppe %1" - -#. ($Group->Name) -#: html/User/Groups/Members.html:150 -msgid "Editing membership for personal group %1" -msgstr "Redigerer medlemskab for personlig gruppe %1" - -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "Redigerer skabelon %1" - -#: lib/RT/Record.pm:1295 -#: lib/RT/Record.pm:1372 -#: lib/RT/Ticket_Overlay.pm:2518 -#: lib/RT/Ticket_Overlay.pm:2608 -msgid "Either base or target must be specified" -msgstr "Enten kilde eller destination skal angives" - -#: html/Admin/Users/Modify.html:74 -#: html/Ticket/Elements/AddWatchers:77 -#: html/User/Prefs.html:65 -msgid "Email" -msgstr "E-mail" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "E-mail-adresse i brug" - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "E-mailAdresse" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "E-mailKodning" - -#: html/Admin/CustomFields/Modify.html:98 -#: html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Aktiveret (fravalg af denne boks deaktiverer dette ekstrafelt)" - -#: html/Admin/Groups/Modify.html:84 -#: html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Aktiveret (fravalg af denne boks deaktiverer denne gruppe)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Aktiveret (fravalg af denne boks deaktiverer denne kø)" - -#: NOT FOUND IN SOURCE -msgid "Enabled Custom Fields" -msgstr "Aktiverede ekstrafelter" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Aktiverede køer" - -#. (loc_fuzzy($msg)) -#: html/Admin/Elements/EditCustomField:136 -#: html/Admin/Groups/Modify.html:150 -#: html/Admin/Users/Modify.html:350 -#: html/User/Groups/Modify.html:138 -msgid "Enabled status %1" -msgstr "Aktiveret status %1" - -#. (loc_fuzzy($msg)) -#: html/Admin/CustomFields/Modify.html:185 -#: html/Admin/Queues/Modify.html:162 -msgid "Enabled status: %1" -msgstr "Aktiveret status: %1" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Indtast flere værdier" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Angiv objekter eller URL'er til tilknytning af objekter. Flere indtastninger adskilles med mellemrum." - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Indtast en værdi" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Angiv køer eller URL'er til tilknytning af køer. Flere indtastninger adskilles med mellemrum." - -#: html/Elements/EditLinks:119 -#: html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Angiv sager eller URL'er til tilknytning af sager. Flere værdier adskilles med mellemrum." - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Angiv op til %1 værdier" - -#: html/Elements/Login:76 -#: html/SelfService/Error.html:46 -#: html/SelfService/Error.html:47 -msgid "Error" -msgstr "Fejl" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Fejl i parametre til Kø->TilføjObservatør" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Fejl i parametre til Kø->SletObservatør" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Fejl i parametre til Kø->SletObservatør" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Fejl i parametre til Sag->TilføjObservatør" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "Fejl i parametre til Sag->SletObservatør" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Fejl i parametre til Sag->SletObservatør" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "Opprioriter sager" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Estimeret" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Alle" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Eksempel:" - -#: NOT FOUND IN SOURCE -msgid "ExternalAuthId" -msgstr "EksternAuthID" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr "EksternKontaktInfoID" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Ekstra information" - -#: lib/RT/SavedSearch.pm:177 -msgid "Failed to create search attribute" -msgstr "Kunne ikke oprette søgeegenskab" - -#: lib/RT/User_Overlay.pm:376 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Kunne ikke finde 'privilegerede' brugeres pseudogruppe." - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Kunne ikke finde 'uprivilegerede' brugeres pseudogruppe." - -#. ($modname, $@) -#: bin/rt-crontool:206 -msgid "Failed to load module %1. (%2)" -msgstr "Kunne ikke indlæse modul %1. (%2)" - -#. ($privacy) -#: lib/RT/SavedSearch.pm:152 -msgid "Failed to load object for %1" -msgstr "Kunne ikke indlæse objekt for %1" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Feb." - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "Filnavn" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Udfyld flere tekstomrÃ¥der" - -#: lib/RT/CustomField_Overlay.pm:74 -msgid "Fill in multiple wikitext areas" -msgstr "Udfyld flere wikitekst-omrÃ¥der" - -#: lib/RT/CustomField_Overlay.pm:70 -msgid "Fill in one text area" -msgstr "Udfyld et tekstomrÃ¥de" - -#: lib/RT/CustomField_Overlay.pm:75 -msgid "Fill in one wikitext area" -msgstr "Udfyld et wikitekst-omrÃ¥de" - -#: html/Admin/CustomFields/Modify.html:107 -#: html/Admin/CustomFields/Modify.html:118 -msgid "Fill in this field with a URL." -msgstr "Udfyld dette felt med en URL." - -#: lib/RT/CustomField_Overlay.pm:71 -msgid "Fill in up to %1 text areas" -msgstr "Udfyld op til %1 tekstomrÃ¥der" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "Udfyld op til %1 wikitekst-omrÃ¥der" - -#: NOT FOUND IN SOURCE -msgid "Fin" -msgstr "Slut" - -#: html/Search/Elements/PickBasics:149 -#: html/Ticket/Create.html:182 -#: html/Ticket/Elements/EditBasics:97 -#: lib/RT/Tickets_Overlay.pm:1841 -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 "Find gruppe hvis" - -#: html/Admin/Groups/index.html:72 -#: html/Admin/Queues/People.html:82 -#: html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Find grupper hvis" - -#: NOT FOUND IN SOURCE -msgid "Find new/open tickets" -msgstr "Find nye/Ã¥bne sager" - -#: html/Admin/Queues/People.html:78 -#: html/Admin/Users/index.html:70 -#: html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Find personer hvis" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Find sager" - -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "Afslut godkendelse" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Første" - -#: 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 "Gennemtving ændring" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Format" - -#. ($ticketcount) -#: html/Search/Results.html:145 -msgid "Found %quant(%1,ticket)" -msgstr "Fandt %quant(%1,ticket)" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Object fundet" - -#: NOT FOUND IN SOURCE -msgid "Freeform" -msgstr "FrihÃ¥nd" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "FrihÃ¥ndKontaktInfo" - -#: NOT FOUND IN SOURCE -msgid "FreeformMultiple" -msgstr "FrihÃ¥ndMange" - -#: NOT FOUND IN SOURCE -msgid "FreeformSingle" -msgstr "FrihÃ¥ndEnkelt" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Fre." - -#: html/Ticket/Elements/ShowHistory:66 -#: html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Hele overskrifter" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Hent skabelon fra fil" - -#: NOT FOUND IN SOURCE -msgid "Getting the current user from a pgp sig\\n" -msgstr "Henter den aktuelle bruger fra en PGP-signatur\\n" - -#. ($New->Name) -#: lib/RT/Transaction_Overlay.pm:684 -msgid "Given to %1" -msgstr "Givet til %1" - -#: html/Admin/Elements/Tabs:65 -#: html/Admin/index.html:82 -msgid "Global" -msgstr "Global" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "Globale ekstrafelter" - -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -msgstr "Globale scrips" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "Global ekstrafelt-konfiguration" - -#. ($pane) -#: html/Admin/Global/MyRT.html:48 -msgid "Global portlet %1 saved." -msgstr "Global portlet %1 gemt." - -#. (loc($Template->Name)) -#: html/Admin/Elements/SelectTemplate:59 -msgid "Global template: %1" -msgstr "Global skabelon: %1" - -#: html/Admin/CustomFields/index.html:80 -#: html/Search/Results.html:90 -#: html/Tools/Offline.html:89 -msgid "Go" -msgstr "Start" - -#: html/Admin/Groups/index.html:67 -#: html/Admin/Groups/index.html:73 -#: html/Admin/Queues/People.html:80 -#: html/Admin/Queues/People.html:84 -#: html/Admin/Queues/index.html:66 -#: html/Admin/Users/index.html:73 -#: html/Elements/RefreshHomepage:48 -#: html/Search/Results.html:74 -#: html/Ticket/Elements/EditPeople:53 -#: html/Ticket/Elements/EditPeople:57 -msgid "Go!" -msgstr "Start!" - -#: NOT FOUND IN SOURCE -msgid "Good pgp sig from %1\\n" -msgstr "Brugbar PGP-signatur fra %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Goto page" -msgstr "GÃ¥ til side" - -#: html/Elements/GotoTicket:46 -#: html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "GÃ¥ til sag" - -#: 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 "Gruppe %1 %2: %3" - -#: html/Admin/Elements/CustomFieldTabs:68 -#: html/Admin/Elements/GroupTabs:66 -#: html/Admin/Elements/QueueTabs:82 -#: html/Admin/Elements/SystemTabs:65 -#: html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Grupperettigheder" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Gruppe har allerede medlem" - -#. ($create_msg) -#: html/Admin/Groups/Modify.html:109 -msgid "Group could not be created: %1" -msgstr "Gruppe kunne ikke oprettes: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Gruppe oprettet" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Gruppen har ikke et sÃ¥dant medlem" - -#: lib/RT/Group_Overlay.pm:963 -#: lib/RT/Queue_Overlay.pm:748 -#: lib/RT/Queue_Overlay.pm:808 -#: lib/RT/Ticket_Overlay.pm:1430 -#: lib/RT/Ticket_Overlay.pm:1510 -msgid "Group not found" -msgstr "Gruppe ikke fundet" - -#: NOT FOUND IN SOURCE -msgid "Group not found.\\n" -msgstr "Gruppe ikke fundet.\\n" - -#: NOT FOUND IN SOURCE -msgid "Group not specified.\\n" -msgstr "Gruppe ikke angivet.\\n" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 -#: html/Admin/Elements/SelectNewGroupMembers:57 -#: html/Admin/Elements/Tabs:56 -#: html/Admin/Global/CustomFields/index.html:69 -#: html/Admin/Groups/Members.html:86 -#: html/Admin/Queues/People.html:104 -#: html/Admin/Users/Memberships.html:53 -#: html/Admin/index.html:67 -#: html/User/Groups/Members.html:88 -#: lib/RT/CustomField_Overlay.pm:1210 -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 medlem af deres medlemmer" - -#: html/Admin/Groups/index.html:86 -msgid "Groups matching search criteria" -msgstr "Grupper som opfylder søgekriterier" - -#: html/Ticket/Elements/ShowRequestor:77 -msgid "Groups this user belongs to" -msgstr "Grupper denne bruger hører til" - -#: lib/RT/Interface/CLI.pm:94 -msgid "Hello!" -msgstr "Hej!" - -#. ($name) -#: docs/design_docs/string-extraction-guide.txt:40 -#: lib/RT/StyleGuide.pod:773 -msgid "Hello, %1" -msgstr "Hej, %1" - -#: html/Admin/Elements/GroupTabs:70 -#: html/Admin/Elements/UserTabs:64 -#: html/Ticket/Elements/ShowHistory:53 -#: html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Historik" - -#. ($GroupObj->Name) -#: html/Admin/Groups/History.html:62 -msgid "History of the group %1" -msgstr "Historik for gruppen %1" - -#. ($UserObj->Name) -#: html/Admin/Users/History.html:62 -msgid "History of the user %1" -msgstr "Historik for brugeren %1" - -#: NOT FOUND IN SOURCE -msgid "HomePhone" -msgstr "Telefon hjemme" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Forside" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "Timer" - -#. (6) -#: lib/RT/Base.pm:119 -msgid "I have %quant(%1,concrete mixer)." -msgstr "Jeg har %quant(%1,concrete mixer)." - -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." -msgstr "Jeg har [quant,_1,concrete mixer]." - -#: html/Search/Build.html:460 -#: lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "Jeg er faret vild" - -#: 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 godkendelse bliver afvist, afvis den oprindelige og slet afventende godkendelser" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "Hvis ingen rekvirent er angivet, opret sager med denne rekvirent." - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Hvis ingen kø er oprettet, opret sager i denne kø." - -#: bin/rt-crontool:267 -msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT." -msgstr "Hvis dette værktøj var \"setgid\", kunne en fjendtlig bruger benytte det til at opnÃ¥ administratoradgang til RT." - -#: html/Admin/Queues/People.html:126 -#: html/Ticket/Modify.html:60 -#: html/Ticket/ModifyAll.html:128 -#: html/Ticket/ModifyPeople.html:60 -msgid "If you've updated anything above, be sure to" -msgstr "Hvis du har foretaget opdateringer ovenfor, sørg for at..." - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Ulovlig værdi for %1" - -#: NOT FOUND IN SOURCE -msgid "Image" -msgstr "Billede" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Felt kan ikke ændres" - -#: NOT FOUND IN SOURCE -msgid "Include disabled custom fields in listing." -msgstr "Medtag deaktiverede ekstrafelter pÃ¥ liste." - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Medtag deaktiverede grupper pÃ¥ denne liste." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Medtag deaktiverede køer pÃ¥ liste." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Medtag deaktiverede brugere i søgning." - -#: html/Admin/CustomFields/Modify.html:113 -msgid "Include page" -msgstr "Medtag side" - -#: html/Search/Build.html:486 -#: lib/RT/Report/Tickets.pm:441 -msgid "Incomplete Query" -msgstr "Ufuldstændig søgning" - -#: html/Search/Build.html:483 -#: lib/RT/Report/Tickets.pm:438 -msgid "Incomplete query" -msgstr "Ufuldstændig søgning" - -#: html/Search/Elements/PickBasics:148 -#: lib/RT/Tickets_Overlay.pm:1816 -msgid "Initial Priority" -msgstr "Første prioritet" - -#: lib/RT/Ticket_Overlay.pm:1163 -#: lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "FørstePrioritet" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Inputfejl" - -#. ($CF->FriendlyPattern) -#. ($self->FriendlyPattern) -#: html/Elements/ValidateCustomFields:68 -#: lib/RT/CustomField_Overlay.pm:1021 -#: lib/RT/CustomField_Overlay.pm:1162 -msgid "Input must match %1" -msgstr "Input skal stemme overens med %1" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Intern fejl" - -#. ($id->{error_message}) -#: lib/RT/Record.pm:308 -msgid "Internal Error: %1" -msgstr "Intern fejl: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Ugyldig gruppetype" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Ugyldig rettighed" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Ugyldige data" - -#: NOT FOUND IN SOURCE -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Ugyldig ejer, sætter standard til 'ingen'" - -#. ($msg) -#: lib/RT/CustomField_Overlay.pm:207 -#: lib/RT/CustomField_Overlay.pm:678 -msgid "Invalid pattern: %1" -msgstr "Ugyldigt mønster: %1" - -#: lib/RT/Scrip_Overlay.pm:157 -#: lib/RT/Template_Overlay.pm:244 -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 "Ugyldig rettighed" - -#. ($key) -#: lib/RT/Record.pm:283 -msgid "Invalid value for %1" -msgstr "Ugyldig værdi for %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Ugyldig værdi for ekstrafelt" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Ugyldig værdi for status" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Det er yderst vigtigt, at ikke-privilegerede brugere ikke fÃ¥r adgang til at bruge dette værktøj." - -#: bin/rt-crontool:269 -msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool." -msgstr "Det anbefales, at du opretter en ikke-privilegeret Unix-bruger med det korrekte gruppemedlemskab og RT-adgang for at benytte dette værktøj." - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Flere parametre er nødvendige:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "Kursiv" - -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" -msgstr "Punkter, der afventer min godkendelse" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Jan." - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Tilmeld dig eller forlad denne gruppe" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Jul." - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Jumbo" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Jun." - -#: NOT FOUND IN SOURCE -msgid "Keyword" -msgstr "Nøgleord" - -#: NOT FOUND IN SOURCE -msgid "Lang" -msgstr "Sprog" - -#: html/Admin/Users/Modify.html:94 -#: html/User/Prefs.html:76 -msgid "Language" -msgstr "Sprog" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "Stor" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Sidste" - -#: html/Ticket/Elements/EditDates:59 -#: html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Sidste kontakt" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Sidst kontaktet" - -#: NOT FOUND IN SOURCE -msgid "Last Notified" -msgstr "Sidst notificeret" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Sidst opdateret" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "SidstOpdateretAf" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Tilbage" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Lad denne bruger fÃ¥ adgang til RT" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Lad denne bruger fÃ¥ rettigheder" - -#: NOT FOUND IN SOURCE -msgid "Limiting owner to %1 %2" -msgstr "Begrænser ejer til %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Limiting queue to %1 %2" -msgstr "Begrænser kø til %1 %2" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "Reference" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Reference eksisterer allerede" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Reference kunne ikke oprettes" - -#. ($TransString) -#: lib/RT/Record.pm:1326 -msgid "Link created (%1)" -msgstr "Reference oprettet (%1)" - -#. ($TransString) -#: lib/RT/Record.pm:1387 -msgid "Link deleted (%1)" -msgstr "Reference slettet (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Reference ikke fundet" - -#. ($Ticket->Id) -#: html/Ticket/ModifyLinks.html:46 -#: html/Ticket/ModifyLinks.html:50 -msgid "Link ticket #%1" -msgstr "Referér sag #%1" - -#: html/Admin/CustomFields/Modify.html:102 -msgid "Link values to" -msgstr "Referér værdier til" - -#: lib/RT/Ticket_Overlay.pm:700 -msgid "Linking. Permission denied" -msgstr "Reference - adgang nægtet." - -#: html/Ticket/Create.html:216 -#: html/Ticket/Elements/ShowSummary:89 -#: html/Ticket/Elements/Tabs:120 -#: html/Ticket/ModifyAll.html:78 -msgid "Links" -msgstr "Referencer" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "Indlæs" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Indlæs gemt søgning:" - -#: lib/RT/System.pm:86 -msgid "LoadSavedSearch" -msgstr "IndlæsGemtSøgning" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Indlæste Perl-moduler" - -#. ($self->Name) -#: lib/RT/SavedSearch.pm:111 -msgid "Loaded search %1" -msgstr "Søgning %1 indlæst" - -#: html/Admin/Users/Modify.html:138 -#: html/User/Prefs.html:126 -msgid "Location" -msgstr "Lokation" - -#: NOT FOUND IN SOURCE -msgid "" -"Log directory %1 not found or couldn't be written.\\n" -" RT can't run." -msgstr "" -"Mappe til logfiler %1 kunne ikke findes eller skrives til.\\n" -" RT kan ikke køre." - -#. ("".$session{'CurrentUser'}->Name."") -#: html/Elements/Header:91 -msgid "Logged in as %1" -msgstr "Logget ind som %1" - -#: docs/design_docs/string-extraction-guide.txt:71 -#: html/Elements/Login:100 -#: html/Elements/Login:68 -#: html/Elements/Login:84 -#: lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Log ind" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Log ud" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "Opslagstype mismatch" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Sæt ejer" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Sæt status" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Sæt forfaldsdato" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Sæt løsningsdato" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Sæt startdato" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Sæt datostart" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Sæt dato meddelt" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Sæt prioritet" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Sæt kø" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Sæt emne" - -#: lib/RT/Group_Overlay.pm:169 -msgid "Make this group visible to user" -msgstr "Gør denne gruppe synlig for bruger" - -#: html/Admin/index.html:78 -msgid "Manage custom fields and custom field values" -msgstr "Administrer ekstrafelter og ekstrafeltværdier" - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Administrer grupper og gruppemedlemskab" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Administrer egenskaber og konfiguration som gælder for alle køer" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Administrer køer og kø-specifikke egenskaber" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Administrer brugere og adgangskoder" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Mar." - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "Maj." - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:731 -msgid "Member %1 added" -msgstr "Medlem %1 tilføjet" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:771 -msgid "Member %1 deleted" -msgstr "Medlem %1 slettet" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Medlem tilføjet" - -#: lib/RT/Group_Overlay.pm: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 af" - -#: html/Admin/Elements/GroupTabs:63 -#: html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Medlemmer" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:728 -msgid "Membership in %1 added" -msgstr "Medlemskab af %1 tilføjet" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:768 -msgid "Membership in %1 deleted" -msgstr "Medlemskab af %1 slettet" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Medlemskaber" - -#. ($UserObj->Name) -#: html/Admin/Users/Memberships.html:60 -msgid "Memberships of the user %1" -msgstr "Medlemskaber for brugeren %1" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Sammenføjning udført med succes" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Sammenføjning lykkedes ikke. Kunne ikke sætte EffektivID." - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "Sammenføjning lykkedes ikke. Kunne ikke sætte status." - -#: html/Elements/EditLinks:131 -#: html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Føj ind i" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:734 -msgid "Merged into %1" -msgstr "Føjet ind i %1" - -#: html/Search/Bulk.html:143 -#: html/Ticket/Update.html:118 -msgid "Message" -msgstr "Besked" - -#: html/Ticket/Elements/ShowTransactionAttachments:164 -msgid "Message body not shown because it is too large or is not plain text." -msgstr "Meddelelsens indhold er ikke vist, fordi meddelelsen er for stor, eller fordi den ikke er i almindelig tekst." - -#: lib/RT/Ticket_Overlay.pm:2451 -msgid "Message could not be recorded" -msgstr "Besked kunne ikke gemmes" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Besked gemt" - -#: html/Ticket/Elements/PreviewScrips:122 -msgid "Messages about this ticket will not be sent to..." -msgstr "Beskeder angÃ¥ende denne sag vil ikke blive sendt til..." - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -msgstr "Minutter" - -#: html/Search/Build.html:490 -#: lib/RT/Report/Tickets.pm:445 -msgid "Mismatched parentheses" -msgstr "Ikke-matchende parenteser" - -#: lib/RT/Record.pm:954 -msgid "Missing a primary key?: %1" -msgstr "Mangler en primærnøgle?: %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 "Rediger adgangskontrolliste" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "Rediger ekstrafelt %1" - -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -#: html/Admin/Elements/ObjectCustomFields:96 -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "Rediger ekstrafelter, der gælder for %1 for alle %2" - -#. (loc(lc($Types))) -#: html/Admin/Elements/ObjectCustomFields:98 -msgid "Modify Custom Fields which apply to all %1" -msgstr "Rediger ekstrafelter, der gælder for alle %1" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Fields which apply to all queues" -msgstr "Rediger ekstrafelter, der gælder for alle køer" - -#: html/Admin/Global/GroupRights.html:106 -#: html/Admin/Groups/GroupRights.html:94 -#: html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Rediger grupperettigheder" - -#: html/Admin/Groups/Members.html:105 -#: html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Rediger medlemmer" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Rediger rettigheder" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Modify Scrip templates for this queue" -msgstr "Rediger scrip-skabeloner for denne kø" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Rediger scrips for denne kø" - -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" -msgstr "Rediger skabelon %1" - -#: html/Admin/Global/UserRights.html:75 -#: html/Admin/Groups/UserRights.html:76 -#: html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Rediger brugerrettigheder" - -#. ($QueueObj->Name()) -#: html/Admin/Queues/CustomField.html:66 -msgid "Modify a CustomField for queue %1" -msgstr "Rediger et ekstrafelt for kø %1" - -#: NOT FOUND IN SOURCE -msgid "Modify a CustomField which applies to all queues" -msgstr "Rediger et ekstrafelt, der gælder for alle køer" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Scrip.html:82 -msgid "Modify a scrip for queue %1" -msgstr "Rediger et scrip for kø %1" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Rediger et scrip, der gælder for alle køer" - -#. ($CF->Name) -#: html/Admin/CustomFields/Objects.html:90 -msgid "Modify associated objects for %1" -msgstr "Rediger tilhørende objekter til %1" - -#. ($TicketObj->Id) -#: html/Ticket/ModifyDates.html:46 -#: html/Ticket/ModifyDates.html:50 -msgid "Modify dates for #%1" -msgstr "Rediger datoer for #%1" - -#. ($TicketObj->Id) -#: html/Ticket/ModifyDates.html:57 -msgid "Modify dates for ticket # %1" -msgstr "Rediger datoer for sag # %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 -#: html/Admin/Global/index.html:72 -msgid "Modify global custom fields" -msgstr "Rediger globale ekstrafelter" - -#: html/Admin/Elements/GlobalCustomFieldTabs:70 -#: html/Admin/Global/GroupRights.html:46 -#: html/Admin/Global/GroupRights.html:49 -#: html/Admin/Global/index.html:77 -msgid "Modify global group rights" -msgstr "Rediger globale grupperettigheder" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Rediger globale grupperettigheder." - -#: NOT FOUND IN SOURCE -msgid "Modify global scrips" -msgstr "Rediger globale scrips" - -#: html/Admin/Global/UserRights.html:46 -#: html/Admin/Global/UserRights.html:49 -#: html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Rediger globale brugerrettigheder" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Rediger globale brugerrettigheder." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Rediger gruppemetadata eller slet gruppe" - -#. ($CustomFieldObj->Name) -#: html/Admin/CustomFields/GroupRights.html:164 -msgid "Modify group rights for custom field %1" -msgstr "Rediger grupperettigheder for ekstrafelter %1" - -#. ($GroupObj->Name) -#: html/Admin/Groups/GroupRights.html:46 -#: html/Admin/Groups/GroupRights.html:50 -#: html/Admin/Groups/GroupRights.html:56 -msgid "Modify group rights for group %1" -msgstr "Rediger grupperettigheder for gruppe %1" - -#. ($QueueObj->Name) -#: html/Admin/Queues/GroupRights.html:46 -#: html/Admin/Queues/GroupRights.html:50 -msgid "Modify group rights for queue %1" -msgstr "Rediger grupperettigheder for kø %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Rediger medlemskabsliste for denne gruppe" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Rediger din egen RT-konto" - -#. ($QueueObj->Name) -#: html/Admin/Queues/People.html:46 -#: html/Admin/Queues/People.html:50 -msgid "Modify people related to queue %1" -msgstr "Rediger personer, der tilhører kø %1" - -#. ($Ticket->id) -#. ($Ticket->Id) -#: html/Ticket/ModifyPeople.html:46 -#: html/Ticket/ModifyPeople.html:50 -#: html/Ticket/ModifyPeople.html:57 -msgid "Modify people related to ticket #%1" -msgstr "Rediger personer, der tilhører sag #%1" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Scrips.html:67 -msgid "Modify scrips for queue %1" -msgstr "Rediger scrips for kø %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 -#: html/Admin/Global/Scrips.html:65 -#: html/Admin/Global/index.html:63 -msgid "Modify scrips which apply to all queues" -msgstr "Rediger scrips, der gælder for alle køer" - -#. (loc($TemplateObj->Name())) -#. ($TemplateObj->id) -#: html/Admin/Global/Template.html:102 -#: html/Admin/Global/Template.html:46 -#: html/Admin/Global/Template.html:51 -#: html/Admin/Queues/Template.html:99 -msgid "Modify template %1" -msgstr "Rediger skabelon %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Rediger skabeloner, der gælder for alle køer" - -#: html/Admin/Global/index.html:85 -msgid "Modify the default \"RT at a glance\" view" -msgstr "Tilpas standardvisningen af \"RT set fra oven\"" - -#. ($Group->Name) -#: html/Admin/Groups/Modify.html:119 -#: html/User/Groups/Modify.html:107 -msgid "Modify the group %1" -msgstr "Rediger gruppen %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Rediger observatører for køen" - -#. ($UserObj->Name) -#: html/Admin/Users/Modify.html:309 -msgid "Modify the user %1" -msgstr "Rediger brugeren %1" - -#. ($Ticket->Id) -#: html/Ticket/ModifyAll.html:58 -msgid "Modify ticket # %1" -msgstr "Rediger sag # %1" - -#. ($TicketObj->Id) -#: html/Ticket/Modify.html:46 -#: html/Ticket/Modify.html:49 -#: html/Ticket/Modify.html:55 -msgid "Modify ticket #%1" -msgstr "Rediger sag #%1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Rediger sager" - -#. ($CustomFieldObj->Name) -#: html/Admin/CustomFields/UserRights.html:157 -msgid "Modify user rights for custom field %1" -msgstr "Rediger brugerrettigheder for ekstrafelter %1" - -#. ($GroupObj->Name) -#: html/Admin/Groups/UserRights.html:46 -#: html/Admin/Groups/UserRights.html:50 -#: html/Admin/Groups/UserRights.html:56 -msgid "Modify user rights for group %1" -msgstr "Rediger brugerrettigheder for gruppe %1" - -#. ($QueueObj->Name) -#: html/Admin/Queues/UserRights.html:46 -#: html/Admin/Queues/UserRights.html:50 -msgid "Modify user rights for queue %1" -msgstr "Rediger brugerrettigheder for kø %1" - -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "Rediger observatører for kø '%1'" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ModifyACL" -msgstr "RedigerACL" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "RedigerEkstrafelt" - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "RedigeretEgetMedlemskab" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyQueueWatchers" -msgstr "RedigerKøObservatører" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ModifyScrips" -msgstr "RedigerScrips" - -#: lib/RT/System.pm:82 -msgid "ModifySelf" -msgstr "RedigerSelv" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "ModifyTemplate" -msgstr "RedigerSkabelon" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "ModifyTicket" -msgstr "RedigerSag" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Man." - -#. ($name) -#: html/Ticket/Elements/ShowRequestor:61 -msgid "More about %1" -msgstr "Mere om %1" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Flyt ned" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Flyt op" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Flere" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "Egenskab 'Navn' skal angives" - -#. ($friendly_status) -#: html/SelfService/Elements/MyRequests:57 -msgid "My %1 tickets" -msgstr "Mine %1 sager" - -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "Mine godkendelser" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "Min dag" - -#: html/Approvals/index.html:46 -#: html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Mine godkendelser" - -#: html/Search/Elements/SearchPrivacy:50 -#: html/Search/Elements/SelectSearchObject:53 -#: html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Mine gemte søgninger" - -#: html/Admin/CustomFields/Modify.html:58 -#: html/Admin/Elements/AddCustomFieldValue:53 -#: html/Admin/Elements/EditCustomField:55 -#: html/Admin/Elements/EditCustomFieldValues:55 -#: html/Admin/Elements/ModifyTemplate:49 -#: html/Admin/Groups/Modify.html:65 -#: html/Search/Bulk.html:157 -#: html/User/Groups/Modify.html:65 -msgid "Name" -msgstr "Navn" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Navn i brug" - -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "Kræver godkendelse af systemadministrator" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Aldrig" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Ny" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Nye referencer" - -#: html/Admin/Users/Modify.html:119 -#: html/User/Prefs.html:109 -msgid "New Password" -msgstr "Ny adgangskode" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Ny afventende godkendelse" - -#: NOT FOUND IN SOURCE -msgid "New Query" -msgstr "Ny søgning" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Ny søgning" - -#: html/Admin/Elements/CustomFieldTabs:93 -#: html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Nyt ekstrafelt" - -#: 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 "Ny adgangskode" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Ny meddelelse om adgangskode sendt" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Ny kø" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "Ny pÃ¥mindelse:" - -#: NOT FOUND IN SOURCE -msgid "New request" -msgstr "Ny sag" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Nye rettigheder" - -#: html/Admin/Global/Scrip.html:63 -#: html/Admin/Global/Scrips.html:60 -#: html/Admin/Queues/Scrip.html:71 -#: html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Ny scrip" - -#: NOT FOUND IN SOURCE -msgid "New search" -msgstr "Ny søgning" - -#: html/Admin/Global/Template.html:81 -#: html/Admin/Global/Templates.html:60 -#: html/Admin/Queues/Template.html:79 -#: html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Ny skabelon" - -#: html/SelfService/Elements/Tabs:84 -#: html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Ny sag" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "Ny sag eksisterer ikke" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Ny bruger" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Ny bruger ved navn" - -#: html/Admin/Queues/People.html:76 -#: html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Nye observatører" - -#: NOT FOUND IN SOURCE -msgid "New window setting" -msgstr "Ny indstilling for vindue" - -#: html/Helpers/CalPopup.html:58 -#: html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Næste" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Næste side" - -#: NOT FOUND IN SOURCE -msgid "Next page" -msgstr "Næste side" - -#: NOT FOUND IN SOURCE -msgid "NickName" -msgstr "KaldeNavn" - -#: html/Admin/Users/Modify.html:84 -#: html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Kaldenavn" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "Ingen klasse defineret" - -#: html/Admin/CustomFields/Modify.html:166 -#: html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "Intet ekstrafelt" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Intet ekstrafelt defineret" - -#: html/Admin/Groups/GroupRights.html:105 -#: html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Ingen gruppe defineret" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "Ingen søgning" - -#: html/Admin/Queues/GroupRights.html:118 -#: html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "Ingen kø defineret" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Ingen RT-bruger fundet. Kontakt venligst din RT-administrator.\\n" - -#: html/Admin/Global/Template.html:100 -#: html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Ingen skabelon" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket " -msgstr "Ingen sag angivet. Afbryder sag." - -#: NOT FOUND IN SOURCE -msgid "" -"No Ticket specified. Aborting ticket modifications\\n" -"\\n" -msgstr "" -"Ingen sag angivet. Afbryder sagsændringer\\n" -"\\n" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "Ingen handling" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "Ingen kolonne angivet" - -#: NOT FOUND IN SOURCE -msgid "No command found\\n" -msgstr "Ingen kommando fundet\\n" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Ingen kommentar indtastet for denne bruger" - -#: NOT FOUND IN SOURCE -msgid "No correspondence attached" -msgstr "Ingen korrespondance vedhæftet" - -#. (ref $self) -#: lib/RT/Action/Generic.pm:185 -#: lib/RT/Condition/Generic.pm:197 -#: lib/RT/Search/ActiveTicketsInQueue.pm:77 -#: lib/RT/Search/Generic.pm:134 -#: lib/RT/Search/Googleish.pm:78 -msgid "No description for %1" -msgstr "Ingen beskrivelse af %1" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Ingen gruppe angivet" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "Ingen grupper fundet, der opfylder søgekriterier" - -#: lib/RT/Ticket_Overlay.pm:2393 -msgid "No message attached" -msgstr "Ingen meddelelse vedhæftet" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "Ingen adgangskode sat" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Ingen adgang til at oprette køer" - -#. ($QueueObj->Name) -#: lib/RT/Ticket_Overlay.pm:420 -msgid "No permission to create tickets in the queue '%1'" -msgstr "Ingen adgang til at oprette sager i denne kø '%1'" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Ingen adgang til at oprette brugere" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Ingen adgang til at vise denne sag" - -#: lib/RT/SavedSearch.pm:156 -msgid "No permission to save system-wide searches" -msgstr "Ingen tilladelse til at gemme søgninger for hele systemet" - -#: html/SelfService/Update.html:117 -msgid "No permission to view update ticket" -msgstr "Ingen adgang til at se opdater sag" - -#: lib/RT/Queue_Overlay.pm:795 -#: lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Ingen principal angivet" - -#: html/Admin/Queues/People.html:175 -#: html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Ingen principaler valgt." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Ingen køer fundet, der opfylder søgekriterier." - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Ingen rettigheder fundet" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Ingen rettigheder tildelt." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "Ingen søgning indlæst" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Ingen søgning at arbejde med." - -#: html/Elements/RT__Ticket/ColumnMap:137 -#: html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Intet emne" - -#: NOT FOUND IN SOURCE -msgid "No ticket id specified" -msgstr "Intet sagsnummer angivet" - -#: lib/RT/Transaction_Overlay.pm:528 -#: lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Ingen transaktionstype angivet" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Ingen brugere fundet, der opfylder søgekriterier" - -#: NOT FOUND IN SOURCE -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Ingen gyldig RT-bruger fundet. RT CVS-administrator frakoblet. Kontakt venligst din RT-administrator.\\n" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "Ingen værdi sendt til _Set!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Ingen" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Ikke-eksisterende felt?" - -#: html/Search/Chart:71 -#: html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "Ikke sat" - -#: NOT FOUND IN SOURCE -msgid "Not logged in" -msgstr "Ikke logget ind" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Ikke logget ind." - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Ikke sat" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Endnu ikke implementeret." - -#: NOT FOUND IN SOURCE -msgid "Not yet implemented...." -msgstr "Endnu ikke implementeret..." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Noter" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Besked kunne ikke sendes" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "Giv besked til AdminCc'ere" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "Giv besked til AdminCc'ere som kommentar" - -#: etc/initialdata:93 -#: etc/upgrade/3.1.17/content:6 -msgid "Notify Ccs" -msgstr "Giv besked til Cc'ere" - -#: etc/initialdata:89 -#: etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "Giv besked til Cc'ere som kommentarer" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "Giv besked til andre modtagere" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Giv besked til andre modtagere som kommentar" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "Giv besked til ejer" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "Giv besked til ejer som kommentar" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "Giv besked til ejer om deres afviste sag" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "Giv besked til ejere om, at deres sag er blevet godkendt af alle godkendere" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "Giv besked til ejere om, at deres sag er blevet godkendt af nogle godkendere" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Giv besked til ejere og AdminCc'ere om nye emner, som afventer deres godkendelse" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "Giv besked til rekvirenter" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "Giv besked til rekvirenter og Cc'ere" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "Giv besked til rekvirenter og Cc'ere som kommentar" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Giv besked til rekvirenter, Cc'ere og AdminCc'ere" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Giv besked til rekvirenter, Cc'ere og AdminCc'ere som kommentar" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Nov." - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "ELLER" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "Objekt kunne ikke oprettes" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "Objekt kunne ikke slettes" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Objekt oprettet" - -#: lib/RT/Record.pm:120 -msgid "Object deleted" -msgstr "Objekt slettet" - -#. ($LookupType) -#. ($ObjectType) -#: html/Admin/CustomFields/Objects.html:72 -#: html/Admin/Elements/ObjectCustomFields:63 -msgid "Object of type %1 cannot take custom fields" -msgstr "Objekt af typen %1 kan ikke hÃ¥ndtere ekstrafelter" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "Objekttype mismatch" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Okt." - -#: html/Tools/Elements/Tabs:55 -msgid "Offline" -msgstr "Off-line" - -#: html/Tools/Offline.html:49 -msgid "Offline edits" -msgstr "Off-line redigeringer" - -#: html/Tools/Offline.html:46 -msgid "Offline upload" -msgstr "Off-line dataoverførsel" - -#: html/Elements/SelectDateRelation:56 -msgid "On" -msgstr "Ved" - -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -#: lib/RT/Transaction_Overlay.pm:326 -msgid "On %1, %2 wrote:" -msgstr "PÃ¥ %1, skrev %2:" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Ved kommentar" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "Ved korrespondance" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Ved oprettelse" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Ved ændring af ejer" - -#: etc/initialdata:177 -#: etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "Ved ændring af prioritet" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Ved ændring af kø" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Ved løsning" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Ved statusændring" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Ved transaktion" - -#. ("") -#: html/Approvals/Elements/PendingMyApproval:70 -msgid "Only show approvals for requests created after %1" -msgstr "Vis kun godkendelser for sager oprettet efter %1" - -#. ("") -#: html/Approvals/Elements/PendingMyApproval:68 -msgid "Only show approvals for requests created before %1" -msgstr "Vis kun godkendelser for sager oprettet før %1" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "Vis kun ekstrafelter for:" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Åben" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "Åbne sager" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Åbn den" - -#: NOT FOUND IN SOURCE -msgid "Open requests" -msgstr "Åbne sager" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Åbne sager" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in a new window" -msgstr "Åbn sager (fra liste) i et nyt vindue" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in another window" -msgstr "Åbn sager (fra liste) i et andet vindue" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Åbn sager ved korrespondance" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "Valgmuligheder" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Sorteret efter" - -#: NOT FOUND IN SOURCE -msgid "Ordering and sorting" -msgstr "Sortering" - -#: html/Admin/Users/Modify.html:141 -#: html/User/Prefs.html:129 -msgid "Organization" -msgstr "Organisation" - -#. ($approving->Id, $approving->Subject) -#: html/Approvals/Elements/Approve:53 -msgid "Originating ticket: #%1" -msgstr "Oprindelig sag: #%1" - -#: lib/RT/Transaction_Overlay.pm:622 -msgid "Outgoing email about a comment recorded" -msgstr "UdgÃ¥ende e-mail omkring en kommentar er gemt" - -#: lib/RT/Transaction_Overlay.pm:626 -msgid "Outgoing email recorded" -msgstr "UdgÃ¥ende e-mail gemt" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Tid overskredet, prioritet gÃ¥r mod" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Egne sager" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "EgenSag" - -#: etc/initialdata:38 -#: html/Elements/QuickCreate:56 -#: html/Search/Elements/PickBasics:101 -#: html/Ticket/Create.html:72 -#: html/Ticket/Elements/EditBasics:61 -#: html/Ticket/Elements/EditPeople:64 -#: html/Ticket/Elements/EditPeople:65 -#: html/Ticket/Elements/Reminders:129 -#: html/Ticket/Elements/ShowPeople:48 -#: html/Ticket/Update.html:62 -#: lib/RT/ACE_Overlay.pm:110 -#: lib/RT/Tickets_Overlay.pm:2006 -msgid "Owner" -msgstr "Ejer" - -#: NOT FOUND IN SOURCE -msgid "Owner changed from %1 to %2" -msgstr "Ejer ændret fra %1 til %2" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "Ejer kunne ikke defineres." - -#. ($Old->Name , $New->Name) -#: lib/RT/Transaction_Overlay.pm:672 -msgid "Owner forcibly changed from %1 to %2" -msgstr "Ejer tvungent ændret fra %1 til %2" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "Ejer er" - -#: NOT FOUND IN SOURCE -msgid "PVCS Files" -msgstr "PVCS-filer" - -#. ($Page, int($TotalFound/$Rows)+$oddRows) -#: html/Elements/TicketList:78 -msgid "Page %1 of %2" -msgstr "Side %1 af %2" - -#: html/Admin/Users/Modify.html:198 -#: html/User/Prefs.html:96 -msgid "Pager" -msgstr "Personsøger" - -#: NOT FOUND IN SOURCE -msgid "PagerPhone" -msgstr "Personsøgertelefon" - -#: html/Elements/EditLinks:144 -#: html/Elements/EditLinks:76 -#: html/Elements/ShowLinks:68 -#: html/Ticket/Create.html:222 -#: html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "Forældre" - -#: html/Elements/Login:95 -#: html/User/Prefs.html:105 -msgid "Password" -msgstr "Adgangskode" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "AdgangskodepÃ¥mindelse" - -#: lib/RT/Transaction_Overlay.pm:781 -#: lib/RT/User_Overlay.pm:1045 -msgid "Password changed" -msgstr "Adgangskode ændret" - -#. ($RT::MinimumPasswordLength) -#: lib/RT/User_Overlay.pm:1037 -#: lib/RT/User_Overlay.pm:214 -msgid "Password needs to be at least %1 characters long" -msgstr "Adgangskode skal være pÃ¥ mindst %1 karakterer" - -#: lib/RT/User_Overlay.pm:1044 -msgid "Password set" -msgstr "Adgangskode sat" - -#: NOT FOUND IN SOURCE -msgid "Password too short" -msgstr "Adgangskode for kort" - -#. (loc_fuzzy($msg)) -#: html/User/Prefs.html:240 -msgid "Password: %1" -msgstr "Adgangskode: %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "Adgangskode: Adgang afvist" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "Adgangskoder stemmer ikke overens." - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "Adgangskoder stemmer ikke overens. Din adgangskode er ikke blevet ændret." - -#: html/Ticket/Elements/ShowSummary:62 -#: html/Ticket/Elements/Tabs:119 -#: html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Personer" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Udfør en brugerdefineret handling" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Perl-konfiguration" - -#: lib/RT/ACE_Overlay.pm:251 -#: lib/RT/ACE_Overlay.pm:257 -#: lib/RT/ACE_Overlay.pm:580 -#: lib/RT/ACE_Overlay.pm:590 -#: lib/RT/ACE_Overlay.pm:600 -#: lib/RT/ACE_Overlay.pm:665 -#: lib/RT/Attribute_Overlay.pm:158 -#: lib/RT/Attribute_Overlay.pm:164 -#: lib/RT/Attribute_Overlay.pm:405 -#: lib/RT/Attribute_Overlay.pm:414 -#: lib/RT/Attribute_Overlay.pm:427 -#: lib/RT/CurrentUser.pm:116 -#: lib/RT/CurrentUser.pm:125 -#: lib/RT/CustomField_Overlay.pm:1017 -#: lib/RT/CustomField_Overlay.pm:1138 -#: lib/RT/CustomField_Overlay.pm:1281 -#: lib/RT/CustomField_Overlay.pm:172 -#: lib/RT/CustomField_Overlay.pm:189 -#: lib/RT/CustomField_Overlay.pm:200 -#: lib/RT/CustomField_Overlay.pm:374 -#: lib/RT/CustomField_Overlay.pm:403 -#: lib/RT/CustomField_Overlay.pm:763 -#: lib/RT/CustomField_Overlay.pm:936 -#: lib/RT/CustomField_Overlay.pm:971 -#: lib/RT/Group_Overlay.pm:1117 -#: lib/RT/Group_Overlay.pm:1121 -#: lib/RT/Group_Overlay.pm:1130 -#: lib/RT/Group_Overlay.pm:1240 -#: lib/RT/Group_Overlay.pm:1244 -#: lib/RT/Group_Overlay.pm:1250 -#: lib/RT/Group_Overlay.pm:445 -#: lib/RT/Group_Overlay.pm:542 -#: lib/RT/Group_Overlay.pm:620 -#: lib/RT/Group_Overlay.pm:628 -#: lib/RT/Group_Overlay.pm:726 -#: lib/RT/Group_Overlay.pm:730 -#: lib/RT/Group_Overlay.pm:736 -#: lib/RT/Group_Overlay.pm:922 -#: lib/RT/Group_Overlay.pm:926 -#: lib/RT/Group_Overlay.pm:939 -#: lib/RT/Queue_Overlay.pm:1054 -#: lib/RT/Queue_Overlay.pm:140 -#: lib/RT/Queue_Overlay.pm:158 -#: lib/RT/Queue_Overlay.pm:657 -#: lib/RT/Queue_Overlay.pm:667 -#: lib/RT/Queue_Overlay.pm:681 -#: lib/RT/Queue_Overlay.pm:819 -#: lib/RT/Queue_Overlay.pm:828 -#: lib/RT/Queue_Overlay.pm:841 -#: lib/RT/Scrip_Overlay.pm:149 -#: lib/RT/Scrip_Overlay.pm:160 -#: lib/RT/Scrip_Overlay.pm:224 -#: lib/RT/Scrip_Overlay.pm:538 -#: lib/RT/Template_Overlay.pm:108 -#: lib/RT/Template_Overlay.pm:277 -#: lib/RT/Ticket_Overlay.pm:1357 -#: lib/RT/Ticket_Overlay.pm:1367 -#: lib/RT/Ticket_Overlay.pm:1381 -#: lib/RT/Ticket_Overlay.pm:1522 -#: lib/RT/Ticket_Overlay.pm:1532 -#: lib/RT/Ticket_Overlay.pm:1546 -#: lib/RT/Ticket_Overlay.pm:1663 -#: lib/RT/Ticket_Overlay.pm:1983 -#: lib/RT/Ticket_Overlay.pm:2126 -#: lib/RT/Ticket_Overlay.pm:2296 -#: lib/RT/Ticket_Overlay.pm:2346 -#: lib/RT/Ticket_Overlay.pm:2525 -#: lib/RT/Ticket_Overlay.pm:2538 -#: lib/RT/Ticket_Overlay.pm:2614 -#: lib/RT/Ticket_Overlay.pm:2627 -#: lib/RT/Ticket_Overlay.pm:2748 -#: lib/RT/Ticket_Overlay.pm:2762 -#: lib/RT/Ticket_Overlay.pm:2990 -#: lib/RT/Ticket_Overlay.pm:3000 -#: lib/RT/Ticket_Overlay.pm:3005 -#: lib/RT/Ticket_Overlay.pm:3224 -#: lib/RT/Ticket_Overlay.pm:3228 -#: lib/RT/Ticket_Overlay.pm:3371 -#: lib/RT/Ticket_Overlay.pm:3497 -#: lib/RT/Transaction_Overlay.pm:516 -#: lib/RT/Transaction_Overlay.pm:523 -#: lib/RT/Transaction_Overlay.pm:551 -#: lib/RT/Transaction_Overlay.pm:558 -#: lib/RT/User_Overlay.pm:1176 -#: lib/RT/User_Overlay.pm:1856 -#: lib/RT/User_Overlay.pm:369 -#: lib/RT/User_Overlay.pm:735 -#: lib/RT/User_Overlay.pm:774 -msgid "Permission Denied" -msgstr "Adgang afvist" - -#: lib/RT/Template_Overlay.pm:238 -#: lib/RT/Template_Overlay.pm:247 -msgid "Permission denied" -msgstr "Adgang afvist" - -#: lib/RT/Template_Overlay.pm:372 -msgid "Permissions denied" -msgstr "Tilladelser ikke givet" - -#: 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 "Telefonnumre" - -#: NOT FOUND IN SOURCE -msgid "Placeholder" -msgstr "Placeholder" - -#: html/Elements/Header:93 -#: html/Elements/Tabs:91 -#: html/SelfService/Elements/Tabs:95 -#: html/SelfService/Prefs.html:46 -#: html/User/Prefs.html:46 -#: html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Præferencer" - -#. ($pane, $UserObj->Name) -#: html/Admin/Users/MyRT.html:75 -msgid "Preferences %1 for user %2 ." -msgstr "Præferencer %1 for bruger %2 ." - -#. ($pane) -#: html/Prefs/MyRT.html:141 -msgid "Preferences saved for %1." -msgstr "Præferencer gemt for %1." - -#: NOT FOUND IN SOURCE -msgid "Prefs" -msgstr "Præferencer" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "Forbered tømning" - -#: html/Helpers/CalPopup.html:56 -#: html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Forr." - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "Forrige side" - -#: NOT FOUND IN SOURCE -msgid "Previous page" -msgstr "Forrige side" - -#: NOT FOUND IN SOURCE -msgid "Pri" -msgstr "Pri" - -#. ($args{'PrincipalId'}) -#: lib/RT/ACE_Overlay.pm:157 -#: lib/RT/ACE_Overlay.pm:239 -#: lib/RT/ACE_Overlay.pm:569 -msgid "Principal %1 not found." -msgstr "Principal %1 ikke fundet." - -#: html/Search/Elements/PickBasics:147 -#: html/Ticket/Create.html:181 -#: html/Ticket/Elements/EditBasics:92 -#: html/Ticket/Elements/ShowBasics:72 -#: lib/RT/Tickets_Overlay.pm:1790 -msgid "Priority" -msgstr "Prioritet" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "Prioritet starter ved" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Privat:" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Privilegeret" - -#. (loc_fuzzy($msg)) -#: html/Admin/Users/Modify.html:342 -#: html/User/Prefs.html:231 -msgid "Privileged status: %1" -msgstr "Privilegeret status: %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Privilegerede brugere" - -#: NOT FOUND IN SOURCE -msgid "Product area" -msgstr "ProduktomrÃ¥de" - -#: etc/initialdata:23 -#: etc/initialdata:29 -#: etc/initialdata:35 -#: etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Pseudogruppe til internt brug" - -#: NOT FOUND IN SOURCE -msgid "Query" -msgstr "Søgning" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Søgedefinition" - -#: html/Search/Elements/Chart:101 -msgid "Query:" -msgstr "Søgning:" - -#: html/Elements/QueueSummary:48 -#: html/Elements/QuickCreate:54 -#: html/Search/Elements/PickBasics:71 -#: html/SelfService/Create.html:54 -#: html/Ticket/Create.html:62 -#: html/Ticket/Elements/EditBasics:57 -#: html/Ticket/Elements/ShowBasics:76 -#: html/Tools/Reports/CreatedByDates.html:85 -#: html/Tools/Reports/ResolvedByDates.html:86 -#: html/Tools/Reports/ResolvedByOwner.html:66 -#: html/User/Elements/DelegateRights:101 -#: lib/RT/Tickets_Overlay.pm:1617 -msgid "Queue" -msgstr "Kø" - -#. ($id) -#. ($Queue) -#: html/Admin/Queues/CustomField.html:63 -#: html/Admin/Queues/Scrip.html:61 -#: html/Admin/Queues/Scrips.html:69 -#: html/Admin/Queues/Templates.html:65 -msgid "Queue %1 not found" -msgstr "Kø %1 ikke fundet" - -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "Kø '%1' ikke fundet\\n" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Navn pÃ¥ kø" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "Kø-scrips" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "Kø eksisterer allerede" - -#: lib/RT/Queue_Overlay.pm:374 -#: lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "Kø kunne ikke oprettes" - -#: html/Ticket/Create.html:244 -#: lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "Kø kunne ikke indlæses." - -#: docs/design_docs/string-extraction-guide.txt:83 -#: lib/RT/Queue_Overlay.pm:384 -#: lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Kø oprettet" - -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "Kø ikke angivet." - -#: html/SelfService/Display.html:126 -#: lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Kø ikke fundet" - -#: html/Admin/Elements/Tabs:59 -#: html/Admin/index.html:72 -msgid "Queues" -msgstr "Køer" - -#: html/Elements/MyAdminQueues:46 -msgid "Queues I administer" -msgstr "Køer som jeg administrerer" - -#: html/Elements/MySupportQueues:46 -msgid "Queues I'm an AdminCc for" -msgstr "Køer: Jeg er en AdminCc for" - -#: html/Elements/Quicksearch:47 -#: html/Prefs/Elements/Tabs:58 -#: html/Prefs/Quicksearch.html:70 -msgid "Quick search" -msgstr "Hurtigsøgning" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Hurtigoprettelse af sager" - -#: html/Search/Results.html:81 -msgid "RSS" -msgstr "RSS" - -#: NOT FOUND IN SOURCE -msgid "RT %1" -msgstr "RT %1" - -#. ($RT::VERSION, $RT::rtname) -#: docs/design_docs/string-extraction-guide.txt:70 -#: lib/RT/StyleGuide.pod:796 -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" - -#: html/Admin/index.html:46 -#: html/Admin/index.html:47 -msgid "RT Administration" -msgstr "RT-administration" - -#: NOT FOUND IN SOURCE -msgid "RT Authentication error." -msgstr "RT-godkendelsesfejl." - -#: NOT FOUND IN SOURCE -msgid "RT Bounce: %1" -msgstr "RT-afvisning: %1" - -#: NOT FOUND IN SOURCE -msgid "RT Configuration error" -msgstr "RT-konfigurationsfejl" - -#: NOT FOUND IN SOURCE -msgid "RT Critical error. Message not recorded!" -msgstr "RT kritisk fejl. Meddelelse ikke gemt!" - -#: html/Elements/Error:63 -#: html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "RT-fejl" - -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." -msgstr "RT modtog e-mail (%1) fra sig selv" - -#: NOT FOUND IN SOURCE -msgid "RT Self Service / Closed Tickets" -msgstr "RT selvbetjening / lukkede sager" - -#: html/Admin/Tools/Configuration.html:73 -msgid "RT Variables" -msgstr "RT variable faktorer" - -#: html/Admin/Elements/SystemTabs:71 -#: html/Admin/Elements/UserTabs:67 -#: html/Admin/Global/MyRT.html:1 -#: html/Admin/Global/MyRT.html:12 -#: html/Admin/Global/MyRT.html:4 -#: html/Admin/Global/index.html:84 -#: html/Admin/Users/MyRT.html:21 -#: html/Prefs/MyRT.html:66 -#: html/Prefs/MyRT.html:78 -#: html/User/Elements/Tabs:65 -#: html/index.html:1 -#: html/index.html:75 -msgid "RT at a glance" -msgstr "Request Tracker - hurtigt overblik" - -#. ($UserObj->Name) -#: html/Admin/Users/MyRT.html:30 -msgid "RT at a glance for the user %1" -msgstr "Request Tracker - hurtigt overblik for bruger %1" - -#: html/Admin/CustomFields/Modify.html:117 -msgid "RT can include content from another web service when showing this custom field." -msgstr "RT kan medtage indhold fra en anden web-service, nÃ¥r dette ekstrafelt vises." - -#: html/Admin/CustomFields/Modify.html:106 -msgid "RT can make this custom field's values into hyperlinks to another service." -msgstr "RT kan gøre dette ekstrafelts værdier til hyperlinks til en anden tjeneste." - -#: NOT FOUND IN SOURCE -msgid "RT couldn't authenticate you" -msgstr "RT kunne ikke godkende dig" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find requestor via its external database lookup" -msgstr "RT kunne ikke finde rekvirent via sit eksterne databaseopslag" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find the queue: %1" -msgstr "RT kunne ikke finde køen: %1" - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "RT kunne ikke gemme din session." - -#: NOT FOUND IN SOURCE -msgid "RT couldn't validate this PGP signature. \\n" -msgstr "RT kunne ikke validere denne PGP-signatur. \\n" - -#. ($RT::rtname) -#: html/Elements/Logo:49 -#: html/Elements/PageLayout:172 -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>. Bliver distribueret under Version 2 af 'GNU General Public License'." - -#: NOT FOUND IN SOURCE -msgid "RT thinks this message may be a bounce" -msgstr "RT tror, at denne besked er en afvisning" - -#: html/Search/Simple.html:60 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "RT vil kigge efter alt andet, som du indtaster i sagsemnerne." - -#: NOT FOUND IN SOURCE -msgid "RT will process this message as if it were unsigned.\\n" -msgstr "RT vil behandle denne besked, som om den ikke var underskrevet.\\n" - -#: html/Admin/CustomFields/Modify.html:108 -#: html/Admin/CustomFields/Modify.html:119 -msgid "RT will replace __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "RT vil erstatte __ID__ og __EkstraFelt__ med henholdsvis sagsnummer og ekstrafeltværdi" - -#: NOT FOUND IN SOURCE -msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." -msgstr "RT's e-mail-kommandotilstand kræver PGP-verificering. Enten har du ikke underskrevet din besked, eller ogsÃ¥ kunne din signatur ikke verificeres." - -#: html/Admin/Users/Modify.html:79 -#: html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Fulde navn" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "FuldeNavn" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:725 -msgid "Reference by %1 added" -msgstr "Reference fra %1 tilføjet" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:765 -msgid "Reference by %1 deleted" -msgstr "Reference fra %1 slettet" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:722 -msgid "Reference to %1 added" -msgstr "Reference til %1 tilføjet" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:762 -msgid "Reference to %1 deleted" -msgstr "Reference til %1 slettet" - -#: html/Elements/EditLinks:103 -#: html/Elements/EditLinks:156 -#: html/Elements/ShowLinks:92 -#: html/Ticket/Create.html:225 -#: html/Ticket/Elements/BulkLinks:72 -msgid "Referred to by" -msgstr "Refereret til af" - -#: html/Elements/EditLinks:152 -#: html/Elements/EditLinks:94 -#: html/Elements/SelectLinkType:49 -#: html/Elements/ShowLinks:82 -#: html/Ticket/Create.html:224 -#: html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "Refererer til" - -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "Præciser" - -#: NOT FOUND IN SOURCE -msgid "Refine search" -msgstr "Præciser søgning" - -#. ($value/60) -#: html/Elements/Refresh:57 -msgid "Refresh this page every %1 minutes." -msgstr "Opdater denne side hver %1 minut." - -#. ($ticket->Subject) -#: lib/RT/Transaction_Overlay.pm:811 -msgid "Reminder '%1' added" -msgstr "PÃ¥mindelse '%1' tilføjet" - -#. ($ticket->Subject) -#: lib/RT/Transaction_Overlay.pm:824 -msgid "Reminder '%1' completed" -msgstr "PÃ¥mindelse '%1' afsluttet" - -#. ($ticket->Subject) -#: lib/RT/Transaction_Overlay.pm:817 -msgid "Reminder '%1' reopened" -msgstr "PÃ¥mindelse '%1' genÃ¥bnet" - -#. ($Ticket->Id) -#: html/Ticket/Reminders.html:46 -msgid "Reminder ticket #%1" -msgstr "PÃ¥mindelse for sag #%1" - -#: html/Elements/MyReminders:48 -#: html/Ticket/Elements/ShowSummary:75 -#: html/Ticket/Elements/Tabs:122 -#: html/Ticket/Reminders.html:52 -msgid "Reminders" -msgstr "PÃ¥mindelser" - -#. ($Ticket->Id) -#: html/Ticket/Reminders.html:50 -msgid "Reminders for ticket #%1" -msgstr "PÃ¥mindelser for sag #%1" - -#: 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 rekvirent" - -#: html/Ticket/Elements/ShowTransaction:179 -#: html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Svar" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Svaradresse" - -#: html/Search/Bulk.html:129 -#: html/Ticket/ModifyAll.html:94 -#: html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Svar til rekvirenter" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Svar pÃ¥ sager" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "SvarPÃ¥Sag" - -#: html/Tools/Elements/Tabs:59 -#: html/Tools/Reports/index.html:46 -#: html/Tools/Reports/index.html:47 -msgid "Reports" -msgstr "Rapporter" - -#: etc/initialdata:44 -#: lib/RT/ACE_Overlay.pm:111 -msgid "Requestor" -msgstr "Rekvirent" - -#: NOT FOUND IN SOURCE -msgid "Requestor email address" -msgstr "Rekvirent e-mail-adresse" - -#: NOT FOUND IN SOURCE -msgid "Requestor(s)" -msgstr "Rekvirent(er)" - -#: html/SelfService/Create.html:63 -#: html/Ticket/Create.html:80 -#: html/Ticket/Elements/EditPeople:69 -#: html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Rekvirenter" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "Sager skulle være forfaldne om" - -#. ('Object') -#: lib/RT/Attribute_Overlay.pm:146 -msgid "Required parameter '%1' not specified" -msgstr "PÃ¥krævet parameter '%1' ikke angivet" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Nulstil" - -#: html/Admin/Users/MyRT.html:15 -#: html/Prefs/MyRT.html:60 -msgid "Reset to default" -msgstr "Sæt tilbage til standard" - -#: html/Admin/Users/Modify.html:183 -#: html/User/Prefs.html:84 -msgid "Residence" -msgstr "Hjemme" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Løs" - -#. ($TicketObj->id, $TicketObj->Subject) -#: html/Ticket/Update.html:156 -msgid "Resolve ticket #%1 (%2)" -msgstr "Løs sag #%1 (%2)" - -#: etc/initialdata:323 -#: html/Elements/SelectDateType:49 -#: lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Løst" - -#: html/Tools/Reports/Elements/Tabs:55 -msgid "Resolved by owner" -msgstr "Løst af ejer" - -#: html/Tools/Reports/Elements/Tabs:59 -msgid "Resolved in date range" -msgstr "Løst i datorækkefølge" - -#: html/Tools/Reports/ResolvedByDates.html:52 -msgid "Resolved tickets in period, grouped by owner" -msgstr "Sager løst i en periode, fordelt pr. ejer" - -#: html/Tools/Reports/ResolvedByOwner.html:50 -msgid "Resolved tickets, grouped by owner" -msgstr "Sager løst, fordelt pr. ejer" - -#: NOT FOUND IN SOURCE -msgid "Response to requestors" -msgstr "Svar til rekvirenter" - -#: html/Elements/ListActions:46 -#: html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Resultater" - -#: NOT FOUND IN SOURCE -msgid "Results per page" -msgstr "Resultater pr. side" - -#: html/Admin/Users/Modify.html:126 -#: html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Gentag adgangskoden" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "GÃ¥ tilbage" - -#: NOT FOUND IN SOURCE -msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" -msgstr "Rettighed %1 ikke fundet for %2 %3 i omrÃ¥de %4 (%5)\\n" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Rettighed overdraget" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Rettighed tildelt" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Rettighed indlæst" - -#: lib/RT/ACE_Overlay.pm:695 -#: lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Rettighed kunne ikke inddrages" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Rettighed ikke fundet" - -#: lib/RT/ACE_Overlay.pm:560 -#: lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Rettighed ikke indlæst." - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Rettighed inddraget" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Rettigheder" - -#. ($object_type) -#: html/Admin/CustomFields/GroupRights.html:129 -#: lib/RT/Interface/Web.pm:961 -msgid "Rights could not be granted for %1" -msgstr "Rettigheder kunne ikke tildeles %1" - -#. ($object_type) -#: html/Admin/CustomFields/GroupRights.html:156 -#: lib/RT/Interface/Web.pm:990 -msgid "Rights could not be revoked for %1" -msgstr "Rettigheder kunne ikke inddrages for %1" - -#: html/Admin/Global/GroupRights.html:72 -#: html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Roller" - -#: NOT FOUND IN SOURCE -msgid "RootApproval" -msgstr "RodGodkendelse" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "Rækker pr. boks" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Rækker pr. side" - -#: 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/Search/Elements/EditSearches:70 -#: html/Widgets/SelectionBox:211 -msgid "Save" -msgstr "Gem" - -#: html/Admin/Global/Template.html:67 -#: html/Admin/Groups/Modify.html:88 -#: html/Admin/Queues/Modify.html:111 -#: html/Admin/Queues/People.html:126 -#: html/Admin/Users/Modify.html:239 -#: html/Prefs/Quicksearch.html:64 -#: html/Prefs/SearchOptions.html:63 -#: html/SelfService/Prefs.html:58 -#: html/Ticket/Modify.html:60 -#: html/Ticket/ModifyAll.html:127 -#: html/Ticket/ModifyDates.html:60 -#: html/Ticket/ModifyLinks.html:61 -#: html/Ticket/ModifyPeople.html:60 -#: html/User/Groups/Modify.html:77 -msgid "Save Changes" -msgstr "Gem ændringer" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Gem præferencer" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Gem ændringer" - -#. ($name) -#: lib/RT/SavedSearch.pm:173 -msgid "Saved search %1" -msgstr "Gemt søgning %1" - -#: NOT FOUND IN SOURCE -msgid "Saved searches" -msgstr "Gemte søgninger" - -#. ($id) -#. ($scrip->Id) -#: html/Admin/Elements/ListGlobalScrips:60 -#: html/Admin/Global/Scrip.html:77 -#: html/Admin/Queues/Scrip.html:84 -msgid "Scrip #%1" -msgstr "Scrip #%1" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Scrip oprettet" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Scrip-felter" - -#: 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 "Scrips" - -#: 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 "Scrips der gælder for alle køer" - -#: html/Elements/SimpleSearch:48 -#: html/Search/Simple.html:65 -msgid "Search" -msgstr "Søg" - -#: NOT FOUND IN SOURCE -msgid "Search Criteria" -msgstr "Søgekriterier" - -#: html/Prefs/SearchOptions.html:47 -#: html/Prefs/SearchOptions.html:50 -msgid "Search Preferences" -msgstr "Søgepræferencer" - -#: lib/RT/SavedSearch.pm:115 -msgid "Search attribute load failure" -msgstr "Indlæsningsfejl pÃ¥ søgeegenskab" - -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Søg efter godkendelser" - -#: html/Search/Simple.html:69 -msgid "Search for tickets" -msgstr "Søg efter sager" - -#: html/Search/Simple.html:57 -msgid "Search for tickets. Enter id numbers, queues by name" -msgstr "Søg efter sager. Indtast ID-numre, køer inddelt efter navn." - -#: html/User/Elements/Tabs:62 -msgid "Search options" -msgstr "Søgemuligheder" - -#. ($PrimaryGroupBy) -#: html/Search/Chart.html:56 -msgid "Search results grouped by %1" -msgstr "Søgeresultater fordelt pr. %1" - -#. ($msg) -#: lib/RT/SavedSearch.pm:203 -msgid "Search update: %1" -msgstr "Søgeopdatering: %1" - -#: html/Search/Simple.html:59 -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 "Det kan tage lang tid at søge pÃ¥ den fulde tekst i hver sag, men hvis det er nødvendigt at gøre det, kan du søge efter hvilket som helst ord i den komplette sagshistorik ved at taste fulltext:ord." - -#: bin/rt-crontool:265 -msgid "Security:" -msgstr "Sikkerhed:" - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "Se ogsÃ¥:" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Se ekstrafelter" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "See exact outgoing email messages and their recipeients" -msgstr "Se udgÃ¥ende e-mail-beskeder og deres modtagere" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket private commentary" -msgstr "Se private kommentarer for sager" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "See ticket summaries" -msgstr "Se resumé af sager" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "SeEkstrafelt" - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "SeGruppe" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "SeeQueue" -msgstr "SeKø" - -#: NOT FOUND IN SOURCE -msgid "Select" -msgstr "Vælg" - -#: html/Admin/CustomFields/index.html:46 -#: html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Vælg et ekstrafelt" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Vælg en gruppe" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Vælg en kø" - -#: html/SelfService/CreateTicketInQueue.html:48 -msgid "Select a queue for your new ticket" -msgstr "Vælg en kø til din nye sag" - -#: html/Admin/Users/index.html:46 -#: html/Admin/Users/index.html:49 -#: html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Vælg en bruger" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Vælg ekstrafelt" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Vælg ekstrafelter for alle brugergrupper" - -#: html/Admin/Global/CustomFields/index.html:65 -msgid "Select custom fields for all users" -msgstr "Vælg ekstrafelter for alle brugere" - -#: html/Admin/Global/CustomFields/index.html:76 -msgid "Select custom fields for tickets in all queues" -msgstr "Vælg ekstrafelter for sager i alle køer" - -#: html/Admin/Global/CustomFields/index.html:83 -msgid "Select custom fields for transactions on tickets in all queues" -msgstr "Vælg ekstrafelter for transaktioner pÃ¥ sager i alle køer" - -#: html/Admin/Elements/GroupTabs:75 -#: html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Vælg gruppe" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Vælg flere værdier" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Vælg en værdi" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Vælg kø" - -#: html/Prefs/Quicksearch.html:53 -msgid "Select queues to be displayed on the \"RT at a glance\" page" -msgstr "Vælg køer, der skal vises pÃ¥ siden \"Request Tracker - hurtigt overblik\"" - -#: html/Admin/Global/Scrip.html:59 -#: html/Admin/Global/Scrips.html:57 -#: html/Admin/Queues/Scrip.html:67 -#: html/Admin/Queues/Scrips.html:73 -msgid "Select scrip" -msgstr "Vælg scrip" - -#: html/Admin/Global/Template.html:78 -#: html/Admin/Global/Templates.html:57 -#: html/Admin/Queues/Template.html:76 -#: html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Vælg skabelon" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Vælg op til %1 værdier" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Vælg bruger" - -#: NOT FOUND IN SOURCE -msgid "SelectMultiple" -msgstr "VælgFlere" - -#: NOT FOUND IN SOURCE -msgid "SelectSingle" -msgstr "VælgEnkelt" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Valgte ekstrafelter" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "Valgte objekter" - -#: html/Widgets/SelectionBox:209 -msgid "Selections modified. Please save your changes" -msgstr "Det udvalgte er ændret. Gem dine ændringer." - -#: NOT FOUND IN SOURCE -msgid "Self Service" -msgstr "Selvbetjening" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Send e-mail til alle observatører" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Send e-mail til alle observatører som en \"kommentar\"" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Send e-mail til rekvirenter og Cc'ere" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Send e-mail til rekvirent og Cc'ere som en kommentar" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Sender en besked til rekvirenterne" - -#: etc/initialdata:125 -#: etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Sender e-mail til synligt angivne Cc'ere og Bcc'ere" - -#: etc/initialdata:94 -#: etc/upgrade/3.1.17/content:7 -msgid "Sends mail to the Ccs" -msgstr "Sender e-mail til Cc'erne" - -#: etc/initialdata:90 -#: etc/upgrade/3.1.17/content:3 -msgid "Sends mail to the Ccs as a comment" -msgstr "Sender e-mail to Cc'ere som en kommentar" - -#: etc/initialdata:102 -msgid "Sends mail to the administrative Ccs" -msgstr "Sender e-mail til de administrative Cc'ere" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Sender e-mail til de administrative Cc'ere som en kommentar" - -#: etc/initialdata:82 -#: etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Sender e-mail til ejeren" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Sep." - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Vis" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Vis godkendelser" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Vis kolonner" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Vis resultater" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Vis godkendte sager" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Vis stamdata" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Vis afviste sager" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Vis detaljer" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Vis afventende sager" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Vis sager, som afventer andre godkendelser" - -#: NOT FOUND IN SOURCE -msgid "Show ticket private commentary" -msgstr "Vis private kommentarer for sager" - -#: NOT FOUND IN SOURCE -msgid "Show ticket summaries" -msgstr "Vis resumé for sager" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "ShowACL" -msgstr "VisACL" - -#: lib/RT/System.pm:85 -msgid "ShowConfigTab" -msgstr "VisKonfigTab" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "ShowOutgoingEmail" -msgstr "VisUdgÃ¥endeEmail" - -#: lib/RT/Group_Overlay.pm:168 -msgid "ShowSavedSearches" -msgstr "VisGemteSøgninger" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "ShowScrips" -msgstr "VisScrips" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "ShowTemplate" -msgstr "VisSkabelon" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowTicket" -msgstr "VisSag" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicketComments" -msgstr "VisSagKommentarer" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "Tilmeld som sagsrekvirent, sag eller kø-Cc" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Tilmeld som sag eller kø-AdminCc" - -#: html/Admin/Users/Modify.html:230 -#: html/User/Prefs.html:168 -msgid "Signature" -msgstr "Signatur" - -#: NOT FOUND IN SOURCE -msgid "Signed in as %1" -msgstr "Logget ind som %1" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "Enkel søgning" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Enkelt" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "Størrelse" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Spring menu over" - -#: html/Search/Elements/EditFormat:78 -msgid "Small" -msgstr "Lille" - -#: html/Admin/CustomFields/Modify.html:120 -msgid "Some browsers may only load content from the same domain as your RT server." -msgstr "Nogle browsere indlæser kun indhold fra det samme domæne som din RT-server." - -#: html/Admin/Elements/AddCustomFieldValue:49 -#: html/Admin/Elements/EditCustomFieldValues:54 -msgid "Sort" -msgstr "Sorter" - -#: NOT FOUND IN SOURCE -msgid "Sort key" -msgstr "Sorteringsnøgle" - -#: NOT FOUND IN SOURCE -msgid "Sort results by" -msgstr "Sorter resultat efter" - -#: NOT FOUND IN SOURCE -msgid "SortOrder" -msgstr "SorteringsRækkefølge" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "Trin" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "Sat i bero" - -#: 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 fortolkes" - -#: 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 den" - -#: NOT FOUND IN SOURCE -msgid "Starts date '%1' could not be parsed" -msgstr "Startdato '%1' kunne ikke fortolkes" - -#: html/Admin/Users/Modify.html:162 -#: html/User/Prefs.html:145 -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 "Statusændring" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Status ændret fra %1 til %2" - -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "StatusÆndring" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Stjæl" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Stjæl sager" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "StjælSag" - -#. ($Old->Name) -#: lib/RT/Transaction_Overlay.pm:678 -msgid "Stolen from %1" -msgstr "StjÃ¥let fra %1" - -#: html/Search/Elements/EditFormat:81 -msgid "Style" -msgstr "Stil" - -#: html/Elements/QuickCreate:52 -#: html/Elements/SelectAttachmentField:47 -#: html/Search/Bulk.html:132 -#: html/SelfService/Create.html:79 -#: html/SelfService/Update.html:65 -#: html/Ticket/Create.html:108 -#: html/Ticket/Elements/EditBasics:48 -#: html/Ticket/Elements/Reminders:125 -#: html/Ticket/ModifyAll.html:100 -#: html/Ticket/Update.html:82 -#: lib/RT/Ticket_Overlay.pm:1162 -#: lib/RT/Tickets_Overlay.pm:1733 -msgid "Subject" -msgstr "Emne" - -#. ($self->Data) -#: docs/design_docs/string-extraction-guide.txt:89 -#: lib/RT/StyleGuide.pod:815 -#: lib/RT/Transaction_Overlay.pm:700 -msgid "Subject changed to %1" -msgstr "Emne ændret til %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Indsend" - -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "Godkend arbejdsgang" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Lykkedes" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Søn." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "Superbruger" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "System" - -#: html/Admin/Elements/ToolTabs:54 -#: html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Systemkonfiguration" - -#: html/Admin/CustomFields/GroupRights.html:128 -#: html/Admin/CustomFields/GroupRights.html:155 -#: html/Admin/CustomFields/UserRights.html:128 -#: html/Admin/CustomFields/UserRights.html:98 -#: html/Admin/Elements/SelectRights:106 -#: lib/RT/ACE_Overlay.pm:584 -#: lib/RT/Interface/Web.pm:960 -#: lib/RT/Interface/Web.pm:989 -msgid "System Error" -msgstr "Systemfejl" - -#. ($msg) -#: lib/RT/Transaction_Overlay.pm:224 -#: lib/RT/Transaction_Overlay.pm:230 -msgid "System Error: %1" -msgstr "Systemfejl: %1" - -#: html/Admin/Tools/index.html:47 -msgid "System Tools" -msgstr "Systemværktøjer" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Systemfejl. Rettighed ikke overdraget." - -#: lib/RT/ACE_Overlay.pm:163 -#: lib/RT/ACE_Overlay.pm:228 -#: lib/RT/ACE_Overlay.pm:323 -#: lib/RT/ACE_Overlay.pm:920 -msgid "System error. Right not granted." -msgstr "Systemfejl. Rettighed ikke tildelt." - -#: html/Admin/CustomFields/GroupRights.html:58 -#: html/Admin/Global/GroupRights.html:56 -#: html/Admin/Groups/GroupRights.html:58 -#: html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Systemgrupper" - -#: etc/initialdata:41 -#: etc/initialdata:47 -#: etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "SystemRolleGruppe til internt brug" - -#: 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 "Tag" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Take tickets" -msgstr "Tag sager" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "TagSag" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Taget" - -#: html/Admin/Elements/EditScrip:71 -#: html/Tools/Offline.html:78 -msgid "Template" -msgstr "Skabelon" - -#. ($TemplateObj->Id()) -#: html/Admin/Global/Template.html:112 -#: html/Admin/Queues/Template.html:113 -msgid "Template #%1" -msgstr "Skabelon #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Skabelon slettet" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "Skabelonen er en obligatorisk parameter" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Skabelon ikke fundet" - -#: NOT FOUND IN SOURCE -msgid "Template not found\\n" -msgstr "Skabelon ikke fundet\\n" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Skabelon fortolket" - -#: lib/RT/Template_Overlay.pm:391 -msgid "Template parsing error" -msgstr "Skabelonfortolkningsfejl" - -#: html/Admin/Elements/QueueTabs:70 -#: html/Admin/Elements/SystemTabs:57 -#: html/Admin/Global/index.html:66 -msgid "Templates" -msgstr "Skabeloner" - -#: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "Skabeloner til %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Text" -msgstr "Tekst" - -#: lib/RT/CustomField_Overlay.pm:943 -#: lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Det er allerede den nuværende værdi" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "Det er ikke værdi for dette ekstrafelt" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Det er den samme værdi" - -#: lib/RT/ACE_Overlay.pm:305 -#: lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "Den principal har allerede den rettighed" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:753 -msgid "That principal is already a %1 for this queue" -msgstr "Den principal er allerede en %1 for denne kø" - -#. ($self->loc($args{'Type'})) -#: lib/RT/Ticket_Overlay.pm:1435 -msgid "That principal is already a %1 for this ticket" -msgstr "Den principal er allerede en %1 for denne sag" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:852 -msgid "That principal is not a %1 for this queue" -msgstr "Den principal er ikke en %1 for denne kø" - -#: NOT FOUND IN SOURCE -msgid "That principal is not a %1 for this ticket" -msgstr "Den principal er ikke en %1 for denne sag" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Den kø eksisterer ikke" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "Denne sag har uløste afhængigheder" - -#: NOT FOUND IN SOURCE -msgid "That user already has that right" -msgstr "Den bruger har allerede den rettighed" - -#: lib/RT/Action/CreateTickets.pm:710 -#: lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Brugeren ejer allerede den sag" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Brugeren eksisterer ikke" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Brugeren er allerede privilegeret" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Brugeren er allerede uprivilegeret" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Brugeren er nu privilegeret" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Brugeren er nu uprivilegeret" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "Den bruger mÃ¥ ikke eje sager i den kø" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "Dette er ikke et numerisk ID" - -#: html/SelfService/Display.html:53 -#: html/Ticket/Create.html:177 -#: html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Stamdata" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "En sags CC" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The administrative CC of a ticket" -msgstr "En sags administrative CC" - -#: NOT FOUND IN SOURCE -msgid "The comment has been recorded" -msgstr "Kommentaren er gemt" - -#: 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 "Den følgende kommando vil finde alle aktive sager i køen 'generel' og vil sætte deres prioritet til 99, hvis de ikke er blevet rørt i 4 timer:" - -#: NOT FOUND IN SOURCE -msgid "" -"The following commands were not proccessed:\\n" -"\\n" -msgstr "" -"Følgende kommandoer blev ikke behandlet:\\n" -"\\n" - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "Den nye værdi er sat." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "Sagens ejer" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "Sagens rekvirent" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Disse kommentarer er normalt ikke synlige for brugeren" - -#: lib/RT/CustomField_Overlay.pm:978 -msgid "This custom field does not apply to that object" -msgstr "Dette ekstrafelt gælder ikke for dette objekt" - -#: html/Admin/Tools/Configuration.html:50 -msgid "This feature is only available to system administrators" -msgstr "Denne funktion er kun tilgængelig for systemadministratorer" - -#: html/Ticket/Elements/PreviewScrips:96 -msgid "This message will be sent to..." -msgstr "Denne besked vil blive sendt til..." - -#: NOT FOUND IN SOURCE -msgid "This ticket %1 %2 (%3)\\n" -msgstr "Denne sag %1 %2 (%3)\\n" - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Dette værktøj tillader brugeren at benytte vilkÃ¥rlige Perl-moduler inde fra RT." - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Denne transaktion har tilsyneladende ikke noget indhold" - -#. ($rows) -#: html/Ticket/Elements/ShowRequestor:70 -msgid "This user's %1 highest priority tickets" -msgstr "Denne brugers %1 højest prioriterede sager" - -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "Denne bruger 25 højest prioriterede sager" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Tors." - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "Sag # %1 %2" - -#. ($Ticket->Id, $Ticket->Subject) -#: html/Ticket/ModifyAll.html:46 -#: html/Ticket/ModifyAll.html:50 -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Sag #%1 Jumbo-opdatering: %2" - -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#: html/Approvals/Elements/ShowDependency:67 -msgid "Ticket #%1: %2" -msgstr "Sag #%1: %2" - -#. ($T::Tickets{$template_id}->Id) -#. ($T::Tickets{$template_id}->id) -#. ($ticket->Id) -#: lib/RT/Action/CreateTickets.pm:1350 -#: lib/RT/Action/CreateTickets.pm:1359 -#: lib/RT/Action/CreateTickets.pm:605 -#: lib/RT/Action/CreateTickets.pm:729 -#: lib/RT/Action/CreateTickets.pm:741 -msgid "Ticket %1" -msgstr "Sag %1" - -#. ($self->Id, $QueueObj->Name) -#: lib/RT/Ticket_Overlay.pm:755 -#: lib/RT/Ticket_Overlay.pm:775 -msgid "Ticket %1 created in queue '%2'" -msgstr "Sag %1 oprettet i kø '%2'" - -#: NOT FOUND IN SOURCE -msgid "Ticket %1 loaded\\n" -msgstr "Sag %1 indlæst\\n" - -#. ($Ticket->Id, $_) -#: html/Search/Bulk.html:377 -msgid "Ticket %1: %2" -msgstr "Sag %1 : %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Sagens ekstrafelter" - -#. ($Ticket->Id, $Ticket->Subject) -#: html/Ticket/History.html:46 -#: html/Ticket/History.html:49 -msgid "Ticket History # %1 %2" -msgstr "Sagshistorik # %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket Id" -msgstr "Sagsnummer" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Sag løst" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 -#: html/Admin/Global/CustomFields/index.html:81 -#: lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "Sagstransaktioner" - -#: NOT FOUND IN SOURCE -msgid "Ticket attachment" -msgstr "Vedhæftet fil til sag" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Sagsindhold" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Sagsindholdstype" - -#: lib/RT/Ticket_Overlay.pm:603 -#: lib/RT/Ticket_Overlay.pm:617 -#: lib/RT/Ticket_Overlay.pm:628 -#: lib/RT/Ticket_Overlay.pm:763 -msgid "Ticket could not be created due to an internal error" -msgstr "Sag kunne ikke oprettes pÃ¥ grund af en intern fejl" - -#: NOT FOUND IN SOURCE -msgid "Ticket created" -msgstr "Sag oprettet" - -#: NOT FOUND IN SOURCE -msgid "Ticket creation failed" -msgstr "Oprettelse af sag mislykkedes" - -#: NOT FOUND IN SOURCE -msgid "Ticket deleted" -msgstr "Sag slettet" - -#: NOT FOUND IN SOURCE -msgid "Ticket id not found" -msgstr "Sagsnummer ikke fundet" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Sagens metadata" - -#: NOT FOUND IN SOURCE -msgid "Ticket not found" -msgstr "Sag ikke fundet" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Satsstatus ændret" - -#: NOT FOUND IN SOURCE -msgid "Ticket watchers" -msgstr "Sagsobservatører" - -#. (ref $self) -#: lib/RT/Search/FromSQL.pm:82 -msgid "TicketSQL search module" -msgstr "SagSQL søgemodul" - -#: html/Admin/Elements/GlobalCustomFieldTabs:64 -#: html/Admin/Global/CustomFields/index.html:75 -#: html/Elements/Tabs:71 -#: html/Search/Elements/Chart:109 -#: lib/RT/CustomField_Overlay.pm:1206 -msgid "Tickets" -msgstr "Sager" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 %2" -msgstr "Sager %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 by %2" -msgstr "Sager %1 af %2" - -#: html/Tools/Reports/CreatedByDates.html:86 -msgid "Tickets created after" -msgstr "Sager oprettet efter" - -#: html/Tools/Reports/CreatedByDates.html:88 -msgid "Tickets created before" -msgstr "Sager oprettet før" - -#: NOT FOUND IN SOURCE -msgid "Tickets from %1" -msgstr "Sager fra %1" - -#: html/Tools/Reports/ResolvedByDates.html:87 -msgid "Tickets resolved after" -msgstr "Sager løst efter" - -#: html/Tools/Reports/ResolvedByDates.html:89 -msgid "Tickets resolved before" -msgstr "Sager løst før" - -#: html/Approvals/Elements/ShowDependency:48 -msgid "Tickets which depend on this approval:" -msgstr "Sager som afhænger af denne godkendelse:" - -#: html/Search/Elements/PickBasics:134 -#: html/Ticket/Create.html:183 -#: html/Ticket/Elements/EditBasics:72 -msgid "Time Estimated" -msgstr "AnslÃ¥et tid" - -#: html/Search/Elements/PickBasics:135 -#: html/Ticket/Create.html:196 -#: html/Ticket/Elements/EditBasics:85 -msgid "Time Left" -msgstr "Resterende tid" - -#: html/Search/Elements/PickBasics:133 -#: html/Ticket/Create.html:189 -#: html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Tid brugt" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Resterende tid" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Tid for sidevisning" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Tid brugt" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "TidBrugt" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "Titel" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:" -msgstr "For at generere en difference af denne beslutning:" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:\\n" -msgstr "For at generere en difference af denne beslutning:\\n" - -#. ('sales@bestpractical.com') -#: html/Elements/Footer:62 -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "Ved forespørgsel om support, undervisning, specialudvikling eller licenser, kontakt venligst %1." - -#: lib/RT/Ticket_Overlay.pm:1170 -msgid "Told" -msgstr "Meddelt" - -#: html/Admin/Elements/Tabs:68 -#: html/Admin/index.html:88 -#: html/Elements/Tabs:74 -#: html/Tools/index.html:46 -#: html/Tools/index.html:49 -msgid "Tools" -msgstr "Værktøjer" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "Total" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transaktion" - -#. ($self->Data) -#: lib/RT/Transaction_Overlay.pm:805 -msgid "Transaction %1 purged" -msgstr "Transaktion %1 tømt" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Transaktion oprettet" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Transaktions-ekstrafelter" - -#: NOT FOUND IN SOURCE -msgid "Transaction->Create couldn't, as you didn't specify a ticket id" -msgstr "Transaktion->Kunne ikke oprette, fordi du ikke angav et sagsnummer" - -#: lib/RT/Transaction_Overlay.pm:128 -msgid "Transaction->Create couldn't, as you didn't specify an object type and id" -msgstr "Transaktion->Kunne ikke oprette, fordi ikke angav en objekttype og et ID" - -#: lib/RT/Transaction_Overlay.pm:870 -msgid "Transactions are immutable" -msgstr "Transaktioner kan ikke ændres" - -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "Forsøger at slette en rettighed: %1" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Tirs." - -#: html/Admin/CustomFields/Modify.html:66 -#: html/Admin/Elements/EditCustomField:65 -#: html/Ticket/Elements/AddWatchers:54 -#: html/Ticket/Elements/AddWatchers:65 -#: html/Ticket/Elements/AddWatchers:75 -#: lib/RT/Ticket_Overlay.pm:1168 -#: lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Type" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "Ikke implementeret" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Unix log-ind" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "UnixBrugernavn" - -#. ($ContentEncoding) -#. ($self->ContentEncoding) -#: lib/RT/Attachment_Overlay.pm:289 -#: lib/RT/Record.pm:861 -msgid "Unknown ContentEncoding %1" -msgstr "Ukendt IndholdsKodning %1" - -#: html/Search/Build.html:455 -#: lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "Ukendt felt: $key" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Ubegrænset" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Unavngiven søgning" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Uprivilegeret" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Ikke-valgte ekstrafelter" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "Ikke-valgte objekter" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "Ikke taget" - -#: html/Admin/Elements/EditScrip:128 -#: html/Elements/RT__Ticket/ColumnMap:302 -#: html/Search/Bulk.html:193 -#: html/Search/Bulk.html:75 -msgid "Update" -msgstr "Opdater" - -#: NOT FOUND IN SOURCE -msgid "Update All" -msgstr "Opdater alle" - -#: NOT FOUND IN SOURCE -msgid "Update ID" -msgstr "Opdater ID" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Opdater sag" - -#: html/Search/Bulk.html:126 -#: html/Ticket/ModifyAll.html:87 -#: html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Opdater type" - -#: NOT FOUND IN SOURCE -msgid "Update all these tickets at once" -msgstr "Opdater alle disse sager pÃ¥ en gang" - -#: NOT FOUND IN SOURCE -msgid "Update email" -msgstr "Opdater e-mail" - -#: html/Search/Bulk.html:200 -#: html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Opdater flere sager" - -#: NOT FOUND IN SOURCE -msgid "Update name" -msgstr "Opdater navn" - -#: lib/RT/Action/CreateTickets.pm:750 -#: lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Opdatering ikke registreret." - -#: NOT FOUND IN SOURCE -msgid "Update selected tickets" -msgstr "Opdater valgte sager" - -#: NOT FOUND IN SOURCE -msgid "Update signature" -msgstr "Opdater signatur" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Opdater sag" - -#: NOT FOUND IN SOURCE -msgid "Update ticket # %1" -msgstr "Opdater sag # %1" - -#. ($Ticket->id) -#: html/SelfService/Update.html:112 -#: html/SelfService/Update.html:47 -msgid "Update ticket #%1" -msgstr "Opdater sag #%1" - -#. ($TicketObj->id, $TicketObj->Subject) -#: html/Ticket/Update.html:158 -msgid "Update ticket #%1 (%2)" -msgstr "Opdater sag #%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 -#: lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr "Opdateringstype var hverken korrespondance eller kommentar" - -#: html/Elements/SelectDateType:54 -#: html/Ticket/Elements/ShowDates:72 -#: lib/RT/CustomField_Overlay.pm:1284 -#: lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Opdateret" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Overfør" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Overfør flere filer" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Overfør flere billeder" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Overfør en fil" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Overfør et billede" - -#: lib/RT/CustomField_Overlay.pm:86 -msgid "Upload up to %1 files" -msgstr "Overfør op til %1 filer" - -#: lib/RT/CustomField_Overlay.pm:81 -msgid "Upload up to %1 images" -msgstr "Overfør op til %1 billeder" - -#: html/Tools/Offline.html:93 -msgid "Upload your changes" -msgstr "Overfør dine ændringer" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "Brug andre RT-administrative værktøjer" - -#: NOT FOUND IN SOURCE -msgid "User %1 %2: %3\\n" -msgstr "Bruger %1 %2: %3\\n" - -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" -msgstr "Bruger %1 adgangskode: %2\\n" - -#. ($args{'Owner'}) -#: lib/RT/Ticket_Overlay.pm:506 -msgid "User '%1' could not be found." -msgstr "Bruger '%1' kunne ikke findes" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found" -msgstr "Bruger '%1' ikke fundet" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" -msgstr "Bruger '%1' ikke fundet\\n" - -#: etc/initialdata:132 -#: etc/initialdata:206 -msgid "User Defined" -msgstr "Brugerdefineret" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "Brugerdefinerede betingelser og handlinger" - -#: NOT FOUND IN SOURCE -msgid "User ID" -msgstr "Bruger-ID" - -#: NOT FOUND IN SOURCE -msgid "User Id" -msgstr "Bruger-ID" - -#: html/Admin/Elements/CustomFieldTabs:72 -#: html/Admin/Elements/GroupTabs:68 -#: html/Admin/Elements/QueueTabs:85 -#: html/Admin/Elements/SystemTabs:68 -#: html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Brugerrettigheder" - -#: NOT FOUND IN SOURCE -msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" -msgstr "Bruger bad om en ukendt opdateringstype for ekstrafelt %1 til %1 objekt #%3" - -#. ($msg) -#: html/Admin/Users/Modify.html:301 -msgid "User could not be created: %1" -msgstr "Bruger kunne ikke oprettes: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Bruger oprettet" - -#: html/Admin/CustomFields/GroupRights.html:74 -#: html/Admin/Global/GroupRights.html:88 -#: html/Admin/Groups/GroupRights.html:75 -#: html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Brugerdefinerede grupper" - -#: lib/RT/User_Overlay.pm:592 -#: lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Bruger indlæst" - -#: NOT FOUND IN SOURCE -msgid "User notified" -msgstr "Sendt besked til bruger" - -#: NOT FOUND IN SOURCE -msgid "User view" -msgstr "Brugervisning" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Brugerdefinerede grupper" - -#: html/Admin/Users/Modify.html:69 -#: html/Elements/Login:90 -#: html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Brugernavn" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 -#: html/Admin/Elements/SelectNewGroupMembers:47 -#: html/Admin/Elements/Tabs:53 -#: html/Admin/Global/CustomFields/index.html:64 -#: html/Admin/Groups/Members.html:76 -#: html/Admin/Queues/People.html:89 -#: html/Admin/index.html:62 -#: html/User/Groups/Members.html:79 -#: lib/RT/CustomField_Overlay.pm:1208 -msgid "Users" -msgstr "Brugere" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Brugere som opfylder søgekriterier" - -#. ($transaction->id) -#: bin/rt-crontool:134 -msgid "Using transaction #%1..." -msgstr "Bruger transaktion #%1..." - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Gyldig søgning" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "Validering" - -#: NOT FOUND IN SOURCE -msgid "ValueOfQueue" -msgstr "KøVærdi" - -#: html/Admin/CustomFields/Modify.html:130 -#: html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Værdier" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "Observer" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "ObserverSomAdminCC" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Observatører" - -#: NOT FOUND IN SOURCE -msgid "WebEncoding" -msgstr "WebKodning" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Ons." - -#: html/Tools/MyDay.html:75 -msgid "What I did today" -msgstr "Hvad lavede jeg i dag" - -#: etc/initialdata:521 -msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" -msgstr "NÃ¥r en sag er blevet godkendt af alle godkendere, tilføj korrespondance til den oprindelige sag" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "NÃ¥r en sag er blevet godkendt af hvilken som helst godkender, tilføj korrespondance til den oprindelige sag" - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "NÃ¥r en sag oprettes" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "NÃ¥r en godkendelsessag oprettes, giv besked til ejeren og AdminCc om det punkt, der afventer deres godkendelse" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "NÃ¥r der sker noget som helst" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "NÃ¥r en sag er blevet løst" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "NÃ¥r en sags ejer ændres" - -#: etc/initialdata:178 -#: etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "NÃ¥r en sags prioritet ændres" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "NÃ¥r en sags kø ændres" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "NÃ¥r en sags status ændres" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "NÃ¥r en brugerdefineret betingelse forekommer" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "NÃ¥r kommentarer kommer ind" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "NÃ¥r korrespondance kommer ind" - -#: html/Admin/Users/Modify.html:188 -#: html/User/Prefs.html:88 -msgid "Work" -msgstr "Arbejde" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "Arbejde off-line" - -#: NOT FOUND IN SOURCE -msgid "WorkPhone" -msgstr "Arbejdstelefon" - -#: html/Ticket/Elements/ShowBasics:63 -#: html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Arbejdet" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Du ejer allerede denne sag" - -#: html/autohandler:214 -#: html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Du er ikke en autoriseret bruger" - -#: html/Prefs/Search.html:56 -msgid "You can also edit the predefined search itself" -msgstr "Du kan ogsÃ¥ redigere selve den foruddefinerede søgning" - -#: lib/RT/Ticket_Overlay.pm:3025 -msgid "You can only reassign tickets that you own or that are unowned" -msgstr "Du kan kun videretildele sager, som du ejer, eller som ikke har en ejer" - -#: lib/RT/Ticket_Overlay.pm:3021 -msgid "You can only take tickets that are unowned" -msgstr "Du kan kun tage sager uden ejer" - -#: NOT FOUND IN SOURCE -msgid "You don't have permission to view that ticket.\\n" -msgstr "Du har ikke tilladelse til at se den sag.\\n" - -#. ($num, $queue) -#: docs/design_docs/string-extraction-guide.txt:47 -#: lib/RT/StyleGuide.pod:780 -msgid "You found %1 tickets in queue %2" -msgstr "Du fandt %1 sager i kø %2" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Du er blevet logget ud af RT." - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "Du har ikke tilladelse til at oprette sager i den kø." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "Du mÃ¥ ikke oprette sager i den kø." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Du er velkommen til at logge ind igen" - -#: NOT FOUND IN SOURCE -msgid "Your %1 requests" -msgstr "Dine %1 sager" - -#: NOT FOUND IN SOURCE -msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" -msgstr "Din RT-administrator har ikke konfigureret de mail-alias'er, der starter RT, korrekt" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Din sag er blevet godkendt af %1. Andre godkendelser afventer muligvis stadigvæk." - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "Din sag er blevet godkendt." - -#: NOT FOUND IN SOURCE -msgid "Your request was rejected" -msgstr "Din sag blev afvist." - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "Din sag blev afvist." - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "Dit brugernavn eller din adgangskode er forkert." - -#: html/Admin/Users/Modify.html:168 -#: html/User/Prefs.html:149 -msgid "Zip" -msgstr "Postnummer" - -#: lib/RT/System.pm:87 -msgid "allow creation of saved searches" -msgstr "tillad oprettelse af gemte søgninger" - -#: lib/RT/System.pm:86 -msgid "allow loading of saved searches" -msgstr "tillad indlæsning af gemte søgninger" - -#. ($right->PrincipalObj->Object->SelfDescription) -#: html/User/Elements/DelegateRights:80 -msgid "as granted to %1" -msgstr "som givet til %1" - -#: NOT FOUND IN SOURCE -msgid "belongs to" -msgstr "tilhører" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "diagram" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "lukket" - -#: html/Elements/SelectCustomFieldOperator:59 -#: html/Elements/SelectMatch:55 -msgid "contains" -msgstr "indeholder" - -#: NOT FOUND IN SOURCE -msgid "content" -msgstr "indhold" - -#: NOT FOUND IN SOURCE -msgid "content-type" -msgstr "indholdstype" - -#: NOT FOUND IN SOURCE -msgid "correspondence (probably) not sent" -msgstr "korrespondance (sandsynligvis) ikke sendt" - -#: NOT FOUND IN SOURCE -msgid "correspondence sent" -msgstr "korrespondance sendt" - -#: NOT FOUND IN SOURCE -msgid "current: $current, want $want, Error near ->$val<- expecting a " -msgstr "aktuel: $current, vil have $want, Fejl nær ->$val<- forventer " - -#: html/Admin/Queues/Modify.html:98 -#: lib/RT/Date.pm:346 -msgid "days" -msgstr "dage" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "slet" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "slettet" - -#: NOT FOUND IN SOURCE -msgid "does not belong to" -msgstr "tilhører ikke" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "stemmer ikke overens" - -#: html/Elements/SelectCustomFieldOperator:59 -#: html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "indeholder ikke" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "lig med" - -#: html/Search/Build.html:547 -msgid "error: can't move down" -msgstr "fejl: kan ikke flytte ned" - -#: html/Search/Build.html:569 -msgid "error: can't move left" -msgstr "fejl: kan ikke flytte til venstre" - -#: html/Search/Build.html:528 -msgid "error: can't move up" -msgstr "fejl: kan ikke flytte op" - -#: html/Search/Build.html:612 -msgid "error: nothing to delete" -msgstr "fejl: intet at slette" - -#: html/Search/Build.html:533 -#: html/Search/Build.html:552 -#: html/Search/Build.html:574 -#: html/Search/Build.html:603 -msgid "error: nothing to move" -msgstr "fejl: intet at flytte" - -#: html/Search/Build.html:630 -msgid "error: nothing to toggle" -msgstr "fejl: intet at skifte" - -#: NOT FOUND IN SOURCE -msgid "filename" -msgstr "filnavn" - -#: html/Elements/SelectCustomFieldOperator:59 -#: html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "større end" - -#. ($self->Name) -#: lib/RT/Group_Overlay.pm:214 -msgid "group '%1'" -msgstr "gruppe '%1'" - -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -#: html/Search/Results.html:88 -msgid "grouped by %1" -msgstr "fordelt pr. %1" - -#: 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 end" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "stemmer overens" - -#: 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 "" -"ændringer\\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 "intet navn" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "ingen værdi" - -#: html/Admin/Elements/EditQueueWatchers:48 -#: html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "ingen" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "ikke lig med" - -#: lib/RT/Queue_Local.pm:2 -msgid "offer" -msgstr "tilbud" - -#: html/SelfService/Elements/MyRequests:82 -#: lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "Ã¥ben" - -#. ($self->Name, $user->Name) -#: lib/RT/Group_Overlay.pm:219 -msgid "personal group '%1' for user '%2'" -msgstr "personlig gruppe '%1' for bruger '%2'" - -#. ($queue->Name, $self->Type) -#: lib/RT/Group_Overlay.pm:227 -msgid "queue %1 %2" -msgstr "kø %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "afvist" - -#: 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 "vis konfigurationsfane" - -#: html/Search/Results.html:80 -msgid "spreadsheet" -msgstr "regneark" - -#: lib/RT/Queue_Overlay.pm:84 -msgid "stalled" -msgstr "sat i bero" - -#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle')) -#: html/Search/Results.html:89 -msgid "style: %1" -msgstr "stil: %1" - -#: html/Prefs/MyRT.html:93 -msgid "summary rows" -msgstr "oversigtsrækker" - -#. ($self->Type) -#: lib/RT/Group_Overlay.pm:222 -msgid "system %1" -msgstr "system %1" - -#. ($self->Type) -#: lib/RT/Group_Overlay.pm:233 -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 kaldende komponent angav ikke hvorfor" - -#: NOT FOUND IN SOURCE -msgid "ticket #%1" -msgstr "sag #%1" - -#. ($self->Instance, $self->Type) -#: lib/RT/Group_Overlay.pm:230 -msgid "ticket #%1 %2" -msgstr "sag #%1 %2" - -#. ($self->Id) -#: lib/RT/Group_Overlay.pm:236 -msgid "undescribed group %1" -msgstr "ubeskrevet gruppe %1" - -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "ubeskrevet gruppe %1" - -#. ($user->Object->Name) -#: lib/RT/Group_Overlay.pm:211 -msgid "user %1" -msgstr "bruger %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "uger" - -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "med skabelon %1" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "Ã¥r" - diff --git a/rt/lib/RT/I18N/de.po b/rt/lib/RT/I18N/de.po deleted file mode 100644 index f0389ea2c..000000000 --- a/rt/lib/RT/I18N/de.po +++ /dev/null @@ -1,5194 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2006-12-20 15:50+0100\n" -"Last-Translator: Torsten Brumm \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 "" - -#: 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 "%1 #%2" - -#: lib/RT/Date.pm:365 -#. ($s, $time_unit) -msgid "%1 %2" -msgstr "%1 %2" - -#: lib/RT/Date.pm:401 -#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) -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 hinzugefügt" - -#: lib/RT/Date.pm:362 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "vor %1 %2" - -#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654 -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -msgid "%1 %2 changed to %3" -msgstr "%1 %2 geändert in %3" - -#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696 -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 deleted" -msgstr "%1 %2 gelöscht" - -#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103 -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -msgid "%1 %2 with template %3" -msgstr "%1 %2 mit der Vorlage %3" - -#: html/Ticket/Elements/ShowAttachments:72 -#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) -msgid "%1 (%2) by %3" -msgstr "%1 (%2) von %3" - -#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66 -#. (loc($DefaultStatus)) -#. (loc($Ticket->Status())) -#. (loc($TicketObj->Status)) -#. ($TicketObj->OwnerObj->Name()) -msgid "%1 (Unchanged)" -msgstr "%1 (Unverändert)" - -#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250 -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -msgid "%1 - An argument to pass to %2" -msgstr "%1 - Ein Argument zur Übergabe an %2" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - Statusausgabe auf 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 - Gibt an, welches Action-Modul benutzt werden soll" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Gibt an, welches Condition-Modul benutzt werden soll" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Gibt an, welches Search-Modul benutzt werden soll" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -msgstr "" - -#: html/Elements/Footer:56 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -msgid "%1 RT %2 Copyright 1996-%3 %4." -msgstr "%1 RT %2 Alle Rechte vorbehalten 1996-%3 %4." - -#: lib/RT/ScripAction_Overlay.pm:150 -#. ($self->Id) -msgid "%1 ScripAction loaded" -msgstr "ScripAction %1 geladen" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "%1 als Wert für %2 hinzugefügt" - -#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151 -#. ($args{'Base'}) -#. ($args{'Target'}) -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "%1 konnte nicht in der Datenbank gefunden werden obwohl es ein lokales Objekt zu sein scheint" - -#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531 -#. ($self->BriefDescription , $self->CreatorObj->Name) -#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) -msgid "%1 by %2" -msgstr "%1 von %2" - -#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800 -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -msgid "%1 changed from %2 to %3" -msgstr "%1 von %2 in %3 geändert" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "%1 kopieren" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1 konnte nicht auf %2 gesetzt werden." - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 konnte den Status nicht auf erledigt setzen. Die RT-Datenbank könnte inkonsistent sein." - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "%1 erstellt" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "%1 gelöscht" - -#: NOT FOUND IN SOURCE -msgid "%1 grouped by %2" -msgstr "%1 gruppiert durch %2" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "Ihre %1 Anfragen höchster Priorität" - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 ist ein Tool um mit Tickets von externen Programmen zu arbeiten, wie zum Beispiel cron." - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 ist kein %2 dieses Bereichs mehr." - -#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49 -#. ($minutes) -msgid "%1 min" -msgstr "%1 Min" - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "Die %1 neusten Anfragen ohne Besitzer" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "%1 Objekte" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "%1 Rechte" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 wird alle Mitglieder eines erledigten Gruppentickets anführen." - -#: lib/RT/CustomField_Overlay.pm:894 -msgid "%1's %2 objects" -msgstr "%1's %2 Objekte" - -#: lib/RT/CustomField_Overlay.pm:895 -msgid "%1's %2's %3 objects" -msgstr "%1's %2's %3 Objekte" - -#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57 -#. ($object->Name) -#. ($Object->Name) -msgid "%1's saved searches" -msgstr "%1's gespeicherte Suchanfragen" - -#: lib/RT/Transaction_Overlay.pm:481 -#. ($self) -msgid "%1: no attachment specified" -msgstr "%1: kein Anhang angegeben" - -#: 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 "" - -#: 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 "(Auswahl wird gelöscht)" - -#: html/Ticket/Elements/PreviewScrips:99 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(Benachrichtigung der markierten Empfänger wird unterdrückt)" - -#: html/Ticket/Elements/PreviewScrips:123 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "(Benachrichtigungen an markierte Empfänger aktivieren)" - -#: html/Ticket/Create.html:218 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(Geben Sie die Anfrage IDs oder URLs getrennt durch Leerzeichen ein)" - -#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1)" -msgstr "(Standardwert: %1)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Keine benutzerdefinierten Felder)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Keine Mitglieder)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Keine Scrips)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Keine Vorlagen)" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(Nichts)" - -#: 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 "(Sendet ein Blind Carbon Copy - BCC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update werden nicht übermittelt.)" - -#: 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 "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update werden ebenfalls übermittelt.)" - -#: 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 "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update werden nicht übermittelt.)" - -#: 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 "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update werden ebenfalls übermittelt.)" - -#: html/Admin/Elements/EditScrip:96 -msgid "(Use these fields when you choose 'User Defined' for a condition or action)" -msgstr "(Benutze diese Felder, für 'Benutzer definierte' Bedingungen oder Aktionen)" - -#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53 -msgid "(Will not be sent email)" -msgstr "" - -#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 -msgid "(empty)" -msgstr "(leer)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(kein Name gelistet)" - -#: 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 "(kein Wert)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(keine Werte)" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(nur eine Anfrage)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(wartet auf Freigabe)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "(wartet auf andere Sammlung)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(notwendig)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(unbenannt)" - -#: html/Ticket/Elements/Reminders:133 -msgid "(yyyy/mm/dd)" -msgstr "(jjjj/mm/tt)" - -#: html/Elements/EditCustomFieldSelect:57 -msgid "-" -msgstr "" - -#: bin/rt-crontool:95 -msgid "--transaction argument could be only 'first' or 'last'" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "<% $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 "Eine leere Vorlage" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "Es wurde kein Passwort gesetzt, der User wird sich nicht anmelden können!" - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE nicht gefunden" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACEs können nur erstellt und gelöscht werden." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "UND" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Über mich" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Zugriffskontrolle" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Aktion" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "Aktion %1 nicht gefunden" - -#: bin/rt-crontool:171 -msgid "Action committed.\\n" -msgstr "Aktion durchgeführt.\\n" - -#: lib/RT/Scrip_Overlay.pm:168 -msgid "Action is mandatory argument" -msgstr "" - -#: bin/rt-crontool:167 -msgid "Action prepared..." -msgstr "Aktion vorbereitet..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Hinzufügen" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "AdminCC hinzufügen" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "CC hinzufügen" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Spalten hinzufügen" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Kriterium hinzufügen" - -#: html/Ticket/Create.html:147 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Weitere Dateien anhängen" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Klient hinzufügen" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Wert hinzufügen" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Scrip erstellen, das auf alle Bereiche angewendet wird" - -#: NOT FOUND IN SOURCE -msgid "Add additional criteria" -msgstr "zusätzliches Kriterium hinzufügen" - -#: html/Search/Build.html:109 html/Search/Build.html:94 -msgid "Add and Search" -msgstr "Hinzufügen und Suchen" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "Füge den ausgewählten Anfragen Kommentare oder Antworten hinzu" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Mitglieder hinzufügen" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Neue Beobachter hinzufügen" - -#: html/Search/Build.html:85 -msgid "Add these terms to your search" -msgstr "Diese Bedingungen zur Suche hinzufügen" - -#: html/Search/Bulk.html:158 -msgid "Add values" -msgstr "Werte hinzufügen" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "Add, delete and modify custom field values for objects" -msgstr "Hinzufügen, Löschen und Ändern von Werten benutzerdefinierter Felder von Objekten" - -#: lib/RT/Queue_Overlay.pm:763 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "Rolle wurde als %1 für diesen Bereich hinzugefügt" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Rolle wurde als %1 für diese Anfrage hinzugefügt" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Adresse 1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Adresse 2" - -#: 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 Korrespondenz" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Admin Bereiche" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Admin/Globale Einstellungen" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113 -msgid "AdminCc" -msgstr "AdminCc" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "AdminBenutzerdefiniertesFeld" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "AdminGruppe" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "AdminGruppenZugehörigkeit" - -#: lib/RT/System.pm:80 -msgid "AdminOwnPersonalGroups" -msgstr "AdminEigenePersönlicheGruppen" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "AdminQueue" -msgstr "AdminBereich" - -#: lib/RT/System.pm:81 -msgid "AdminUsers" -msgstr "AdminBenutzer" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Administrative CC" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Erweitert" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "nach dem" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "Operator" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "Alle Freigaben genehmigt" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Alle Bereiche" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "Und/Oder" - -#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "gilt für" - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "anwenden" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Änderungen anwenden" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Freigabe" - -#: 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 "Freigabe #%1: %2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Freigabe #%1: Notiz wurde aufgrund eines Systemfehlers nicht gespeichert" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Freigabe #%1: Notiz gespeichert" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Freigabe genehmigt" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Freigabe abgelehnt" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Freigeben" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Notizen des Freigebenden: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Apr." - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "aufsteigend" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Assign and remove custom fields" -msgstr "Zuweisen und Entfernen von benutzerdefinierten Feldern" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "AssignCustomFields" -msgstr "BenutzerdefiniertesFeldZuweisen" - -#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116 -msgid "Attach" -msgstr "Anhängen" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Datei anhängen" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Dateianhang" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Anhang '%1' konnte nicht geladen werden" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Anhang erstellt" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Dateiname des Anhangs" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Anhänge" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "Attribut gelöscht" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Aug." - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "Automatische Antwort" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Automatische Antwort an Klienten" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "Verfügbar" - -#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Grundlagen" - -#: 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 "Änderungen speichern" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "vor dem" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "Best Practical Solutions, LLC Firmen Logo" - -#: NOT FOUND IN SOURCE -msgid "Binary" -msgstr "Binär" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Leer" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "Fett" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "Speicherbarer Link" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Kurze Kopfzeilen" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "Massen Update" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Massen Anfrageaktualisierung" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Kann Systembenutzer nicht ändern" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Kann diese Rolle diesen Bereich sehen" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Kann kein benutzerdefiniertes Feld ohne Namen hinzufügen" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($Class) -msgid "Can't find a collection class for '%1'" -msgstr "Es wurde keine Kollektion gefunden für '%1'" - -#: html/Search/Build.html:286 -msgid "Can't find a saved search to work with" -msgstr "Kann keine gespeicherte Suche finden" - -#: lib/RT/Link_Overlay.pm:159 -msgid "Can't link a ticket to itself" -msgstr "Kann kein Anfrage auf sich selbst verweisen lassen!" - -#: 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 "Kann diese Suche nicht speichern" - -#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "Sie können Basis und Ziel nicht gleichzeitig angeben" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Kann Benutzer nicht anlegen: %1" - -#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58 -msgid "Category" -msgstr "Kategorie" - -#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112 -msgid "Cc" -msgstr "CC" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -msgstr "Passwort ändern" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Alle auswählen" - -#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "Zum Löschen anwählen" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Zum Entziehen einer Berechtigung anwählen" - -#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Kinder" - -#: html/NoAuth/js/util.js:201 -msgid "Choose a date" -msgstr "Datum auswählen" - -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 -msgid "City" -msgstr "Stadt" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Alles löschen" - -#: html/Helpers/CalPopup.html:51 -msgid "Close window" -msgstr "Fenster schliessen" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Geschlossen" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Geschlossene Anfragen" - -#: lib/RT/CustomField_Overlay.pm:89 -msgid "Combobox: Select or enter multiple values" -msgstr "Combobox: Selektiere oder gebe mehrere Werte ein" - -#: lib/RT/CustomField_Overlay.pm:90 -msgid "Combobox: Select or enter one value" -msgstr "Combobox: Selektiere oder gib einen Wert ein" - -#: lib/RT/CustomField_Overlay.pm:91 -msgid "Combobox: Select or enter up to %1 values" -msgstr "Combobox: Selektiere oder gib bis zu %1 Werte ein" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Kommentar" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Kommentaradresse" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Kommentiere Anfragen" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "AnfrageKommentieren" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Kommentare (werden nicht an Klienten geschickt)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Kommentare (werden nicht an Klienten geschickt)" - -#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Kommentare zu diesem Benutzer" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Kommentar hinzugefügt" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "Commit Stumpf ausgeführt" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Bedingung" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "Bedingung trifft zu..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Bedingung nicht gefunden" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Konfiguration" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Bestätigen" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Inhalt" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "Inhaltstyp" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Kopie" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Korrespondenz" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Korrespondenz hinzugefügt" - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "Konnte keinen neuen benutzerdefinierten Wert hinzufügen" - -#: lib/RT/Record.pm:1660 -#. (, $value_msg) -msgid "Could not add new custom field value. %1 " -msgstr "Konnte kein neuen benutzerdefinierten Wert hinzufügen. %1 " - -#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073 -msgid "Could not change owner. " -msgstr "Konnte den Besitzer nicht ändern. " - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Konnte benutzerdefiniertes Feld nicht erzeugen" - -#: html/Admin/Elements/EditCustomField:113 -#. ($msg) -msgid "Could not create CustomField: %1" -msgstr "Konnte benutzerdefiniertes Feld nicht erzeugen: %1" - -#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "Konnte Gruppe nicht anlegen" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "Konnte Vorlage nicht anlegen: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Konnte Anfrage nicht anlegen. Bereich nicht angegeben" - -#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496 -msgid "Could not create user" -msgstr "Konnte Benutzer nicht anlegen" - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "Konnte diesen Benutzer nicht finden oder anlegen" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "Konnte diese Rolle nicht finden" - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "Konnte benutzerdefiniertes Feld %1 nicht laden" - -#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 -msgid "Could not load group" -msgstr "Konnte die Gruppe nicht laden" - -#: lib/RT/SavedSearch.pm:119 -#. ($privacy) -msgid "Could not load object for %1" -msgstr "Kann Objekt für %1 nicht laden" - -#: lib/RT/SavedSearch.pm:197 -msgid "Could not load search attribute" -msgstr "Kann Such Attribut nicht laden" - -#: lib/RT/Queue_Overlay.pm:761 -#. ($args{'Type'}) -msgid "Could not make that principal a %1 for this queue" -msgstr "Konnte diese Rolle nicht zu einen %1 dieses Bereichs machen" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "Konnte diese Rolle nicht zu einem %1 dieses Anfragen machen" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Konnte diese Rolle nicht als %1 dieses Bereichs entfernen" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "Konnte Benutzerinformation nicht speichern" - -#: 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 "Konnte Benutzer nicht der Gruppe hinzufügen" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "Konnte die Transaktion nicht anlegen: %1" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "Konnte Zeile nicht finden" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Konnte diese Rolle nicht finden" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Konnte diesen Wert nicht finden" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "Konnte %1 nicht aus der Benutzerdatenbank laden.\\n" - -#: html/Admin/CustomFields/UserRights.html:149 -#. ($id) -msgid "Couldn't load Class %1" -msgstr "Konnte die Klasse %1 nicht laden" - -#: html/Admin/CustomFields/GroupRights.html:107 -#. ($id) -msgid "Couldn't load CustomField %1" -msgstr "Konnte das benutzerdefinierte Feld %1 nicht laden" - -#: 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 "Konnte Gruppe %1 nicht laden" - -#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238 -msgid "Couldn't load link" -msgstr "Konnte den Verweis nicht laden" - -#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 -#. ($id) -msgid "Couldn't load object %1" -msgstr "Konnte Objekt %1 nicht laden" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "Konnte den Bereich nicht laden" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "Konnte den Bereich %1 nicht laden" - -#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167 -#. ($id) -msgid "Couldn't load scrip #%1" -msgstr "" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "Konnte das Anfrage '%1' nicht laden" - -#: lib/RT/Ticket_Overlay.pm:2643 -#. ($args{'URI'}) -msgid "Couldn't resolve '%1' into a URI." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't resolve base '%1' into a URI." -msgstr "Basis '%1' kann nicht zu einer URI aufgelöst werden." - -#: NOT FOUND IN SOURCE -msgid "Couldn't resolve target '%1' into a URI." -msgstr "Ziel '%1' kann nicht zu einer URI aufgelöst werden." - -#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 -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 "Erstellen" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Erstelle Anfragen" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Erstelle ein benutzerdefiniertes Feld" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "Erstelle ein benutzerdefiniertes Feld für den Bereich %1" - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Erstelle eine neue Gruppe" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Erstelle eine neue persönliche Gruppe" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Erstelle eine neue Anfrage" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Erstelle einen neuen Benutzer" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Erstelle einen Bereich" - -#: html/Admin/Queues/Scrip.html:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Erstelle ein Scrip für den Bereich %1" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Erstelle eine Vorlage" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Neue Anfrage" - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Erstelle neue Anfragen basierend auf der Vorlage dieses Scrips" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Anfrage erzeugen" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Erstelle Anfragen in diesem Bereich" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Erstellen, löschen und modifizieren von benutzerdefinierten Felder" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Erstelle, lösche und modifiziere Bereich" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Erstellen, löschen und modifizieren von Mitgliedern persönlicher Gruppen" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Erstellen, löschen und modifizieren von Benutzern" - -#: lib/RT/System.pm:87 -msgid "CreateSavedSearch" -msgstr "GespeicherteSucheErstellen" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "CreateTicket" -msgstr "AnfrageErstellen" - -#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169 -msgid "Created" -msgstr "Angelegt" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "Erstelle ein benutzerdefiniertes Feld %1" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "Erstellt in einem Zeitraum" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "Erstellte Tickets einer Periode, sortiert nach Status" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Ersteller" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Momentane Beziehungen" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Aktuelle Scrips" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Aktuelle Mitglieder" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Aktuelle Rechte" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "Aktuelle Suche" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Aktuelle Beobachter" - -#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "Benutzerdefinierte Felder" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "Benutzerdefinierte Felder für %1" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Benutzerdefinierter Aktions-Aufräum-Code" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Benutzerdefinierter Aktions-Vorbereitungs-Code" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Benutzerdefinierte Bedingung" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "Benutzerdefiniertes Feld %1 hat einen Wert." - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "Benutzerdefiniertes Feld %1 hat keinen Wert." - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Benutzerdefiniertes Feld %1 nicht gefunden" - -#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121 -#. ($cf) -#. ($obj->Name) -msgid "Custom field '%1'" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Benutzerdefiniertes Feld nicht gefunden" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Wert %1 des benutzerdefinierten Feldes %2 konnte nicht gefunden werden" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "Wert des benutzerdefinierten Felds konnte nicht gelöscht werden" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "Wert des benutzerdefinierten Feldes konnte nicht gefunden werden" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Wert des benutzerdefinierten Feldes gelöscht" - -#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "BenutzerdefiniertesFeld" - -#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75 -msgid "Customize" -msgstr "Anpassen" - -#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65 -msgid "Dates" -msgstr "Datumsangaben" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Dez." - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Standard Vorlage für automatische Antworten" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Standard Bereich" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Standard Klient" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Standard Vorlage für Admin-Kommentar" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Standard Vorlage für Admin-Korrespondenz" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Standard Vorlage für Korrespondenz" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Standard Vorlage für Transaktion" - -#: NOT FOUND IN SOURCE -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Standard: %1/%2 von \"%3\" auf \"%4\" geändert." - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Rechte weitergeben" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "Ihnen gewährte Rechte weitergeben" - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "RechteWeitergabe" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Rechteweitergabe" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "Löschen" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "Vorlage löschen" - -#: lib/RT/SavedSearch.pm:220 -#. ($msg) -msgid "Delete failed: %1" -msgstr "Löschen fehlgeshlagen: %1" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Ausgewähltes Script löschen" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Anfragen löschen" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "Werte löschen" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "AnfrageLöschen" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "Suche löschen" - -# Are these three strings really different? -#: NOT FOUND IN SOURCE -msgid "Deleting this object could break referential integrity" -msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Ablehnen" - -#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "Ist Voraussetzung von" - -#: lib/RT/Transaction_Overlay.pm:718 -#. ($value) -msgid "Dependency by %1 added" -msgstr "Als Voraussetzung von %1 hinzugefügt" - -#: lib/RT/Transaction_Overlay.pm:758 -#. ($value) -msgid "Dependency by %1 deleted" -msgstr "Als Voraussetzung von %1 gelöscht" - -#: lib/RT/Transaction_Overlay.pm:715 -#. ($value) -msgid "Dependency on %1 added" -msgstr "Setzt jetzt %1 voraus" - -#: lib/RT/Transaction_Overlay.pm:755 -#. ($value) -msgid "Dependency on %1 deleted" -msgstr "Setzt %1 nicht mehr voraus " - -#: 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 "Voraussetzungen" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "absteigend" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Beschreiben Sie hier das Problem" - -#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70 -msgid "Description" -msgstr "Beschreibung" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Anzeige" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Zeige Zugriffskontrollliste (ACL) an" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Spalten anzeigen" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Zeige Scrip-Vorlagen für diesen Bereich" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Zeige Scrips für diesen Bereich" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Anzeigemodus" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "Gespeicherte Suchanfragen für diese Gruppe anzeigen" - -#: html/Elements/Footer:61 -msgid "Distributed under version 2 of the GNU GPL." -msgstr "Herausgegeben unter version 2 der GNU GPL." - -#: lib/RT/System.pm:75 -msgid "Do anything and everything" -msgstr "Mache irgend etwas und alles" - -#: NOT FOUND IN SOURCE -msgid "Do the Search" -msgstr "Suche durchführen" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Diese Seite nicht aktualisieren." - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Herunterladen" - -#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Als Tabulator separierte Datei speichern" - -#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173 -msgid "Due" -msgstr "Fällig" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Ändere" - -#: html/Search/Bulk.html:149 -msgid "Edit Custom Fields" -msgstr "Benutzerdefinierte Felder verändern" - -#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 -#. ($Object->Name) -msgid "Edit Custom Fields for %1" -msgstr "Bearbeite benutzerdefinierte Felder für %1" - -#: html/Admin/Global/CustomFields/Groups.html:54 -msgid "Edit Custom Fields for all groups" -msgstr "Benutzerdefinierte Felder für alle Gruppen verändern" - -#: html/Admin/Global/CustomFields/Users.html:54 -msgid "Edit Custom Fields for all users" -msgstr "Benutzerdefinierte Felder für alle Benutzer verändern" - -#: 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 "Benutzerdefinierte Felder von Tickets in allen Stapeln verändern" - -#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Bearbeite Beziehungen" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Bearbeite Suche" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "Suche editieren" - -#: html/Admin/Queues/Templates.html:63 -#. ($QueueObj->Name) -msgid "Edit Templates for queue %1" -msgstr "Bearbeite Vorlagen für den Bereich %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "Bearbeite gespeicherte Suchanfragen für diese Gruppe" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Bearbeite Systemvorlagen" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "GespeicherteSucheEditieren" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "Bearbeite Konfiguration für den Bereich %1" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Bearbeite benutzerdefiniertes Feld %1" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Bearbeite Mitgliedschaft für die Gruppe %1" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Bearbeite Mitgliedschaft der persönlichen Gruppe %1" - -#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608 -msgid "Either base or target must be specified" -msgstr "Es muss entweder eine Basis oder ein Ziel angegeben werden" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "E-Mail" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "E-Mail-Adresse bereits in Gebrauch" - -# ## muss das überhaupt übersetzt werden??? -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Aktiviert (Abwählen deaktiviert dieses benutzerdefinierte Feld)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Aktiviert (Abwählen deaktiviert diese Gruppe)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Aktiviert (Abwählen deaktiviert diesen Bereich)" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Aktivierte Bereiche" - -#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138 -#. (loc_fuzzy($msg)) -msgid "Enabled status %1" -msgstr "Status aktiviert: %1" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -msgstr "Status aktiviert: %1" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Mehrere Werte eingeben" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Gib Objekte oder URI's ein um zu anderen Objekten zu verlinken. Trenne mehrere Einträge mit Leerzeichen." - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Einen Wert eingeben" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Gib Stapel oder URI's ein um zu anderen Stapeln zu verlinken. Trenne mehrere Einträge mit Leerzeichen." - -#: html/Elements/EditLinks:119 html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Gib Anfragen oder URI's ein um zu anderen Anfragen zu verlinken. Trenne mehrere Einträge mit Leerzeichen." - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Gib bis zu %1 Werte ein" - -#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47 -msgid "Error" -msgstr "Fehler" - -# Queue->AddWatcher ist ein Code-Teil, nicht übersetzen -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Fehler in den Parametern zu Queue->AddWatcher" - -# Queue->DeleteWatcher ist ein Code-Teil, nicht übersetzen -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Fehler in den Parametern zu Queue->DeleteWatcher" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Fehler in den Parametern zu Ticket->AddWatcher" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Fehler in den Parametern zu Ticket->DeleteWatcher" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "Anfragen eskalieren" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Geschätzt" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Jeder" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Beispiel:" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Zusatzinformationen" - -#: lib/RT/SavedSearch.pm:177 -msgid "Failed to create search attribute" -msgstr "Such Attribut konnte nicht erstellt werden" - -#: lib/RT/User_Overlay.pm:376 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Konnte die Pseudogruppe 'Privileged' nicht finden." - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Konnte die Pseudogruppe 'Unprivileged' nicht finden." - -#: bin/rt-crontool:206 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "Konnte Modul %1 nicht laden. (%2)" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "Objekt %1 konnte nicht geladen werden" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Feb." - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "Dateiname" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Mehrere Textfelder füllen" - -#: lib/RT/CustomField_Overlay.pm:74 -msgid "Fill in multiple wikitext areas" -msgstr "Schreibe mehrere Wikitext Bereiche" - -#: lib/RT/CustomField_Overlay.pm:70 -msgid "Fill in one text area" -msgstr "Ein Textfeld füllen" - -#: lib/RT/CustomField_Overlay.pm:75 -msgid "Fill in one wikitext area" -msgstr "Schreibe einen Wikitext Bereich" - -#: 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 Textfelder füllen" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "Schreibe bis zu %1 Wikitext Bereiche" - -#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841 -msgid "Final Priority" -msgstr "Endpriorität" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "EndPriorität" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Finde Gruppen dessen" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Finde Leute deren" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Anfragen suchen" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Erste" - -#: 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 "Änderung erzwingen" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Format" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "%1 Anfrage(n) gefunden" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Objekt gefunden" - -#: NOT FOUND IN SOURCE -msgid "Freeform" -msgstr "Freie Eingabe" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Fr." - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Alle Kopfzeilen" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Vorlage von Datei nehmen" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "An %1 übergeben" - -#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 -msgid "Global" -msgstr "Global" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "Globale benutzerdefinierte Felder" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "Konfiguration globaler benutzerdefinierter Felder" - -#: 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 Vorlage: %1" - -#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89 -msgid "Go" -msgstr "Start" - -#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57 -msgid "Go!" -msgstr "Los!" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Zeige Anfrage" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Gruppe" - -#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Gruppenrechte" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Gruppe hat bereits Mitglieder" - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "Gruppe konnte nicht erstellt werden: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Gruppe angelegt" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Gruppe hat kein solches Mitglied" - -#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510 -msgid "Group not found" -msgstr "Gruppe nicht gefunden" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210 -msgid "Groups" -msgstr "Gruppen" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Gruppen können nicht Mitglied eines ihrer Mitglieder sein" - -#: html/Admin/Groups/index.html:86 -msgid "Groups matching search criteria" -msgstr "Gruppen auf die das Suchkriterium passt" - -#: html/Ticket/Elements/ShowRequestor:77 -msgid "Groups this user belongs to" -msgstr "Gruppen zu denen der Benutzer gehört" - -#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 -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 "Verlauf" - -#: html/Admin/Groups/History.html:62 -#. ($GroupObj->Name) -msgid "History of the group %1" -msgstr "Verlauf der Gruppe %1" - -#: html/Admin/Users/History.html:62 -#. ($UserObj->Name) -msgid "History of the user %1" -msgstr "Verlauf des Benutzers %1" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Startseite" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "Stunden" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "Ich habe %quant(%1, Betonmischer)" - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "Ich bin verwirrt" - -#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766 -msgid "Id" -msgstr "Nr." - -#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 -msgid "Identity" -msgstr "Identität" - -#: etc/initialdata:429 -msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "Wenn eine Freigabe abgewiesen wird, weise das Original ab und lösche wartende Freigaben" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "Wenn kein Klient spezifiziert ist, dann generiere Anfragen mit diesem Klienten" - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Wenn kein Bereich spezifiziert ist, dann generiere das Anfrage in diesem Bereich" - -#: 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 "Wenn dieses Programm setgid ist, könnte ein böswilliger lokaler Nutzer Administrator Rechte auf dem RT bekommen." - -#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60 -msgid "If you've updated anything above, be sure to" -msgstr "Wenn Sie etwas aktualisiert haben, denken Sie daran hier zu speichern" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Unerlaubter Wert für %1" - -#: NOT FOUND IN SOURCE -msgid "Image" -msgstr "Bild" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Unveränderbares Feld" - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Zeige auch deaktivierte Gruppen an." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Zeige auch deaktivierte Bereiche an." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Zeige deaktivierte Benutzer auch in der Suche an." - -#: 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 "Unvollständige Suche" - -#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438 -msgid "Incomplete query" -msgstr "Unvollständige Anfrage" - -#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816 -msgid "Initial Priority" -msgstr "Anfängliche Priorität" - -#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "AnfänglichePriorität" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Eingabefehler" - -#: 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 "Eingabe muss mit %1 übereinstimmen" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Interner Fehler" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Interner Fehler: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Ungültige Gruppenart" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Ungültiges Recht" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Ungültige Daten" - -#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678 -#. ($msg) -msgid "Invalid pattern: %1" -msgstr "Ungültiges Muster: %1" - -#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244 -msgid "Invalid queue" -msgstr "Ungültiger Bereich" - -#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290 -msgid "Invalid right" -msgstr "Ungültiges Recht" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "Ungültiger Wert für %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Ungültiger Wert für das benutzerdefinierte Feld" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Ungültiger Statuswert" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Es ist wichtig, dass nicht authorisierte Benutzer dieses Programm nicht starten können." - -#: bin/rt-crontool:269 -msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool." -msgstr "Es wird empfohlen einen nicht priviligierten Unix User mit korrekten Gruppenrechten anzulegen um dieses Programm zu nutzen." - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Es verarbeitet verschiedene Parameter:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "kursiv" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Jan." - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Betrete oder verlasse diese Gruppe" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Jul." - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Alles" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Jun." - -#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 -msgid "Language" -msgstr "Sprache" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "Groß" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Letzter Kontakt" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Letzter Kontakt" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Zuletzt Kontaktiert" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Zuletzt Aktualisiert" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "ZuletztBearbeitetVon" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Links" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Diesem Benutzer RT-Zugriff gewähren" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Diesem Benutzer Rechte zuweisen lassen" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "Link" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Beziehung existiert bereits" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Beziehung konnte nicht erstellt werden" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Beziehung erstellt (%1)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Beziehung gelöscht (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Beziehung nicht gefunden" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Verweise auf Anfrage #%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 "Beziehungen" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "Laden" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Gespeicherte Suchanfragen laden" - -#: lib/RT/System.pm:86 -msgid "LoadSavedSearch" -msgstr "GespeicherteSucheLaden" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Geladene Perl Module" - -#: lib/RT/SavedSearch.pm:111 -#. ($self->Name) -msgid "Loaded search %1" -msgstr "Geladene Suche %1" - -#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 -msgid "Location" -msgstr "Adresse" - -#: html/Elements/Header:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "Angemeldet als %1" - -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Anmelden" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Abmelden" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "Suchtyp unpassend" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Besitzer festlegen" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Status festlegen" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Fälligkeitsdatum festlegen" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Erledigungsdatum festlegen" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Anfangsdatum festlegen" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Startdatum festlegen" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Eingangsdatum festlegen" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Priorität festlegen" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Bereich festlegen" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Betreff festlegen" - -#: lib/RT/Group_Overlay.pm:169 -msgid "Make this group visible to user" -msgstr "Diese Gruppe dem Benutzer anzeigen" - -#: html/Admin/index.html:78 -msgid "Manage custom fields and custom field values" -msgstr "Verwalte benutzerdefinierte Felder und Werte" - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Gruppen und Gruppenmitglieder verwalten" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Eigenschaften und Einstellungen für alle Bereiche verwalten" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Bereich und bereichspezifische Einstellungen verwalten" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Benutzer und Passworte verwalten" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Mär." - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "Mai" - -#: lib/RT/Transaction_Overlay.pm:731 -#. ($value) -msgid "Member %1 added" -msgstr "Mitglied %1 hinzugefügt" - -#: lib/RT/Transaction_Overlay.pm:771 -#. ($value) -msgid "Member %1 deleted" -msgstr "Mitglied %1 gelöscht" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Mitglied hinzugefügt" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Mitglied gelöscht" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Mitglied nicht gelöscht" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Mitglied von" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Mitglieder" - -#: lib/RT/Transaction_Overlay.pm:728 -#. ($value) -msgid "Membership in %1 added" -msgstr "Mitgliedschaft in %1 hinzugefügt" - -#: lib/RT/Transaction_Overlay.pm:768 -#. ($value) -msgid "Membership in %1 deleted" -msgstr "Mitgliedschaft in %1 gelöscht" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Mitgliedschaft" - -#: html/Admin/Users/Memberships.html:60 -#. ($UserObj->Name) -msgid "Memberships of the user %1" -msgstr "Mitgliedschaft des Benutzers %1" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Vereinigung erfolgreich" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Vereinigung fehlgeschlagen. Konnte EffectiveId nicht setzen" - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "Vereinigung fehlgeschlagen. Konnte Status nicht setzen" - -#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Vereinigen mit" - -#: lib/RT/Transaction_Overlay.pm:734 -#. ($value) -msgid "Merged into %1" -msgstr "Vereinigt mit %1" - -#: html/Search/Bulk.html:143 html/Ticket/Update.html:118 -msgid "Message" -msgstr "Nachricht" - -#: 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 "Nachricht konnte nicht gespeichert werden" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Nachricht gespeichert" - -#: html/Ticket/Elements/PreviewScrips:122 -msgid "Messages about this ticket will not be sent to..." -msgstr "Nachrichten über diese Anfrage werden nicht an diese Empfänger gesendet:" - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -msgstr "Minuten" - -#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445 -msgid "Mismatched parentheses" -msgstr "Unausgeglichene Klammerung" - -#: lib/RT/Record.pm:954 -msgid "Missing a primary key?: %1" -msgstr "%1: Fehlt ein Primärschlüssel?" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Handy" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Ändere Zugriffskontrollliste (ACL)" - -#: html/Admin/Elements/ObjectCustomFields:96 -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "Alle benutzerdefinierten Felder %2, die zu %1 gehören, ändern" - -#: html/Admin/Elements/ObjectCustomFields:98 -#. (loc(lc($Types))) -msgid "Modify Custom Fields which apply to all %1" -msgstr "Alle benutzerdefinierten Felder, die zu %1 gehören, ändern" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Gruppenrechte ändern" - -#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Mitglieder ändern" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Rechte ändern" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Modify Scrip templates for this queue" -msgstr "Ändere Scrip-Vorlagen für diesen Bereich" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Ändere Scrips für diesen Bereich" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Ändern der Benutzerrechte" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "Ändere ein benutzerdefiniertes Feld für den Bereich %1" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "Ändere ein Scrip für den Bereich %1" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Ändere ein globales benutzerdefiniertes Feld" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "Ändern der assoziierte Objekte von %1" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "Ändere Datumsangaben für #%1" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Ändere Datumsangaben für Anfrage #%1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 -msgid "Modify global custom fields" -msgstr "Ändern der globalen benutzerdefinierten Felder" - -#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77 -msgid "Modify global group rights" -msgstr "Ändere globale Gruppenrechte" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Ändere globale Gruppenrechte." - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Ändere globale Benutzerrechte" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Ändere globale Benutzerrechte." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Ändere Gruppen-Metadaten oder lösche die Gruppe" - -#: html/Admin/CustomFields/GroupRights.html:164 -#. ($CustomFieldObj->Name) -msgid "Modify group rights for custom field %1" -msgstr "Ändere Gruppenrechte für das benutzerdefinierte Feld %1" - -#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 -#. ($GroupObj->Name) -msgid "Modify group rights for group %1" -msgstr "Ändere die Gruppenrechte der Gruppe %1" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "Ändere Gruppenrechte für den Bereich %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Ändere Mitgliedsverzeichnis dieser Gruppe" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Ändert den eigenen RT-Zugang" - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "Ändere Personen im Zusammenhang mit diesem Bereich %1" - -#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57 -#. ($Ticket->id) -#. ($Ticket->Id) -msgid "Modify people related to ticket #%1" -msgstr "Ändere Personen der Anfragen #%1" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Ändere Scrips für den Bereich %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63 -msgid "Modify scrips which apply to all queues" -msgstr "Ändere auf alle Bereiche angewandte Scrips" - -#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99 -#. (loc($TemplateObj->Name())) -#. ($TemplateObj->id) -msgid "Modify template %1" -msgstr "Ändere Vorlage %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Ändere globale Vorlagen" - -#: 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 "Ändere Gruppe %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Ändere die Bereichsbeobachter" - -#: html/Admin/Users/Modify.html:309 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "Ändere Benutzer %1" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "Ändere Anfrage #%1" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "Ändere Anfrage #%1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Ändere Anfragen" - -#: html/Admin/CustomFields/UserRights.html:157 -#. ($CustomFieldObj->Name) -msgid "Modify user rights for custom field %1" -msgstr "Ändere Benutzerrechte für benutzerdefinierte Felder von %1" - -#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 -#. ($GroupObj->Name) -msgid "Modify user rights for group %1" -msgstr "Ändere Benutzerrechte für die Gruppe %1" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Ändere Benutzerrechte für den Bereich %1" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ModifyACL" -msgstr "ACLBearbeiten" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "BenutzerdefiniertesFeldBearbeiten" - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "EigeneMitgliedschaftBearbeiten" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyQueueWatchers" -msgstr "BereichsBeobachterBearbeiten" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ModifyScrips" -msgstr "ScripsBearbeiten" - -#: lib/RT/System.pm:82 -msgid "ModifySelf" -msgstr "SelbstBearbeiten" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "ModifyTemplate" -msgstr "VorlageBearbeiten" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "ModifyTicket" -msgstr "AnfrageBearbeiten" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Mo." - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "Mehr über %1" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Hinunter verschieben" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Hinauf verschieben" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Mehrere" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "Sie müssen eine Angabe bei 'Name' machen" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "Meine %1 Anfragen" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "Mein Tag" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Meine Freigaben" - -#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Meine gespeicherten Suchanfragen" - -#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65 -msgid "Name" -msgstr "Name" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Benutzername ist bereits in Gebrauch" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Niemals" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Neu" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Neue Beziehungen" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Neues Passwort" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Neue wartende Freigaben" - -#: NOT FOUND IN SOURCE -msgid "New Query" -msgstr "Neue Suche" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Neue Suche" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Neues benutzerdefiniertes Feld" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Neue Gruppe" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Neues Passwort" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Neue Passworterinnerung wurde verschickt" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Neuer Bereich" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "Neue Wiedervorlage" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Neue Rechte" - -#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Neues Scrip" - -#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Neue Vorlage" - -#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Neue Anfrage" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "Neue Anfrage existiert nicht" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Neuer Benutzer" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Neuer Benutzer aufgerufen" - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Neue Beobachter" - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Nächste" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Nächste Seite" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Spitzname" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "Keine Klasse definiert" - -#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "Kein benutzerdefiniertes Feld" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Kein benutzerdefiniertes Feld definiert" - -#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Keine Gruppe definiert" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "Keine Suche" - -#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "Kein Bereich vorhanden" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Kein RT-Benutzer gefunden. Bitte kontaktiere Sie Ihren RT-Administrator.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Keine Vorlage" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "Keine Aktion" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "Keine Spalte angegeben" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Kein Kommentar zu diesem Benutzer angegeben" - -#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78 -#. (ref $self) -msgid "No description for %1" -msgstr "Keine Beschreibung für %1 vorhanden" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Keine Gruppe angegeben" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "Keine Gruppe mit diesen Kriterien gefunden" - -#: lib/RT/Ticket_Overlay.pm:2393 -msgid "No message attached" -msgstr "Keine Nachricht angefügt" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "Kein Passwort gesetzt" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Keine Erlaubnis Bereiche anzulegen" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "Kein Erlaubnis um Anfragen im Bereich '%1' anzulegen" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Kein Recht Benutzer anzulegen" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Kein Recht dieses Anfrage anzuzeigen" - -#: 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 "Kein Recht dieses Anfrage zu aktualisieren" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Keine Rolle angegeben" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Keine Rolle ausgewählt." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Keine den Suchkriterien entsprechenden Bereiche gefunden" - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Keine Rechte gefunden" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Keine Rechte gewährt." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "Keine Suche geladen" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Keine Suche zu bearbeiten." - -#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Kein Betreff" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Kein Transaktionstyp angegeben" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Keine auf die Suchkriterien passende Benutzer gefunden" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "Kein Wert an _Set geschickt!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Niemand" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Nichtexistierendes Feld?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Nicht angemeldet." - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Nicht angegeben" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Noch nicht implementiert." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Bemerkungen" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Benachrichtigung konnte nicht verschickt werden" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "Benachrichtige AdminCCs" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "Benachrichtige AdminCCs als Kommentar" - -#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 -msgid "Notify Ccs" -msgstr "Benachrichtige CCs" - -#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "Benachrichtige CCs als Kommentar" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "Benachrichtige andere Empfänger" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Benachrichtige andere Empfänger als Kommentar" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "Benachrichtige Besitzer" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "Benachrichtige Besitzer als Kommentar" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "Besitzer über ihre abgewiesene Anfrage informieren" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "Benachrichtige Besitzer, dass sein Anfrage von allen Entscheidungsträgern freigegeben wurde" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "Benachrichtige Besitzer, dass sein Anfrage von einigen Entscheidungsträgern freigegeben wurde" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Benachrichtige Besitzer und AdminCCs neuer auf Freigabe wartende Anfragen" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "Benachrichtige die Klienten" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "Benachrichtige die Klienten und CCs" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "Benachrichtige die Klienten und CCs als Kommentar" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Benachrichtige die Klienten, CCs und AdminCCs" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Benachrichtige die Klienten, CCs und AdminCCs als Kommentar" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Nov." - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "Oder" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "Objekt konnte nicht erstellt werden" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "Objekt konnte nicht gelöscht werden" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Objekt erstellt" - -#: lib/RT/Record.pm:120 -msgid "Object deleted" -msgstr "Objekt gelöscht" - -#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 -#. ($ObjectType) -#. ($LookupType) -msgid "Object of type %1 cannot take custom fields" -msgstr "Objekt vom Typ %1 kann keine benutzerdefinierten Felder haben" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "Objekt Typ passt nicht" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Okt." - -#: html/Tools/Elements/Tabs:55 -msgid "Offline" -msgstr "Offline" - -#: html/Tools/Offline.html:49 -msgid "Offline edits" -msgstr "Offline Bearbeitung" - -#: html/Tools/Offline.html:46 -msgid "Offline upload" -msgstr "Offline Upload" - -#: html/Elements/SelectDateRelation:56 -msgid "On" -msgstr "am" - -#: lib/RT/Transaction_Overlay.pm:326 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Bei Kommentar" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "Bei Korrespondenz" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Bei Erstellen" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Bei Besitzerwechsel" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "Bei Änderung der Priorität" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Bei Änderung des Bereichs" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Beim Erledigen" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Beim Ändern des Status" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Bei einer Transaktion" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Zeige nur Freigaben für nach dem %1 erstelle Anfragen" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "Zeige nur Freigaben für vor dem %1 erstellte Anfragen" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "Nur Benutzerdefinierte Felder anzeigen für:" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Offen" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Öffnen" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Offene Anfragen" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Öffne Anfragen bei Korrespondenz" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "Optionen" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Sortiert nach" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Organisation" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Ursprüngliche Anfrage: #%1" - -#: lib/RT/Transaction_Overlay.pm:622 -msgid "Outgoing email about a comment recorded" -msgstr "Ausgehende Mail eines Kommentars gespeichert" - -#: lib/RT/Transaction_Overlay.pm:626 -msgid "Outgoing email recorded" -msgstr "Ausgehende Mail gespeichert" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Mit der Zeit steigt die Priorität auf" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Eigene Anfragen" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "EigeneAnfrage" - -#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006 -msgid "Owner" -msgstr "Besitzer" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "Besitzer konnte nicht gesetzt werden" - -#: lib/RT/Transaction_Overlay.pm:672 -#. ($Old->Name , $New->Name) -msgid "Owner forcibly changed from %1 to %2" -msgstr "Besitzer mit Gewalt von %1 in %2 geändert" - -#: html/Elements/TicketList:78 -#. ($Page, int($TotalFound/$Rows)+$oddRows) -msgid "Page %1 of %2" -msgstr "Seite %1 von %2" - -#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96 -msgid "Pager" -msgstr "Pager" - -#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "Eltern" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Passwort" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Passworterinnerung" - -#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045 -msgid "Password changed" -msgstr "Passwort geändert" - -#: 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 "Das Passwort muss mindestens %1 Zeichen lang sein" - -#: lib/RT/User_Overlay.pm:1044 -msgid "Password set" -msgstr "Passwort erstellt" - -#: NOT FOUND IN SOURCE -msgid "Password too short" -msgstr "Passwort ist zu kurz" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Passwort: %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "Passwort: Zugriff verweigert" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "Passwörter verschieden" - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "Passwörter verschieden, keine Änderung" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Personen" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Führe eine benutzerdefinierte Aktion aus" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Perl Konfiguration" - -#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774 -msgid "Permission Denied" -msgstr "Zugriff verweigert" - -#: 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 "Persönliche Gruppen" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Persönliche Gruppen" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Persönliche Gruppen:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Telefonnummern" - -#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Voreinstellungen" - -#: 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 "" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "Prepare Stumpf ausgeführt" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Vorherige" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "Vorherige Seite" - -#: 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 "Rolle %1 nicht gefunden." - -#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790 -msgid "Priority" -msgstr "Priorität" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "Priorität beginnt bei" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Privatsphäre:" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Privilegiert" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Privilegierungsstatus: %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Privilegierte Benutzer" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Pseudogruppe für internen Gebrauch" - -#: NOT FOUND IN SOURCE -msgid "Query" -msgstr "Suche" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Suche erstellen" - -#: 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 "Bereich" - -#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65 -#. ($Queue) -#. ($id) -msgid "Queue %1 not found" -msgstr "Bereich %2 nicht gefunden" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Name des Bereichs" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "Bereich existiert bereits" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "Bereich konnte nicht angelegt werden" - -#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "Bereich konnte nicht geladen werden" - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Bereich angelegt" - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Bereich nicht gefunden" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Bereiche" - -#: html/Elements/MyAdminQueues:46 -msgid "Queues I administer" -msgstr "Stapel die ich verwalte" - -#: html/Elements/MySupportQueues:46 -msgid "Queues I'm an AdminCc for" -msgstr "Stapel in denen ich AdminCc bin" - -#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70 -msgid "Quick search" -msgstr "Schnellsuche" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Schnelle Anfrageerstellung" - -#: 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 "RT %1 für %2" - -#: html/Admin/index.html:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "RT Administration" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "RT Fehler" - -#: html/Admin/Tools/Configuration.html:73 -msgid "RT Variables" -msgstr "RT Variablen" - -#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75 -msgid "RT at a glance" -msgstr "RT auf einen Blick" - -#: 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 "" - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "RT konnte die Session nicht speichern" - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr "RT für %1" - -#: html/Search/Simple.html:58 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "RT wird nach allem suchen was in einem Anfragen Betreff steht." - -#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119 -msgid "RT will replace __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "" - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Echter Name" - -#: lib/RT/Transaction_Overlay.pm:725 -#. ($value) -msgid "Reference by %1 added" -msgstr "Referenz von %1 hinzugefügt" - -#: lib/RT/Transaction_Overlay.pm:765 -#. ($value) -msgid "Reference by %1 deleted" -msgstr "Referenz von %1 gelöscht" - -#: lib/RT/Transaction_Overlay.pm:722 -#. ($value) -msgid "Reference to %1 added" -msgstr "Referenz auf %1 hinzugefügt" - -#: lib/RT/Transaction_Overlay.pm:762 -#. ($value) -msgid "Reference to %1 deleted" -msgstr "Referenz auf %1 gelöscht" - -#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72 -msgid "Referred to by" -msgstr "Referenziert von" - -#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "Bezieht sich auf" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Seite alle %1 Minuten aktualisieren." - -#: lib/RT/Transaction_Overlay.pm:811 -#. ($ticket->Subject) -msgid "Reminder '%1' added" -msgstr "Wiedervorlage '%1' zugefügt" - -#: lib/RT/Transaction_Overlay.pm:824 -#. ($ticket->Subject) -msgid "Reminder '%1' completed" -msgstr "Wiedervorlage '%1' abgeschlossen" - -#: lib/RT/Transaction_Overlay.pm:817 -#. ($ticket->Subject) -msgid "Reminder '%1' reopened" -msgstr "Wiedervorlage '%1' erneut geöffnet" - -#: html/Ticket/Reminders.html:46 -#. ($Ticket->Id) -msgid "Reminder ticket #%1" -msgstr "Wiedervorlage Anfrage #%1" - -#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52 -msgid "Reminders" -msgstr "Wiedervorlage" - -#: html/Ticket/Reminders.html:50 -#. ($Ticket->Id) -msgid "Reminders for ticket #%1" -msgstr "Wiedervorlage für Anfrage #%1" - -#: html/Search/Bulk.html:94 -msgid "Remove AdminCc" -msgstr "Entferne AdminCC" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Entferne CC" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Entferne Klient" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Antworten" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Antwort Adresse" - -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Antwort an Klienten" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Antworte auf Anfragen" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "AnfrageBeantwortung" - -#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47 -msgid "Reports" -msgstr "Auswertungen" - -#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111 -msgid "Requestor" -msgstr "Klient" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Klienten" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "Anfragen sollten erlegt werden innerhalb" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "Benötigter Parameter '%1' nicht angegeben" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Zurücksetzen" - -#: 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 "Zuhause" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Erledigen" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "Erledige Anfrage #%1 (%2)" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Erledigt" - -#: html/Tools/Reports/Elements/Tabs:55 -msgid "Resolved by owner" -msgstr "Gelöst durch Besitzer" - -#: html/Tools/Reports/Elements/Tabs:59 -msgid "Resolved in date range" -msgstr "Gelöst in Zeitraum" - -#: html/Tools/Reports/ResolvedByDates.html:52 -msgid "Resolved tickets in period, grouped by owner" -msgstr "Erledigte Tickets in einer Zeitspanne, gruppiert nach Besitzer" - -#: html/Tools/Reports/ResolvedByOwner.html:50 -msgid "Resolved tickets, grouped by owner" -msgstr "Erledigte Tickets, sortiert nach Besitzer" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Ergebnisse" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Passwort wiederholen" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "Zurücksetzen" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Recht weitergegeben" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Recht erteilt" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Recht geladen" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Recht konnte nicht zurückgezogen werden" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Recht nicht gefunden" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Recht nicht gefunden." - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Recht zurückgezogen" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Rechte" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "Rechte für %1 konnten nicht gewährt werden" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "Rechte für %1 konnten nicht entzogen werden" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Rollen" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "Reihen pro Fenster" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Zeilen pro Seite" - -#: lib/RT/Date.pm:422 -msgid "Sat." -msgstr "Sa." - -#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211 -msgid "Save" -msgstr "Speichern" - -#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77 -msgid "Save Changes" -msgstr "Änderungen Sichern" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Einstellungen speichern" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Änderungen Sichern" - -#: lib/RT/SavedSearch.pm:173 -#. ($name) -msgid "Saved search %1" -msgstr "Gespeicherte Suche %1" - -#: NOT FOUND IN SOURCE -msgid "Saved searches" -msgstr "Gespeicherte Suchanfragen" - -#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84 -#. ($scrip->Id) -#. ($id) -msgid "Scrip #%1" -msgstr "Scrip #%1" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Scrip angelegt" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Scrip Felder" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Scrip gelöscht" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Scrips" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Auf alle Bereiche angewandte Scrips" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Suchen" - -#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50 -msgid "Search Preferences" -msgstr "Such Einstellungen" - -#: lib/RT/SavedSearch.pm:115 -msgid "Search attribute load failure" -msgstr "Suchattribut lade Fehler" - -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Suche nach Freigaben" - -#: html/Search/Simple.html:67 -msgid "Search for tickets" -msgstr "Suche nach Anfragen" - -#: 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 "Suche nach Tickets. Eingabe id Nummer, Stapel nach Name, Besitzer nach Benutzername und Klienten nach Email Adresse. RT wird nach Deiner Eingabe in Tickets und Anhängen suchen." - -#: NOT FOUND IN SOURCE -msgid "Search for tickets. Enter id numbers,queues by name" -msgstr "Suche nach Tickets. Eingabe id Nummer,Stapel nach Name" - -#: html/User/Elements/Tabs:62 -msgid "Search options" -msgstr "Such Optionen" - -#: html/Search/Chart.html:56 -#. ($PrimaryGroupBy) -msgid "Search results grouped by %1" -msgstr "Suchergebnis gruppiert nach %1" - -#: lib/RT/SavedSearch.pm:203 -#. ($msg) -msgid "Search update: %1" -msgstr "Suche erneuern: %1" - -#: 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 "Die Suche nach Volltexten in jedem Ticket kann sehr lange dauern, aber wenn Du es benötigst, kannst Du nach jedem Wort in jedem Ticketverlauf suchen indem Du fulltext:Wort eingibst." - -#: bin/rt-crontool:265 -msgid "Security:" -msgstr "Sicherheit:" - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "Siehe auch:" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Benutzerdefinierte Felder anzeigen" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "See exact outgoing email messages and their recipeients" -msgstr "Anzeigen der gesendeten Nachricht und deren Empfänger" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket private commentary" -msgstr "Anzeigen von anfrage-privaten Kommentaren" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "See ticket summaries" -msgstr "Anfrage Zusammenfassungen anzeigen" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "Benutzerdefiniertes Feld anzeigen" - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "GruppeAnzeigen" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "SeeQueue" -msgstr "BereichAnzeigen" - -#: NOT FOUND IN SOURCE -msgid "Select" -msgstr "Auswahl" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Wählen Sie ein benutzerdefiniertes Feld aus" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Wählen Sie eine Gruppe aus" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Stapel auswählen" - -#: html/SelfService/CreateTicketInQueue.html:48 -msgid "Select a queue for your new ticket" -msgstr "Wählen Sie einen Bereich für Ihre neue Anfrage" - -#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Wählen Sie einen Benutzer aus" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Wählen Sie ein benutzerdefiniertes Feld" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Wählen Sie benutzerdefinierte Felder für alle Benutzergruppen aus" - -#: html/Admin/Global/CustomFields/index.html:65 -msgid "Select custom fields for all users" -msgstr "Wählen Sie benutzerdefinierte Felder für alle Benutzer aus" - -#: html/Admin/Global/CustomFields/index.html:76 -msgid "Select custom fields for tickets in all queues" -msgstr "Wählen Sie benutzerdefinierte Felder für alle Anfragen in allen Bereichen aus" - -#: html/Admin/Global/CustomFields/index.html:83 -msgid "Select custom fields for transactions on tickets in all queues" -msgstr "Wählen Sie benutzerdefinierte Felder für Transaktionen mit Anfragen in allen Bereichen aus " - -#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Wählen Sie eine Gruppe aus" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Wählen Sie mehrere Werte aus" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Wählen Sie einen Wert aus" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Wählen Sie einen Bereich aus" - -#: html/Prefs/Quicksearch.html:53 -msgid "Select queues to be displayed on the \"RT at a glance\" page" -msgstr "Wähle Stapel aus, welche auf der \"RT at a glance\" Seite angezeigt werden" - -#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73 -msgid "Select scrip" -msgstr "Wählen Sie ein Scrip aus" - -#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Wählen Sie eine Vorlage aus" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Wählen Sie bis zu %1 Werte aus" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Wählen Sie einen Benutzer aus" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Ausgewählte Benutzerdefinierte Felder" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "Ausgewählte Objekte" - -#: html/Widgets/SelectionBox:209 -msgid "Selections modified. Please save your changes" -msgstr "Auswahl wurde geändert. Bitte speichere Deine Änderungen" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Schickt eine Nachricht an alle Beobachter" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Schickt einen Kommentar an alle Beobachter" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Schickt eine Nachricht an die Klienten und CCs" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Schickt einen Kommentar an die Klienten und CCs" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Schickt eine Nachricht an die Klienten" - -#: etc/initialdata:125 etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Schickt eine Nachricht an die direkt angegebenen CCs und BCCs" - -#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 -msgid "Sends mail to the Ccs" -msgstr "Schickt eine Nachricht an alle CCs" - -#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 -msgid "Sends mail to the Ccs as a comment" -msgstr "Schickt einen Kommentar an alle CCs " - -#: etc/initialdata:102 -msgid "Sends mail to the administrative Ccs" -msgstr "Schickt eine Nachricht an die administrativen CCs" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Schickt einen Kommentar an die administrativen CCs" - -#: etc/initialdata:82 etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Schickt eine Nachricht an den Besitzer" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Sep." - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Zeige" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Zeige Freigaben" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Zeige Spalten" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Zeige Ergebnisse" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Zeige freigegebene Anfragen" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Zeige Grundlagen" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Zeige abgelehnte Anfragen" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Zeige Details" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Zeige anhängige Anfragen" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Zeige auf andere Freigaben wartende Anfragen" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "ShowACL" -msgstr "ACLAnzeigen" - -#: lib/RT/System.pm:85 -msgid "ShowConfigTab" -msgstr "KonfigurationsMenüAnzeigen" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "ShowOutgoingEmail" -msgstr "AusgehendeNachrichtenAnzeigen" - -#: lib/RT/Group_Overlay.pm:168 -msgid "ShowSavedSearches" -msgstr "GespeicherteSuchanfragenAnzeigen" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "ShowScrips" -msgstr "ScripsAnzeigen" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "ShowTemplate" -msgstr "VorlagenAnzeigen" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowTicket" -msgstr "AnfragenAnzeigen" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicketComments" -msgstr "AnfrageKommentareAnzeigen" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "Als Klient einer Anfrage oder Anfrage- bzw. Bereichs-CC eintragen" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Als Anfrage- oder Bereichs-AdminCC eintragen" - -#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168 -msgid "Signature" -msgstr "E-Mail-Signatur" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "Vereinfachte Suche" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Einzel" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "Grösse" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Überspringe Menü" - -#: html/Search/Elements/EditFormat:78 -msgid "Small" -msgstr "Klein" - -#: 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 "Sortieren" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "Phase" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Begonnen" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Beginnt" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Staat" - -#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651 -msgid "Status" -msgstr "Status" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "Statusänderung" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Status von %1 auf %2 geändert" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Übernehmen" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Anfragen übernehmen" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "AnfrageÜbernehmen" - -#: lib/RT/Transaction_Overlay.pm:678 -#. ($Old->Name) -msgid "Stolen from %1" -msgstr "Gestohlen von %1" - -#: html/Search/Elements/EditFormat:81 -msgid "Style" -msgstr "Darstellung" - -#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733 -msgid "Subject" -msgstr "Betreff" - -#: 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 "Betreff wurde auf %1 geändert" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Übermitteln" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Gelungen" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "So." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "SuperBenutzer" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "System" - -#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "System Konfiguration" - -#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989 -msgid "System Error" -msgstr "Systemfehler" - -#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230 -#. ($msg) -msgid "System Error: %1" -msgstr "System Fehlerr: %1" - -#: html/Admin/Tools/index.html:47 -msgid "System Tools" -msgstr "System Werkzeuge" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Systemfehler. Recht nicht delegiert." - -#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920 -msgid "System error. Right not granted." -msgstr "Systemfehler. Recht nicht gewährt." - -#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Systemgruppen" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "SystemRolegroup für internen Gebrauch" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "TEST_STRING" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Übernehmen" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Take tickets" -msgstr "Anfragen übernehmen" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "AnfrageÜbernehmen" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Übernommen" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Vorlage" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Vorlage #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Vorlage gelöscht" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Vorlage nicht gefunden" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Vorlagen eingelesen" - -#: 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 "Vorlagen" - -#: NOT FOUND IN SOURCE -msgid "Text" -msgstr "Text" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Das ist bereits der aktuelle Wert" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "Dies ist kein gültiger Wert für dieses benutzerdefinierte Feld" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Das ist der gleiche Wert" - -#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "Diese Rolle hat dieses Recht bereits" - -#: lib/RT/Queue_Overlay.pm:753 -#. ($args{'Type'}) -msgid "That principal is already a %1 for this queue" -msgstr "Diese Rolle ist bereits ein %1 dieses Bereichs" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Diese Rolle ist bereits ein %1 dieser Anfrage" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Diese Rolle ist nicht ein %1 dieses Bereichs" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Dieser Bereich existiert nicht" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "Diese Anfrage hat ungelöste Abhängigkeiten" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Diese Anfrage gehört bereits diesem Benutzer" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Dieser Benutzer existiert nicht" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Dieser Benutzer ist bereits privilegiert" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Dieser Benutzer ist bereits unprivilegiert" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Dieser Benutzer ist jetzt privilegiert" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Dieser Benutzer ist jetzt unprivilegiert" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "Diesem Benutzer dürfen keine Anfragen aus diesen Bereich gehören" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "Dies ist keine numerische ID" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Grundlagen" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "Der CC einer Anfrage" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The administrative CC of a ticket" -msgstr "Der administrative CC einer Anfrage" - -#: 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 "Das nachfolgende Kommando findet alle aktiven Tickets in dem Stapel 'General' und setzt deren Priorität auf 99 wenn die seit 4 Stunden nicht bearbeitet wurden:" - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "Der neue Wert wurde gesetzt." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "Der Besitzer einer Anfrage" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "Der Klient einer Anfrage" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Diese Kommentare sind generell nicht für den Benutzer sichtbar" - -#: lib/RT/CustomField_Overlay.pm:978 -msgid "This custom field does not apply to that object" -msgstr "Dieses benutzerdefinierte Feld passt nicht zum Objekt" - -#: html/Admin/Tools/Configuration.html:50 -msgid "This feature is only available to system administrators" -msgstr "Dieses Feature ist nur für Systemadministratoren verfügbar" - -#: html/Ticket/Elements/PreviewScrips:96 -msgid "This message will be sent to..." -msgstr "Diese Nachricht wird an folgende Empfänger gesendet:" - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Dieses Werkzeug erlaubt es Benutzern beliebige Perl-Module von RT aus aufzurufen." - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Diese Transaktion scheint keinen Inhalt zu haben" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "Die %1 dringensten Anfragen dieses Benutzers" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Do." - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Anfrage #%1 Alles aktualisieren: %2" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Anfrage #%1: %2" - -#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741 -#. ($T::Tickets{$template_id}->Id) -#. ($T::Tickets{$template_id}->id) -#. ($ticket->Id) -msgid "Ticket %1" -msgstr "Anfrage %1" - -#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775 -#. ($self->Id, $QueueObj->Name) -msgid "Ticket %1 created in queue '%2'" -msgstr "Anfrage %1 wurde im Bereich '%2' angelegt" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Anfrage %1: %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Benutzerdefinierte Anfrage Felder" - -#: html/Ticket/History.html:46 html/Ticket/History.html:49 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket History # %1 %2" -msgstr "Geschichte von Anfrage #%1 %2" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Anfrage erledigt" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "Anfrage Transaktion" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Inhalt der Anfrage" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Art des Inhalts der Anfrage" - -#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763 -msgid "Ticket could not be created due to an internal error" -msgstr "Anfrage konnte aufgrund eines internen Fehlers nicht angelegt werden" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Anfrage Metadaten" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Status der Anfrage geändert" - -#: lib/RT/Search/FromSQL.pm:82 -#. (ref $self) -msgid "TicketSQL search module" -msgstr "TicketSQL Suchmodul" - -#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206 -msgid "Tickets" -msgstr "Anfragen" - -#: html/Tools/Reports/CreatedByDates.html:86 -msgid "Tickets created after" -msgstr "Anfragen erstellt nach" - -#: html/Tools/Reports/CreatedByDates.html:88 -msgid "Tickets created before" -msgstr "Anfragen erstellt vor" - -#: html/Tools/Reports/ResolvedByDates.html:87 -msgid "Tickets resolved after" -msgstr "Anfragen gelöst nach" - -#: html/Tools/Reports/ResolvedByDates.html:89 -msgid "Tickets resolved before" -msgstr "Anfragen gelöst vor" - -#: html/Approvals/Elements/ShowDependency:48 -msgid "Tickets which depend on this approval:" -msgstr "Anfragen, die von dieser Freigabe abhängen:" - -#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72 -msgid "Time Estimated" -msgstr "Geschätzte Zeit" - -#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85 -msgid "Time Left" -msgstr "Verbleibende Zeit" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Arbeitszeit" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Verbleibende Zeit" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Zeit zum anzeigen" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Gearbeitete Zeit" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "Arbeitszeit" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "Titel" - -#: html/Elements/Footer:62 -#. ('sales@bestpractical.com') -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "Füri Hilfe, Schulung, angepasste Entwicklungen oder Lizensierung, kontaktiere bitte %1." - -#: lib/RT/Ticket_Overlay.pm:1170 -msgid "Told" -msgstr "Eingegangen" - -#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49 -msgid "Tools" -msgstr "Werkzeuge" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "Summe" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transaktion" - -#: lib/RT/Transaction_Overlay.pm:805 -#. ($self->Data) -msgid "Transaction %1 purged" -msgstr "Transaktion %1 eliminiert" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Transaktion erstellt" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Benutzerdefinierte Felder bei Transaktionen" - -#: lib/RT/Transaction_Overlay.pm:128 -msgid "Transaction->Create couldn't, as you didn't specify an object type and id" -msgstr "Transaction->Create fehlgeschlagen, da Objekttyp und ID nicht angegeben wurden" - -#: lib/RT/Transaction_Overlay.pm:870 -msgid "Transactions are immutable" -msgstr "Transaktionen sind unveränderbar" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Di." - -#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Typ" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "Nicht implementiert" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Unix Login" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "Unbekannte Inhaltskodierung (Content-Encoding) %1" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "Unbekanntes Feld: $key" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "unbegrenzt" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Unbenannte Suche" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Unprivilegiert" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Nichtausgewähltes benutzerdefiniertes Feld" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "Nichtausgewähltes Objekte" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "Zurückgegeben" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Aktualisieren" - -#: NOT FOUND IN SOURCE -msgid "Update All" -msgstr "Alles aktualisieren" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Anfrage Aktualisieren" - -#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Aktualisierungtyp" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Mehrere Anfragen aktualisieren" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Aktualisierung nicht gespeichert." - -#: NOT FOUND IN SOURCE -msgid "Update selected tickets" -msgstr "Aktualisiere ausgewählte Anfragen" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Aktualisiere Anfrage" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Aktualisiere Anfrage #%1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Aktualisiere Anfrage #%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr "Aktualisierungstyp war weder Korrespondenz noch Kommentar." - -#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Aktualisiert" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Hochladen" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Hochladen mehrerer Dateien" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Hochladen mehrerer Bilder" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Hochladen einer Datei" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Hochladen eines Bildes" - -#: lib/RT/CustomField_Overlay.pm:86 -msgid "Upload up to %1 files" -msgstr "Hochladen von bis zu %1 Dateien" - -#: lib/RT/CustomField_Overlay.pm:81 -msgid "Upload up to %1 images" -msgstr "Hochladen von bis zu %1 Bildern" - -#: html/Tools/Offline.html:93 -msgid "Upload your changes" -msgstr "Änderungen hochladen" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "Benutze andere administrative RT Tools" - -#: lib/RT/Ticket_Overlay.pm:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "Benutzer '%1' konnte nicht gefunden werden" - -#: etc/initialdata:132 etc/initialdata:206 -msgid "User Defined" -msgstr "Benutzerdefiniert" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "Benutzerdefinierte Konditionen und Aktionen" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Benutzerrechte" - -#: NOT FOUND IN SOURCE -msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" -msgstr "Benutzer hat einen unbekannten Aktualisierungstyp für das benutzerdefinierte Feld %1 bei %2-Objekt #%3 verlangt" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "Benutzer konnte nicht angelegt werden: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Benutzer angelegt" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Benutzerdefinierte Gruppe" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Benutzer geladen" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Benutzerdefinierte Gruppe" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Benutzername" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208 -msgid "Users" -msgstr "Benutzer" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Auf diese Kriterien zutreffende Benutzer" - -#: bin/rt-crontool:134 -#. ($transaction->id) -msgid "Using transaction #%1..." -msgstr "" - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Gültige Suche" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "Validierung" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Werte" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "Beobachte" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "BeobachteAlsAdminCc" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Beobachter" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Mi." - -#: html/Tools/MyDay.html:75 -msgid "What I did today" -msgstr "Was ich heute tat" - -#: etc/initialdata:521 -msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" -msgstr "Wenn das Ticket freigegeben wurde von allen involvierten Personen, füge die Korrespondenz dem original Ticket hinzu" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "Wenn das Ticket freigegeben wurde von einer involvierten Personen, füge die Korrespondenz dem original Ticket hinzu" - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "Wenn eine Anfrage erstellt wird" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "Wenn ein freizugebendes Ticket erstellt wurde, informiere den Besitzer und den AdminCc des Tickets über die anstehende Freigabe" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "Wenn irgendetwas passiert" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "Immer wenn eine Anfrage erledigt wird" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "Immer wenn der Besitzer einer Anfrage wechselt" - -#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "Immer wenn sich die Priorität eines Anfragen ändert" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "Immer wenn eine Anfrage den Bereich wechselt" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "Immer wenn sich der Status einer Anfrage ändert" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "Immer wenn eine benutzerdefinierte Bedingung auftritt" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "Immer wenn ein neuer Kommentar eingeht" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "Immer wenn neue Korrespondenz eingeht" - -#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88 -msgid "Work" -msgstr "Arbeit" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "Offline arbeiten" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Gearbeitet" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Sie sind bereits Besitzer dieser Anfrage" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Sie sind kein autorisierter Benutzer" - -#: html/Prefs/Search.html:56 -msgid "You can also edit the predefined search itself" -msgstr "Du kannst die vordefinierte Such auch selbst editieren" - -#: lib/RT/Ticket_Overlay.pm:3025 -msgid "You can only reassign tickets that you own or that are unowned" -msgstr "Sie können nur Anfragen ohne Besitzer zuweisen" - -#: lib/RT/Ticket_Overlay.pm:3021 -msgid "You can only take tickets that are unowned" -msgstr "" - -#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 -#. ($num, $queue) -msgid "You found %1 tickets in queue %2" -msgstr "Sie haben %1 Anfragen im Bereich %2 gefunden" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Sie wurden von RT abgemeldet." - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "Sie haben kein Recht, Anfragen in diesem Bereich anzulegen." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "Sie dürfen in diesem Bereich keine Anfragen erstellen" - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Sie können sich gerne wieder anmelden" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Ihre Anfrage wurde von %1 freigegeben. Andere Freigaben können noch ausstehen." - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "Ihre Anfrage wurde freigegeben." - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "Ihre Anfrage wurde abgewiesen" - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "Ihr Benutzername oder Passwort ist falsch" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "PLZ" - -#: lib/RT/System.pm:87 -msgid "allow creation of saved searches" -msgstr "Erlaube Erstellung von gespeicherten Suchabfragen" - -#: lib/RT/System.pm:86 -msgid "allow loading of saved searches" -msgstr "Erlaube das Laden von gespeicherten Suchabfragen" - -#: html/User/Elements/DelegateRights:80 -#. ($right->PrincipalObj->Object->SelfDescription) -msgid "as granted to %1" -msgstr "wie an %1 gewährt" - -#: NOT FOUND IN SOURCE -msgid "belongs to" -msgstr "gehört zu" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "Diagramm" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "geschlossen" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 -msgid "contains" -msgstr "enthält" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "Tage" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "gelöscht" - -#: NOT FOUND IN SOURCE -msgid "does not belong to" -msgstr "gehört nicht zu" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "enthält nicht" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "enthält nicht" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "gleich" - -#: html/Search/Build.html:547 -msgid "error: can't move down" -msgstr "Fehler: Kann nicht hinunter bewegen" - -#: html/Search/Build.html:569 -msgid "error: can't move left" -msgstr "Fehler: Kann nicht nach links bewegen" - -#: html/Search/Build.html:528 -msgid "error: can't move up" -msgstr "Fehler: Kann nicht hinauf bewegen" - -#: html/Search/Build.html:612 -msgid "error: nothing to delete" -msgstr "Fehler: Nichts zu löschen" - -#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603 -msgid "error: nothing to move" -msgstr "Fehler: Nichts zu bewegen" - -#: html/Search/Build.html:630 -msgid "error: nothing to toggle" -msgstr "Fehler: Nichts zum Umschalten" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "größer als" - -#: 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 "sortiert nach %1" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "Stunden" - -#: 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 "ist" - -#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54 -msgid "isn't" -msgstr "ist nicht" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "kleiner als" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "enthält" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "Min" - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "Minuten" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "Monate" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "neu" - -#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "kein Name" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "kein Wert" - -#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "keine" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "ungleich" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "offen" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "persönliche Gruppe '%1' für Benutzer '%2'" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "Bereich %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "abgewiesen" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "erledigt" - -#: lib/RT/Date.pm:334 -msgid "sec" -msgstr "Sek" - -#: lib/RT/System.pm:85 -msgid "show Configuration tab" -msgstr "Zeige Konfigurationsmenü" - -#: html/Search/Results.html:80 -msgid "spreadsheet" -msgstr "Tabellenkalkulation" - -#: lib/RT/Queue_Overlay.pm:84 -msgid "stalled" -msgstr "zurückgestellt" - -#: html/Search/Results.html:89 -#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle')) -msgid "style: %1" -msgstr "Darstellung: %1" - -#: html/Prefs/MyRT.html:93 -msgid "summary rows" -msgstr "Ergebnisreihen" - -#: 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 "die aufrufende Komponente gab nicht an warum" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "Anfrage #%1 %2" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "unbeschriebene Gruppe %1" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "Benutzer %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "Wochen" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "Jahre" - diff --git a/rt/lib/RT/I18N/en.po b/rt/lib/RT/I18N/en.po deleted file mode 100644 index ddc58f83f..000000000 --- a/rt/lib/RT/I18N/en.po +++ /dev/null @@ -1,99 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"PO-Revision-Date: 2005-10-03 13:44-0400\n" -"Last-Translator: FULL NAME \n" -"Language-Team: rt-devel \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Apr" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Aug" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Dec" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Feb" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Fri" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Home" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Jan" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Jul" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Jun" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Mar" - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "May" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Mon" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Nov" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Oct" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Open" - -#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84 -msgid "Residence" -msgstr "Home" - -#: lib/RT/Date.pm:422 -msgid "Sat." -msgstr "Sat" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Sep" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Sun" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Thu" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Tue" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Wed" - diff --git a/rt/lib/RT/I18N/es.po b/rt/lib/RT/I18N/es.po deleted file mode 100644 index 1e9c4014f..000000000 --- a/rt/lib/RT/I18N/es.po +++ /dev/null @@ -1,6492 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"POT-Creation-Date: 2002-05-02 11:36+0800\n" -"PO-Revision-Date: 2005-10-03 14:25-0400\n" -"Last-Translator: Tomàs Núñez Lirola \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 "" - -#: lib/RT/Record.pm:940 -#. ($label) -msgid "$prefix %1" -msgstr "" - -#: 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 %2 %3 %4:%5:%6 %7" - -#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690 -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 added" -msgstr "Añadido %1 %2" - -#: lib/RT/Date.pm:362 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "Hace %1 %2" - -#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654 -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -msgid "%1 %2 changed to %3" -msgstr "%1 %2 ha cambiado a %3" - -#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696 -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 deleted" -msgstr "%1 %2 borrado" - -#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103 -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -msgid "%1 %2 with template %3" -msgstr "%1 %2 con la plantilla %3" - -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 este caso\\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 "%1 (Sin cambios)" - -#: NOT FOUND IN SOURCE -msgid "%1 - %2 shown" -msgstr "%1 - %2 mostrados" - -#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250 -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -msgid "%1 - An argument to pass to %2" -msgstr "%1 - Un parámetro para pasar a %2" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - El estado de la salida actualiza 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 - Especifica el modulo de acción que quieres usar" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Especifica el modulo de condición que quieres usar" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Especifica el modulo de búsqueda que quieres usar" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -msgstr "" - -#: 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 ScripAction cargado" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "$1 añadido como un valor de %2" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on" -msgstr "%1 alias requieren un TicketId en el que trabajar" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on " -msgstr "%1 alias requieren un TicketId en el que trabajar " - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "%1 alias requieren un TicketId en el que trabajar (de %2) %3" - -#: 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 parece ser un objeto local, pero no se encuentra en la base de datos" - -#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531 -#. ($self->BriefDescription , $self->CreatorObj->Name) -#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) -msgid "%1 by %2" -msgstr "%1 por %2" - -#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800 -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -msgid "%1 changed from %2 to %3" -msgstr "%1 ha cambiado de %2 a %3" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "%1 copiar" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1 no se ha podido fijar a %2" - -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1 no pudo iniciar una transacción (%2)\\n" - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 no pudo fijar el estado a resuelto. La base de datos de RT podría ser inconsistente." - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "%1 creado" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "%1 borrado" - -#: NOT FOUND IN SOURCE -msgid "%1 grouped by %2" -msgstr "%1 agrupado por %2" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "%1 casos de mayor prioridad que poseo" - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I own..." -msgstr "Los %1 tickets de mayor prioridad que poseo..." - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I requested..." -msgstr "Los %1 tickets de mayor prioridad que he pedido" - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "$1 es una herramienta para actuar sobre los tickets con una herramienta de planificación externa, como crom" - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 ha dejado de ser un %2 para esta cola." - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 ha dejado de ser un %2 para este ticket." - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a value for custom field %2" -msgstr "%1 ha dejado de ser un valor para campo personalizable %2" - -#: NOT FOUND IN SOURCE -msgid "%1 isn't a valid Queue id." -msgstr "%1 no es un identificador de Cola válido." - -#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49 -#. ($minutes) -msgid "%1 min" -msgstr "%1 min" - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "%1 más nuevos casos sin propietario" - -#: NOT FOUND IN SOURCE -msgid "%1 not shown" -msgstr "%1 no mostrado" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "%1 ibjetos" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "%1 privilegios" - -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "%1 exitoso\\n" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "%1 tipo desconocido para $MessageId" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "%1 tipo desconocido para %2" - -#: NOT FOUND IN SOURCE -msgid "%1 was created without a CurrentUser\\n" -msgstr "%1 se creó sin CurrentUser\\n" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 resolverá todos los miembros de un grupo de tickets resueltos." - -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "%1 pondrá como pendiente una BASE [local] si es dependiente [o miembro] de una solicitud ligada." - -#: lib/RT/CustomField_Overlay.pm:894 -msgid "%1's %2 objects" -msgstr "%1's %2 objetos" - -#: lib/RT/CustomField_Overlay.pm:895 -msgid "%1's %2's %3 objects" -msgstr "%1's %2's %3 objetos" - -#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57 -#. ($object->Name) -#. ($Object->Name) -msgid "%1's saved searches" -msgstr "búsquedas guardadas de %1" - -#: lib/RT/Transaction_Overlay.pm:481 -#. ($self) -msgid "%1: no attachment specified" -msgstr "%1: ningún archivo adjunto especificado" - -#: 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' es un valor inválido para el estado" - -#: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "'%1' no es una acción reconocida. " - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete group member)" -msgstr "(Marque la caja para borrar al miembro del grupo)" - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete scrip)" -msgstr "(Marque la caja para borrar el scrip)" - -#: 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 "(Marque la caja para borrar)" - -#: NOT FOUND IN SOURCE -msgid "(Check boxes to delete)" -msgstr "(Marque las cajas para borrar)" - -#: html/Ticket/Elements/PreviewScrips:99 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(Marque las cajas para deshabilitar notificaciones a los receptores listados)" - -#: html/Ticket/Elements/PreviewScrips:123 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "(Marque las cajas para habilitar notificaciones a los receptores listados)" - -#: html/Ticket/Create.html:218 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(Entrar ids o URLs de casos, separados por espacios)" - -#: 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 "(Si se deja vacio, pasara por defecto a %1)" - -#: NOT FOUND IN SOURCE -msgid "(No Value)" -msgstr "(Sin Valor)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(No hay campos custom)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Sin miembros)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Sin scrips)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Sin plantillas)" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(Ninguno)" - -#: 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 "(Envía una copia oculta de esta actualización a una lista delimitada por comas de direcciones de email. NO cambia quien recibirá futuras actualizaciones)" - -#: 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 "(Envía una copia oculta de esta actualización a una lista de direcciones de correo delimitada por comas. No cambia a quien recibirá futuras actualizaciones.)" - -#: 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 "(Envía una copia oculta de esta actualización a una lista delimitada por comas de direcciones de email. No cambia quien recibirá futuras actualizaciones.)" - -#: 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 "(Envía una copia oculta de esta actualización a una lista delimitada por comas de direcciones de email administrativas. Estas personas recibirán las futuras actualizaciones.)" - -#: 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 "(Envía una copia de esta actualización a una lista delimitada por comas de direcciones de email administrativas. Estas personas recibirán futuras actualizaciones.)" - -#: 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 "(Envía una copia oculta de esta actualización a una lista delimitada por comas de direcciones de email.NO cambia quien recibirá futuras actualizaciones." - -#: 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 "(Envía una copia de esta actualización a una lista de direcciones de correo delimitada por comas. No cambia quien recibirá futuras actualizaciones.)" - -#: 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 "(Envía una copia de esta actualización a una lista de direcciones de correo delimitada por comas. No cambia quien recibirá futuras actualizaciones.)" - -#: 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 "(Envía una copia de esta actualización a una lista de direcciones de correo delimitada por comas. Estas personas recibirán actualizaciones futuras." - -#: 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 "(Envía una copia de esta actualización a una lista de direcciones de correo delimitada por comas. Estas personas recibirán futuras actualizaciones." - -#: html/Admin/Elements/EditScrip:96 -msgid "(Use these fields when you choose 'User Defined' for a condition or action)" -msgstr "(Usar estos campos cuando se selecciona 'Definido por el usuario' para una condición o acción)" - -#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53 -msgid "(Will not be sent email)" -msgstr "" - -#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 -msgid "(empty)" -msgstr "(vacío)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(no hay nombres listados)" - -#: NOT FOUND IN SOURCE -msgid "(no subject)" -msgstr "(sin asunto)" - -#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591 -msgid "(no value)" -msgstr "(sin valor)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(sin valores)" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(solo un ticket)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(pendiente de aprobación)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "(pendiente de otra Recopilación)" - -#: NOT FOUND IN SOURCE -msgid "(pending other tickets)" -msgstr "(pendiente de otros tickets)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(requerido)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(sin titulo)" - -#: 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 "Los 25 tickets de mayor prioridad que poseo..." - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "Los 25 tickets de mayor prioridad que he solicitado..." - -#: 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 " %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 "Una plantilla en blanco" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "Una contraseña no fue establecida, por lo tanto el usuario no podrá logearse." - -#: NOT FOUND IN SOURCE -msgid "ACE Deleted" -msgstr "ACE Borrado" - -#: NOT FOUND IN SOURCE -msgid "ACE Loaded" -msgstr "ACE Cargado" - -#: NOT FOUND IN SOURCE -msgid "ACE could not be deleted" -msgstr "ACE no se pudo borrar" - -#: NOT FOUND IN SOURCE -msgid "ACE could not be found" -msgstr "ACE no se encontró" - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE no encontrado" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACEs solo pueden ser creadas o borradas." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "Y" - -#: NOT FOUND IN SOURCE -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Abortando para prevenir modificaciones no intencionadas al ticket\\n" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Sobre mi" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Control de acceso" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Acción" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "Acción %1 no encontrada" - -#: NOT FOUND IN SOURCE -msgid "Action committed." -msgstr "Acción realizada." - -#: bin/rt-crontool:171 -msgid "Action committed.\\n" -msgstr "Acción realizada.\\n" - -#: lib/RT/Scrip_Overlay.pm:168 -msgid "Action is mandatory argument" -msgstr "" - -#: bin/rt-crontool:167 -msgid "Action prepared..." -msgstr "Acción preparada..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Añadir" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Añadir AdminCc" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Añadir Cc" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Añadir Columnas" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Añadir Criterio" - -#: html/Ticket/Create.html:147 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Añadir más archivos" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Añadir solicitante" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Añadir Valor" - -#: NOT FOUND IN SOURCE -msgid "Add a keyword selection to this queue" -msgstr "Añadir una seleccion de palabra clave a esta cola" - -#: NOT FOUND IN SOURCE -msgid "Add a new a global scrip" -msgstr "Añadir un nuevo scrip global" - -#: NOT FOUND IN SOURCE -msgid "Add a scrip to this queue" -msgstr "Añadir un scrip a esta cola" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Añadir un scrip que se aplicará a todas las colas" - -#: html/Search/Build.html:109 html/Search/Build.html:94 -msgid "Add and Search" -msgstr "Añadir y Buscar" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "Añadir comentarios o respuestas a los tickets seleccionados" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Añadir miembro" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Añadir nuevos observadores" - -#: html/Search/Build.html:85 -msgid "Add these terms to your search" -msgstr "Añadir estos términos a tu búsqueda" - -#: 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 "Añadir, borrar y modificar campo personalizo para objetos" - -#: 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 "Principal ha sido añadido como %1 para esta cola" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Principal ha sido añadido como %1 para este ticket" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Dirección 1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Dirección 2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "Admin Cc" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "Admin Comment" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "Admin Correspondence" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Administración de colas" - -#: NOT FOUND IN SOURCE -msgid "Admin users" -msgstr "Administración de usuarios" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Adminsitración de la configuración global" - -#: NOT FOUND IN SOURCE -msgid "Admin/Groups" -msgstr "Administración de Grupos" - -#: NOT FOUND IN SOURCE -msgid "Admin/Queue/Basics" -msgstr "Administración de una cola" - -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "AdminAllPersonalGroups" - -#: 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 "AdminComment" - -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" -msgstr "AdminCorrespondence" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "AdminCustomFields" -msgstr "AdminCustomFields" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "AdminGroup" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "AdminGroupMembership" - -#: lib/RT/System.pm:80 -msgid "AdminOwnPersonalGroups" -msgstr "AdminOwnPersonalGroups" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "AdminQueue" -msgstr "AdminQueue" - -#: lib/RT/System.pm:81 -msgid "AdminUsers" -msgstr "AdminUsers" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Cc Administrativa" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Avanzado" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "Búsqueda avanzada" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "Después" - -#: NOT FOUND IN SOURCE -msgid "Age" -msgstr "Edad" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "Agregador" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "Todas las Aprobaciones Superadas" - -#: NOT FOUND IN SOURCE -msgid "All Custom Fields" -msgstr "Todos los Campos Personalizados" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Todas las colas" - -#: NOT FOUND IN SOURCE -msgid "Always sends a message to the requestors independent of message sender" -msgstr "Siempre envía un mensaje a los solicitantes independientemente del remitente del mensaje" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "Y/O" - -#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "Aplica a" - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Aplicar" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Aplicar cambios" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Aprobación" - -#: 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 "Aprobación #%1: %2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Aprobación #%1: No se han guardado las notas debido a un error del sistema" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Aprobación #%1: Notas guardadas" - -#: NOT FOUND IN SOURCE -msgid "Approval Details" -msgstr "Detalles de la aprobación" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Aprobación superada" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Aprobación rechazada" - -#: NOT FOUND IN SOURCE -msgid "Approval diagram" -msgstr "Diagrama de la aprobación" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Aprobar" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Notas del aprobador: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Abr." - -#: NOT FOUND IN SOURCE -msgid "April" -msgstr "Abril" - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Ascendente" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Assign and remove custom fields" -msgstr "Asignar y borrar campos personalizados" - -#: 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 "Adjunto" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Adjuntar archivo" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Archivo adjunto" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Archivo adjunto '%1' no pudo ser cargado" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Archivo adjunto creado" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Nombre del archivo adjunto" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Archivos adjuntos" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "Atributo borrado" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Ago." - -#: NOT FOUND IN SOURCE -msgid "August" -msgstr "Agosto" - -#: NOT FOUND IN SOURCE -msgid "AuthSystem" -msgstr "Sistema de autenticación" - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "Autorespuesta" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Autorespuesta a los solicitantes" - -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "AutoreplyToRequestors" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "Firma PGP incorrecta: %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "Identificador de archivo adjunto erróneo. No se puede encontrar el archivo '%1'\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad data in %1" -msgstr "Datos incorrectos en %1" - -#: NOT FOUND IN SOURCE -msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "Número de transacción incorrecta para el archivo adjunto. %1 debe ser %2\\n" - -#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Basicos" - -#: 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 "Asegúrese de salvar sus cambios" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "Antes" - -#: NOT FOUND IN SOURCE -msgid "Begin Approval" -msgstr "Begin Approval" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Vacio" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bookmarkable URL for this search" -msgstr "URL para guardar esta búsqueda en sus marcadores" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Encabezados breves" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "Actualización en bloque" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Actualización de varios tickets en bloque" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "No se pueden modificar los usuarios del sistema" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Can this principal see this queue" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "No se puede agregar un campo personalizable si no tiene un nombre" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($Class) -msgid "Can't find a collection class for '%1'" -msgstr "No se puede encontrar una clase de recopilación para '%1'" - -#: html/Search/Build.html:286 -msgid "Can't find a saved search to work with" -msgstr "No se puede encontrar una búsqueda guardada para trabajar" - -#: lib/RT/Link_Overlay.pm:159 -msgid "Can't link a ticket to itself" -msgstr "No se puede ligar un ticket a sí mismo" - -#: NOT FOUND IN SOURCE -msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "No se puede fusionar dentro de un caso ya fusionado. Nunca deberia recibir este error" - -#: html/Widgets/SavedSearch:63 -#. (loc($self->{SearchType})) -msgid "Can't save %1" -msgstr "" - -#: html/Search/Build.html:290 -msgid "Can't save this search" -msgstr "No se puede grabar esta búsqueda" - -#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "No se puede especificar origen y destino al mismo tiempo" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "No se puede crear el usuario: %1" - -#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58 -msgid "Category" -msgstr "Categoria" - -#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112 -msgid "Cc" -msgstr "Cc" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -msgstr "Cambiar contraseña" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Seleccionar Todo" - -#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "Selecciona la casilla para borrar" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Seleccione la caja para quitar el permiso" - -#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Hijo" - -#: html/NoAuth/js/util.js:201 -msgid "Choose a date" -msgstr "Elije una fecha" - -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 -msgid "City" -msgstr "Ciudad" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Borrar Todo" - -#: html/Helpers/CalPopup.html:51 -msgid "Close window" -msgstr "" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Cerrado" - -#: NOT FOUND IN SOURCE -msgid "Closed requests" -msgstr "Solicitudes cerradas" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Casos cerrados" - -#: 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 "No se entendió el comando!\\n" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Comentario" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Dirección de comentario" - -#: NOT FOUND IN SOURCE -msgid "Comment not recorded" -msgstr "Comentario no grabado" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Comentario sobre los tickets" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "CommentOnTicket" - -#: NOT FOUND IN SOURCE -msgid "Comments" -msgstr "Comentarios" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Comentarios (no se envían a los solicitantes)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Comentarios (no se envían a los solicitantes)" - -#: NOT FOUND IN SOURCE -msgid "Comments about %1" -msgstr "Comentarios acerca de %1" - -#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Comentarios acerca de este usuario" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Comentarios añadidos" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "Acción realizada" - -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "Compilar restricciones" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Condición" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "La condición coincide..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Condición no encontrada" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Configuración" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Confirmar" - -#: NOT FOUND IN SOURCE -msgid "ContactInfoSystem" -msgstr "Información de contacto" - -#: NOT FOUND IN SOURCE -msgid "Contacted date '%1' could not be parsed" -msgstr "Fecha de contacto '%1' no pudo ser leida" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Contenido" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Coould not create group" -msgstr "No se pudo crear grupo" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Copiar" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Correspondencia" - -#: NOT FOUND IN SOURCE -msgid "Correspondence Address" -msgstr "Dirección de corresponencia" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Correspondencia agregada" - -#: NOT FOUND IN SOURCE -msgid "Correspondence not recorded" -msgstr "Correspondencia no guardada" - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. " -msgstr "No se pudo añadir un nuevo valor de campo personalizable para el ticket. " - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. %1 " -msgstr "No se pudo añadir un nuevo valor de campo personalizable para el ticket. %1 " - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "No se pudo añadir nuevo valor de campo personalizado." - -#: lib/RT/Record.pm:1660 -#. (, $value_msg) -msgid "Could not add new custom field value. %1 " -msgstr "No se pudo añadir nuevo valor de campo personalizado. %1 " - -#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073 -msgid "Could not change owner. " -msgstr "No se pudo cambiar el propietario. " - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "No se puede crear un CampoPersonalizable" - -#: html/Admin/Elements/EditCustomField:113 -#. ($msg) -msgid "Could not create CustomField: %1" -msgstr "No se pudo crear CustomField: %1" - -#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "No se pudo crear el grupo" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "No se pudo crear la plantilla: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "No se pudo crear el ticket. Cola no seleccionada" - -#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496 -msgid "Could not create user" -msgstr "No se pudo crear el usuario" - -#: NOT FOUND IN SOURCE -msgid "Could not create watcher for requestor" -msgstr "No se pudo crear un observador para el solicitante" - -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" -msgstr "No se pudo encontrar un ticket con identificador $1" - -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." -msgstr "No se pudo encontrar el grupo %1." - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "No se pudo encontrar o crear el usuario" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "No se pudo encontrar ese principal" - -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." -msgstr "No se pudo encontrar el usuario %1." - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "No se pudo cargar CustomField %1" - -#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 -msgid "Could not load group" -msgstr "No se puede cargar el grupo" - -#: lib/RT/SavedSearch.pm:119 -#. ($privacy) -msgid "Could not load object for %1" -msgstr "No se pudo cargar objeto para %1" - -#: lib/RT/SavedSearch.pm:197 -msgid "Could not load search attribute" -msgstr "No se pudo cargar atributo de búsqueda" - -#: lib/RT/Queue_Overlay.pm:761 -#. ($args{'Type'}) -msgid "Could not make that principal a %1 for this queue" -msgstr "No se pudo hacer ese principal un %1 para esta cola" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "No se pudo hacer ese principal un %1 para este ticket" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "No se pudo quitar ese principal como un %1 para esta cola" - -#: NOT FOUND IN SOURCE -msgid "Could not remove that principal as a %1 for this ticket" -msgstr "No se pudo quitar ese principal como un %1 para este ticket" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "No se pudo establecer la información del usuario" - -#: 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 "No se pudo agregar el miembro al grupo" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "No se pudo crear la transacción: %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "No se pudo averiguar que hacer a partir de la firma gpg de la respuesta" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find group\\n" -msgstr "No se pudo encontrar el grupo\\n" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "No se pudo encontrar la fila" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "No pudo enconcontrar ese principal" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "No se pudo encontrar ese valor" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find that watcher" -msgstr "No se pudo encontrar ese observador" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "No se pudo encontrar el usuario\\n" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "No se pudo cargar %1 desde la base de datos de usuarios.\\n" - -#: html/Admin/CustomFields/UserRights.html:149 -#. ($id) -msgid "Couldn't load Class %1" -msgstr "No se pudo cargar Class %1" - -#: html/Admin/CustomFields/GroupRights.html:107 -#. ($id) -msgid "Couldn't load CustomField %1" -msgstr "No se pudo cargar CustomField %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load KeywordSelects." -msgstr "No se pudo cargar KeywordSelects" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" -msgstr "No se pudo cargar el archivo de configuración de RT '%1' %2" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "No se pudieron cargar los Scrips." - -#: 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 "No se pudo cargar el grupo %1" - -#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238 -msgid "Couldn't load link" -msgstr "No se puedo cargar el enlace" - -#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 -#. ($id) -msgid "Couldn't load object %1" -msgstr "No se pudo cargar objeto %1" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "No se pudo cargar la cola" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "No se pudo cargar la cola %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "No se pudo cargar el scrip" - -#: 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 "No se pudo cargar la plantilla" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load that user (%1)" -msgstr "No se pudo cargar ese usuario (%1)" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "No se pudo cargar el ticket '%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 "País" - -#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235 -msgid "Create" -msgstr "Crear" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Crear Tickets" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Crear CampoPersonalizable" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "Crear un campo personalizables para la cola %1" - -#: NOT FOUND IN SOURCE -msgid "Create a CustomField which applies to all queues" -msgstr "Crear un campo personalizable que se aplique a todas las colas" - -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "Crear un nuevo campo personalizable" - -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "Crear un nuevo scrip global" - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Creat un nuevo grupo" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Crear un nuevo grupo personal" - -#: NOT FOUND IN SOURCE -msgid "Create a new queue" -msgstr "Crear una nueva cola" - -#: NOT FOUND IN SOURCE -msgid "Create a new scrip" -msgstr "Crear un nuevo scrip" - -#: NOT FOUND IN SOURCE -msgid "Create a new template" -msgstr "Crear una nueva plantilla" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Crear un nuevo ticket" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Crear un nuevo usuario" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Crear una cola" - -#: NOT FOUND IN SOURCE -msgid "Create a queue called" -msgstr "Crear una cola llamada " - -#: NOT FOUND IN SOURCE -msgid "Create a request" -msgstr "Crear una solicitud" - -#: html/Admin/Queues/Scrip.html:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Crear un scrip para la cola %1" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Crear una plantilla" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Crear un ticket" - -#: NOT FOUND IN SOURCE -msgid "Create failed: %1 / %2 / %3 " -msgstr "Creación fallida: %1 / %2 / %3 " - -#: NOT FOUND IN SOURCE -msgid "Create failed: %1/%2/%3" -msgstr "Creación fallida: %1 / %2 / %3 " - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Crear nuevos tickets basados en esta plantilla de scrip" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Crear ticket" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Crear tickets en esta cola" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Crear, borrar y modifical campos personalizables" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Crear, borrar y modificar colas" - -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "Crear, borrar y modificar los miembros de cualquier grupo personal de usuario" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Crear, borrar y modificar los miembros de los grupos personales" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Crear, borrar y modificar usuarios" - -#: lib/RT/System.pm:87 -msgid "CreateSavedSearch" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "CreateTicket" -msgstr "CreateTicket" - -#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169 -msgid "Created" -msgstr "Creado" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "CampoPersonalizable %1 creado" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Created template %1" -msgstr "Plantilla %1 creada" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Creador" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Relaciones actuales" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Scrips actuales" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Miembros actuales" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Permisos actuales" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "Búsqueda actual" - -#: NOT FOUND IN SOURCE -msgid "Current search criteria" -msgstr "Criterio de búsqueda actual" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Observadores actuales" - -#: NOT FOUND IN SOURCE -msgid "Custom Field #%1" -msgstr "Campo personalizable #%1" - -#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "Campos personalizables" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "Campos Personalizados para %1" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Código de limpieza de acción personalizable" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Código de preparación de acción personalizable" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Condición personalizable" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 %2 %3" -msgstr "Campo personalizado %1 %2 %3" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "Campo personalizado %1 tiene un valor." - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "Campo personalizado %1 no tiene un valor." - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Campo personalizado %1 no encontrado" - -#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121 -#. ($cf) -#. ($obj->Name) -msgid "Custom field '%1'" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Custom field deleted" -msgstr "Campo personalizable borrado" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Campo personalizado no encontrado" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "El valor del campo %1 no pudo ser encontrado para el campo %2" - -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "Valor del campo cambiado de %1 a %2" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "El valor del campo no pudo ser borrado" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "El valor del campo no pudo se encontrado" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Valor del campo borrado" - -#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "CustomField" - -#: 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 "Error de datos" - -#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65 -msgid "Dates" -msgstr "Fechas" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Dic." - -#: NOT FOUND IN SOURCE -msgid "December" -msgstr "Diciembre" - -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" -msgstr "Plantilla de autorespuesta por defecto" - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Plantilla de autorespuesta por defect" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Cola por Defecto" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Solicitante por Defecto" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Plantilla de comentario de admin por defecto" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Plantilla de correspondencia de admin por defecto" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Plantilla de correspondencia por defecto" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Plantilla de trasacciones por defecto" - -#: NOT FOUND IN SOURCE -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Por defecto: %1/%2 ha cambiado de %3 a %4" - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Delegar derechos" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "Delegar derechos especificos que te han sido concedidos" - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "DelegateRights" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Delegar" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "Borrar" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "Borrar Plantilla" - -#: lib/RT/SavedSearch.pm:220 -#. ($msg) -msgid "Delete failed: %1" -msgstr "Borrado fallido: %1" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Borrar scripts seleccionados" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Borrar tickets" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "DeleteTicket" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "Búsqueda borrada" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object could break referential integrity" -msgstr "Al borrar este objeto, se puede romper la integridad referencial" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "Al borrar este objeto, se romperá la integridad referencial" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Al borrar este objeto, se violará la integridad referencial" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity." -msgstr "Al borrar este objeto, se violará la integridad referencial." - -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity. That's bad." -msgstr "Al borrar este objeto, se violará la integridad referencial. Eso es malo." - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Denegar" - -#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "Dependen de este ticket" - -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "Dependencias: \\n" - -#: lib/RT/Transaction_Overlay.pm:718 -#. ($value) -msgid "Dependency by %1 added" -msgstr "Dependencia para %1 añadida" - -#: lib/RT/Transaction_Overlay.pm:758 -#. ($value) -msgid "Dependency by %1 deleted" -msgstr "Dependencia para %1 borrada" - -#: lib/RT/Transaction_Overlay.pm:715 -#. ($value) -msgid "Dependency on %1 added" -msgstr "Dependencia en %1 añadida" - -#: lib/RT/Transaction_Overlay.pm:755 -#. ($value) -msgid "Dependency on %1 deleted" -msgstr "Dependencia en %1 borrada" - -#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46 -msgid "Depends on" -msgstr "Depende de" - -#: NOT FOUND IN SOURCE -msgid "DependsOn" -msgstr "DependsOn" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Descendiente" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Describa el problema debajo" - -#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70 -msgid "Description" -msgstr "Descripción" - -#: NOT FOUND IN SOURCE -msgid "Details" -msgstr "Detalles" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Despliegue" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Mostrar Lista de Control de Acceso" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Mostrar Columnas" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Mostrar plantillas de scrip para esta cola" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Mostrar scrips para esta cola" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Modo de despliegue" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "Mostrar búsquedas guardadas para este grupo" - -#: NOT FOUND IN SOURCE -msgid "Display ticket #%1" -msgstr "Despliega ticket #%1" - -#: 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 "Hacer cualquier cosa y todo" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "No recargar esta página" - -#: NOT FOUND IN SOURCE -msgid "Don't show search results" -msgstr "No mostrar los resultados de la búsqueda" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Descargar" - -#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Descargar como fichero delimitado por tabuladores" - -#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173 -msgid "Due" -msgstr "Esperado" - -#: NOT FOUND IN SOURCE -msgid "Due date '%1' could not be parsed" -msgstr "La fecha esperada '%1' no pudo ser leída" - -#: NOT FOUND IN SOURCE -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "ERROR: No se pudo cargar el ticket '%1': %2.\\n" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Editar" - -#: 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 "Editar campos personalizados para %1" - -#: html/Admin/Global/CustomFields/Groups.html:54 -msgid "Edit Custom Fields for all groups" -msgstr "Editar Campos Personalizados para todos los grupos" - -#: html/Admin/Global/CustomFields/Users.html:54 -msgid "Edit Custom Fields for all users" -msgstr "Editar Campos Personalizados para todos los usuarios" - -#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54 -msgid "Edit Custom Fields for tickets in all queues" -msgstr "Editar Campos Personalizados para casos en todas las colas" - -#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Editar relaciones" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Editar Consulta" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "Editar Búsqueda" - -#: html/Admin/Queues/Templates.html:63 -#. ($QueueObj->Name) -msgid "Edit Templates for queue %1" -msgstr "Editar plantillas para la cola %1" - -#: NOT FOUND IN SOURCE -msgid "Edit keywords" -msgstr "Editar palabras clave" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "Editar búsquedas guardadas para este grupo" - -#: NOT FOUND IN SOURCE -msgid "Edit scrips" -msgstr "Editar acciones" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Editar plantillas del sistema" - -#: NOT FOUND IN SOURCE -msgid "Edit templates for %1" -msgstr "Editar plantillas para %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 "Editando configuración para la cola %1" - -#: NOT FOUND IN SOURCE -msgid "Editing Configuration for user %1" -msgstr "Editando configuración para el usuario %1" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Editando campo %1" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Editando los miembros del grupo %1" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Editando los miembros para el grupo personal %1" - -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "Editando plantilla %1" - -#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608 -msgid "Either base or target must be specified" -msgstr "La base o el destinatario deben ser especificados" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "Correo" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "La dirección de correo ya está en uso" - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "Correo Electrónico" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "Codificación para el correo" - -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Habilitado (Desmarcar esta caja deshabilita este campo personalizable)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Habilitado (Desmarcar esta caja deshabilita este campo personalizable)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Habilitado (Desmarcar esta caja, deshabilita esta cola)" - -#: NOT FOUND IN SOURCE -msgid "Enabled Custom Fields" -msgstr "Campos Personalizables Habilitados" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Colas habilitadas" - - -#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138 -#. (loc_fuzzy($msg)) -msgid "Enabled status %1" -msgstr "Estado %1 habilitado" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -msgstr "Estado habilitado: %1" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Introducir multiples valores" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Entrar objetos o URIs para linkar a los objetos. Separar múltiples entradas con espacios." - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Introducir un valor" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Entrar colas o URIs para linkar a las colas. Separar múltiples entradas con espacios." - -#: html/Elements/EditLinks:119 html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Ingrese los números de ticket o las URL que llevan hacia el ticket. Separe multiples entradas con espacios" - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Entrar hasta %1 valor/es" - -#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47 -msgid "Error" -msgstr "Error" - -#: NOT FOUND IN SOURCE -msgid "Error adding watcher" -msgstr "Error añadiendo observador" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Error en los parámetros para Queue->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Error en los parámetros para Queue->DelWatcher" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Error en los parámetros para Queue->DeleteWatcher" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Error en los parámetros para Queue->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "Error en los parámetros para Queue->DelWatcher" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Error en los parámetros para Ticket->DeleteWatcher" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "Escalar tickets" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Estimado" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Todos" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Ejemplo" - -#: NOT FOUND IN SOURCE -msgid "ExternalAuthId" -msgstr "ExternalAuthId" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr "ExternalContactInfoId" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Información extra" - -#: lib/RT/SavedSearch.pm:177 -msgid "Failed to create search attribute" -msgstr "Fallado en crear atributo de búsqueda" - -#: lib/RT/User_Overlay.pm:376 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Problema para encontrar el pseudogrupo de usuarios 'Privileged'" - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Problema para encontrar el pseudogrupo de usuarios 'Unprivileged'" - -#: bin/rt-crontool:206 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "Error al cargar el modulo %1. (%2)" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "Error al cargar objeto para %1" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Feb." - -#: NOT FOUND IN SOURCE -msgid "February" -msgstr "Febrero" - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "Nombre de fichero" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Rellenar en multiples areas de texto" - -#: lib/RT/CustomField_Overlay.pm:74 -msgid "Fill in multiple wikitext areas" -msgstr "Rellenar en multiples areas wikitext" - -#: lib/RT/CustomField_Overlay.pm:70 -msgid "Fill in one text area" -msgstr "Rellenar en un area de texto" - -#: lib/RT/CustomField_Overlay.pm:75 -msgid "Fill in one wikitext area" -msgstr "Rellenar en un area wikitext" - -#: 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 "Rellenar en hasta %1 areas de texto" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "Rellenar en hasta %1 areas wikitext" - -#: NOT FOUND IN SOURCE -msgid "Fin" -msgstr "Fin" - -#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841 -msgid "Final Priority" -msgstr "Prioridad Final" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "FinalPriority" - -#: NOT FOUND IN SOURCE -msgid "Find group whose" -msgstr "Encontrar grupo que" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Encontrar grupos cuyo" - -#: NOT FOUND IN SOURCE -msgid "Find new/open tickets" -msgstr "Encontrar tickets nuevos/abiertos" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Encontrar gente que" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Encontrar tickets" - -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "Aprobación final" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Primero" - -#: NOT FOUND IN SOURCE -msgid "First page" -msgstr "Primera página" - -#: 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 "Forzar cambio" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Formato" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "Encontrado %quant(%1,ticket)" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Objeto encontrado" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "FreeformContactInfo" - -#: NOT FOUND IN SOURCE -msgid "FreeformMultiple" -msgstr "FreeformMultiple" - -#: NOT FOUND IN SOURCE -msgid "FreeformSingle" -msgstr "FreeformSingle" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Vie." - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Encabezados completos" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Obtener plantilla de fichero" - -#: NOT FOUND IN SOURCE -msgid "Getting the current user from a pgp sig\\n" -msgstr "Obteniendo el usuario de la firma pgp" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "Given to %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 "Campos Personalizados Globales" - -#: NOT FOUND IN SOURCE -msgid "Global Keyword Selections" -msgstr "Selección de palabras clave globales" - -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -msgstr "Acciones Globales" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "Configuración de Campos Personalizados Globales" - -#: 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 "Plantilla global" - -#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89 -msgid "Go" -msgstr "Ir" - -#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57 -msgid "Go!" -msgstr "¡Ir!" - -#: NOT FOUND IN SOURCE -msgid "Good pgp sig from %1\\n" -msgstr "Firma pgp correcta de %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Goto page" -msgstr "Ir a página" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Ir a ticket" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Grupo" - -#: NOT FOUND IN SOURCE -msgid "Group %1 %2: %3" -msgstr "Grupo %1 %2: %3" - -#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Derechos del grupo" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "El grupo ya tiene miembros" - -#: NOT FOUND IN SOURCE -msgid "Group could not be created." -msgstr "El grupo no se pudo crear" - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "El grupo no se pudo crear: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Grupo creado" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "El grupo no tiene este miembro" - -#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510 -msgid "Group not found" -msgstr "Grupo no encontrado" - -#: NOT FOUND IN SOURCE -msgid "Group not found.\\n" -msgstr "Grupo no entontrado\\n" - -#: NOT FOUND IN SOURCE -msgid "Group not specified.\\n" -msgstr "Grupo no especificado\\n" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210 -msgid "Groups" -msgstr "Grupos" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Los grupos no pueden ser miembros de sus propios miembros" - -#: html/Admin/Groups/index.html:86 -msgid "Groups matching search criteria" -msgstr "Grupos coincidentes con el criterio de búsqueda" - -#: html/Ticket/Elements/ShowRequestor:77 -msgid "Groups this user belongs to" -msgstr "Grupos a los que este usuario pertenece" - -#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 -msgid "Hello!" -msgstr "Hola!" - -#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 -#. ($name) -msgid "Hello, %1" -msgstr "Hola, %1" - -#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Historial" - -#: html/Admin/Groups/History.html:62 -#. ($GroupObj->Name) -msgid "History of the group %1" -msgstr "Historico del grupo %1" - -#: html/Admin/Users/History.html:62 -#. ($UserObj->Name) -msgid "History of the user %1" -msgstr "Historico del usuario %1" - -#: NOT FOUND IN SOURCE -msgid "HomePhone" -msgstr "Tel Casa" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Inicio" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "Tengo %quant(%1,concrete mixer)." - -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." -msgstr "Tengo [quant,_1,concrete mixer]." - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "Estoy perdido" - -#: 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 "Identidad" - -#: etc/initialdata:429 -msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "Si una aprobación es rechazada, rechazar la original y borrar las aprobaciones pendientes" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "Si no se especifica ningún Solicitante, crear casos con este solicitante." - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Si no se especifica ninguna cola, crear casos en esta cola." - -#: 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 "Si esta herramienta estaba setgid, un usuario hostil local podría usar esta herramienta para conseguir acceso administrativo a RT." - -#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60 -msgid "If you've updated anything above, be sure to" -msgstr "Si ha actualizado algo más arriba, no olvide" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Valor ilegal para %1" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Campo inmutable" - -#: NOT FOUND IN SOURCE -msgid "Include disabled custom fields in listing." -msgstr "Incluir campos personalizables deshabilitados en el listado." - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Incluir grupos deshabilitados en el listado." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Incluir colas deshabilitadas en el listado" - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Incluir usuarios deshabilitados en la búsqueda" - -#: html/Admin/CustomFields/Modify.html:113 -msgid "Include page" -msgstr "Incluir pagina" - -#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441 -msgid "Incomplete Query" -msgstr "Consulta Incompleta" - -#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438 -msgid "Incomplete query" -msgstr "Consulta incompleta" - -#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816 -msgid "Initial Priority" -msgstr "Prioridad inicial" - -#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "InitialPriority" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Error de entrada" - -#: 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 "Entrada debe coincidir con %1" - -#: NOT FOUND IN SOURCE -msgid "Interest noted" -msgstr "Interest noted" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Error interno" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Error interno: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Tipo de grupo inválido" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Derechos inválidos" - -#: NOT FOUND IN SOURCE -msgid "Invalid Type" -msgstr "Tipo inválido" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Datos no válidos" - -#: NOT FOUND IN SOURCE -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Propietario inválido. Estableciéndolo a 'nobody'." - -#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678 -#. ($msg) -msgid "Invalid pattern: %1" -msgstr "Patron inválido: $1" - -#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244 -msgid "Invalid queue" -msgstr "Área inválida" - -#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290 -msgid "Invalid right" -msgstr "Permiso inválido" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "Valor inválido para %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Valor inválido para el campo personalizable" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Valor inválido para el estado" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Es increiblemente importante que los usuarios sin privilegios no puedan ejecutar esta herramienta" - -#: bin/rt-crontool:269 -msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool." -msgstr "Es recomendable crear un usuario unix sin privilegios que pertenezca al grupo correcto y que tenga aceso a ejecutar esta herramienta" - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Tiene varios parámetros:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "Italica" - -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" -msgstr "Items pendientes de mi aprobación" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Ene." - -#: NOT FOUND IN SOURCE -msgid "January" -msgstr "Enero" - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Unirse o abandonar este grupo" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Jul." - -#: NOT FOUND IN SOURCE -msgid "July" -msgstr "Julio" - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Todo" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Jun." - -#: NOT FOUND IN SOURCE -msgid "June" -msgstr "Junio" - -#: NOT FOUND IN SOURCE -msgid "Keyword" -msgstr "Palabras clave" - -#: NOT FOUND IN SOURCE -msgid "Lang" -msgstr "Leng" - -#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 -msgid "Language" -msgstr "Lenguaje" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "Grande" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Último" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Último contacto" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Último contactado" - -#: NOT FOUND IN SOURCE -msgid "Last Notified" -msgstr "Se le notifico por ultima vez" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Actualizado por ultima vez" - -#: NOT FOUND IN SOURCE -msgid "LastUpdated" -msgstr "LastUpdated" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Queda" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Permitir a este usuario acceder al RT" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Permitir que este usuario tenga privilegios adicionales" - -#: NOT FOUND IN SOURCE -msgid "Limiting owner to %1 %2" -msgstr "Limitando propietario a %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Limiting queue to %1 %2" -msgstr "Limitando cola a %1 %2" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "El vínculo ya existe" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "El vínculo no pudo ser creado" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Vínculo creado (%2)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Vínculo borrado (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Vínculo no encontrado" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Vincular caso #%1" - -#: NOT FOUND IN SOURCE -msgid "Link ticket %1" -msgstr "Enlazar ticket %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 "Enlaces" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "Cargar" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Cargar búsqueda guardada:" - -#: lib/RT/System.pm:86 -msgid "LoadSavedSearch" -msgstr "" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Modulos perl cargados" - -#: lib/RT/SavedSearch.pm:111 -#. ($self->Name) -msgid "Loaded search %1" -msgstr "Búsqueda cargada %1" - -#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 -msgid "Location" -msgstr "Dirección" - -#: NOT FOUND IN SOURCE -msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "El directorio del log %1 no pudo ser encontrado o no se pudo escribir en él.\\n RT no puede ejecutarse." - -#: html/Elements/Header:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "Autenticado como %1" - -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Entrar" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Salir" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Hacer propietario a" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Establecer estatus" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Establecer fecha de plazo" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Establecer fecha de resolución" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Establecer fecha de inicio" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Establecer fecha de inicio" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Establecer fecha de último cambio" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Establecer prioridad" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Establecer cola" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Establecer título" - -#: lib/RT/Group_Overlay.pm:169 -msgid "Make this group visible to user" -msgstr "Hacer este grupo visible al usuario" - -#: html/Admin/index.html:78 -msgid "Manage custom fields and custom field values" -msgstr "Gestionar campos personalizados y valores de campos personalizados" - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Administrar grupos y miembros" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Administrar propiedades y configuración que se aplique a todas las colas" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Administrar colas y propiedades especificas" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Administrar usuarios y contraseñas" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Mar." - -#: NOT FOUND IN SOURCE -msgid "March" -msgstr "Marzo" - -#: NOT FOUND IN SOURCE -msgid "May" -msgstr "Mayo" - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "May." - -#: lib/RT/Transaction_Overlay.pm:731 -#. ($value) -msgid "Member %1 added" -msgstr "Miembro %1 añadido" - -#: lib/RT/Transaction_Overlay.pm:771 -#. ($value) -msgid "Member %1 deleted" -msgstr "Miembro %1 borrado" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Miembro añadido" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Miembro borrado" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Miembro no borrado" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Miembro de" - -#: NOT FOUND IN SOURCE -msgid "MemberOf" -msgstr "MemberOf" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Miembros" - -#: lib/RT/Transaction_Overlay.pm:728 -#. ($value) -msgid "Membership in %1 added" -msgstr "Pertenencia a %1 añadida" - -#: lib/RT/Transaction_Overlay.pm:768 -#. ($value) -msgid "Membership in %1 deleted" -msgstr "Pertenencia a %1 borrada" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Pertenencias" - -#: html/Admin/Users/Memberships.html:60 -#. ($UserObj->Name) -msgid "Memberships of the user %1" -msgstr "Pertenencias del usuario %1" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Fusión exitosa" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Fusión fallida. No se pudo establecer el EffectiveId" - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "Unión fallida. No se pudo establecer el Estado" - -#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Fusionar dentro de" - -#: lib/RT/Transaction_Overlay.pm:734 -#. ($value) -msgid "Merged into %1" -msgstr "Unido en %1" - -#: html/Search/Bulk.html:143 html/Ticket/Update.html:118 -msgid "Message" -msgstr "Mensaje" - -#: html/Ticket/Elements/ShowTransactionAttachments:164 -msgid "Message body not shown because it is too large or is not plain text." -msgstr "Cuerpo del mensaje no mostrado porque es muy largo o no es texto plano." - -#: lib/RT/Ticket_Overlay.pm:2451 -msgid "Message could not be recorded" -msgstr "Mensaje no puedo ser grabado" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Mensaje grabado" - -#: html/Ticket/Elements/PreviewScrips:122 -msgid "Messages about this ticket will not be sent to..." -msgstr "Mensajes acerca de este caso no serán enviados a..." - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -msgstr "Minutos" - -#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445 -msgid "Mismatched parentheses" -msgstr "Parentesis no coincidentes" - -#: lib/RT/Record.pm:954 -msgid "Missing a primary key?: %1" -msgstr "Falta una clave primaria?: %1" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Movil" - -#: NOT FOUND IN SOURCE -msgid "MobilePhone" -msgstr "Telefono Movil" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Modificar lista de control de acceso" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "Modificar el campo personalizable %1" - -#: html/Admin/Elements/ObjectCustomFields:96 -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "Modificar Campos Personalizados que aplican a %1 para todo %2" - -#: html/Admin/Elements/ObjectCustomFields:98 -#. (loc(lc($Types))) -msgid "Modify Custom Fields which apply to all %1" -msgstr "Modificar Campos Personalizados que aplican a todo %1" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Fields which apply to all queues" -msgstr "Modificar los campos personalizables que se apliquen a todas las colas" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Modificar Derechos de Grupo" - -#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Modificar Miembros" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Modificar Derechos" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Modify Scrip templates for this queue" -msgstr "Modificar plantillas Sript para esta cola" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Modificar Scrips para esta cola" - -#: NOT FOUND IN SOURCE -msgid "Modify System ACLS" -msgstr "Modificar ACLs de sistema" - -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" -msgstr "Modificar plantilla %1" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Modificar Derechos del Usuario" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "Modificar un campo personalizable para la cola %1" - -#: NOT FOUND IN SOURCE -msgid "Modify a CustomField which applies to all queues" -msgstr "Modificar un campo personalizable que se aplique a todas las colas" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "Modificar un scrip para la cola %1" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Modificar un scrip que se aplique a todas las colas" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "Modificar objetos asociados para %1" - -#: NOT FOUND IN SOURCE -msgid "Modify dates for # %1" -msgstr "Modificar fechas para # %1" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "Modificar fechas para #%1" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Modificar fechas para ticket # %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 -msgid "Modify global custom fields" -msgstr "Modificar campos personalizados globales" - -#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77 -msgid "Modify global group rights" -msgstr "Modificar privilegios globales de grupo" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Modificar privilegios globales de grupo." - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for groups" -msgstr "Modificar privilegios globales para grupos" - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for users" -msgstr "Modificar privilegios globales para usuarios" - -#: NOT FOUND IN SOURCE -msgid "Modify global scrips" -msgstr "Modificar acciones globales" - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Modificar derechos globales de usuario" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Modificar privilegios globales de usuario" - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Modificar metadatos del grupo o borrar grupo" - -#: html/Admin/CustomFields/GroupRights.html:164 -#. ($CustomFieldObj->Name) -msgid "Modify group rights for custom field %1" -msgstr "Modificar derechos de grupo para campos personalizados %1" - -#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 -#. ($GroupObj->Name) -msgid "Modify group rights for group %1" -msgstr "Modificar privilegios de grupo para %1" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "Modificar privilegios de grupo para la cola %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Modificar miembros de este grupo" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Modificar la propia cuenta RT" - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "Modificar personas relacionadas con la cola %1" - -#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57 -#. ($Ticket->id) -#. ($Ticket->Id) -msgid "Modify people related to ticket #%1" -msgstr "Modificar personas relacionadas con el ticket #%1" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Modificar acciones para la cola %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63 -msgid "Modify scrips which apply to all queues" -msgstr "Modificar scrips que se aplican a todas las colas" - -#: 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 "Modificar plantilla %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Modificar plantillas que se aplican a todas las colas" - -#: 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 "Modificar el grupo %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Modificar los observadores de la cola" - -#: html/Admin/Users/Modify.html:309 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "Modificar el usuario %1" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "Modificar el ticket # %1" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "Modificar el ticket #%1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Modificar tickets" - -#: html/Admin/CustomFields/UserRights.html:157 -#. ($CustomFieldObj->Name) -msgid "Modify user rights for custom field %1" -msgstr "Modificar derechos de usuario para campos personalizados %1" - -#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 -#. ($GroupObj->Name) -msgid "Modify user rights for group %1" -msgstr "Modificar privilegios de usuario para el grupo %1" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Modificar derechos de usuario para la cola %1" - -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "Modificar observadores para la cola '%1'" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ModifyACL" -msgstr "ModifyACL" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "" - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "ModifyOwnMembership" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyQueueWatchers" -msgstr "ModifyQueueWatchers" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ModifyScrips" -msgstr "ModifyScrips" - -#: lib/RT/System.pm:82 -msgid "ModifySelf" -msgstr "ModifySelf" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "ModifyTemplate" -msgstr "ModifyTemplate" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "ModifyTicket" -msgstr "ModifyTicket" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Lun." - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "Más acerca de %1" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Mover hacia abajo" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Move hacia arriba" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Múltiple" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "Se debe especificar un nombre" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "Mis %1 casos" - -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "Mis aprobaciones" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Mis aprobaciones" - -#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Mis búsquedas salvadas" - -#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65 -msgid "Name" -msgstr "Nombre" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Nombre en uso" - -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "Se necesita aprobación del administrador del sistema" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Nunca" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Nuevo" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Nuevas relaciones" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Nueva contraseña" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Nueva pendiente de aprobación" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Nueva búsqueda" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Nuevo campo personalizable" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Nuevo grupo" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Nueva contraseña" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Notificación de nueva contraseña enviada" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Nueva cola" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "Nuevo recordatorio:" - -#: NOT FOUND IN SOURCE -msgid "New request" -msgstr "Nueva solicitud" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Nuevos privilegios" - -#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Nuevo scrip" - -#: NOT FOUND IN SOURCE -msgid "New search" -msgstr "Nueva búsqueda" - -#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Nueva plantilla" - -#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Nuevo caso" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "El ticket nuevo no existe" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Nuevo usuario" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Nuevo usuario llamado" - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Nuevo observador" - -#: NOT FOUND IN SOURCE -msgid "New window setting" -msgstr "Establecer nueva ventana " - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Siguiente" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Siguiente Página" - -#: NOT FOUND IN SOURCE -msgid "Next page" -msgstr "Siguiente página" - -#: NOT FOUND IN SOURCE -msgid "NickName" -msgstr "Alias" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Alias" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "No existe Class definida" - -#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "No hay campo personalizable" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "No existe CustomField definido" - -#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "No hay grupo definido" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "No existe Consulta" - -#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "No hay cola definida" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "No se encontró el usuario. Por favor consulte al administrador.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "No hay plantilla" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket " -msgstr "No se especificó el ticket. Abortada la transacción" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket modifications\\n\\n" -msgstr "No se especificó ticket. Abortando las modificaciones al ticket\\n\\n" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "No acción" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "No se ha especificado ninguna columna" - -#: NOT FOUND IN SOURCE -msgid "No command found\\n" -msgstr "Comando no encontrado\\n" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "No hay comentarios sobre este usuario" - -#: NOT FOUND IN SOURCE -msgid "No correspondence attached" -msgstr "No hay ningún archivo adjunto" - -#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78 -#. (ref $self) -msgid "No description for %1" -msgstr "No hay descripción para %1" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "No hay grupo especificado" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "No existen grupos que coincidan con el criterio de búsqueda." - -#: lib/RT/Ticket_Overlay.pm:2393 -msgid "No message attached" -msgstr "Mensaje no adjuntado" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "No hay contraseña definida" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "No tiene privilegios para crear colas" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "No tiene privilegios para crear tickets en la cola '%1'" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "No tiene privilegios para crear usuarios" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "No tiene privilegios para mostrar el ticket" - -#: 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 "Sin permiso para ver la actualización del ticket" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "No hay un principal especificado" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "No hay principales seleccionados" - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "No hay colas que concuerden con los criterios de búsqueda" - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "No se encontraron derechos" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Sin privilegios concedidos" - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "No hay búsqueda cargada" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "No hay búsqueda sobre la que operar" - -#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Sin asunto" - -#: NOT FOUND IN SOURCE -msgid "No ticket id specified" -msgstr "No se especificó el identificador del ticket" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "No se especificó el tipo de transacción" - -#: NOT FOUND IN SOURCE -msgid "No user or email address specified" -msgstr "No se especificó email o usuario" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "No se encontraron usuarios que concuerden con los criterios de búsqueda" - -#: NOT FOUND IN SOURCE -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Usuario no encontrado. El manejador cvs está deshabilitado. Por favor consulte a su administrador.\\n" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "No se envió ningun valor a _Set!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Nadie" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Campo no existente?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Not logged in" -msgstr "No autenticado" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "No autenticado." - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "No establecido" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "No se ha implementado." - -#: NOT FOUND IN SOURCE -msgid "Not yet implemented...." -msgstr "No está implementado..." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Notas" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "La notificación no se pudo enviar" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "Notificar AdminCcs" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "Notificar AdminCcs como comentario" - -#: 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 Comentarios" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "Notificar otros destinatarios" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Notificar otros destinatarios como comentario" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "Notificar al propietario" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "Notificar al propietario como comentario" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "Notificar al Propietario de su caso rechazado" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "Notificar al Propietario de que su caso ha sido aprobado por todos los aprobadores" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "Notificar al Propietario de que su caso ha sido aprobado por algún aprobador" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Notificar propietarios y AdminCcs de nuevos items pendientes de aprobación" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "Notificar solicitantes" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "Notificar solicitantes y Ccs" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "Notificar solicitantes y Ccs como comentario" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Notificar solicitantes, Ccs y AdminCcs" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Notificar solicitantes, Ccs y AdminCcs como comentario" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Nov." - -#: NOT FOUND IN SOURCE -msgid "November" -msgstr "Noviembre" - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "O" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "No se pudo crear el objeto" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "Objeto no pudo ser borrado" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Objeto creado" - -#: lib/RT/Record.pm:120 -msgid "Object deleted" -msgstr "Objeto borrado" - -#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 -#. ($ObjectType) -#. ($LookupType) -msgid "Object of type %1 cannot take custom fields" -msgstr "Objeto de tipo %1 no puede llevar campos personalizados" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Oct." - -#: NOT FOUND IN SOURCE -msgid "October" -msgstr "Octubre" - -#: 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 "en " - -#: lib/RT/Transaction_Overlay.pm:326 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Al comentar" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "On Correspond" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Al crear" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Al cambiar de propietario" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "Al cambiar de prioridad" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Al cambiar de cola" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Al resolver" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Al cambiar de status" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Al hacer transacción" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Solo muestra aprobaciones para solicitudes creadas despues de %1" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "Solo muestra aprobaciones para solicitudes creadas antes de %1" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "Solo mostrar campos personalizados para:" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Abierto" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Abrirlo" - -#: NOT FOUND IN SOURCE -msgid "Open requests" -msgstr "Solicitudes abiertas" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Casos abiertos" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in a new window" -msgstr "Tickets abiertos (del listado) en una nueva ventana" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in another window" -msgstr "Tickets abiertos (del listado) en otra ventana" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Open tickets on correspondence" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "Opciones" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Ordenar por" - -#: NOT FOUND IN SOURCE -msgid "Ordering and sorting" -msgstr "Ordenación y clasificación" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Organización" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Ticket originario: #%1" - -#: lib/RT/Transaction_Overlay.pm:622 -msgid "Outgoing email about a comment recorded" -msgstr "Email saliente acerca de un comentario grabado" - -#: lib/RT/Transaction_Overlay.pm:626 -msgid "Outgoing email recorded" -msgstr "Email saliente grabado" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Pasada la fecha de gracia, la prioridad se mueve a" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Tickets poseidos" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "OwnTicket" - -#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006 -msgid "Owner" -msgstr "Propietario" - -#: NOT FOUND IN SOURCE -msgid "Owner changed from %1 to %2" -msgstr "Propietario cambiado de %1 a %2" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "El Propietario no pudo ser establecido." - -#: lib/RT/Transaction_Overlay.pm:672 -#. ($Old->Name , $New->Name) -msgid "Owner forcibly changed from %1 to %2" -msgstr "Propietario cambiado forzosamente de %1 a %2" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "El propietario es" - -#: html/Elements/TicketList:78 -#. ($Page, int($TotalFound/$Rows)+$oddRows) -msgid "Page %1 of %2" -msgstr "Pagina %1 de %2" - -#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96 -msgid "Pager" -msgstr "Buscapersonas" - -#: NOT FOUND IN SOURCE -msgid "PagerPhone" -msgstr "Buscapersonas Tel." - -#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "Padres" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Contraseña" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Recordatorio de contraseña" - -#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045 -msgid "Password changed" -msgstr "Contraseña cambiado" - -#: 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 "La Contraseña necesita ser al menos de %1 caracteres de longitud" - -#: lib/RT/User_Overlay.pm:1044 -msgid "Password set" -msgstr "Contraseña establecida" - -#: NOT FOUND IN SOURCE -msgid "Password too short" -msgstr "Contraseña demasiado corta" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Contraseña: %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "Contraseña: Permiso Denegado" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "Las Contraseña no coinciden" - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "Las Contraseña no coinciden. Contraseña no cambiada" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Personas" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Realizar una acción definida por el usuario" - -#: 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 "Permiso denegado" - -#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247 -msgid "Permission denied" -msgstr "Permiso denegado" - -#: lib/RT/Template_Overlay.pm:372 -msgid "Permissions denied" -msgstr "Permisos denegados" - -#: html/User/Elements/Tabs:56 -msgid "Personal Groups" -msgstr "Grupos personales" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Grupos personales" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Grupos personales:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Números de teléfono" - -#: NOT FOUND IN SOURCE -msgid "Placeholder" -msgstr "Placeholder" - -#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Preferencias" - -#: 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 "Prefs" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "Preparación cortada" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Prev" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "Página Anterior" - -#: NOT FOUND IN SOURCE -msgid "Previous page" -msgstr "Página anterior" - -#: 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 "No se encontró el principal %1" - -#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790 -msgid "Priority" -msgstr "Prioridad" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "La prioridad empieza en" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Privadas:" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Privilegiado" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Estado privilegiado: %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Usuarios privilegiados:" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Pseudogrupo para uso interno" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Constructor de Consulta" - -#: 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 "Cola" - -#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65 -#. ($Queue) -#. ($id) -msgid "Queue %1 not found" -msgstr "Cola %1 no encontrada" - -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "Cola '%1' no encontrada\\n" - -#: NOT FOUND IN SOURCE -msgid "Queue Keyword Selections" -msgstr "Selecciones de palabras clave de la cola" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Nombre de la cola" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "Acciones de la cola" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "La cola ya existe" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "La cola no se pudo crear" - -#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "La cola no se pudo cargar" - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Cola creada" - -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "No se especifico ninguna cola" - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Cola no encontrada" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Colas" - -#: html/Elements/MyAdminQueues:46 -msgid "Queues I administer" -msgstr "Colas que YO administro" - -#: html/Elements/MySupportQueues:46 -msgid "Queues I'm an AdminCc for" -msgstr "Colas en las que YO soy AdminCc" - -#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70 -msgid "Quick search" -msgstr "Búsqueda rápida" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Creación rápida de caso" - -#: 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 para %2" - -#: NOT FOUND IN SOURCE -msgid "RT %1 from Best Practical Solutions, LLC." -msgstr "RT %1 de Best Practical Solutions, LLC." - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-%1 Jesse Vincent \\n" -msgstr "RT %1. Derechos reservados 1996-%1 Jesse Vincent \\n" - -#: html/Admin/index.html:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "Administración del RT" - -#: NOT FOUND IN SOURCE -msgid "RT Authentication error." -msgstr "Error de autenticación en RT" - -#: NOT FOUND IN SOURCE -msgid "RT Bounce: %1" -msgstr "Rechazo del RT: %1" - -#: NOT FOUND IN SOURCE -msgid "RT Configuration error" -msgstr "Error de configuración del RT" - -#: NOT FOUND IN SOURCE -msgid "RT Critical error. Message not recorded!" -msgstr "Error crítico en RT. El mensaje no fue grabado!" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "Error del RT" - -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." -msgstr "RT recibió correo (%1) de sí mismo." - -#: NOT FOUND IN SOURCE -msgid "RT Recieved mail (%1) from itself." -msgstr "RT recibió correo (%1) de sí mismo." - -#: NOT FOUND IN SOURCE -msgid "RT Self Service / Closed Tickets" -msgstr "RT AutoServicio / Tickets cerrados" - -#: 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 en un vistazo" - -#: 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 no te pudo autenticar." - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find requestor via its external database lookup" -msgstr "RT no pudo encontrar el solicitante a través de una búsqueda a la base de datos externa" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find the queue: %1" -msgstr "RT no pudo encontrar la cola: %1" - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "RT no pudo almacenar tu sesión." - -#: NOT FOUND IN SOURCE -msgid "RT couldn't validate this PGP signature. \\n" -msgstr "RT no pudo validar esta firma PGP. \\n" - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -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 "RT ha procesado tus comandos" - -#: 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 es © Copyright 1996-%1 de Jesse Vincent <jesse@bestpractical.com>. Es distrbuido bajo la version 2 de la licencia GNU GPL (General Public License)." - -#: NOT FOUND IN SOURCE -msgid "RT thinks this message may be a bounce" -msgstr "RT cree que este mensaje puede ser un mensaje rebotado" - -#: html/Search/Simple.html:58 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "RT buscará por cualquier otra cosa en los asuntos de los casos." - -#: NOT FOUND IN SOURCE -msgid "RT will process this message as if it were unsigned.\\n" -msgstr "RT procesará este mensaje como si fuera uno no firmado\\n" - -#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119 -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 "El modo de comandos por correo de RT requiere autenticación PGP. Ya sea que no haya firmado su mensaje, o que su firma no pueda ser verificada." - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Nombre real" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "Nombre real" - -#: lib/RT/Transaction_Overlay.pm:725 -#. ($value) -msgid "Reference by %1 added" -msgstr "Referencia para %1 añadida" - -#: lib/RT/Transaction_Overlay.pm:765 -#. ($value) -msgid "Reference by %1 deleted" -msgstr "Referencia para %1 borrada" - -#: lib/RT/Transaction_Overlay.pm:722 -#. ($value) -msgid "Reference to %1 added" -msgstr "Referencia para %1 añadida" - -#: lib/RT/Transaction_Overlay.pm:762 -#. ($value) -msgid "Reference to %1 deleted" -msgstr "Referencia para %1 borrada" - -#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72 -msgid "Referred to by" -msgstr "Referenciado por" - -#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "Hace referencia a" - -#: NOT FOUND IN SOURCE -msgid "RefersTo" -msgstr "RefersTo" - -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "Refinar" - -#: NOT FOUND IN SOURCE -msgid "Refine search" -msgstr "Refinar la búsqueda" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Refrescar esta página cada %1 minutos" - -#: lib/RT/Transaction_Overlay.pm:811 -#. ($ticket->Subject) -msgid "Reminder '%1' added" -msgstr "Recordario '%1' añadida" - -#: lib/RT/Transaction_Overlay.pm:824 -#. ($ticket->Subject) -msgid "Reminder '%1' completed" -msgstr "Recordatorio '%1' completado" - -#: lib/RT/Transaction_Overlay.pm:817 -#. ($ticket->Subject) -msgid "Reminder '%1' reopened" -msgstr "Recordatorio '%1' reabierto" - -#: html/Ticket/Reminders.html:46 -#. ($Ticket->Id) -msgid "Reminder ticket #%1" -msgstr "Recordatorio caso #%1" - -#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52 -msgid "Reminders" -msgstr "Recordatorios" - -#: html/Ticket/Reminders.html:50 -#. ($Ticket->Id) -msgid "Reminders for ticket #%1" -msgstr "Recordatorios para caso #%1" - -#: html/Search/Bulk.html:94 -msgid "Remove AdminCc" -msgstr "Quitar AdminCc" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Quitar Cc" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Quitar solicitante" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Responder" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Direccion de Respuesta" - -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Responder a solicitantes" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Responder a los tickets" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "ReplyToTicket" - -#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47 -msgid "Reports" -msgstr "Informes" - -#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111 -msgid "Requestor" -msgstr "Solicitante" - -#: NOT FOUND IN SOURCE -msgid "Requestor email address" -msgstr "Dirección de correo del solicitante" - -#: NOT FOUND IN SOURCE -msgid "Requestor(s)" -msgstr "Solicitante(s)" - -#: NOT FOUND IN SOURCE -msgid "RequestorAddresses" -msgstr "RequestorAddresses" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Solicitantes" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "Las solicitudes entran en vencimiento en" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "Requerido parámetro '%1' no especificado" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Borrar" - -#: 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 "Residencia" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Resolver" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "Resolver ticket #%1 (%2)" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Resuelto" - -#: html/Tools/Reports/Elements/Tabs:55 -msgid "Resolved by owner" -msgstr "Resuelto por propietario" - -#: html/Tools/Reports/Elements/Tabs:59 -msgid "Resolved in date range" -msgstr "Resuelto en rango de fechas" - -#: html/Tools/Reports/ResolvedByDates.html:52 -msgid "Resolved tickets in period, grouped by owner" -msgstr "Casos resueltos en el período, agrupado por propietario" - -#: html/Tools/Reports/ResolvedByOwner.html:50 -msgid "Resolved tickets, grouped by owner" -msgstr "Casos resueltos, agrupados por propietario" - -#: NOT FOUND IN SOURCE -msgid "Response to requestors" -msgstr "Responder a los solicitantes" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Resultados" - -#: NOT FOUND IN SOURCE -msgid "Results per page" -msgstr "Resultados por página" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Confirmar contraseña" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "Revertir" - -#: NOT FOUND IN SOURCE -msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" -msgstr "Privilegio %1 no encontrado para %2 %3 referente a %4 (%5)\\n" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Privilegio delegado" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Privilegio otorgado" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Privilegio cargado" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Privilegio no pudo ser revocado" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Privilegio no encontrado" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Privilegio no cargado" - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Privilegio revocado" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Privilegios" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "No se pudieron conceder los privilegios a %1" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "No se pudieron revocar los privilegios de %1" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Roles" - -#: NOT FOUND IN SOURCE -msgid "RootApproval" -msgstr "RootApproval" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "Filas por caja" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Filas por página" - -#: lib/RT/Date.pm:422 -msgid "Sat." -msgstr "Sab." - -#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211 -msgid "Save" -msgstr "Guardar" - -#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77 -msgid "Save Changes" -msgstr "Guardar Cambios" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Guardar Preferencias" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Guardar cambios" - -#: lib/RT/SavedSearch.pm:173 -#. ($name) -msgid "Saved search %1" -msgstr "Búsquedas guardadas %1" - -#: NOT FOUND IN SOURCE -msgid "Saved searches" -msgstr "Búsquedas guardadas" - -#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84 -#. ($scrip->Id) -#. ($id) -msgid "Scrip #%1" -msgstr "Scrip #%1" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Acción creada" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Campos de Acción" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Acción borrada" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Acciones" - -#: NOT FOUND IN SOURCE -msgid "Scrips for %1\\n" -msgstr "Acciones para %1\\n" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Acciones que se aplican a todas las colas" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Búsqueda" - -#: NOT FOUND IN SOURCE -msgid "Search Criteria" -msgstr "Criterios de búsqueda" - -#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50 -msgid "Search Preferences" -msgstr "Preferencias de Búsqueda" - -#: lib/RT/SavedSearch.pm:115 -msgid "Search attribute load failure" -msgstr "" - -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Buscar aprobaciones" - -#: html/Search/Simple.html:67 -msgid "Search for tickets" -msgstr "Búsqueda de casos" - -#: 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 "Búsqueda de casos. Entrar números id, colas por nombre, Propietarios por usuario y Solicitantes por dirección email. RT buscará por cualquier otra cosa que entres en cuerpos y adjuntos de casos." - -#: html/User/Elements/Tabs:62 -msgid "Search options" -msgstr "Opciones de búsqueda" - -#: html/Search/Chart.html:56 -#. ($PrimaryGroupBy) -msgid "Search results grouped by %1" -msgstr "Resultados de búsqueda agrupados por %1" - -#: lib/RT/SavedSearch.pm:203 -#. ($msg) -msgid "Search update: %1" -msgstr "Búsqueda actualizada: %1" - -#: 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 "Las busquedas por texto completo en cada caso puede llevar mucho tiempo, pero si necesita hacerlo, puede buscar por cualquier palabra en el histórico completo de casos para cualquier palabra escribiendo: fulltext:palabra." - -#: bin/rt-crontool:265 -msgid "Security:" -msgstr "Seguridad:" - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "See also: %1" -msgstr "Ver tambien: %1" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Ver campos personalizados" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "See exact outgoing email messages and their recipeients" -msgstr "Ver mensajes email salientes exactos y sus receptores" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket private commentary" -msgstr "Ver comentario privado de caso" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "See ticket summaries" -msgstr "Ver sumarios de caso" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "VerCamposPersonalizados" - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "VerGrupo" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "SeeQueue" -msgstr "VerCola" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Seleccionar un Campo Personalizado" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Seleccione un grupo" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Seleccione una cola" - -#: html/SelfService/CreateTicketInQueue.html:48 -msgid "Select a queue for your new ticket" -msgstr "Seleccionar una cola para tu nuevo caso" - -#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Seleccione un usuario" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Seleccionar un campo personalizable" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Seleccionar campos personalizables para todos los grupos de usuarios" - -#: html/Admin/Global/CustomFields/index.html:65 -msgid "Select custom fields for all users" -msgstr "Seleccionar campos personalizables para todos los usuarios" - -#: html/Admin/Global/CustomFields/index.html:76 -msgid "Select custom fields for tickets in all queues" -msgstr "Seleccionar campos personalizables para casos en todas las colas" - -#: html/Admin/Global/CustomFields/index.html:83 -msgid "Select custom fields for transactions on tickets in all queues" -msgstr "Seleccionar campos personalizables para transacciones de casos en todas las colas" - -#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Seleccionar grupo" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Seleccionar valores múltiples" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Seleccionar un valor" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Seleccionar cola" - -#: html/Prefs/Quicksearch.html:53 -msgid "Select queues to be displayed on the \"RT at a glance\" page" -msgstr "Seleccionar colas para ser mostradas en la pagina \"RT en un vistazo\"" - -#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73 -msgid "Select scrip" -msgstr "Seleccionar accion" - -#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Selecionar plantilla" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Seleccionar hasta %1 valores" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Seleccionar usuario" - -#: NOT FOUND IN SOURCE -msgid "SelectMultiple" -msgstr "SelectMultiple" - -#: NOT FOUND IN SOURCE -msgid "SelectSingle" -msgstr "SelectSingle" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Campos Personalizados Seleccionados" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "Objetos Seleccionados" - -#: html/Widgets/SelectionBox:209 -msgid "Selections modified. Please save your changes" -msgstr "Selecciones modificadas. Por favor graba tus cambios" - -#: NOT FOUND IN SOURCE -msgid "Self Service" -msgstr "Autoservicio" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Enviar mail a todos los observadores" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Enviar mail a todos los observadores como comentario" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Enviar mail a los solicitantes y Ccs" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Enviar mail a los solicitantes y Ccs como comentario" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Envia un mesaje a los solicitantes" - -#: etc/initialdata:125 etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Enviar mail a los Ccs y Bccs listados explicitamente" - -#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 -msgid "Sends mail to the Ccs" -msgstr "Enviar correo a los Ccs" - -#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 -msgid "Sends mail to the Ccs as a comment" -msgstr "Enviar correo a los Ccs como comentario" - -#: etc/initialdata:102 -msgid "Sends mail to the administrative Ccs" -msgstr "Envia mail a los Ccs administrativos" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Envia mail a los Ccs administrativos como comentario" - -#: etc/initialdata:82 etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Enviar mail al propietario" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Sep." - -#: NOT FOUND IN SOURCE -msgid "September" -msgstr "Septiembre" - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Mostrar" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Mostrar Aprobaciones" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Mostrar Columnas" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Mostrar resultados" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Mostrar peticiones aprobadas" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Mostrar lo básico" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Mostrar solicitudes denegadas" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Mostrar detalles" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Mostrar solicitudes pendientes" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Mostrar solicitudes esperando otras aprobaciones" - -#: NOT FOUND IN SOURCE -msgid "Show ticket private commentary" -msgstr "Mostrar ticket en un comentario privado" - -#: NOT FOUND IN SOURCE -msgid "Show ticket summaries" -msgstr "Mostrar resumen del ticket" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "ShowACL" -msgstr "ShowACL" - -#: 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 "ShowScrips" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "ShowTemplate" -msgstr "ShowTemplate" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowTicket" -msgstr "ShowTicket" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicketComments" -msgstr "ShowTicketComments" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "Validarse como solicitante de ticket o ticket o cola Cc" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Validarse como ticket o cola AdminCc" - -#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168 -msgid "Signature" -msgstr "Firma" - -#: NOT FOUND IN SOURCE -msgid "Signed in as %1" -msgstr "Validado como %1" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "Búsqueda simple" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Sencillo" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "Tamaño" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Saltar Menu" - -#: 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 "Ordenar" - -#: NOT FOUND IN SOURCE -msgid "Sort key" -msgstr "Clave de ordenación" - -#: NOT FOUND IN SOURCE -msgid "Sort results by" -msgstr "Ordenar resultados por" - -#: NOT FOUND IN SOURCE -msgid "SortOrder" -msgstr "Ordenamiento" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "Pendiente" - -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "Página de inicio" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Comenzado" - -#: NOT FOUND IN SOURCE -msgid "Started date '%1' could not be parsed" -msgstr "La fecha de inicio '%1' no se pudo leer" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Comienzo" - -#: NOT FOUND IN SOURCE -msgid "Starts By" -msgstr "Comenzado por" - -#: NOT FOUND IN SOURCE -msgid "Starts date '%1' could not be parsed" -msgstr "La fecha de inicio '%1' no se pudo ser leer" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Estado" - -#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651 -msgid "Status" -msgstr "Estado" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "Cambio de status" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Estado cambiado de %1 a %2" - -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "StatusChange" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Robar" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Robar casos" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "RobarCaso" - -#: lib/RT/Transaction_Overlay.pm:678 -#. ($Old->Name) -msgid "Stolen from %1" -msgstr "Robado de %1" - -#: html/Search/Elements/EditFormat:81 -msgid "Style" -msgstr "Estilo" - -#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733 -msgid "Subject" -msgstr "Asunto" - -#: 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 "Asunto cambiado a %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Enviar" - -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "Submit Workflow" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Completado" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Dom." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "Superusuario" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Sistema" - -#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Configuración del Sistema" - -#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989 -msgid "System Error" -msgstr "Error del sistema" - -#: NOT FOUND IN SOURCE -msgid "System Error. Right not granted." -msgstr "Error de sistema. Derecho no concedido" - -#: NOT FOUND IN SOURCE -msgid "System Error. right not granted" -msgstr "Error de sistema. Derecho no concedido" - -#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230 -#. ($msg) -msgid "System Error: %1" -msgstr "" - -#: html/Admin/Tools/index.html:47 -msgid "System Tools" -msgstr "Herramientas del Sistema" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Error del sistema. Privilegio no delegado." - -#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920 -msgid "System error. Right not granted." -msgstr "Error del sistema. Privilegio no otorgado" - -#: NOT FOUND IN SOURCE -msgid "System error. Unable to grant rights." -msgstr "Error de sistema. Incapaz de conceder permisos" - -#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Grupos del sistema" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "SystemRolegroup for internal use" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "TEST_STRING" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Coger" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Take tickets" -msgstr "Coger casos" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "CogerCaso" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Cogido" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Plantilla" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Plantilla #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Plantilla borrada" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Plantilla no encontrada" - -#: NOT FOUND IN SOURCE -msgid "Template not found\\n" -msgstr "Plantilla no encontrada\\n" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Plantilla procesada" - -#: lib/RT/Template_Overlay.pm:391 -msgid "Template parsing error" -msgstr "Error sintactico de Plantilla" - -#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 -msgid "Templates" -msgstr "Plantillas" - -#: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "Plantillas de %1\\n" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Ese es el valor actual" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "Ese no es un valor para este campo personalizable" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Este es el mismo valor" - -#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "Ese principal ya tiene ese derecho" - -#: lib/RT/Queue_Overlay.pm:753 -#. ($args{'Type'}) -msgid "That principal is already a %1 for this queue" -msgstr "Ese principal ya es un %1 para esta cola" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Ese principal ya es un %1 para este ticket" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Ese principal no es un %1 para esta cola" - -#: NOT FOUND IN SOURCE -msgid "That principal is not a %1 for this ticket" -msgstr "Ese principal no es un %1 para este ticket" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Esa cola no existe" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "Ese ticket tiene dependencias sin resolver" - -#: NOT FOUND IN SOURCE -msgid "That user already has that right" -msgstr "Ese usuario ya tiene ese privilegio" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Ese usuario ya posee ese ticket" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Ese usuario no existe" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Ese usuario ya tiene privilegios" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Ese usuario ya está sin privilegios" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Ese usuario ahora tiene privilegios" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Ese usuario ya no tiene privilegios" - -#: NOT FOUND IN SOURCE -msgid "That user is now unprivilegedileged" -msgstr "Este usuario ya no tiene privilegios" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "Ese usuario puede no poseer tickets en esa cola" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "Ese no es un identificador numérico" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Lo básico" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "El CC de un ticket" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The administrative CC of a ticket" -msgstr "El CC administrativo de un ticket" - -#: NOT FOUND IN SOURCE -msgid "The comment has been recorded" -msgstr "El comentario ha sido grabado" - -#: 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 "El siguiente comando encontrará todos los tickets activos en la cola 'general' y pondra su prioridad a 99 si no han sido tocados en 4 horas:" - -#: NOT FOUND IN SOURCE -msgid "The following commands were not proccessed:\\n\\n" -msgstr "Los siguientes comandos no han sido procesados:\\n\\n" - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "Ha sido establecido el nuevo valor" - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "El propietario de un ticket" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "El solicitante de un ticket" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Estos comentarios generalmente no están visibles para el usuario" - -#: lib/RT/CustomField_Overlay.pm:978 -msgid "This custom field does not apply to that object" -msgstr "Este campo personalizado no se aplica a este objeto" - -#: html/Admin/Tools/Configuration.html:50 -msgid "This feature is only available to system administrators" -msgstr "Esta caracteristica esta solo disponible para administradores del sistema" - -#: html/Ticket/Elements/PreviewScrips:96 -msgid "This message will be sent to..." -msgstr "Este mensaje sera enviado a..." - -#: NOT FOUND IN SOURCE -msgid "This ticket %1 %2 (%3)\\n" -msgstr "Este ticket %1 %2 (%3)" - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Esta herramiento permite al usuario ejectutar modulos perl arbitrarios desde dentro de RT" - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Parece que esta transacción no tiene contenido" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "Los %1 tickets de mayor prioridad de este usuario" - -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "Los 25 casos de mayor prioridad de este usuario" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Jue." - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "Ticket # %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 Jumbo update: %2" -msgstr "Actualización Jumbo para el ticket # %1: %2" - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Actualización Jumbo para el ticket #%1: %2" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Ticket #%1: %2" - -#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741 -#. ($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 "Ticket %1 creado en la cola '%2'" - -#: NOT FOUND IN SOURCE -msgid "Ticket %1 loaded\\n" -msgstr "Ticket %1 cargado\\n" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Ticket %1: %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Campos Personalizables de Caso" - -#: html/Ticket/History.html:46 html/Ticket/History.html:49 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket History # %1 %2" -msgstr "Historial del ticket # %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket Id" -msgstr "Id del ticket:" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Ticket resuelto" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "Transacciones del Caso" - -#: NOT FOUND IN SOURCE -msgid "Ticket attachment" -msgstr "Archivos adjuntos del ticket" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Contenido del ticket" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Tipo de contenido del ticket" - -#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763 -msgid "Ticket could not be created due to an internal error" -msgstr "No se pudo crear el ticket debido a un error interno" - -#: NOT FOUND IN SOURCE -msgid "Ticket created" -msgstr "Caso creado" - -#: NOT FOUND IN SOURCE -msgid "Ticket creation failed" -msgstr "Creación del ticket fallida" - -#: NOT FOUND IN SOURCE -msgid "Ticket deleted" -msgstr "Caso borrado" - -#: NOT FOUND IN SOURCE -msgid "Ticket id not found" -msgstr "Id de ticket no encontrada" - -#: NOT FOUND IN SOURCE -msgid "Ticket killed" -msgstr "Caso eliminado" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Metadata de casos" - -#: NOT FOUND IN SOURCE -msgid "Ticket not found" -msgstr "Caso no encontrado" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Estado del ticket cambiado" - -#: NOT FOUND IN SOURCE -msgid "Ticket watchers" -msgstr "Observadores del caso" - -#: lib/RT/Search/FromSQL.pm:82 -#. (ref $self) -msgid "TicketSQL search module" -msgstr "Modulo de búsqueda TicketSQL" - -#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206 -msgid "Tickets" -msgstr "Casos" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 %2" -msgstr "Casos %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 by %2" -msgstr "Casos %1 por %2" - -#: html/Tools/Reports/CreatedByDates.html:86 -msgid "Tickets created after" -msgstr "Casos creados despues del" - -#: html/Tools/Reports/CreatedByDates.html:88 -msgid "Tickets created before" -msgstr "Casos creados antes del" - -#: NOT FOUND IN SOURCE -msgid "Tickets from %1" -msgstr "Casos de %1" - -#: html/Tools/Reports/ResolvedByDates.html:87 -msgid "Tickets resolved after" -msgstr "Casos resueltos despues del" - -#: html/Tools/Reports/ResolvedByDates.html:89 -msgid "Tickets resolved before" -msgstr "Casos resueltos antes del" - -#: html/Approvals/Elements/ShowDependency:48 -msgid "Tickets which depend on this approval:" -msgstr "Casos que dependen de esta aprobación:" - -#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72 -msgid "Time Estimated" -msgstr "Tiempo Estimado" - -#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85 -msgid "Time Left" -msgstr "Tiempo Restante" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Tiempo Trabajado" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Tiempo restante" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Tiempo para mostrar" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Tiempo trabajado" - -#: NOT FOUND IN SOURCE -msgid "TimeLeft" -msgstr "TimeLeft" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "TimeWorked" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "Título" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:" -msgstr "Para generar una comparación de este cometido:" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:\\n" -msgstr "Para generar una comparación de este cometido:\\n" - -#: 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 "Última actualización" - -#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49 -msgid "Tools" -msgstr "Herramientas" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transacción" - -#: lib/RT/Transaction_Overlay.pm:805 -#. ($self->Data) -msgid "Transaction %1 purged" -msgstr "Transacción %1 limpiada" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Transacción creada" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Campos personalizables de Transacción" - -#: NOT FOUND IN SOURCE -msgid "Transaction->Create couldn't, as you didn't specify a ticket id" -msgstr "Transaction->Create no pudo, ya que no especificó un ID de ticket" - -#: lib/RT/Transaction_Overlay.pm:128 -msgid "Transaction->Create couldn't, as you didn't specify an object type and id" -msgstr "Transaction->Create no pudo, ya que no especificó un tipo de objeto e ID" - -#: lib/RT/Transaction_Overlay.pm:870 -msgid "Transactions are immutable" -msgstr "Las transacciones son inmutables" - -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "Intentando borrar el privilegio: %1" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Mar." - -#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Tipo" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "No implementado" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Usuario en Unix" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "Usuario en Unix" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "Codificación de contenido desconocida: %1" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "Campo desconocido: $key" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Ilimitado" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Búsqueda sin nombre" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "No privilegiado" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Campos Personalizados No Seleccionados" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "Objetos No Seleccionados" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "No cogido" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Actualizar" - -#: NOT FOUND IN SOURCE -msgid "Update ID" -msgstr "Id de actualización" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Actualizar Caso" - -#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Tipo de actualización" - -#: NOT FOUND IN SOURCE -msgid "Update all these tickets at once" -msgstr "Actualizar todos estos casos al mismo tiempo" - -#: NOT FOUND IN SOURCE -msgid "Update email" -msgstr "Actualizar correo" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Actualizar múltiples casos" - -#: NOT FOUND IN SOURCE -msgid "Update name" -msgstr "Actualizar nombre" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Actualización no grabada." - -#: NOT FOUND IN SOURCE -msgid "Update selected tickets" -msgstr "Actualizar tickets seleccionados" - -#: NOT FOUND IN SOURCE -msgid "Update signature" -msgstr "Actualizar firma" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Actualizar ticket" - -#: NOT FOUND IN SOURCE -msgid "Update ticket # %1" -msgstr "Actualización de ticket # %1" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Actualizar ticket #%1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Actualizar ticket #%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr "El tipo de actualización no fue ni respuesta ni comentario" - -#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Actualizado" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Subir" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Subir multiples ficheros" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Subir multiples imagenes" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Subir un fichero" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Subir una imagen" - -#: lib/RT/CustomField_Overlay.pm:86 -msgid "Upload up to %1 files" -msgstr "Subir hasta %1 ficheros" - -#: lib/RT/CustomField_Overlay.pm:81 -msgid "Upload up to %1 images" -msgstr "Subir hasta %1 imagenes" - -#: html/Tools/Offline.html:93 -msgid "Upload your changes" -msgstr "Subir cambios" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "Usar otras herramientas administrativas de RT" - -#: NOT FOUND IN SOURCE -msgid "User %1 %2: %3\\n" -msgstr "Usuario %1 %2: %3\\n" - -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" -msgstr "Usuario %1 Contraseña: %2\\n" - -#: lib/RT/Ticket_Overlay.pm:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "No se encontro el Usuario '%1'" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found" -msgstr "Usuario '%1' no encontrado" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" -msgstr "Usuario '%1' no encontrado\\n" - -#: etc/initialdata:132 etc/initialdata:206 -msgid "User Defined" -msgstr "Definido por el usuario" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "Condiciones y acciones Definidas por el Usuario" - -#: NOT FOUND IN SOURCE -msgid "User ID" -msgstr "ID de usuario" - -#: NOT FOUND IN SOURCE -msgid "User Id" -msgstr "Id de usuario" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Privilegios de usuario" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "El usuario no pudo ser creado: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Usuario creado" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Grupos definidos por el usuario" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Usuario cargado" - -#: NOT FOUND IN SOURCE -msgid "User notified" -msgstr "Usuario notificado" - -#: NOT FOUND IN SOURCE -msgid "User view" -msgstr "Vista de usuario" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Grupos definidos por el usuario" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Nombre de usuario" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208 -msgid "Users" -msgstr "Usuarios" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Usuarios que concuerdan con los criterios de búsqueda" - -#: bin/rt-crontool:134 -#. ($transaction->id) -msgid "Using transaction #%1..." -msgstr "" - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Consulta Valida" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "ValueOfQueue" -msgstr "Valor de la cola" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Valores" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "WatchAsAdminCc" - -#: NOT FOUND IN SOURCE -msgid "Watcher loaded" -msgstr "Observador cargado" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Observadores" - -#: NOT FOUND IN SOURCE -msgid "WebEncoding" -msgstr "Codificación de Web" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Mie." - -#: 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 "Cuando un ticket ha sido aprobado por todos los aprobadores, añadir correspondencia al ticket original" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "Cuando un ticket ha sido aprobado por cualquier aprobador, añadir correspondencia al ticket original" - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "Cuando un ticket se crea" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "Cuando una aprobación de ticket se crea, notifica al propietario y AdminCC del item que espera su aprobación" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "Cuando pasa cualquier cosa" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "Siempre que un ticket este sin resolver" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "Siempre que el propietario de un ticket cambie" - -#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "Siempre que la prioridad de un ticket cambie" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "Siempre que la cola de un ticket cambie" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "Siempre que el estado de un ticket cambie" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "Siempre que ocurra una condición definida por el usuario" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "Siempre que venga algún comentario" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "Siempre que venga correspondencia" - -#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88 -msgid "Work" -msgstr "Trabajo" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "WorkPhone" -msgstr "Tel Trabajo" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Trabajado" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Usted ya es propietario de este caso" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Usted no es un usuario autorizado" - -#: 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 "Usted solo puede reasignar casos que posee o que no posee nadie³" - -#: 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 "No tiene permiso para ver ese ticket.\\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 "Usted encontró %1 casos en la cola %2" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Se ha desconectado del sistema RT" - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "No tiene permiso para crear tickets en esa cola." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "No puede crear solicitudes en esa cola." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Es bienvenido a regresar en cualquier momento." - -#: NOT FOUND IN SOURCE -msgid "Your %1 requests" -msgstr "Sus solicitudes %1" - -#: NOT FOUND IN SOURCE -msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" -msgstr "Su administrador del RT ha desconfigurado el alias de correo que invoca el RT" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Su petición ha sido aprobada por %1. Otras aprobaciones pueden estar pendientes todavia" - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "Su petición ha sido aprobada." - -#: NOT FOUND IN SOURCE -msgid "Your request was rejected" -msgstr "Su petición ha sido rechazada" - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "Su petición ha sido rechazada" - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "Nombre o contraseña de usuario incorrectos" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "Código Postal" - -#: NOT FOUND IN SOURCE -msgid "[no subject]" -msgstr "[sin asunto]" - -#: lib/RT/System.pm:87 -msgid "allow creation of saved searches" -msgstr "permitir la creación de búsquedas guardadas" - -#: lib/RT/System.pm:86 -msgid "allow loading of saved searches" -msgstr "permitir la carga de búsquedas guardadas" - -#: html/User/Elements/DelegateRights:80 -#. ($right->PrincipalObj->Object->SelfDescription) -msgid "as granted to %1" -msgstr "como priviligiado para %1" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "tabla" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "cerrado" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 -msgid "contains" -msgstr "contiene" - -#: NOT FOUND IN SOURCE -msgid "content" -msgstr "contenido" - -#: NOT FOUND IN SOURCE -msgid "content-type" -msgstr "content-type" - -#: NOT FOUND IN SOURCE -msgid "correspondence (probably) not sent" -msgstr "Respuesta (probablemente) no enviada" - -#: NOT FOUND IN SOURCE -msgid "correspondence sent" -msgstr "Correspondencia enviada" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "días" - -#: NOT FOUND IN SOURCE -msgid "dead" -msgstr "muerto" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "borrar" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "borrado" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "no coincide" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "no contiene" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "igual a" - -#: html/Search/Build.html:547 -msgid "error: can't move down" -msgstr "error: no se puede mover abajo" - -#: html/Search/Build.html:569 -msgid "error: can't move left" -msgstr "error: no se puede mover a la izquierda" - -#: html/Search/Build.html:528 -msgid "error: can't move up" -msgstr "error: no se puede mover arriba" - -#: html/Search/Build.html:612 -msgid "error: nothing to delete" -msgstr "error: nada a borrar" - -#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603 -msgid "error: nothing to move" -msgstr "error: nada a mover" - -#: html/Search/Build.html:630 -msgid "error: nothing to toggle" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "false" -msgstr "falso" - -#: NOT FOUND IN SOURCE -msgid "filename" -msgstr "nombre de archivo" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "mayor que" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr "grupo '%1'" - -#: html/Search/Results.html:88 -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -msgid "grouped by %1" -msgstr "agrupado por %1" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "horas" - -#: 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 "es" - -#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54 -msgid "isn't" -msgstr "no es" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "menor que" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "contiene" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "min" - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "minutos" - -#: NOT FOUND IN SOURCE -msgid "modifications\\n\\n" -msgstr "modificaciones\\n\\n" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "meses" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "nuevo" - -#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "sin nombre" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "sin valor" - -#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "ninguno" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "no igual a" - -#: NOT FOUND IN SOURCE -msgid "notlike" -msgstr "notlike" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "abierto" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "grupo personal '%1' para usuario '%2'" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "Cola %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "rechazado" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "resuelto" - -#: lib/RT/Date.pm:334 -msgid "sec" -msgstr "sec" - -#: lib/RT/System.pm:85 -msgid "show Configuration tab" -msgstr "mostrar etiqueta de Configuración" - -#: html/Search/Results.html:80 -msgid "spreadsheet" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:84 -msgid "stalled" -msgstr "pendiente" - -#: html/Search/Results.html:89 -#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle')) -msgid "style: %1" -msgstr "estilo: %1" - -#: html/Prefs/MyRT.html:93 -msgid "summary rows" -msgstr "" - -#: lib/RT/Group_Overlay.pm:222 -#. ($self->Type) -msgid "system %1" -msgstr "sistema %1" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "grupo del sistema '%1'" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "el componente que llama no especifica por qué" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "ticket #%1 %2" - -#: NOT FOUND IN SOURCE -msgid "true" -msgstr "verdadero" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "grupo sin descripción %1" - -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "grupo sin descripción %1" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "usuario %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "semanas" - -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "con plantilla %1" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "años" - diff --git a/rt/lib/RT/I18N/fi.po b/rt/lib/RT/I18N/fi.po deleted file mode 100644 index ca78562b5..000000000 --- a/rt/lib/RT/I18N/fi.po +++ /dev/null @@ -1,6188 +0,0 @@ -# Finnish localization catalog for Request Tracker (RT) -# First Author: Janne Pirkkanen , Jul 2002 -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"POT-Creation-Date: 2002-07-08 17:41+0200\n" -"PO-Revision-Date: 2005-10-03 13:45-0400\n" -"Last-Translator: Tuukka Vainio \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 "" - -#: 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 "" - -#: html/Elements/ShowSearch:105 -msgid "$1" -msgstr "" - -#: lib/RT/Record.pm:940 -#. ($label) -msgid "$prefix %1" -msgstr "" - -#: lib/RT/URI/fsck_com_rt.pm:256 -#. ($self->ObjectType, $self->Object->Id) -msgid "%1 #%2" -msgstr "" - -#: lib/RT/Date.pm:365 -#. ($s, $time_unit) -msgid "%1 %2" -msgstr "" - -#: lib/RT/Date.pm:401 -#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) -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 lisätty" - -#: lib/RT/Date.pm:362 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "%1 %2 sitten" - -#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654 -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -msgid "%1 %2 changed to %3" -msgstr "%1: %2 muutettu arvoon %3" - -#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696 -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 deleted" -msgstr "%1 %2 poistettu" - -#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103 -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -msgid "%1 %2 with template %3" -msgstr "%1 %2 pohjalla %3" - -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 tässä tapauksessa\\n" - -#: html/Ticket/Elements/ShowAttachments:72 -#. ($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 "näkyvillä %1 - %2" - -#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250 -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -msgid "%1 - An argument to pass to %2" -msgstr "" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "" - -#: bin/rt-crontool:253 -#. ("--template-id") -msgid "%1 - Specify id of the template you want to use" -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 "" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -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 "ScriptAction %1 ladattu" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "%1 lisätty arvoksi %2lle" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on" -msgstr "%1 aliakset vaativat tapauksen id:n" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on " -msgstr "%1 aliakset vaativat tapauksen id:n " - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "%1 aliakset vaativat tapauksen id:n (osoite %2) %3" - -#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151 -#. ($args{'Base'}) -#. ($args{'Target'}) -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "" - -#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531 -#. ($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 muutettu arvosta %2 arvoon %3" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "Arvoa %1 ei voitu asettaa arvoksi %2" - -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1 ei voinut suorittaa tapahtumaa (%2)\\n" - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 ei voinut asettaa tilaa päätetyksi. RT:n tietokanta saattaa olla vioittunut." - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I own..." -msgstr "%1 tärkeintä omistamaani tapausta..." - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I requested..." -msgstr "%1 tärkeintä tilaamaani tapausta..." - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "" - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 ei ole enää %2 tälle työjonolle" - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 ei ole enää %2 tälle tapaukselle" - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a value for custom field %2" -msgstr "%1 ei ole enää kentän %2 arvo" - -#: NOT FOUND IN SOURCE -msgid "%1 isn't a valid Queue id." -msgstr "%1 ei ole kelvollinen työjonon id" - -#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49 -#. ($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 ei näy" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "%1 onnistui\\n" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "%1 tyyppi tuntematon viestille $MessageId" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "%1 tyyppi tuntematon viestille %2" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 päättää kaikki päätetyn ryhmän jäsentapaukset." - -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "%1 jäädyttää [paikallisen] BASE jos se riippuu linkitetystä tapauksesta [tai on sen jäsen]." - -#: lib/RT/CustomField_Overlay.pm:894 -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: liitetiedostoa ei ole määritelty" - -#: html/Ticket/Elements/ShowTransactionAttachments:78 -#. ($size) -msgid "%1b" -msgstr "" - -#: html/Ticket/Elements/ShowTransactionAttachments:75 -#. (int( $size / 102.4 ) / 10) -msgid "%1k" -msgstr "" - -#: 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' ei kelpaa tilan arvoksi" - -#: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "'%1' ei ole tunnettu tapahtuma." - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete group member)" -msgstr "(Rastita laatikko poistaaksesi ryhmän jäsenen)" - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete scrip)" -msgstr "(Rastita laatikko poistaaksesi toiminnon)" - -#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76 -msgid "(Check box to delete)" -msgstr "(Rastita laatikko poistaaksesi)" - -#: NOT FOUND IN SOURCE -msgid "(Check boxes to delete)" -msgstr "(Rastita laatikko poistaaksesi)" - -#: 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 "(Syötä tapausten numerot tai www-osoitteet, välilyönneillä erotettuina)" - -#: 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 "(Jos jätetään tyhjäksi, palaa arvoon %1)" - -#: NOT FOUND IN SOURCE -msgid "(No Value)" -msgstr "(Ei arvoa)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Ei kenttiä)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Ei jäseniä)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Ei toimintoja)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Ei pohjia)" - -#: 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 "(Lähettää piilokopion vain tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. Ei lisää pysyviksi vastaanottajiksi.)" - -#: 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 "(Lähettää piilokopion vain tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. Ei lisää pysyviksi vastaanottajiksi.)" - -#: html/Ticket/Update.html:90 -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does 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 "(Lähettää kopion tästä päivityksestä pilkulla erotettuihin hallinnollisiin sähköpostiosoitteisiin. Lisää pysyviksi vastaanottajiksi.)" - -#: 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 "(Lähettää kopion vain tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. Ei lisää pysyviksi vastaanottajiksi.)" - -#: 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 "(Lähettää kopion vain tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. Ei lisää pysyviksi vastaanottajiksi.)" - -#: 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 "(Lähettää kopion tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. Lisää pysyviksi vastaanottajiksi.)" - -#: 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 "(tyhjä)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(ei nimiä listattuna)" - -#: NOT FOUND IN SOURCE -msgid "(no subject)" -msgstr "(ei otsikkoa)" - -#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591 -msgid "(no value)" -msgstr "(ei arvoa)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(vain yksi tapaus)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(odottaa hyväksyntää)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "(pending other tickets)" -msgstr "(odottaa toisia tapauksia)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(pakollinen)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(nimetön)" - -#: 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 "25 tärkeintä omistamaani tapausta..." - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "25 tärkeintä tilaamaani tapausta..." - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "" - -#: html/Elements/SelectTicketTypes:48 -msgid "<% $_ %>" -msgstr "" - -#: html/Search/Elements/SelectLinks:48 -msgid "<%$_%>" -msgstr "" - -#: html/Search/Elements/DisplayOptions:73 -msgid "<%$field%>" -msgstr "" - -#: html/Elements/CreateTicket:47 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid " %1" -msgstr "" - -#: 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 "Tyhjä pohja" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "" - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE ei löytynyt" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACE:ja voi vain luoda ja poistaa." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Peruutetaan tarkoittamattomien tapausmuutosten välttämiseksi.\\n" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Omat asetukset" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Pääsynvalvonta" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Tapahtuma" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "Tapahtumaa %1 ei löydetty" - -#: 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 "" - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Lisää kopio ylläpidolle" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Lisää kopio" - -#: 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 "Lisää useampi tiedosto" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Lisää tilaaja" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Add a new a global scrip" -msgstr "Lisää uusi yleinen toiminto" - -#: NOT FOUND IN SOURCE -msgid "Add a scrip to this queue" -msgstr "Lisää toiminto tähän työjonoon" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Lisää kaikille työjonoille yhteinen toiminto" - -#: 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 "Lisää kommentteja tai vastauksia valituille tapauksille" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Lisää jäseniä" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Lisää uusia tarkkailijoita" - -#: 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 "" - -#: lib/RT/Queue_Overlay.pm:763 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "Lisätty toimeksiantaja %1:ksi tähän työjonoon" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Lisätty toimeksiantaja %1:ksi tälle tapaukselle" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Osoite1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Osoite2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "Kopio ylläpidolle" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Työjonojen ylläpito" - -#: NOT FOUND IN SOURCE -msgid "Admin users" -msgstr "Käyttäjien ylläpito" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Ylläpito/Yleiset asetukset" - -#: NOT FOUND IN SOURCE -msgid "Admin/Groups" -msgstr "Ylläpito/Ryhmät" - -#: NOT FOUND IN SOURCE -msgid "Admin/Queue/Basics" -msgstr "Ylläpito/Työjono/Perustiedot" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113 -msgid "AdminCc" -msgstr "Kopio ylläpidolle" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -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 "" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Kopio ylläpidolle" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "Tarkennettu haku" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "Jälkeen" - -#: NOT FOUND IN SOURCE -msgid "Age" -msgstr "Ikä" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "All Custom Fields" -msgstr "Kaikki kentät" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Kaikki työjonot" - -#: 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 "Hyväksyntä" - -#: 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 "" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Approval Details" -msgstr "Hyväksynnän lisätiedot" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Hyväksy" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Hyväksyjän merkintöjä: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "huhti" - -#: NOT FOUND IN SOURCE -msgid "April" -msgstr "huhtikuu" - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Nouseva" - -#: 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 "Liitä" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Liitä tiedosto" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Liitä tiedosto" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Liitteen '%1' lataaminen ei onnistunut" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Liitetiedosto luotu" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Liitetiedoston nimi" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Liitetiedostot" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "elo" - -#: NOT FOUND IN SOURCE -msgid "August" -msgstr "elokuu" - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Automaattivastaus tilaajille" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "Virheellinen PGP allekirjoitus: %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "Virheellinen liitteen numero. Liitetiedostoa '%1' ei löytynyt\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad data in %1" -msgstr "Virheellistä dataa kentässä %1" - -#: NOT FOUND IN SOURCE -msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "Virheellinen tapahtuman numero liitetiedostolle. %1 pitäisi olla %2\\n" - -#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Perustiedot" - -#: html/Ticket/Update.html:88 -msgid "Bcc" -msgstr "Piilokopio" - -#: 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 "Muista tallentaa muutokset" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "ennen" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Tyhjä" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bookmarkable URL for this search" -msgstr "Osoite tähän kyselyyn (selaimen kirjanmerkkeihin)" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Lyhyet otsikot" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Tapausten ryhmäpäivitys" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Järjestelmäkäyttäjien muokkaus ei ole sallittua" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Näkeekö toimeksiantaja tämän työjonon" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Kentän lisääminen ilman nimeä ei onnistu" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($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 "Tapausta ei voi linkittää itseensä" - -#: NOT FOUND IN SOURCE -msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Et voi yhdistää jo yhdistettyyn tapaukseen. Sinun ei pitäisi saada tätä virhettä koskaan." - -#: html/Widgets/SavedSearch:63 -#. (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 "Sekä juuren ja kohteen määritteleminen samalla ei ole mahdollista" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Käyttäjää ei voitu luoda: %1" - -#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58 -msgid "Category" -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 "Kopio" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -msgstr "Muuta salasana" - -#: 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 "Valitse laatikko poistaaksesi" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Valitse laatikko peruaksesi oikeuden" - -#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Lapset" - -#: 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 "Kaupunki" - -#: 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 "Suljettu" - -#: NOT FOUND IN SOURCE -msgid "Closed requests" -msgstr "Suljetut tapaukset" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -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 "" - -#: NOT FOUND IN SOURCE -msgid "Command not understood!\\n" -msgstr "Komentoa ei ymmärretty!\\n" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Kommentoi" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Kommenttien osoite" - -#: NOT FOUND IN SOURCE -msgid "Comment not recorded" -msgstr "Kommenttia ei tallennettu" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Kommentoi tapauksia" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Comments" -msgstr "Kommentit" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Kommentti (ei lähetetä tilaajille)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Kommentti (ei lähetetä tilaajille)" - -#: NOT FOUND IN SOURCE -msgid "Comments about %1" -msgstr "Kommentit kohteesta %1" - -#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Kommentit tästä käyttäjästä" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Kommentit lisätty" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "Suorita tumppi" - -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "Kokoa rajoitukset" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Ehto" - -#: 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 "Ehtoa ei löydetty" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Ylläpito" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Vahvista" - -#: NOT FOUND IN SOURCE -msgid "ContactInfoSystem" -msgstr "Yhteystietojärjestelmä" - -#: NOT FOUND IN SOURCE -msgid "Contacted date '%1' could not be parsed" -msgstr "Järjestelmä ei ymmärrä päivää '%1'" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Sisältö" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Correspondence Address" -msgstr "Kirjeenvaihdon osoite" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Kirjeenvaihto lisätty" - -#: NOT FOUND IN SOURCE -msgid "Correspondence not recorded" -msgstr "Vastausta ei tallennettu" - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. " -msgstr "Uuden tiedon lisääminen kenttään epäonnistui" - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. %1 " -msgstr "Uuden kentän lisäys tapaukselle epäonnistui. %1 " - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "" - -#: lib/RT/Record.pm:1660 -#. (, $value_msg) -msgid "Could not add new custom field value. %1 " -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073 -msgid "Could not change owner. " -msgstr "Omistajaa ei voitu vaihtaa." - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Uuden kentän lisääminen epäonnistui" - -#: 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 "Ryhmän luominen epäonnistui" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "Pohjan luonti epäonnistui: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Tapauksen luonti epäonnistui. Työjonoa ei ole asetettu" - -#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496 -msgid "Could not create user" -msgstr "Käyttäjän luonti epäonnistui" - -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" -msgstr "Tapausta numerolla %1 ei löytynyt." - -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." -msgstr "Ryhmää %1 ei löytynyt." - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "Käyttäjää ei löydetty eikä pystytty luomaan" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "Tätä toimeksiantajaa ei löytynyt" - -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." -msgstr "Käyttäjää %1 ei löytynyt." - -#: 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 "Ryhmän lataaminen ei onnistunut" - -#: 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 "Ei voinut tehdä toimeksiantajaa %1:ksi tälle työjonolle" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "Ei voinut tehdä toimeksiantajaa tälle tapaukselle: %1" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Toimeksiantajaa ei voitu poistaa tältä työjonolta: %1" - -#: NOT FOUND IN SOURCE -msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Toimeksiantajaa ei voitu poistaa tältä tapaukselta: %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 "Jäsenen lisääminen ryhmään ei onnistunut" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "Tapahtuman luominen ei onnistunut: %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "Järjestelmä ei gpg:n vastauksesta ymmärtänyt mitä tehdä\\n" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find group\\n" -msgstr "Ryhmää ei löytynyt\\n" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "Riviä ei löytynyt" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Toimeksiantajaa ei löytynyt" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Arvoa ei löytynyt" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find that watcher" -msgstr "Tarkkailijaa ei löytynyt" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "Käyttäjää ei löytynyt\\n" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "Ei onnistuttu lataamaan käyttäjää %1 tietokannasta.\\n" - -#: html/Admin/CustomFields/UserRights.html:149 -#. ($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 RT config file '%1' %2" -msgstr "RT-asetustiedoston lataaminen ei onnistunut:'%1' %2" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "Toimintojen lataaminen ei onnistunut." - -#: 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 "Ryhmän %1 lataaminen ei onnistunut" - -#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238 -msgid "Couldn't load link" -msgstr "Linkin lataaminen ei onnistunut" - -#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 -#. ($id) -msgid "Couldn't load object %1" -msgstr "" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "Työjonon lataaminen ei onnistunut" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "Työjonon %1 lataaminen ei onnistunut" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "Toiminnon lataaminen ei onnistunut" - -#: 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 "Pohjan lataaminen ei onnistunut" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load that user (%1)" -msgstr "Tämän käyttäjän lataaminen ei onnistunut (%1)" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "Tapauksen '%1' lataaminen ei onnistunut" - -#: 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 "Maa" - -#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235 -msgid "Create" -msgstr "Luo" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Luo tapauksia" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Luo kenttä" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "Luo kenttä työjonolle %1" - -#: NOT FOUND IN SOURCE -msgid "Create a CustomField which applies to all queues" -msgstr "Luo kenttä, jota sovelletaan kaikkiin työjonoihin" - -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "Luo uusi kenttä" - -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "Luo uusi yleinen toiminto" - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Luo uusi ryhmä" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Luo uusi henkilökohtainen ryhmä" - -#: NOT FOUND IN SOURCE -msgid "Create a new queue" -msgstr "Luo uusi työjono" - -#: NOT FOUND IN SOURCE -msgid "Create a new scrip" -msgstr "Luo uusi toiminto" - -#: NOT FOUND IN SOURCE -msgid "Create a new template" -msgstr "Luo uusi pohja" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Luo uusi tapaus" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Luo uusi käyttäjä" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Luo uusi työjono" - -#: NOT FOUND IN SOURCE -msgid "Create a queue called" -msgstr "Luo työjono nimeltään" - -#: NOT FOUND IN SOURCE -msgid "Create a request" -msgstr "Luo tapaus" - -#: html/Admin/Queues/Scrip.html:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Luo toiminto työjonolle %1" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Luo pohja" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Create failed: %1 / %2 / %3 " -msgstr "Luonti epäonnistui %1 / %2 / %3 " - -#: NOT FOUND IN SOURCE -msgid "Create failed: %1/%2/%3" -msgstr "Luonti epäonnistui: %1/%2/%3" - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Luo uusia tapauksia tämän toiminnon pohjalta" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Luo tapaus" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Luo tapauksia tähän työjonoon" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Luo, muokkaa ja poista kenttiä" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Luo, poista ja muokkaa työjonoja" - -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "Luo, poista ja muokkaa kenen tahansa henkilökohtaisten ryhmien jäseniä" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Luo, poista ja muokkaa henkilökohtaisten ryhmien jäseniä" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Luo, poista ja muokkaa käyttäjiä" - -#: 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 "Luotu" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "Luotu kenttä %1" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Created template %1" -msgstr "Luotu pohja %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 "Tämänhetkiset suhteet" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Tämänhetkinen toiminto" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Tämänhetkiset jäsenet" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Tämänhetkiset oikeudet" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Current search criteria" -msgstr "Tämänhetkiset hakumääritteet" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Tämänhetkiset tarkkailijat" - -#: 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 "Kentät" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -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 "Kenttä %1 %2 %3" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "Kentällä %1 on arvo" - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "Kentällä %1 ei ole arvoa" - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Kenttää %1 ei löytynyt" - -#: 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 "Kenttä poistettu" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Kenttää ei löytynyt" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Kentän arvoa %1 ei löytynyt kentälle %2" - -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "Kentän arvo muutettu arvosta %1 arvoon" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "Kentän arvoa ei pystytty poistamaan" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "Kentän arvoa ei löydetty" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Kentän arvo poistettu" - -#: 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 "" - -#: 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 "Päivät" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "joulu" - -#: NOT FOUND IN SOURCE -msgid "December" -msgstr "joulukuu" - -#: 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 "" - -#: 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 "Oletustapahtumapohja" - -#: NOT FOUND IN SOURCE -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Oletus: %1/%2 muutettu arvosta %3 arvoon %4" - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Delegoi oikeuksia" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "" - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "Poista" - -#: 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 "Poista tapaukset" - -#: 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 "Tämän objektin poistaminen saattaa rikkoa tietokannan viitteet" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "Tämän objektin poistaminen rikkoo tietokannan viitteet" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Tämän objektin poistaminen rikkoo tietokannan viitteet" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "" - -#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "Tästä tapauksesta riippuu" - -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "Riippuvuudet: \\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 "Riippuu tapauksesta" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Laskeva" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Kuvaa tapausta" - -#: 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 "Kuvaus" - -#: NOT FOUND IN SOURCE -msgid "Details" -msgstr "Yksityiskohdat" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Näytä" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Näytä käyttöoikeuslista" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Näytä työjonon toimintopohjat" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Näytä työjonon toiminnot" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Näkymä" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Display ticket #%1" -msgstr "Näytä tapaus #%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 "Tee mitä tahansa ja kaikki" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Älä päivitä tätä sivua" - -#: NOT FOUND IN SOURCE -msgid "Don't show search results" -msgstr "Älä näytä hakutuloksia" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Lataa" - -#: 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 "Erääntyy" - -#: NOT FOUND IN SOURCE -msgid "Due date '%1' could not be parsed" -msgstr "Erääntymispäivää '%1' ei onnistuttu tulkkaamaan järjestelmälle." - -#: NOT FOUND IN SOURCE -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "VIRHE: Tapauksen '%1' lataaminen ei onnistunut: %2.\\n" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Muokkaa" - -#: 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 "Muokkaa työjonon %1 kenttiä" - -#: 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 "Muokkaa suhteita" - -#: 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 "Muokkaa työjonon %1 pohjia" - -#: NOT FOUND IN SOURCE -msgid "Edit keywords" -msgstr "Muokkaa avainsanoja" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Edit scrips" -msgstr "Muokkaa toimintoja" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Muokkaa järjestelmäpohjia" - -#: NOT FOUND IN SOURCE -msgid "Edit templates for %1" -msgstr "Muokkaa työjonon %1 pohjia" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "Muokataan työjonon %1 asetuksia" - -#: NOT FOUND IN SOURCE -msgid "Editing Configuration for user %1" -msgstr "Muokataan käyttäjän %1 asetuksia" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Muokataan kenttää %1" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Muokataan ryhmän %1 jäseniä" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Muokataan henkilökohtaisen ryhmän %1 jäseniä" - -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "Muokataan pohjaa %1" - -#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608 -msgid "Either base or target must be specified" -msgstr "Joko juuri tai kohde täytyy olla määritelty" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "Sähköposti" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "Sähköpostiosoite on jo käytössä" - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "Sähköpostiosoite" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "Sähköpostin koodaus" - -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Aktiivinen (rastin poistaminen passivoi kentän)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Aktiivinen (rastin poistaminen passivoi ryhmän)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Aktiivinen (rastin poistaminen passivoi työjonon)" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Aktiiviset työjonot" - -#: 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 "Aktivoitu tila %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 "Anna useampi arvo" - -#: 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 "Anna yksi arvo" - -#: 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 "Lisää tapausten numerot tai www-linkit. Erota useammat välilyönneillä." - -#: 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 "Virhe" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Virhe parametreissa: Queue->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Virhe parametreissa: 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 "Virhe parametreissa: Ticket->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "Virhe parametreissa: 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 "Kaikki" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "ExternalAuthId" -msgstr "Ulkoinen autentikointitunnus" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr "Ulkoinen yhteystietotunnus" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Lisätieto" - -#: 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 "'Erioikeutettu'-valeryhmää ei löytynyt" - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "'Erioikeudeton'-valeryhmää ei löytynyt" - -#: bin/rt-crontool:206 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "helmi" - -#: NOT FOUND IN SOURCE -msgid "February" -msgstr "helmikuu" - -#: 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 "Fin" - -#: 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 "Loppuprioriteetti" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Find group whose" -msgstr "Etsi ryhmä, jonka" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Find new/open tickets" -msgstr "Etsi uudet/avoimet tapaukset" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Etsi käyttäjät, joiden" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Hae tapauksia" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Ensimmäinen" - -#: NOT FOUND IN SOURCE -msgid "First page" -msgstr "Viimeinen sivu" - -#: 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 "Pakota muutos" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "Vapaamuotoiset yhteystiedot" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Pe" - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Kokonaiset otsikot" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "Annettu käyttäjälle %1" - -#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 -msgid "Global" -msgstr "Yleiset" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -msgstr "Yleiset toiminnot" - -#: 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 "Yleinen pohja: %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 "Ok!" - -#: NOT FOUND IN SOURCE -msgid "Good pgp sig from %1\\n" -msgstr "Hyvä PGP-allekirjoitus käyttäjältä %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Goto page" -msgstr "Siirry sivulle" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Siirry tapaukseen" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Ryhmä" - -#: NOT FOUND IN SOURCE -msgid "Group %1 %2: %3" -msgstr "Ryhmä %1 %2: %3" - -#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Ryhmän oikeudet" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Ryhmässä on jo jäsen" - -#: NOT FOUND IN SOURCE -msgid "Group could not be created." -msgstr "Ryhmää ei voitu luoda." - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "Ryhmää ei voitu luoda: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Ryhmä luotu" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Ryhmässä ei ole sellaista jäsentä" - -#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510 -msgid "Group not found" -msgstr "Ryhmää ei löydetty" - -#: NOT FOUND IN SOURCE -msgid "Group not found.\\n" -msgstr "Ryhmää ei löydetty.\\n" - -#: NOT FOUND IN SOURCE -msgid "Group not specified.\\n" -msgstr "Ryhmää ei määritelty.\\n" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210 -msgid "Groups" -msgstr "Ryhmät" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Ryhmät eivät voi olla jäsentensä jäseniä" - -#: html/Admin/Groups/index.html:86 -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 "Hei!" - -#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 -#. ($name) -msgid "Hello, %1" -msgstr "Hei, %1" - -#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Historia" - -#: 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 "Kotipuhelin" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Kotisivu" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "" - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766 -msgid "Id" -msgstr "Numero" - -#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 -msgid "Identity" -msgstr "Identiteetti" - -#: etc/initialdata:429 -msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "Jos hyväksyntä hylätään, hylkää alkuperäinen ja poista siitä riippuvat hyväksynnät" - -#: html/Tools/Offline.html:74 -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 "" - -#: 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 "Jos olet muuttanut tietoja, muista tallentaa" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Kelpaamaton arvo %1" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Muuttumaton kenttä" - -#: NOT FOUND IN SOURCE -msgid "Include disabled custom fields in listing." -msgstr "Sisällytä passiiviset kentät listaukseen" - -#: 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 "Sisällytä listaukseen myös passiiviset työjonot." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Sisällytä listaukseen myös passiiviset käyttäjät." - -#: 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 "Alkuprioriteetti" - -#: 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 "Virhe syötteessä" - -#: 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 "" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Sisäinen virhe" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Sisäinen virhe: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Ryhmän tyyppi ei kelpaa" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Kelpaamaton oikeus" - -#: NOT FOUND IN SOURCE -msgid "Invalid Type" -msgstr "Kelpaamaton tyyppi" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Kelpaamatonta dataa" - -#: NOT FOUND IN SOURCE -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Omistaja ei kelpaa. Asetetaan oletusasetusten mukaan 'ei kukaan'" - -#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678 -#. ($msg) -msgid "Invalid pattern: %1" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244 -msgid "Invalid queue" -msgstr "Kelpaamaton työjono" - -#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290 -msgid "Invalid right" -msgstr "Kelpaamaton oikeus" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "Kelpaamaton arvo kohteelle %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Kelpaamaton arvo kentälle" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Kelpaamaton arvo tilalle" - -#: 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 "" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Tammi" - -#: NOT FOUND IN SOURCE -msgid "January" -msgstr "tammikuu" - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Liity tai jätä ryhmä" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Heinä" - -#: NOT FOUND IN SOURCE -msgid "July" -msgstr "Heinäkuu" - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Jätti" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "kesä" - -#: NOT FOUND IN SOURCE -msgid "June" -msgstr "kesäkuu" - -#: NOT FOUND IN SOURCE -msgid "Keyword" -msgstr "Avainsana" - -#: NOT FOUND IN SOURCE -msgid "Lang" -msgstr "Kieli" - -#: 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 "Viimeinen" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Viimeinen yhteydenotto" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Viimeksi otettu yhteyttä" - -#: NOT FOUND IN SOURCE -msgid "Last Notified" -msgstr "Viimeksi huomautettu" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Viimeksi päivitetty" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Jäljellä" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Päästä tämä käyttäjä sisään RT:iin" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Tälle käyttäjälle voidaan antaa oikeuksia" - -#: NOT FOUND IN SOURCE -msgid "Limiting owner to %1 %2" -msgstr "Rajoitetaan omistajaa %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Limiting queue to %1 %2" -msgstr "Rajoitetaan työjonoa %1 %2" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Linkki on jo olemassa" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Linkkiä ei voitu luoda" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Linkki luotu (%1)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Linkki poistettu (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Linkkiä ei löydetty" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Linkitä tapaus #%1" - -#: NOT FOUND IN SOURCE -msgid "Link ticket %1" -msgstr "Linkitä tapaus #%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 "Linkit" - -#: 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 "Sijainti" - -#: NOT FOUND IN SOURCE -msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "Lokihakemistoa %1 ei löytynyt tai kirjoittaminen ei onnistunut.\\n RT ei voi toimia." - -#: html/Elements/Header:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "Olet kirjautunut sisään tunnuksella %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 "Kirjaudu sisään" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Kirjaudu ulos" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Aseta omistaja" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Aseta tila" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Aseta erääntymisaika" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Aseta päätösaika" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Aseta aloitusaika" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Aseta alkuaika" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Aseta oltu yhteydessä -aika" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Aseta prioriteetti" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Aseta työjono" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Aseta otsikko" - -#: 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 "Hallinnoi ryhmiä ja jäsenyyksiä" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Hallinnoi yleisiä asetuksia, jotka vaikuttavat kaikkiin työjonoihin" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Hallinnoi työjonoja ja työjonokohtaisia asetuksia" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Hallinnoi käyttäjiä ja salasanoja" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Maalis" - -#: NOT FOUND IN SOURCE -msgid "March" -msgstr "Maaliskuu" - -#: NOT FOUND IN SOURCE -msgid "May" -msgstr "Toukokuu" - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "Touko" - -#: 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 "Jäsen lisätty" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Jäsen poistettu" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Jäsentä ei poistettu" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Jäsen:" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Jäsenet" - -#: 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 "Yhdistäminen onnistui" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Yhdistäminen epäonnistui. EffectiveId:n arvoa ei pystytty asettamaan" - -#: 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 "Yhdistä" - -#: 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 "Viesti" - -#: 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 "" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Kännykkä" - -#: NOT FOUND IN SOURCE -msgid "MobilePhone" -msgstr "Kännykkä" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Muokkaa käyttöoikeusluetteloa" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "Muokkaa kenttää %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 "Muokkaa kaikkia työjonoja koskevia kenttiä" - -#: 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 "Muokkaa tämän työjonon toimintopohjia" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Muokkaa tämän työjonon toimintoja" - -#: NOT FOUND IN SOURCE -msgid "Modify System ACLS" -msgstr "Muokkaa järjestelmän käyttöoikeusluetteloa" - -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" -msgstr "Muokkaa pohjaa %1" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "Muokkaa työjonon %1 toimintoa" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Muokkaa toimintoa, jota sovelletaan kaikkiin työjonoihin" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "Muokkaa tapauksen #%1 päiviä" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Muokkaa tapauksen #%1 päiviä" - -#: 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 "Muokkaa ryhmien yleisiä oikeuksia" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Muokkaa ryhmien yleisiä oikeuksia." - -#: NOT FOUND IN SOURCE -msgid "Modify global scrips" -msgstr "Muokkaa yleisiä toimintoja" - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Muokkaa yleisiä käyttäjien oikeuksia" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Muokkaa käyttäjien yleisiä oikeuksia." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Muokkaa ryhmän metatietoja tai poista ryhmä" - -#: 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 "Muokkaa ryhmän %1 oikeuksia." - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "Muokkaa ryhmän oikeuksia työjonossa %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Muokkaa tämän ryhmän jäsenlistaa" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Muokkaa omaa RT-tunnustasi" - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "Muokkaa työjonoon %1 liittyviä käyttäjiä" - -#: 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 "Muokkaa tapaukseen %1 liittyviä käyttäjiä" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Muokkaa työjonoon %1 liittyviä toimintoja" - -#: 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 "Muokkaa toimintoja, joita sovelletaan kaikkiin työjonoihin" - -#: 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 "Muokkaa pohjaa %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Muokkaaa pohjia, joita sovelletaan kaikkiin työjonoihin" - -#: 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 "Muokkaa ryhmää %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Muokkaa työjonon tarkkailjoita" - -#: html/Admin/Users/Modify.html:309 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "Muokkaa käyttäjää %1" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "Muokkaa tapausta #%1" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "Muokkaa tapausta #%1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Muokkaa tapauksia" - -#: 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 "Muokkaa ryhmän %1 käyttäjien oikeuksia" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Muokkaa työjonoon %1 liittyviä käyttäjien oikeuksia" - -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "Muokkaa tapauksen %1 seuraajia" - -#: 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 "" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Ma" - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "Lisätietoa: %1" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Siirrä alas" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Siirrä ylös" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Monta" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "'Nimi' täytyy määritellä" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "Hyväksyntäni" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Hyväksyntäni" - -#: 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 "Nimi" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Nimi on käytössä" - -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "Tarvitsee järjestelmän ylläpitäjän hyväksynnän" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Ei ikinä" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Uusi" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Uusi linkki" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Uusi salasana" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Uusi haku" - -#: 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 "Uusi ryhmä" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Uusi salasana" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Uusi salasana" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Uusi työjono" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "New request" -msgstr "Uusi tapaus" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Uudet oikeudet" - -#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Uusi toiminto" - -#: NOT FOUND IN SOURCE -msgid "New search" -msgstr "Uusi haku" - -#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Uusi pohja" - -#: 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 "Uutta tapausta ei löydy" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Uusi käyttäjä" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Uusi käyttäjä pyydetty" - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Uusi tarkkailija" - -#: NOT FOUND IN SOURCE -msgid "New window setting" -msgstr "Uusi ikkunan asetus" - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Seuraava" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Next page" -msgstr "Seuraava sivu" - -#: NOT FOUND IN SOURCE -msgid "NickName" -msgstr "Lempinimi" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Lempinimi" - -#: 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 "Ei kenttiä" - -#: 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 "Ryhmää ei ole määritelty" - -#: 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 "Työjonoa ei ole määritelty" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Käyttäjää ei löydy. Ole hyvä ja ota yhteyttä RT:n ylläpitäjään.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Ei pohjaa" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket " -msgstr "Tapausta ei määritelty. Perutaan tapaus " - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket modifications\\n\\n" -msgstr "Tapausta ei määritelty. Poistutaan tapauksen muokkauksesta\\n\\n" - -#: 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 "Komentoa ei löytynyt\\n" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Käyttäjälle ei ole annettu kommentteja" - -#: NOT FOUND IN SOURCE -msgid "No correspondence attached" -msgstr "Ei kirjeenvaihtoa liitettynä" - -#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78 -#. (ref $self) -msgid "No description for %1" -msgstr "Ei kuvausta kohteelle %1" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Ryhmää ei ole määritelty" - -#: 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 "Salasanaa ei ole asetettu" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Ei oikeutta luoda työjonoja" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "Ei oikeutta luoda tapauksia työjonoon '%1'" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Ei oikeutta luoda käyttäjiä" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Ei oikeutta tarkastella tätä tapausta" - -#: 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 "Ei oikeutta päivittää tätä tapausta" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Toimeksiantajaa ei ole määritelty" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Toimeksiantajia ei ole valittu." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Yhtään hakukriteerit täyttävää tapausta ei löytynyt." - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Oikeuksia ei löytynyt" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Ei myönnettyjä oikeuksia." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Ei työstettävää hakua" - -#: 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 "Tapauksen numeroa ei ole määritelty" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Tapahtuman tyyppiä ei ole määritelty" - -#: NOT FOUND IN SOURCE -msgid "No user or email address specified" -msgstr "Käyttäjää tai sähköpostiosoitetta ei ole määritelty" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Yhtään hakukriteerit täyttävää käyttäjää ei löytynyt." - -#: NOT FOUND IN SOURCE -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Ei kelpaa RT-käyttäjäksi. RT:n cvs-käsittelijä irrottautuu. Ole hyvä ja ota yhteyttä RT:n ylläpitäjään.\\n" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Ei kukaan" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Olematon kenttä?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Not logged in" -msgstr "Sisäänkirjautumaton" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Et ole kirjautunut järjestelmään" - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Ei asetettu" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Ei vielä toteutettu." - -#: NOT FOUND IN SOURCE -msgid "Not yet implemented...." -msgstr "Ei vielä toteutettu..." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Merkintöjä" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Ilmoitusta ei pystytty lähettämään" - -#: 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 "" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Marras" - -#: NOT FOUND IN SOURCE -msgid "November" -msgstr "marraskuu" - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "" - -#: 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 "" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Loka" - -#: NOT FOUND IN SOURCE -msgid "October" -msgstr "lokakuu" - -#: 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 "" - -#: 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 "Näytä vain pyynnöt, jotka on luotu jälkeen %1" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "Näytä vain pyynnöt, jotka on luotu ennen %1" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Avoin" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Avaa" - -#: NOT FOUND IN SOURCE -msgid "Open requests" -msgstr "Avoimet tapaukset" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in a new window" -msgstr "Avoimet tapaukset (listasta) uudessa ikkunassa" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in another window" -msgstr "Avoimet tapaukset (listasta) toisessa ikkunassa" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Avaa tapaukset, kun esiintyy kirjeenvaihtoa" - -#: 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 "Järjestäminen" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Laitos" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Alkuperäinen tapaus: #%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 "Ajan kuluessa prioriteetti muuttuu kohti" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Omat tapaukset" - -#: 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 "Omistaja" - -#: NOT FOUND IN SOURCE -msgid "Owner changed from %1 to %2" -msgstr "Omistaja vaihdettu tunnuksesta %1 tunnukseen %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 "Omistaja pakolla vaihdettu tunnuksesta %1 tunnukseen %2" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "Omistaja" - -#: 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 "Hakulaite" - -#: NOT FOUND IN SOURCE -msgid "PagerPhone" -msgstr "Hakulaite-puhelin" - -#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "Isät" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Salasana" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Salasanan muistutus" - -#: 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 "Salasana liian lyhyt" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Salasana: %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 "" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Käyttäjät" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "" - -#: 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 "Pääsy kielletty" - -#: 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 "Omat ryhmät" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Omat ryhmät" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Omat ryhmät:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Puhelinnumerot" - -#: NOT FOUND IN SOURCE -msgid "Placeholder" -msgstr "Paikanpitäjä" - -#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Asetukset" - -#: 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 "Asetukset" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "Valmistele tumppi" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Edellinen" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Previous page" -msgstr "Edellinen sivu" - -#: 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 "Toimeksiantajaa %1 ei löytynyt" - -#: 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 "Prioriteetti" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "Prioriteetti alkaa arvosta" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Erioikeutettu" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Erioikeutuksen tila: &1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Erioikeutetut käyttäjät" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Valeryhmä sisäiseen käyttöön" - -#: 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 "Työjono" - -#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65 -#. ($Queue) -#. ($id) -msgid "Queue %1 not found" -msgstr "Työjonoa %1 ei löytynyt" - -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "Työjonoa '%1' ei löytynyt" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Työjonon nimi" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "Työjonon toiminnot" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "Työjono on jo olemassa" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "Työjonoa ei voitu luoda" - -#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "Työjonoa ei voitu ladata." - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Työjono luotu" - -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "Työjonoa ei määritelty" - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Työjonoa ei löytynyt" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Työjonot" - -#: 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 "" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "" - -#: html/Search/Results.html:81 -msgid "RSS" -msgstr "" - -#: 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 - %2" - -#: NOT FOUND IN SOURCE -msgid "RT %1 from Best Practical Solutions, LLC." -msgstr "RT %1, tekijä: 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" - -#: html/Admin/index.html:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "RT Ylläpito" - -#: NOT FOUND IN SOURCE -msgid "RT Authentication error." -msgstr "RT Virhe tunnistamisessa" - -#: NOT FOUND IN SOURCE -msgid "RT Bounce: %1" -msgstr "RT palautus: %1" - -#: NOT FOUND IN SOURCE -msgid "RT Configuration error" -msgstr "RT Konfiguraatiovirhe" - -#: NOT FOUND IN SOURCE -msgid "RT Critical error. Message not recorded!" -msgstr "RT Kriittinen virhe. Viestiä ei tallennettu!" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "RT Virhe" - -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." -msgstr "RT Sai sähköpostin (%1) itseltään." - -#: NOT FOUND IN SOURCE -msgid "RT Self Service / Closed Tickets" -msgstr "RT Itsepalvelu / Suljetut tapaukset" - -#: 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 yhdellä silmäyksellä" - -#: 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 Ei pystynyt tunnistamaan sinua" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find requestor via its external database lookup" -msgstr "RT ei löytänyt tilaajaa ulkopuolisesta tietokannasta" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find the queue: %1" -msgstr "RT ei löytänyt työjonoa: %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 ei pystynyt tarkistamaan tätä PGP allekirjoitusta.\\n" - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr "%1: RT" - -#: NOT FOUND IN SOURCE -msgid "RT has proccessed your commands" -msgstr "RT on prosessoinut antamasi komennot" - -#: 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 on tekijänoikeuslain alainen, © 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Se on jakelussa seuraavalla lisenssillä: Version 2 of the GNU General Public License." - -#: NOT FOUND IN SOURCE -msgid "RT thinks this message may be a bounce" -msgstr "RT luulee että tämä viesti on palautus" - -#: html/Search/Simple.html:58 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT will process this message as if it were unsigned.\\n" -msgstr "RT prosessoi tämän viestin kuten se olisi allekirjoittamaton." - -#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119 -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:n sähköpostiohjaustila vaatii PGP-tunnistamista. Et allekirjoittanut (PGP) viestiä tai allekirjoitustasi ei pystytty vahvistamaan." - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Oikea nimi" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "Oikea nimi" - -#: 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 "Viitattu jostakin" - -#: 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 "Viittaus johonkin" - -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "Päivitä" - -#: NOT FOUND IN SOURCE -msgid "Refine search" -msgstr "Päivitä haku" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Päivitä tämä sivu %1 minuutin välein" - -#: lib/RT/Transaction_Overlay.pm:811 -#. ($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 "Poista kopio ylläpidolle" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Poista kopio" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Poista tilaaja" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Vastaa" - -#: 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 "Vastaa tapauksiin" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -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 "Tilaaja" - -#: NOT FOUND IN SOURCE -msgid "Requestor email address" -msgstr "Tilaajan sähköpostiosoite" - -#: NOT FOUND IN SOURCE -msgid "Requestor(s)" -msgstr "Tilaajat" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Tilaajat" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "Tapaus tulisi suorittaa mennessä" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Palauta" - -#: 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 "Koti" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Päätä" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "Ratkaise tapaus #%1 (%2)" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Päätetty" - -#: 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 "Vastaus tilaajille" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Tulokset" - -#: NOT FOUND IN SOURCE -msgid "Results per page" -msgstr "Tuloksia sivulle: " - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Vahvista salasana" - -#: 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 "Oikeutta %1 ei löydetty %2 %3 laajuudessa %4 (%5)\\n" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Oikeus delegoitu" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Oikeus myönnetty" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Oikeus ladattu" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Oikeutta ei voitu perua" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Oikeutta ei löydetty" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Oikeutta ei ladattu" - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Oikeus peruttu" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Oikeudet" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "Oikeuksia ei voitu myöntää: %1" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "Oikeuksia ei voitu perua: %1" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Roolit" - -#: 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 "La" - -#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211 -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 "Tallenna muutokset" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Tallenna muutokset" - -#: 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 "Toiminto #%1" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Toiminto luotu" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Toiminto poistettu" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Toiminnot" - -#: NOT FOUND IN SOURCE -msgid "Scrips for %1\\n" -msgstr "Toiminnot työjonolle %1\\n" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Toiminnot, joita sovelletaan kaikkiin työjonoihin" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Hae" - -#: NOT FOUND IN SOURCE -msgid "Search Criteria" -msgstr "Hakukriteerit" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "Valitse ryhmä" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Valitse työjono" - -#: 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 "Valitse käyttäjä" - -#: 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 "Valitse ryhmä" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Valitse useita arvoja" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Valitse yksi arvo" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Valitse työjono" - -#: 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 "Valitse toiminto" - -#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Valitse pohja" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Valitse käyttäjä" - -#: 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 "Itsepalvelu" - -#: 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 "Lähettää postia omistajalle" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Syys" - -#: NOT FOUND IN SOURCE -msgid "September" -msgstr "syyskuu" - -#: 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 "Näytä tulokset" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Näytä perustiedot" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Näytä yksityiskohdat" - -#: 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 "Näytä tapauksen kommentointi" - -#: NOT FOUND IN SOURCE -msgid "Show ticket summaries" -msgstr "Näytä tapausten yhteenvedot" - -#: 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 "Allekirjoitus" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Yksittäinen" - -#: 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 "" - -#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 -msgid "Sort" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Sort key" -msgstr "Järjestys" - -#: NOT FOUND IN SOURCE -msgid "Sort results by" -msgstr "Järjestä tulokset" - -#: NOT FOUND IN SOURCE -msgid "SortOrder" -msgstr "Lajittelujärjestys" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "Jäädytetty" - -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "Etusivu" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Aloitettu" - -#: NOT FOUND IN SOURCE -msgid "Started date '%1' could not be parsed" -msgstr "Aloittamisaikaa '%1' ei pystytty tulkitsemaan" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Alkaa" - -#: NOT FOUND IN SOURCE -msgid "Starts By" -msgstr "Alkaa mennessä" - -#: NOT FOUND IN SOURCE -msgid "Starts date '%1' could not be parsed" -msgstr "Alkamisaikaa '%1' ei pystytty tulkitsemaan" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Tila" - -#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651 -msgid "Status" -msgstr "Tila" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Tila muutettu arvosta %1 arvoon %2" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Kaappaa" - -#: 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 "Kaapattu käyttäjältä %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 "Otsikko" - -#: 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 "Otsikko vaihdettu: %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Lähetä" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Onnistui" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Su" - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Järjestelmä" - -#: 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 "Järjestelmävirhe" - -#: 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 "Järjestelmävirhe. Oikeutta ei delegoitu." - -#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920 -msgid "System error. Right not granted." -msgstr "Järjestelmävirhe. Oikeutta ei luovutettu." - -#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Järjestelmäryhmät" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "TESTIMERKKIJONO" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Ota itselle" - -#: 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 "Otettu" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Pohja" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Pohja #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Pohja poistettu" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Pohjaa ei löydetty" - -#: NOT FOUND IN SOURCE -msgid "Template not found\\n" -msgstr "Pohjaa ei löydetty\\n" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Pohja tulkittu" - -#: 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 "Pohjat" - -#: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "Pohjat työjonolle %1\\n" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -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 "Ei ole arvo tälle kentälle" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Tämä on sama arvo" - -#: 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 "Toimeksiantaja on jo %1 tälle työjonolle" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Toimeksiantaja on jo %1 tälle tapaukselle" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Toimeksiantaja ei ole %1 tälle työjonolle" - -#: NOT FOUND IN SOURCE -msgid "That principal is not a %1 for this ticket" -msgstr "Toimeksiantaja ei ole %1 tälle tapaukselle" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Työjonoa ei ole olemassa" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "Tapaus sisältää päättämättömiä riippuvuuksia" - -#: NOT FOUND IN SOURCE -msgid "That user already has that right" -msgstr "Käyttäjällä on jo tuo oikeus" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Käyttäjä omistaa jo tämän tapauksen" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Käyttäjää ei ole olemassa" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Käyttäjä on jo erioikeutettu" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Käyttäjä on jo erioikeudeton" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Käyttäjä on nyt erioikeutettu" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Käyttäjä on nyt erioikeudeton" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "Käyttäjä ei voi omistaa tapauksia tuossa työjonossa" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "Ei ole numero" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Perustiedot" - -#: 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 "Kommentti on tallennettu" - -#: 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 "" - -#: NOT FOUND IN SOURCE -msgid "The following commands were not proccessed:\\n\\n" -msgstr "Seuraavia komentoja ei suoritettu:\\n\\n" - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "Uusi arvo asetettu." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "Tapauksen omistaja" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "Tapauksen tilaaja" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Nämä kommentit eivät ole yleisesti näkyvillä käyttäjälle" - -#: 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 "Tämä tapaus %1 %2 (%3)\\n" - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Tämä tapahtuma ei näytä sisältävän mitään" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "Käyttäjän %1 tärkeintä tapausta" - -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "Käyttäjän 25 tärkeintä tapausta" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "To" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "Tapaus # %1 %2" - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Tapauksen #%1 jättipäivitys: %2" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Tapaus #%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 "Tapaus %1 luotu työjonoon '%2'" - -#: NOT FOUND IN SOURCE -msgid "Ticket %1 loaded\\n" -msgstr "Tapaus %1 ladattu\\n" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Tapaus %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 "Tapauksen historia # %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket Id" -msgstr "Tapauksen numero" - -#: 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 attachment" -msgstr "Tapauksen liitteen" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Tapauksen sisältö" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Tapauksen sisällön tyyppi" - -#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763 -msgid "Ticket could not be created due to an internal error" -msgstr "Tapausta ei voitu luoda sisäisestä virheestä johtuen" - -#: NOT FOUND IN SOURCE -msgid "Ticket created" -msgstr "Tapaus luotu" - -#: NOT FOUND IN SOURCE -msgid "Ticket creation failed" -msgstr "Tapauksen luonti epäonnistui" - -#: NOT FOUND IN SOURCE -msgid "Ticket deleted" -msgstr "Tapaus poistettu" - -#: NOT FOUND IN SOURCE -msgid "Ticket id not found" -msgstr "Tapauksen numeroa ei löytynyt" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Ticket not found" -msgstr "Tapausta ei löydy" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Tapauksen tila vaihdettu" - -#: NOT FOUND IN SOURCE -msgid "Ticket watchers" -msgstr "Tapauksen tarkkailijat" - -#: 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 "Tapaukset" - -#: 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 "Tapaukset %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 "Aikaa jäljellä" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Aikaa käytetty" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Aikaa jäljellä" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Aika" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Aikaa käytetty" - -#: 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 "Luodaksesi diffin tästä käskystä:" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:\\n" -msgstr "To generate a diff of this commit:\\n" - -#: 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 "Oltu yhteydessä" - -#: 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 "Tapahtuma %1 puhdistettu" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Tapahtuma luotu" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "" - -#: 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 "Tapahtumat ovat muuttumattomia" - -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "Yritetään poistaa oikeus: %1" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Ti" - -#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Tyyppi" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "Toteuttamaton" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Unix login" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "Käyttäjän Unix-tunnus" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "Tuntematon sisällön koodaus %1" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Rajoittamaton" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Erioikeudeton" - -#: 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 "Ottamaton" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Päivitä" - -#: NOT FOUND IN SOURCE -msgid "Update ID" -msgstr "Päivitä numero" - -#: 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 "Päivitä tyyppi" - -#: NOT FOUND IN SOURCE -msgid "Update all these tickets at once" -msgstr "Päivitä kaikki nämä tapaukset kerralla" - -#: NOT FOUND IN SOURCE -msgid "Update email" -msgstr "Päivitä sähköposti" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Update name" -msgstr "Päivitä nimi" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Päivitystä ei tallennettu" - -#: NOT FOUND IN SOURCE -msgid "Update selected tickets" -msgstr "Päivitä valitut tapaukset" - -#: NOT FOUND IN SOURCE -msgid "Update signature" -msgstr "Päivitä allekirjoitus" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Päivitä tapaus" - -#: NOT FOUND IN SOURCE -msgid "Update ticket # %1" -msgstr "Päivitä tapaus # %1" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Päivitä tapaus #%1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Päivitä tapaus #%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr "Päivityksen tyyppi ei ollut kirjeenvaihto eikä kommentti." - -#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Päivitetty" - -#: 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 "Käyttäjä %1 %2: %3\\n" - -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" -msgstr "Käyttäjä %1 Salasana: %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 "Käyttäjää '%1' ei löydetty" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" -msgstr "Käyttäjää '%1' ei löydetty\\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 "Käyttäjätunnus" - -#: NOT FOUND IN SOURCE -msgid "User Id" -msgstr "Käyttäjätunnus" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Käyttäjän oikeudet" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "Käyttäjää ei voitu luoda: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Käyttäjä luotu" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Käyttäjän luomat ryhmät" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "User notified" -msgstr "Käyttäjää informoitu" - -#: NOT FOUND IN SOURCE -msgid "User view" -msgstr "Käyttäjän näkymä" - -#: 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 "Käyttäjätunnus" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208 -msgid "Users" -msgstr "Käyttäjät" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Hakua vastaavat käyttäjät" - -#: 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 "Tapauksen arvo" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Arvot" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Tarkkailijat" - -#: NOT FOUND IN SOURCE -msgid "WebEncoding" -msgstr "Web-koodaus" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Ke" - -#: 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 "Työ" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "WorkPhone" -msgstr "Työpuhelin" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Tehty" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Omistat jo tämän tapauksen" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Et ole valtuutettu käyttäjä" - -#: 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 "Voit palauttaa vain tapauksia, jotka omistat itse tai jotka ovat ilman omistajaa" - -#: 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 "Sinulla ei ole valtuuksia tarkastella tätä tapausta.\\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 "Löysit %1 tapausta työjonosta %2" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Olet kirjautunut ulos RT:stä" - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "Sinulla ei ole valtuuksia luoda tapauksia tähän työjonoon." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "Et voi luoda tapauksia tuohon työjonoon." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Tervetuloa kirjautumaan järjestelmään uudelleen" - -#: NOT FOUND IN SOURCE -msgid "Your %1 requests" -msgstr "Sinun %1 tapaustasi" - -#: NOT FOUND IN SOURCE -msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" -msgstr "RT:n ylläpitäjä on konfiguroinut RT:n käynnisävät sähköpostialiakset väärin." - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "" - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "" - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "" - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "Käyttäjätunnuksesi tai salasanasi on väärä" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "Postinumero" - -#: 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 "sallittu käyttäjälle %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 "sisältää" - -#: NOT FOUND IN SOURCE -msgid "content" -msgstr "sisältö" - -#: NOT FOUND IN SOURCE -msgid "content-type" -msgstr "sisällön tyyppi" - -#: NOT FOUND IN SOURCE -msgid "correspondence (probably) not sent" -msgstr "kirjeenvaihtoa (luultavasti) ei ole lähetetty" - -#: NOT FOUND IN SOURCE -msgid "correspondence sent" -msgstr "kirjeenvaihto lähetetty" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "päivää" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "poista" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "poistettu" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "ei sisällä" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "ei sisällä" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "on yhtäsuuri" - -#: 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 "filename" -msgstr "tiedostonimi" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "on suurempi kuin" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr "ryhmä %1" - -#: html/Search/Results.html:88 -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -msgid "grouped by %1" -msgstr "" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "tuntia" - -#: html/Search/Elements/PickBasics:48 -msgid "id" -msgstr "numero" - -#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53 -msgid "is" -msgstr "on" - -#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54 -msgid "isn't" -msgstr "ei ole" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "on pienempi kuin" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "sisältää" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "min" - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "minuuttia" - -#: NOT FOUND IN SOURCE -msgid "modifications\\n\\n" -msgstr "muokkaukset\\n\\n" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "kuukausia" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "uusi" - -#: 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 "ei mitään" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "on erisuuri kuin" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "avoin" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "oma ryhmä '%1' käyttäjälle '%2'" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "työjono %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "hylätty" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "päätetty" - -#: lib/RT/Date.pm:334 -msgid "sec" -msgstr "sec" - -#: 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 "jäädytetty" - -#: 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 "järjestelmä %1" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "järjestelmäryhmä '%1'" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "kutsuva komponentti ei eritellyt syytä" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "tapaus #%1 %2" - -#: NOT FOUND IN SOURCE -msgid "true" -msgstr "tosi" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "kuvailematon ryhmä %1" - -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "kuvailematon ryhmä %1" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "käyttäjä %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "viikkoa" - -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "pohjalla %1" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "vuosia" - diff --git a/rt/lib/RT/I18N/fr.po b/rt/lib/RT/I18N/fr.po deleted file mode 100644 index c3b8caac9..000000000 --- a/rt/lib/RT/I18N/fr.po +++ /dev/null @@ -1,5117 +0,0 @@ -# translation of fr.po to -# Copyright (c) 2002 Jesse Vincent -# valid as of 3.5-TESTING r3738 -# jfenal , 2005. -# jfenal , 2005. -# Emmanuel Lacour , 2007. -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"POT-Creation-Date: 2002-05-02 11:36+0800\n" -"PO-Revision-Date: 2005-10-28 02:19+0200\n" -"Last-Translator: Emmanuel Lacour \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.10.2\n" -"Language-Team: rt-devel \n" - -#: html/Widgets/SavedSearch:70 -#. ($self->{CurrentSearch}{Object}->Description) -msgid " %1 deleted." -msgstr " %1 effacé." - -#: html/Widgets/SavedSearch:47 -#. ($self->{CurrentSearch}{Description}, $args->{Description}) -msgid " %1 renamed to %2." -msgstr " %1 renommé en %2." - -#: html/Widgets/SavedSearch:60 -#. ($args->{Description}) -msgid " %1 saved." -msgstr " %1 sauvé." - -#: NOT FOUND IN SOURCE -msgid "#" -msgstr "n°" - -#: 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 "n°%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 "%1 n°%2" - -#: lib/RT/Date.pm:365 -#. ($s, $time_unit) -msgid "%1 %2" -msgstr "%1 %2" - -#: lib/RT/Date.pm:401 -#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) -msgid "%1 %2 %3 %4:%5:%6 %7" -msgstr "%1 %2 %3 %4:%5:%6 %7" - -#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690 -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 added" -msgstr "%1 %2 ajouté" - -#: lib/RT/Date.pm:362 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "il y a %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 changé en %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 supprimé" - -#: 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 avec le modèle %3" - -#: html/Ticket/Elements/ShowAttachments:72 -#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) -msgid "%1 (%2) by %3" -msgstr "%1 (%2) par %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 (inchangé)" - -#: 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 - Un paramètre à passer à %2" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - Ecrit les mises à jour de statuts sur STDOUT" - -#: bin/rt-crontool:253 -#. ("--template-id") -msgid "%1 - Specify id of the template you want to use" -msgstr "%1 - Précisez l'identifiant du modèle que vous souhaitez utiliser" - -#: bin/rt-crontool:256 -#. ("--transaction") -msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction" -msgstr "%1 - Précisez si vous souhaitez utiliser la première ou la dernière transaction" - -#: bin/rt-crontool:247 -#. ("--action") -msgid "%1 - Specify the action module you want to use" -msgstr "%1 - Précisez l'action que vous voulez utiliser" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Précisez la condition que vous voulez utiliser" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Précisez la recherche que vous voulez utiliser" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -msgstr "%1 - Précisez le type de transaction que vous souhaitez utiliser" - -#: html/Elements/Footer:56 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -msgid "%1 RT %2 Copyright 1996-%3 %4." -msgstr "%1 RT %2 Copyright 1996-%3 %4." - -#: lib/RT/ScripAction_Overlay.pm:150 -#. ($self->Id) -msgid "%1 ScripAction loaded" -msgstr "ScripAction %1 chargée" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "%1 ajouté(e) comme valeur de %2" - -#: lib/RT/Link_Overlay.pm: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 semble être un objet local, mais est introuvable dans la base de données" - -#: 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 par %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 changé(e) de %2 à %3" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "copie de %1" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1 n'a pas pu être positionné à %2." - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 ne peut pas mettre le statut à résolu. La base de données RT est peut être incohérente." - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "%1 créé(e)" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "%1 supprimé(e)" - -#: NOT FOUND IN SOURCE -msgid "%1 grouped by %2" -msgstr "%1 groupés par %2" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "Mes %1 tickets de plus haute priorité" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Status changé de %1 à %2" - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 est un outil agissant sur les tickets depuis un ordonnanceur externe tel que cron." - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 n'est plus un %2 pour cette file." - -#: 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 "Les %1 derniers tickets sans propriétaire" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "%1 objets" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "droits de %1" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 résoudra tous les membres d'un ticket groupé résolu." - -#: lib/RT/CustomField_Overlay.pm:894 -msgid "%1's %2 objects" -msgstr "%1 de %2 objets" - -#: lib/RT/CustomField_Overlay.pm:895 -msgid "%1's %2's %3 objects" -msgstr "%1 de %2 de %3 objets" - -#: 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 "Recherches sauvées de %1" - -#: lib/RT/Transaction_Overlay.pm:481 -#. ($self) -msgid "%1: no attachment specified" -msgstr "%1 : pas d'attachement spécifié" - -#: html/Ticket/Elements/ShowTransactionAttachments:78 -#. ($size) -msgid "%1b" -msgstr "%1o" - -#: 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' est un statut invalide" - -#: 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 "(Cocher la case pour supprimer)" - -#: html/Ticket/Elements/PreviewScrips:99 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(Cocher les cases pour désactiver les notifications aux destinataires listés)" - -#: html/Ticket/Elements/PreviewScrips:123 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "(Cocher les cases pour activer les notifications aux destinataires listés)" - -#: html/Ticket/Create.html:218 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(Entrer le numéro du ticket ou son URL, séparés par des espaces)" - -#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1)" -msgstr "(Si à laissé blanc, le défaut sera %1)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Pas de champ personnalisé)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Aucun membre)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Aucun Scrip)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Aucun modèle)" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(Aucun)" - -#: 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 "(Transmettre une copie cachée de cette mise à jour à une liste d'adresse mail séparée par des virgules. Cela ne modifie pas ceux qui recevront les mises à jour futures.)" - -#: 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 "(Transmettre une copie de cette mise à jour à une liste d'adresses mail séparées par des virgules. Ces personnes recevront les mises à jour suivantes.)" - -#: 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 "(Transmettre une copie de cette mise à jour à une liste d'adresses mail séparées par des virgules. Ceci ne changera pas les destinataires des mises à jour suivantes.)" - -#: 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 "(Transmettre une copie de cette mise à jour à une liste d'adresses mail séparées par des virgules. Ces personnes recevront les mises à jour suivantes.)" - -#: html/Admin/Elements/EditScrip:96 -msgid "(Use these fields when you choose 'User Defined' for a condition or action)" -msgstr "(Utilisez ces champs lorsque vous sélectionnez « Défini par l'utilisateur » pour une condition ou une action)" - -#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53 -msgid "(Will not be sent email)" -msgstr "(Ne sera pas envoyé par email)" - -#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 -msgid "(empty)" -msgstr "(vide)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(aucun nom)" - -#: 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 "(sans information)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(aucune valeur)" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(un seul ticket)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(en attente d'approbation)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "(en attente d'autres Collection)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(exigé)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(sans titre)" - -#: html/Ticket/Elements/Reminders:133 -msgid "(yyyy/mm/dd)" -msgstr "(yyyy/mm/dd)" - -#: html/Elements/EditCustomFieldSelect:57 -msgid "-" -msgstr "-" - -#: bin/rt-crontool:95 -msgid "--transaction argument could be only 'first' or 'last'" -msgstr "l'argument pour --transaction ne peut être que 'first' ou 'last'" - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "<% $Ticket->Statut%>" - -#: 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 "Un modèle vide" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "Pas de mot de passe spécifié, l'utilisateur ne pourra donc pas se connecter." - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE non trouvé" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "Les ACE peuvent seulement être créés et effacés." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "ET" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "A propos" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "contrôle d'accès" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Action" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "Action %1 non trouvée" - -#: bin/rt-crontool:171 -msgid "Action committed.\\n" -msgstr "Action validée.\\n" - -#: lib/RT/Scrip_Overlay.pm:168 -msgid "Action is mandatory argument" -msgstr "L'argument 'Action' est obligatoire" - -#: bin/rt-crontool:167 -msgid "Action prepared..." -msgstr "Action préparée..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Ajouter" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Ajouter AdminCC" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Ajouter CC" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Ajouter des colonnes" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Ajouter un critère" - -#: html/Ticket/Create.html:147 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Ajouter d'autres fichiers" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Ajouter Demandeur" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Ajouter une valeur" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Ajouter un scrip qui s'applique à toutes les files" - -#: html/Search/Build.html:109 html/Search/Build.html:94 -msgid "Add and Search" -msgstr "Ajouter et rechercher" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "Ajouter des commentaires ou des réponses aux tickets sélectionnés" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Ajouter des membres" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Ajouter de nouveaux observateurs" - -#: html/Search/Build.html:85 -msgid "Add these terms to your search" -msgstr "Ajouter ces termes à la recherche" - -#: html/Search/Bulk.html:158 -msgid "Add values" -msgstr "Ajouter les valeurs" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "Add, delete and modify custom field values for objects" -msgstr "Ajouter, retirer et modifier des champs personnalisés pour les objets" - -#: lib/RT/Queue_Overlay.pm:763 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "Ajout groupe/utilisateur comme %1 pour cette file" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Ajout groupe/utilisateur comme %1 pour ce ticket" - -#: html/Admin/Users/Modify.html: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 "Commentaire Admin" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "Correspondance Admin " - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Administrateurs de files" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Configuration globale / administration" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113 -msgid "AdminCc" -msgstr "AdminCc" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "GérerChampPersonnalisé" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "GérerGroupes" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "GérerAppartenanceGroupes" - -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "GérerGroupesPersonnels" - -#: lib/RT/System.pm:80 -msgid "AdminOwnPersonalGroups" -msgstr "GérerGroupesPersonnelsPropres" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "AdminQueue" -msgstr "GérerFile" - -#: lib/RT/System.pm:81 -msgid "AdminUsers" -msgstr "GérerUtilisateurs" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Cc Administratif" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Avancé" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "Après" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "Aggrégateur" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "Toutes les approbations obtenues" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Toutes les files" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "Et/Ou" - -#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "S'applique à" - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Appliquer" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Appliquer vos changements" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Approbations" - -#: 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 "Approbation #%1 : %2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Approbation #%1 : Notes non enregistrées à cause d'une erreur système" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Approbation #%1 : Notes enregistrées" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Approbations obtenues" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Approbations refusées" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Approuver" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Notes de l'approbateur : %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Avr." - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "Asc" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Croissant" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Assign and remove custom fields" -msgstr "Fixer et supprimer les champs personnalisés" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "AssignCustomFields" -msgstr "FixerChampsPersonnalisés" - -#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116 -msgid "Attach" -msgstr "Attaché" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Attacher un fichier" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Fichier attaché" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Attachement '%1' ne peut pas être chargé" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Attachement créé" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Nom de fichier de l'attachement" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Attachements" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "Attibut supprimé" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Aoû." - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "RéponseAuto" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Réponse automatique aux demandeurs" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "Disponible" - -#: 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 "Essentiel" - -#: 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 "Assurez-vous de sauvegarder vos modifications" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "Avant" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "Logo d'entreprise de Best Practical Solutions, LLC" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Vide" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "Gras" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "Lien prédéfini" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "En-têtes courts" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "Màj en masse" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Les utilisateurs système ne peuvent être modifiés" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Le groupe/utilisateur peut-il voir cette file" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Impossible d'ajouter une valeur de champ personnalisé sans un nom" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($Class) -msgid "Can't find a collection class for '%1'" -msgstr "Impossible de trouver une collection pour la classe '%1'" - -#: html/Search/Build.html:286 -msgid "Can't find a saved search to work with" -msgstr "Impossible de trouver une recherche sauvée et de l'utiliser" - -#: lib/RT/Link_Overlay.pm:159 -msgid "Can't link a ticket to itself" -msgstr "Un ticket ne peut être lié à lui même" - -#: html/Widgets/SavedSearch:63 -#. (loc($self->{SearchType})) -msgid "Can't save %1" -msgstr "Impossible de sauvegarder %1" - -#: html/Search/Build.html:290 -msgid "Can't save this search" -msgstr "Impossible de sauver cette recherche" - -#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "Impossible de spécifier à la fois la base et la cible" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Impossible de créer l'utilisateur : %1" - -#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58 -msgid "Category" -msgstr "Catégorie" - -#: 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 "Changer le mot de passe" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Tout cocher" - -#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "Cocher la case pour supprimer" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Cocher la case pour retirer le droit" - -#: 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 "Fils" - -#: html/NoAuth/js/util.js:201 -msgid "Choose a date" -msgstr "Choisissez une date" - -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 -msgid "City" -msgstr "Ville" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Tout effacer" - -#: html/Helpers/CalPopup.html:51 -msgid "Close window" -msgstr "Fermer la fenêtre" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Fermé" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Tickets fermés" - -#: lib/RT/CustomField_Overlay.pm:89 -msgid "Combobox: Select or enter multiple values" -msgstr "Boîte combo : Sélectionnez ou saisissez plusieurs valeurs" - -#: lib/RT/CustomField_Overlay.pm:90 -msgid "Combobox: Select or enter one value" -msgstr "Boîte combo : Sélectionnez ou saisissez une valeur" - -#: lib/RT/CustomField_Overlay.pm:91 -msgid "Combobox: Select or enter up to %1 values" -msgstr "Boîte combo : Sélectionner ou saisir au plus %1 valeurs" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Commenter" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Adresse de commentaire" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Commentaire sur le ticket" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "CommenterTicket" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Commentaires (non envoyés aux demandeurs)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Commentaires (non envoyés aux demandeurs)" - -#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Commentaires sur cet utilisateur" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Commentaires ajoutés" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "tr(Commit Stubbed)" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Condition" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "L'argument condition est obligatoire" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "La condition satisfait..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Condition non trouvée" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Configuration" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Confirmer" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Contenu" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "Type de contenu" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Copier" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Courrier" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Courrier ajouté" - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "Impossible d'ajouter une nouvelle valeur de champ personnalisé. " - -#: lib/RT/Record.pm:1660 -#. (, $value_msg) -msgid "Could not add new custom field value. %1 " -msgstr "Impossible d'ajouter une nouvelle valeur de champ personnalisé. %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 "Impossible de changer l'intervenant. " - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Impossible de créer le champ personnalisé" - -#: html/Admin/Elements/EditCustomField:113 -#. ($msg) -msgid "Could not create CustomField: %1" -msgstr "Impossible de créer le champ personnalisé : %1" - -#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "Impossible de créer un groupe" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "Impossible de créer le modèle : %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Impossible de créer un ticket. File non indiquée" - -#: 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 "Impossible de créer l'utilisateur" - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "Impossible de trouver ou créer cet utilisateur" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "Impossible de trouver ce groupe ou utilisateur" - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "Impossible de charger le champ personnalisé %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 "Impossible de charger ce groupe" - -#: lib/RT/SavedSearch.pm:119 -#. ($privacy) -msgid "Could not load object for %1" -msgstr "Impossible de charger l'objet pour %1" - -#: lib/RT/SavedSearch.pm:197 -msgid "Could not load search attribute" -msgstr "Impossible de charger l'attribut de recherche" - -#: lib/RT/Queue_Overlay.pm:761 -#. ($args{'Type'}) -msgid "Could not make that principal a %1 for this queue" -msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour cette file" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour ce ticket" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Impossible de supprimer ce groupe/utilisateur comme un %1 pour cette file" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "Impossible de sauver les informations utilisateur" - -#: lib/RT/Transaction_Overlay.pm:159 -msgid "Couldn't add attachment" -msgstr "Impossible d'ajouter la pièce jointe" - -#: lib/RT/Group_Overlay.pm:1003 -msgid "Couldn't add member to group" -msgstr "Impossible d'ajouter un membre à ce groupe" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "Impossible de créer une transaction : %1" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "Colonne introuvable" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Groupe/utilisateur introuvable" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Valeur introuvable" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "Impossible de charger %1 depuis la base des utilisateurs.\\n" - -#: html/Admin/CustomFields/UserRights.html:149 -#. ($id) -msgid "Couldn't load Class %1" -msgstr "Impossible de charger la classe %1" - -#: html/Admin/CustomFields/GroupRights.html:107 -#. ($id) -msgid "Couldn't load CustomField %1" -msgstr "Impossible de charger le champ personnalisé %1" - -#: lib/RT/Ticket_Overlay.pm:2016 -#. ($self->Id) -msgid "Couldn't load copy of ticket #%1." -msgstr "Impossible de charger une copie du ticket #%1." - -#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 -#. ($id) -msgid "Couldn't load group %1" -msgstr "Impossible de charger le groupe %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 "Impossible de charger le lien" - -#: 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 "Impossible de charger l'objet %1" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "Impossible de charger la file" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "Impossible de charger la file %1" - -#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167 -#. ($id) -msgid "Couldn't load scrip #%1" -msgstr "Impossible de charger le scrip #%1" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "Impossible de charger le ticket '%1'" - -#: lib/RT/Ticket_Overlay.pm:2643 -#. ($args{'URI'}) -msgid "Couldn't resolve '%1' into a URI." -msgstr "Impossible de convertir '%1' en URI." - -#: NOT FOUND IN SOURCE -msgid "Couldn't resolve base '%1' into a URI." -msgstr "Impossible de résoudre la base '%1' dans une URI." - -#: NOT FOUND IN SOURCE -msgid "Couldn't resolve target '%1' into a URI." -msgstr "Impossible de résoudre la cible '%1' dans une URI." - -#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 -msgid "Country" -msgstr "Pays" - -#: 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 "Ajouter" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Ajouter des tickets" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Ajouter un Champ Personnalisé" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "Ajouter un champ personnalisé pour la file %1" - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Ajouter un nouveau groupe" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Ajouter un nouveau groupe personnel" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Ajouter un nouveau ticket" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Ajouter un nouvel utilisateur" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Ajouter une file" - -#: html/Admin/Queues/Scrip.html:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Ajouter un scrip pour la file %1" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Ajouter un modèle" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Ajouter un ticket" - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Ajouter de nouveaux tickets basés sur le modèle de ce scrip" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Ajouter un ticket" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Ajouter des tickets dans cette file" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Ajouter, supprimer et modifier des champs personnalisés" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Ajouter, supprimer et modifier les files" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Ajouter, supprimer et modifier les membres d'un groupe personnel" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Ajouter, supprimer et modifier les utilisateurs" - -#: lib/RT/System.pm:87 -msgid "CreateSavedSearch" -msgstr "CréerRechercheSauvée" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "CreateTicket" -msgstr "CréerTicket" - -#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169 -msgid "Created" -msgstr "Créé" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "Champ Personnalisé %1 créé" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "Créé dans une période" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "Tickets créés dans une période, groupés par l'état" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Créateur" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Liens courants" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Scrips actuels" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Membres actuels" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Droits actuels" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "Recherche courante" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Observateurs actuels" - -#: 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 "Champs personnalisés" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "Champs personnalisés pour %1" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Programme de nettoyage d'action personnalisé" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Programme de préparation d'action personnalisé " - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Condition personnalisée" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "Le champ personnalisé %1 a une valeur." - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "Le champ personnalisé %1 n'a pas de valeur." - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Le champ personnalisé %1 est introuvable" - -#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121 -#. ($cf) -#. ($obj->Name) -msgid "Custom field '%1'" -msgstr "Champs personnalisé '%1'" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "La valeur du champ personnalisé %1 ne peut pas être trouvée pour le champ personnalisé %2" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "La valeur du champ personnalisé ne peut pas être effacée" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "La valeur du champ personnalisé ne peut par être trouvée" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "La valeur du champ personnalisé est effacée" - -#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "ChampPersonnalisé" - -#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75 -msgid "Customize" -msgstr "Personnaliser" - -#: 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 "Dates" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Déc." - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Modèle de réponse automatique par défaut" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "File par défaut" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Demandeur par défaut" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Modèle de commentaire administrateur par défaut" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Modèle de courrier administrateur par défaut" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Modèle de courrier par défaut" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Modèle de transaction par défaut" - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Déléguer les droits" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "Déléguer des droits spécifiques qui vous ont été accordés." - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "DéléguerDroits" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Délégation" - -#: 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 "Supprimer" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "Détruire le modèle" - -#: lib/RT/SavedSearch.pm:220 -#. ($msg) -msgid "Delete failed: %1" -msgstr "Échec de la destruction : %1" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Supprimer les scrips sélectionnés" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Supprimer les tickets" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "Supprimer les valeurs" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "SupprimerTicket" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "Recherche détruite" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "Effacer cet objet briserait l'intégrité référentielle" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Effacer cet objet violerait l'intégrité référentielle" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Refuser" - -#: 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 "En dépend" - -#: lib/RT/Transaction_Overlay.pm:718 -#. ($value) -msgid "Dependency by %1 added" -msgstr "Ajout de la dépendance par %1" - -#: lib/RT/Transaction_Overlay.pm:758 -#. ($value) -msgid "Dependency by %1 deleted" -msgstr "Suppression de la dépendance par %1" - -#: lib/RT/Transaction_Overlay.pm:715 -#. ($value) -msgid "Dependency on %1 added" -msgstr "Ajout de la dépendance de %1" - -#: lib/RT/Transaction_Overlay.pm:755 -#. ($value) -msgid "Dependency on %1 deleted" -msgstr "Suppression de la dépendance de %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 "Dépend de" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "Desc" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Décroissant" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Décrivez la situation ci-dessous" - -#: 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 "Description" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Afficher" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Afficher la liste des droits" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Afficher les colonnes" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Afficher les modèles de Scrips pour cette file" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Afficher les Scrips pour cette file" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Mode d'affichage" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "Afficher les recherches sauvegardées de ce groupe" - -#: html/Elements/Footer:61 -msgid "Distributed under version 2 of the GNU GPL." -msgstr "Distribué selon les termes de la version 2 de la licence GNU GPL." - -#: lib/RT/System.pm:75 -msgid "Do anything and everything" -msgstr "Faire tout et n'importe quoi" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Ne pas rafraîchir cette page." - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Télécharger" - -#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Télécharger en tant que fichier délimité par tabulations" - -#: 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 "Echéance" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Modifier" - -#: html/Search/Bulk.html:149 -msgid "Edit Custom Fields" -msgstr "Modifier les champs personnalisés" - -#: 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 "Modifier les champs personnalisés pour %1" - -#: html/Admin/Global/CustomFields/Groups.html:54 -msgid "Edit Custom Fields for all groups" -msgstr "Modifier les champs personnalisés pour tous les groupes" - -#: html/Admin/Global/CustomFields/Users.html:54 -msgid "Edit Custom Fields for all users" -msgstr "Modifier les champs personnalisés pour tous les utilisateurs" - -#: 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 "Modifier les champs personnalisés pour les tickets de toutes les files" - -#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Modifier les liens" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Modifier la requête" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "Mod. recherche" - -#: html/Admin/Queues/Templates.html:63 -#. ($QueueObj->Name) -msgid "Edit Templates for queue %1" -msgstr "Modifier les modèles pour la file %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "Modifier les recherches sauvées du groupe" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Modifier les modèles système" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "ModifierRecherchesSaugardées" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "Modifier la configuration de la file %1" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Modifier le champ personnalisé %1" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Modifier les membres du groupe %1" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Modifier les membres du groupe personnel %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 "La base ou la cible doivent être spécifiées" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "Email" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "Adresse email utilisée" - -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Activé (Décocher cette case désactive ce champ personnalisé)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Activé (Décocher cette case désactive ce groupe)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Activé (Décocher cette case désactive cette file)" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Files actives" - -#: 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 "État %1 activé" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -msgstr "État actif : %1" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Saisir plusieurs valeurs" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Saisir les objets ou les URI pour y lier les objets. Séparer les saisies par des espaces." - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Saisir une seule valeur" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Saisir des noms de files ou des URI pour lier aux files. Séparer les saisies avec des espaces." - -#: html/Elements/EditLinks:119 html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Saisir des n° de tickets ou des URI pour lier aux tickets. Séparer les saisies par des espaces." - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Saisir au plus %1 valeurs" - -#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47 -msgid "Error" -msgstr "Erreur" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Erreur de paramètres pour Queue->AddWatcher" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Erreur dans les paramètre de Queue->DeleteWatcher" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Erreur de paramètres pour Ticket->AddWatcher" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Erreur dans les paramètres de Ticket->DeleteWatcher" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "Échelonner les tickets" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Estimé" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Tout le monde" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Exemple : " - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Info supplémentaire" - -#: lib/RT/SavedSearch.pm:177 -msgid "Failed to create search attribute" -msgstr "Impossible de créer l'attribut de recherche" - -#: lib/RT/User_Overlay.pm:376 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Recherche du pseudo groupe d'utilisateurs 'Priviligiés' infructueuse." - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Recherche du pseudo groupe d'utilisateurs 'non-privilégiés' infructueuse" - -#: bin/rt-crontool:206 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "Impossible de charger le module %1. (%2)" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "Impossible de charger l'objet pour %1" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Fév." - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "NomFichier" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Saisir dans plusieurs champs de type texte" - -#: lib/RT/CustomField_Overlay.pm:74 -msgid "Fill in multiple wikitext areas" -msgstr "Saisir plusieurs champs de type wiki" - -#: lib/RT/CustomField_Overlay.pm:70 -msgid "Fill in one text area" -msgstr "Saisir dans un champ de type texte" - -#: lib/RT/CustomField_Overlay.pm:75 -msgid "Fill in one wikitext area" -msgstr "Saisir un champ de type wiki" - -#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118 -msgid "Fill in this field with a URL." -msgstr "Saisir une URL." - -#: lib/RT/CustomField_Overlay.pm:71 -msgid "Fill in up to %1 text areas" -msgstr "Saisir au plus %1 champs de type texte" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "Saisir au plus %1 champs de type wiki" - -#: 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 "Priorité finale" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "PrioritéFinale" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Trouver les groupes dont" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Trouver les gens dont" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Rechercher des tickets" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Premier" - -#: 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 "Forcer la modification" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Format" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "Trouvé %quant(%1,ticket)" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Objet trouvé" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Ven." - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "En-têtes complets" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Obtenir le modèle à partir d'un fichier" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "Donné à %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 "Champs personnalisés globaux" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "Configuration globale des champs personnalisés" - -#: html/Admin/Global/MyRT.html:48 -#. ($pane) -msgid "Global portlet %1 saved." -msgstr "Portlet global %1 sauvé." - -#: html/Admin/Elements/SelectTemplate:59 -#. (loc($Template->Name)) -msgid "Global template: %1" -msgstr "Modèle global :  %1" - -#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89 -msgid "Go" -msgstr "Lancer" - -#: 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 "Go !" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Aller au ticket" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Groupe" - -#: 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 "Droits de groupe" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Le groupe a déjà un membre" - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "Le groupe %1 ne peut être créé" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Groupe ajouté" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Un tel membre n'appartient pas au groupe" - -#: 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 "Groupe introuvable" - -#: 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 "Groupes" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Les groupes ne peuvent pas être membres de leurs membres" - -#: html/Admin/Groups/index.html:86 -msgid "Groups matching search criteria" -msgstr "Groupes correspondant au critère de recherche" - -#: html/Ticket/Elements/ShowRequestor:77 -msgid "Groups this user belongs to" -msgstr "Cette utilisateur appartient aux groupes" - -#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 -msgid "Hello!" -msgstr "Bonjour !" - -#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 -#. ($name) -msgid "Hello, %1" -msgstr "Bonjour, %1" - -#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Historique" - -#: html/Admin/Groups/History.html:62 -#. ($GroupObj->Name) -msgid "History of the group %1" -msgstr "Historique du groupe %1" - -#: html/Admin/Users/History.html:62 -#. ($UserObj->Name) -msgid "History of the user %1" -msgstr "Historique de l'utilisateur %1" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Accueil" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "Heuers" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "J'ai %quant(%1, toupie à béton)." - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "Je suis perdu" - -#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766 -msgid "Id" -msgstr "Identifiant" - -#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 -msgid "Identity" -msgstr "Identité" - -#: etc/initialdata:429 -msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "Si une approbation est refusée, rejette l'original et supprime les approbations en attente" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "SI aucun demandeur n'est spécifié, créer les tickets pour ce demandeur." - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Si aucune file n'est spécifée, créer les tickets dans cette file." - -#: 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 "Si cet outil était setgid, un utilisateur local mal intentionné pourrait l'utiliser pour obtenir un access administrateur à 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 "Si vous avez fait une modification, assurez vous de" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Valeur incorrecte pour %1" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Champ non modifiable" - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Inclure les groupes inactifs dans le listage." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Afficher les files inactives." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Inclure les utilisateurs désactivés dans le résultat." - -#: html/Admin/CustomFields/Modify.html:113 -msgid "Include page" -msgstr "Requête incomplète" - -#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441 -msgid "Incomplete Query" -msgstr "Requête incomplète" - -#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438 -msgid "Incomplete query" -msgstr "Requête incomplète" - -#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816 -msgid "Initial Priority" -msgstr "Priorité initiale" - -#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "PrioritéInitiale" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Erreur à l'entrée" - -#: 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 "La valeur saisie doit correspondre à %1" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Erreur interne" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Erreur interne : %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Type de groupe invalide" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Droit invalide" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Données invalides" - -#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678 -#. ($msg) -msgid "Invalid pattern: %1" -msgstr "Motif invalide : %1" - -#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244 -msgid "Invalid queue" -msgstr "File invalide" - -#: 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 "Droit invalide" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "File invalide pour %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Valeur incorrecte pour le champ personnalisé" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Valeur de statut invalide" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Il est extrêmement important que les utilisateurs non autorisés n'aient pas accès à cet outil." - -#: bin/rt-crontool: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 "Il est suggéré de créer un utilisateur Unix non privilégié appartenant au bon groupe et ayant accès à RT pour utiliser cet outil." - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Il faut plusieurs paramètres : " - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "Italique" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Jan." - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Rejoignez ou quittez ce groupe" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Jul." - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Tout" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Jun." - -#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 -msgid "Language" -msgstr "Langue" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "Grande" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Dernier" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Dernier contact" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Date dernier contact" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Date dernière MAJ" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "DernièreMAJPar" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Restant" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Donner accès à RT à cet utilisateur" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Autoriser cet utilisateur à recevoir des droits" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "Relation" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Le lien existe déja" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Le lien ne peut être ajouté" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Le lien est ajouté (%1)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Le lien est effacé (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Lien introuvable" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Lier le ticket n°%1" - -#: html/Admin/CustomFields/Modify.html:102 -msgid "Link values to" -msgstr "Lier les valeurs à" - -#: lib/RT/Ticket_Overlay.pm:700 -msgid "Linking. Permission denied" -msgstr "Relation. autorisation refusée" - -#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 -msgid "Links" -msgstr "Relations" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "Charger" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Charger les recherches sauvées :" - -#: lib/RT/System.pm:86 -msgid "LoadSavedSearch" -msgstr "ChargerRechercheSauvée" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Modules perl chargés" - -#: lib/RT/SavedSearch.pm:111 -#. ($self->Name) -msgid "Loaded search %1" -msgstr "Recherche %1 chargée" - -#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 -msgid "Location" -msgstr "Localisation" - -#: NOT FOUND IN SOURCE -msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "Le répertoire de journalisation %1 est introuvable ou inaccessible en écriture.\\n RT ne peut être lancé." - -#: html/Elements/Header:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "Connecté en tant que %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 "Connexion" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Déconnexion" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "Faire attention aux types différents" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Attribuer" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Appliquer Statut" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Appliquer date d'échéance" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Appliquer date de résolution" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Appliquer date de début" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Appliquer date d'ouverture" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Appliquer Age" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Appliquer priorité" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Appliquer file" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Changer le sujet" - -#: lib/RT/Group_Overlay.pm:169 -msgid "Make this group visible to user" -msgstr "Malkovich Malkovich Malkovich Malkovich" - -#: html/Admin/index.html:78 -msgid "Manage custom fields and custom field values" -msgstr "Gérer les champs personnalisés et leurs valeurs" - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Gérer les groupes et leurs membres" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Gérer les propriétés et configurations générales des files" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Gérer les files et leurs propriétés individuelles" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Gérer les utilisateurs et mots de passe" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Mar." - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "Mai." - -#: lib/RT/Transaction_Overlay.pm:731 -#. ($value) -msgid "Member %1 added" -msgstr "Membre %1 ajouté" - -#: lib/RT/Transaction_Overlay.pm:771 -#. ($value) -msgid "Member %1 deleted" -msgstr "Membre %1 supprimé" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Membre ajouté" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Membre supprimé" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Membre non supprimé" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Membre de" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Membres" - -#: lib/RT/Transaction_Overlay.pm:728 -#. ($value) -msgid "Membership in %1 added" -msgstr "Appartenance à %1 ajoutée" - -#: lib/RT/Transaction_Overlay.pm:768 -#. ($value) -msgid "Membership in %1 deleted" -msgstr "Appartenance à %1 supprimée" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Affiliations" - -#: html/Admin/Users/Memberships.html:60 -#. ($UserObj->Name) -msgid "Memberships of the user %1" -msgstr "Affiliations de l'utilisateur %1" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Fusion réussie" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Échec de fusion. Ne peut appliquer EffectiveId" - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "Échec de fusion. Ne peut appliquer Status" - -#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Fusionner dans" - -#: lib/RT/Transaction_Overlay.pm:734 -#. ($value) -msgid "Merged into %1" -msgstr "Fusionné avec %1" - -#: html/Search/Bulk.html:143 html/Ticket/Update.html:118 -msgid "Message" -msgstr "Message" - -#: html/Ticket/Elements/ShowTransactionAttachments:164 -msgid "Message body not shown because it is too large or is not plain text." -msgstr "Corps du message non affiché car il est trop important ou n'est pas au format texte." - -#: lib/RT/Ticket_Overlay.pm:2451 -msgid "Message could not be recorded" -msgstr "Le message ne peut être sauvegardé" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Message sauvegardé" - -#: html/Ticket/Elements/PreviewScrips:122 -msgid "Messages about this ticket will not be sent to..." -msgstr "Les messages relatifs à ce ticket ne seront pas envoyés à..." - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -msgstr "Minutes" - -#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445 -msgid "Mismatched parentheses" -msgstr "Parenthèses non correspondantes" - -#: lib/RT/Record.pm:954 -msgid "Missing a primary key?: %1" -msgstr "Clé primaire manquante ? : %1" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Mobile" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Modifier la liste de droits" - -#: html/Admin/Elements/ObjectCustomFields:96 -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "Modifier les champs personnalisés s'appliquant à %1 pour tous les %2" - -#: html/Admin/Elements/ObjectCustomFields:98 -#. (loc(lc($Types))) -msgid "Modify Custom Fields which apply to all %1" -msgstr "Modifier les champs personnalisés s'appliquant à tous les %1" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Modifier les droits du groupe" - -#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Modifier les membres" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Modifier les droits" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Modify Scrip templates for this queue" -msgstr "Modifier les modèles de Scrips pour cette file" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Modifier les Scrips pour cette file" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Modifier les droits des usagers" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "Modifier un champ personnalisé pour la file %1" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "Modifier le scrip pour la file %1" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Modifier le scrip qui s'applique à toutes les files" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "Modifier les objets associés à %1" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "Modifier les dates pour n°%1" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Modifier les dates pour le ticket n°%1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 -msgid "Modify global custom fields" -msgstr "Modifier globalement les champs personnalisés" - -#: 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 "Modifier les droits de groupe globaux" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Modifier les droits de groupe globaux." - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Modifier les droits utilisateurs globaux" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Modifier les droits utilisateurs globaux." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Modifier les métadonnées ou supprimer le groupe" - -#: html/Admin/CustomFields/GroupRights.html:164 -#. ($CustomFieldObj->Name) -msgid "Modify group rights for custom field %1" -msgstr "Modifier les droits de groupe pour le champ personnalisé %1" - -#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 -#. ($GroupObj->Name) -msgid "Modify group rights for group %1" -msgstr "Modifier les droits de groupes du groupe %1" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "Modifier les droits de groupe pour la file %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Modifier la liste des membres pour ce groupe" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Modifier son propre profil RT" - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "Modifier les utilisateurs de la file %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 "Modifier les utilisateurs du ticket n°%1" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Modifier les scrips de la file %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 "Modifier les scrips s'appliquant à toutes les files" - -#: 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 "Modifier le modèle %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Modifier les modèles globaux" - -#: html/Admin/Global/index.html:85 -msgid "Modify the default \"RT at a glance\" view" -msgstr "Modifier la vue \"RT en un coup d'œil\" par défaut" - -#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 -#. ($Group->Name) -msgid "Modify the group %1" -msgstr "Modifier le groupe %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Modifier les observateurs de la file" - -#: html/Admin/Users/Modify.html:309 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "Modifier l'utilisateur %1" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "Modifier le ticket n°%1" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "Modifier le ticket n°%1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Modifier les tickets" - -#: html/Admin/CustomFields/UserRights.html:157 -#. ($CustomFieldObj->Name) -msgid "Modify user rights for custom field %1" -msgstr "Modifier les droits utilisateurs pour le champ personnalisé %1" - -#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 -#. ($GroupObj->Name) -msgid "Modify user rights for group %1" -msgstr "Modifier les droits utilisateurs pour le groupe %1" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Modifier les droits utilisateurs pour la file %1" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ModifyACL" -msgstr "ModifierACL" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "ModifierChampPersonnalisé" - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "ModifierPropresAppartenances" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyQueueWatchers" -msgstr "ModifierObservateurs" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ModifyScrips" -msgstr "ModifierScrips" - -#: lib/RT/System.pm:82 -msgid "ModifySelf" -msgstr "ModifierDonnéesPerso" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "ModifyTemplate" -msgstr "ModifierModèle" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "ModifyTicket" -msgstr "ModifierTicket" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Lun." - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "Plus d'informations sur %1" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Aller en bas" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Aller en haut" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Multiple" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "Attribut 'Nom' obligatoire" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "Mes %1 tickets" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "Ma journée" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Mes approbations" - -#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Mes recherches" - -#: 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 "Nom" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Nom utilisé" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Jamais" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Nouveaux liens" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Nouveau mot de passe" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Nouvelles approbations en attente" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Nouv. recherche" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Nouveau champ personnalisé" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Nouveau groupe" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Nouveau mot de passe" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Notification de nouveau mot de passe envoyée" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Nouvelle file" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "Nouveau rappel :" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Nouveaux droits" - -#: 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 "Nouveau scrip" - -#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Nouveau modèle" - -#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Nouveau ticket" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "Nouveau ticket inconnu" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Nouvel utilisateur" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Nouvel utilisateur appelé" - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Nouveaux observateurs" - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Suivant" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Page suivante" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Surnom" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "Aucune classe définie" - -#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "Aucun champ personnalisé" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Aucun champ personnalisé défini" - -#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Aucun groupe défini" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "Aucune requête" - -#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "Aucune file définie" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Pas d'utilisateur RT trouvé. Merci de consulter votre administrateur RT.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Pas de modèle" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "Pas d'action" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "Aucune colonne spécifiée" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Pas de commentaires concernant cet utilisateur" - -#: 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 "Aucune description disponible pour %1" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Aucun groupe spécifié" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "Aucun groupe trouvé d'après le critère de recherche." - -#: lib/RT/Ticket_Overlay.pm:2393 -msgid "No message attached" -msgstr "Aucun messages attachés" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "Pas de mot de passe configuré" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Permission refusée pour la création de file" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "Vous n'êtes pas autorisé à créer un ticket dans cette file '%1'" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Permission refusée pour la création d'utilisateurs" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Pas de permission pour afficher ce ticket" - -#: lib/RT/SavedSearch.pm:156 -msgid "No permission to save system-wide searches" -msgstr "Pas de permission pour sauvegarder des recherches systèmes" - -#: html/SelfService/Update.html:117 -msgid "No permission to view update ticket" -msgstr "Pas de permission pour afficher le ticket mis à jour" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Aucun groupe/utilisateur spécifié" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Aucun groupe/utilisateur sélectionné." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Pas de file correspondant aux critères de recherche." - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Aucun droit trouvé" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Aucun droit accordé." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "Pas de recherche chargée" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Pas de critère de recherche." - -#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Pas de sujet" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Aucun type de transaction spécifié" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Aucun utilisateur ne correspond aux critères de recherche." - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "Pas de valeur à positionner  \\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Personne" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Champ inexistant ? " - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "Non renseigné" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Non connecté." - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Non renseigné" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Fonction pas encore disponible." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Notes" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Impossible d'envoyer la notification" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "Avertir les AdminCCs" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "Avertir les AdminCCs par un commentaire" - -#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 -msgid "Notify Ccs" -msgstr "Aviser par cc" - -#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "Aviser par cc pour commentaires" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "Avertir les autres destinataires" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Avertir les autres destinataires par un commentaire" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "Avertir l'intervenant" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "Avertir l'intervenant par un commentaire" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "Avertir l'Intervenant du rejet de son ticket" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "Avertir l'Intervenant de l'approbation de son ticket par tous les approbateurs" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "Avertir l'Intervenant de l'approbation de son ticket par un des approbateurs" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Avertir les intervenants et les AdminCCs de nouveaux éléments attendant leur approbation" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "Avertir les demandeurs" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "Avertir les demandeurs et les Ccs" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "Avertir les demandeurs et les CC par un commentaire" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Avertir les demandeurs, CCs et AdminCCs" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Avertir les demandeurs, CCs et AdminCCs par un commentaire" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Nov." - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "OU" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "L'objet n'a pas pu être ajouté" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "Impossible d'effacer l'objet" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Objet ajouté" - -#: lib/RT/Record.pm:120 -msgid "Object deleted" -msgstr "Objet effacé" - -#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 -#. ($ObjectType) -#. ($LookupType) -msgid "Object of type %1 cannot take custom fields" -msgstr "Les objets de type %1 ne peuvent avoir de champs personnalisés" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "Le type d'objet ne correspond pas" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Oct." - -#: html/Tools/Elements/Tabs:55 -msgid "Offline" -msgstr "Déconnecté" - -#: html/Tools/Offline.html:49 -msgid "Offline edits" -msgstr "Édition hors ligne" - -#: html/Tools/Offline.html:46 -msgid "Offline upload" -msgstr "Téléchargement hors ligne" - -#: html/Elements/SelectDateRelation:56 -msgid "On" -msgstr "Le" - -#: lib/RT/Transaction_Overlay.pm:326 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "Le %1, %2 a écrit :" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Lors d'un commentaire" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "Lors d'un courrier" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Lors d'une création" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Lors d'un changement d'intervenant" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "Lors d'un changement de priorité" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Lors d'un changement de file" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Lors de la résolution/clôture" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Lors d'un changement de statut" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Lors d'une transaction" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Ne montrer que les approbations pour les demandes créées après %1" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "Ne montrer que les approbations pour les demandes créées avant %1" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "Ne montrer que les champs personnalisés pour :" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "Tickets ouverts" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Ouvrir" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Tickets ouverts" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Ouvrir les tickets lors d'une correspondance" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "Options" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Trier par" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Organisation" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Ticket source : n°%1" - -#: lib/RT/Transaction_Overlay.pm:622 -msgid "Outgoing email about a comment recorded" -msgstr "Mail sortant suite à l'enregistrement d'un commentaire" - -#: lib/RT/Transaction_Overlay.pm:626 -msgid "Outgoing email recorded" -msgstr "Mail sortant enregistré" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Temps dépassé, priorité augmentée" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Tickets propres" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "PrendreTicket" - -#: 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 "Intervenant" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "Le propriétaire ne peut être sauvé." - -#: lib/RT/Transaction_Overlay.pm:672 -#. ($Old->Name , $New->Name) -msgid "Owner forcibly changed from %1 to %2" -msgstr "Intervenant forcé de %1 à %2" - -#: html/Elements/TicketList:78 -#. ($Page, int($TotalFound/$Rows)+$oddRows) -msgid "Page %1 of %2" -msgstr "Page %1 sur %2" - -#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96 -msgid "Pager" -msgstr "Bipeur" - -#: 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 "Parents" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Mot de passe" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Pense-bête pour votre mot de passe" - -#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045 -msgid "Password changed" -msgstr "Mot de passe changé" - -#: 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 "Le mot de passe doit comporter au moins %1 caractères" - -#: lib/RT/User_Overlay.pm:1044 -msgid "Password set" -msgstr "Mot de passe défini" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Mot de passe : %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "Mot de passe : non autorisé" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "Les mots de passe sont différents." - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "Les mots de passe sont différents. Votre mot de passe n'a pas été modifié" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Personnes" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Réaliser une action définie par l'utilisateur" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Configuration de 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 "Accès refusé" - -#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247 -msgid "Permission denied" -msgstr "Accès refusé" - -#: lib/RT/Template_Overlay.pm:372 -msgid "Permissions denied" -msgstr "Accès refusé" - -#: html/User/Elements/Tabs:56 -msgid "Personal Groups" -msgstr "Groupes personnels" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Groupes personnels" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Groupes personnels :" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Numéros de téléphone" - -#: 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 "Préférences" - -#: html/Admin/Users/MyRT.html:75 -#. ($pane, $UserObj->Name) -msgid "Preferences %1 for user %2 ." -msgstr "Préférence %1 pour l'utilisateur %2 ." - -#: html/Prefs/MyRT.html:141 -#. ($pane) -msgid "Preferences saved for %1." -msgstr "Préférences sauvées pour %1." - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "Préparation interrompue" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Précédent" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "Page précédente" - -#: 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 "Personne/groupe %1 non trouvé(e)." - -#: 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 "Priorité" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "La priorité débute à " - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Confidentialité :" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Privilégié" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Statut privilégiés :  %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Utilisateurs privilégiés" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Pseudo groupe pour usage interne" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Constructeur de requête" - -#: html/Search/Elements/Chart:101 -msgid "Query:" -msgstr "Requête:" - -#: 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 "File" - -#: 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 "File %1 non trouvée" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Nom de la file" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "File déjà créée" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "Impossible de créer la file" - -#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "File ne pouvant être chargée." - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "File créée" - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "File inconnue" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Files" - -#: html/Elements/MyAdminQueues:46 -msgid "Queues I administer" -msgstr "Files I administrer" - -#: html/Elements/MySupportQueues:46 -msgid "Queues I'm an AdminCc for" -msgstr "Les files pour lesquelles je suis observateur AdminCc" - -#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70 -msgid "Quick search" -msgstr "Recherche rapide" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Création rapide de ticket" - -#: html/Search/Results.html:81 -msgid "RSS" -msgstr "RSS" - -#: 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 pour %2" - -#: html/Admin/index.html:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "Administration RT" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "Erreur RT" - -#: html/Admin/Tools/Configuration.html:73 -msgid "RT Variables" -msgstr "Variables de 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 en un coup d'œil" - -#: html/Admin/Users/MyRT.html:30 -#. ($UserObj->Name) -msgid "RT at a glance for the user %1" -msgstr "RT en un coup d'œil pour l'utilisateur %1" - -#: html/Admin/CustomFields/Modify.html:117 -msgid "RT can include content from another web service when showing this custom field." -msgstr "RT peut inclure le contenu d'un autre service web losque ce champs personnalisé est affiché." - -#: html/Admin/CustomFields/Modify.html:106 -msgid "RT can make this custom field's values into hyperlinks to another service." -msgstr "RT peu convertir les valeurs de ce champs personnalisé en liens vers un autre service." - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "RT ne peut enregistrer votre session." - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr "RT pour %1" - -#: html/Search/Simple.html:58 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "RT va rechercher dans tout ce que vous pouvez saisir d'autre dans les sujets des tickets." - -#: 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 remplacera respectivement __id__ et __CustomField__ avec l'identifiant et la valeur du champs personnalisé" - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Nom" - -#: lib/RT/Transaction_Overlay.pm:725 -#. ($value) -msgid "Reference by %1 added" -msgstr "Ajout d'une référence par %1" - -#: lib/RT/Transaction_Overlay.pm:765 -#. ($value) -msgid "Reference by %1 deleted" -msgstr "Suppression de la référence par %1" - -#: lib/RT/Transaction_Overlay.pm:722 -#. ($value) -msgid "Reference to %1 added" -msgstr "Ajout d'une référence à %1" - -#: lib/RT/Transaction_Overlay.pm:762 -#. ($value) -msgid "Reference to %1 deleted" -msgstr "Suppression d'une référence à %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 "Mentionné par" - -#: 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 "Se rapporte à" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Rafraîchir cette page toutes les %1 minute(s)." - -#: lib/RT/Transaction_Overlay.pm:811 -#. ($ticket->Subject) -msgid "Reminder '%1' added" -msgstr "Rappel '%1' ajouté" - -#: lib/RT/Transaction_Overlay.pm:824 -#. ($ticket->Subject) -msgid "Reminder '%1' completed" -msgstr "Rappel '%1' terminé" - -#: lib/RT/Transaction_Overlay.pm:817 -#. ($ticket->Subject) -msgid "Reminder '%1' reopened" -msgstr "Rappel '%1' réouvert" - -#: html/Ticket/Reminders.html:46 -#. ($Ticket->Id) -msgid "Reminder ticket #%1" -msgstr "Ticket de rappel n°%1" - -#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52 -msgid "Reminders" -msgstr "Rappels" - -#: html/Ticket/Reminders.html:50 -#. ($Ticket->Id) -msgid "Reminders for ticket #%1" -msgstr "Rappels pour le ticket n°%1" - -#: html/Search/Bulk.html:94 -msgid "Remove AdminCc" -msgstr "Enlever AdminCc" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Enlever Cc" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Enlever Demandeur" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Répondre" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Adresse de réponse" - -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Répondre aux demandeurs" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Répondre aux tickets" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "RépondreTicket" - -#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47 -msgid "Reports" -msgstr "Rapports" - -#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111 -msgid "Requestor" -msgstr "Demandeur" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Demandeurs" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "Le demande doit être résolue dans" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "Le paramètre requis '%1' n'est pas spécifié" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Remise à zéro" - -#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60 -msgid "Reset to default" -msgstr "Réinitialiser avec les valeurs par défaut" - -#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84 -msgid "Residence" -msgstr "Domicile" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Résoudre" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "Résoudre le ticket n°%1 (%2)" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Résolu" - -#: html/Tools/Reports/Elements/Tabs:55 -msgid "Resolved by owner" -msgstr "Résolus par intervenant" - -#: html/Tools/Reports/Elements/Tabs:59 -msgid "Resolved in date range" -msgstr "Résolus dans la période de temps" - -#: html/Tools/Reports/ResolvedByDates.html:52 -msgid "Resolved tickets in period, grouped by owner" -msgstr "Tickets résolus dans la période, groupés par intervenant" - -#: html/Tools/Reports/ResolvedByOwner.html:50 -msgid "Resolved tickets, grouped by owner" -msgstr "Tickets résolus, groupés par intervenant" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Résultats" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Saisissez à nouveau votre mot de passe" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "Annuler" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Droit délégué" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Droit accordé" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Droit activé" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Droit irrévocable" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Droit inconnu" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Droit non activé." - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Droit révoqué" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Droits" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "Les droits n'ont pas pu être attribués à %1" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "Les droits n'ont pas pu être révoqués pour %1" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Rôles" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "Lignes par boîte" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Lignes par pages" - -#: lib/RT/Date.pm:422 -msgid "Sat." -msgstr "Sam." - -#: 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 "Sauver" - -#: 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 "Enregistrer les modifications" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Sauvegarder les préférences" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Enregistrer les modifications" - -#: lib/RT/SavedSearch.pm:173 -#. ($name) -msgid "Saved search %1" -msgstr "Recherche %1 sauvée" - -#: NOT FOUND IN SOURCE -msgid "Saved searches" -msgstr "Recherches sauvées" - -#: 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 n°%1" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Scrip ajouté" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Champs de scrip" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Scrip supprimé" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Scrips" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Scrips s'appliquant à toutes les files" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Rechercher" - -#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50 -msgid "Search Preferences" -msgstr "Préférences de recherche" - -#: lib/RT/SavedSearch.pm:115 -msgid "Search attribute load failure" -msgstr "Impossible de charger les attributs de recherche" - -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Rechercher des approbations" - -#: html/Search/Simple.html:67 -msgid "Search for tickets" -msgstr "Rechercher des tickets" - -#: 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 "Rechercher des tickets. Saisissez un numéro d'identifiant, un nom de file, les intervenants par nom et les demandeurs par adresse mail. RT recherchera tout ce qui peut se trouver dans le corps des tickets et les attachements." - -#: html/User/Elements/Tabs:62 -msgid "Search options" -msgstr "Options de recherche" - -#: html/Search/Chart.html:56 -#. ($PrimaryGroupBy) -msgid "Search results grouped by %1" -msgstr "Résultats groupés par %1" - -#: lib/RT/SavedSearch.pm:203 -#. ($msg) -msgid "Search update: %1" -msgstr "Mise à jour de la recherche %1" - -#: 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 "La recherche en texte intégral (full text) sur chacun des tickets peut prendre un long moment, mais si vous le nécessitez, vous pouvez rechercher n'importe quel mot dans les historiques de tickets en tapant fulltext:mot." - -#: bin/rt-crontool:265 -msgid "Security:" -msgstr "Sécurité : " - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "Voir également:" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Voir les champs personnalisés" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "See exact outgoing email messages and their recipeients" -msgstr "Voir les mails sortant et leurs destinataires" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket private commentary" -msgstr "Voir les commentaires privés du ticket" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "See ticket summaries" -msgstr "Vue récapitulative des tickets" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "VoirChampPersonnalisé" - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "VoirGroupe" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "SeeQueue" -msgstr "VoirFile" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Choisissez un champ personnalisé" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Choisir un groupe" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Choisir une file" - -#: html/SelfService/CreateTicketInQueue.html:48 -msgid "Select a queue for your new ticket" -msgstr "Choisir une file pour votre nouveau ticket" - -#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Choisir un utilisateur" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Choisir le champ personnalisé" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Choisir des champs personnalisés pour tous les groupes d'utilisateurs" - -#: html/Admin/Global/CustomFields/index.html:65 -msgid "Select custom fields for all users" -msgstr "Choisir des champs personnalisés pour tous les utilisateurs" - -#: html/Admin/Global/CustomFields/index.html:76 -msgid "Select custom fields for tickets in all queues" -msgstr "Choisir des champs personnalisés pour toutes les files" - -#: html/Admin/Global/CustomFields/index.html:83 -msgid "Select custom fields for transactions on tickets in all queues" -msgstr "Choisir des champs personnalisés pour les opération sur les tickets de toutes les files" - -#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Choisir le groupe" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Choisir plusieurs valeurs" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Choisir une valeur" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Choisir la file" - -#: html/Prefs/Quicksearch.html:53 -msgid "Select queues to be displayed on the \"RT at a glance\" page" -msgstr "Sélectionnez les files à afficher dans la page \"RT en un coup d'œil\" page" - -#: 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 "Choisir le 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 "Choisir le modèle" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Choisir au plus %1 valeurs" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Choisir l'utilisateur" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Champs personnalisés sélectionnés" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "Objets sélectionnés" - -#: html/Widgets/SelectionBox:209 -msgid "Selections modified. Please save your changes" -msgstr "Sélections modifiées. Merci de sauver vos modifications" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Envoyer un courrier à tous les observateurs" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Envoyer un mail de commentaire à tous les observateurs" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Envoyer un courrier aux demandeurs et aux CCs" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Envoyer un courrier aux demandeurs et aux CCs en tant que commentaire" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Envoyer un courrier aux demandeurs" - -#: etc/initialdata:125 etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Envoyer un courrier aux CCs et Bccs explicitement indiqués" - -#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 -msgid "Sends mail to the Ccs" -msgstr "Envoyer un courriel en cc" - -#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 -msgid "Sends mail to the Ccs as a comment" -msgstr "Envoyer un courriel en cc pour commentaires" - -#: etc/initialdata:102 -msgid "Sends mail to the administrative Ccs" -msgstr "Envoyer un mail aux AdminCCs" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Envoyer un mail aux AdminCCs en tant que commentaire" - -#: etc/initialdata:82 etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Envoyer un courrier à l'intervenant" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Sep." - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Afficher" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Afficher les approbations" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Afficher les colonnes" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Aff. résultats" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Afficher les requêtes approuvées" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Affichage court" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Afficher les requêtes refusées" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Affichage long" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Afficher les requêtes en attente" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Afficher les requêtes attendant d'autres approbations" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "ShowACL" -msgstr "AfficherACL" - -#: lib/RT/System.pm:85 -msgid "ShowConfigTab" -msgstr "VoirOngletConfiguration" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "ShowOutgoingEmail" -msgstr "AfficherEmailSortant" - -#: lib/RT/Group_Overlay.pm:168 -msgid "ShowSavedSearches" -msgstr "AfficherRecherchesSauvées" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "ShowScrips" -msgstr "AfficherScrips" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "ShowTemplate" -msgstr "AfficherModèle" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowTicket" -msgstr "AfficherTicket" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicketComments" -msgstr "AfficherCommentairesTickets" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "S'identifier en tant que demandeur ou CC de file ou de ticket" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "S'identifier en tant qu'AdminCC de ticket ou de file" - -#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168 -msgid "Signature" -msgstr "Signature" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "Recherche rapide" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Unique" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "Taille" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Passer le menu" - -#: html/Search/Elements/EditFormat:78 -msgid "Small" -msgstr "Petite" - -#: html/Admin/CustomFields/Modify.html:120 -msgid "Some browsers may only load content from the same domain as your RT server." -msgstr "Certains navigateurs peuvent restreindre le chargement du contenu au domaine du serveur RT." - -#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 -msgid "Sort" -msgstr "Trier" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "Étape" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Ouvert le" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Débute" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Etat" - -#: 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 "Statut" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "Changement de statut" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Voler" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Voler les tickets " - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "VolerTicket" - -#: lib/RT/Transaction_Overlay.pm:678 -#. ($Old->Name) -msgid "Stolen from %1" -msgstr "Volé à %1" - -#: html/Search/Elements/EditFormat:81 -msgid "Style" -msgstr "Style" - -#: 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 "Sujet" - -#: 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 "Sujet modifié en %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Valider" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Réussi" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Dim." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "SuperUtilisateur" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Système" - -#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Configuration système" - -#: 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 "Erreur système" - -#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230 -#. ($msg) -msgid "System Error: %1" -msgstr "Erreur système :  %1" - -#: html/Admin/Tools/index.html:47 -msgid "System Tools" -msgstr "Outils système" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Erreur système. Droit non délégué." - -#: 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 "Erreur système. Droit non accordé." - -#: 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 "Groupes systèmes" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "SystemRolegroup à usage interne" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "Chaîne_de_test" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Prendre" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Take tickets" -msgstr "Prendre les tickets" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "PrendreTicket" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Pris" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Modèle" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Modèle n°%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Modèle supprimé" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "Modèle est un argument obligatoire" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Modèle inconnu" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Modèle analysé" - -#: lib/RT/Template_Overlay.pm:391 -msgid "Template parsing error" -msgstr "Erreur d'analyse du modèle" - -#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 -msgid "Templates" -msgstr "Modèles" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Ceci est déjà la valeur actuelle" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "Valeur incorrecte pour ce champ personnalisé" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Valeur identique" - -#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "Ce groupe/utilisateur dispose déjà de ce droit" - -#: lib/RT/Queue_Overlay.pm:753 -#. ($args{'Type'}) -msgid "That principal is already a %1 for this queue" -msgstr "Ce groupe/utilisateur est déjà un %1 pour cette file" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Ce groupe/utilisateur est déjà un %1 pour ce ticket" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Ce groupe/utilisateur n'est pas un %1 pour cette file" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "File inconnue" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "Ticket ayant des tickets fils ou dépendants non résolus" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Cet utilisateur possède déjà ce ticket" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Utilisateur inconnu" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Utilisateur possédant déjà un statut privilégié" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Utilisateur déjà sans privilèges" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Utilisateur bénéficiant à présent du statut privilégié" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Cet utilisateur est maintenant non privilégié" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "Cet utilisateur ne peut pas posséder de ticket dans cette file" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "Identifiant non numérique" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Éléments de base" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "Le CC d'un ticket" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The administrative CC of a ticket" -msgstr "L'AdminCC d'un ticket" - -#: 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 "Cette commande trouve tous les tickets actifs de la file 'general' et positionne leur priorité à 99 s'ils n'ont pas été touchés depuis quatre heures :" - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "La nouvelle valeur est enregistrée." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "L'intervenant d'un ticket" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "Le demandeur d'un ticket" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Ces commentaires ne sont généralement pas accessibles par l'utilisateur" - -#: lib/RT/CustomField_Overlay.pm:978 -msgid "This custom field does not apply to that object" -msgstr "Ce champ personnalisé ne s'applique pas à cet objet" - -#: html/Admin/Tools/Configuration.html:50 -msgid "This feature is only available to system administrators" -msgstr "Cet possibilité n'est offerte qu'aux administrateurs systèmes" - -#: html/Ticket/Elements/PreviewScrips:96 -msgid "This message will be sent to..." -msgstr "Ce message va être envoyé à..." - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Cet outil permet à l'utilisateur de lancer un module perl quelconque depuis RT." - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Cette opération semble ne pas avoir de contenu" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "Les %1 tickets prioritaires de cet utilisateur" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Jeu." - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Ticket n°%1 mise à jour globale : %2" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Ticket n°%1 : %2" - -#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741 -#. ($T::Tickets{$template_id}->Id) -#. ($T::Tickets{$template_id}->id) -#. ($ticket->Id) -msgid "Ticket %1" -msgstr "Ticket %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 "Ticket %1 créé dans la file '%2'" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Ticket %1 :  %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Champs personnalisés du ticket" - -#: html/Ticket/History.html:46 html/Ticket/History.html:49 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket History # %1 %2" -msgstr "Historique du ticket n°%1 %2" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Ticket résolu" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "Transactions du ticket" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Contenu du ticket" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Type du contenu du ticket" - -#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763 -msgid "Ticket could not be created due to an internal error" -msgstr "Une erreur interne a empêché l'ajout du ticket" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Méta-données du ticket" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Statut de ticket modifié" - -#: lib/RT/Search/FromSQL.pm:82 -#. (ref $self) -msgid "TicketSQL search module" -msgstr "Module de recherche 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 "Tickets" - -#: html/Tools/Reports/CreatedByDates.html:86 -msgid "Tickets created after" -msgstr "Tickets créés après" - -#: html/Tools/Reports/CreatedByDates.html:88 -msgid "Tickets created before" -msgstr "Tickets créés avant" - -#: html/Tools/Reports/ResolvedByDates.html:87 -msgid "Tickets resolved after" -msgstr "Tickets résolus après" - -#: html/Tools/Reports/ResolvedByDates.html:89 -msgid "Tickets resolved before" -msgstr "Tickets résolus avant" - -#: html/Approvals/Elements/ShowDependency:48 -msgid "Tickets which depend on this approval:" -msgstr "Tickets dépendant de cette approbation :" - -#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72 -msgid "Time Estimated" -msgstr "Temps estimé" - -#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85 -msgid "Time Left" -msgstr "Temps restant" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Temps passé" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Temps restant" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Temps de calcul" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Temps passé" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "TempsPassé" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "Titre" - -#: html/Elements/Footer:62 -#. ('sales@bestpractical.com') -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "Pour vous renseigner au sujet du support, de la formation, des développements spécifiques ou au sujet de la licence, merci de contacter en anglais %1." - -#: lib/RT/Ticket_Overlay.pm:1170 -msgid "Told" -msgstr "Annoncé" - -#: 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 "Outils" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "Total" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transaction" - -#: lib/RT/Transaction_Overlay.pm:805 -#. ($self->Data) -msgid "Transaction %1 purged" -msgstr "La transaction %1 est supprimée" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Transaction ajoutée" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Champs personnalisées de la transaction" - -#: lib/RT/Transaction_Overlay.pm:128 -msgid "Transaction->Create couldn't, as you didn't specify an object type and id" -msgstr "Transation->Create a échoué car vous n'avez pas spécifié de type d'objet et d'id" - -#: lib/RT/Transaction_Overlay.pm:870 -msgid "Transactions are immutable" -msgstr "Les transactions ne peuvent être transférées" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Mar." - -#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Type" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "Fonction non disponible" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Identifiant Unix" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "Type d'encodage de courrier inconnu : %1" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "Champ inconnu : $key" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Illimité" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Recherche non nommée" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Non privilégié" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Champs personnalisés non sélectionnés" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "Objets non sélectionnés" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "Non pris" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Mettre à jour" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Mettre à jour le ticket" - -#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Mettre à jour le type" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Mettre à jour plusieurs tickets" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Mise à jour non enregistrée." - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Mettre à jour le ticket" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Mette à jour le ticket n°%1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Mette à jour le ticket n°%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr "Le type de mise à jour n'était ni un commentaire ni un courrier." - -#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Mis(e) à jour" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Uploader" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Télécharger plusieurs fichiers" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Télécharger plusieurs images" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Télécharger un fichier" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Télécharger une image" - -#: lib/RT/CustomField_Overlay.pm:86 -msgid "Upload up to %1 files" -msgstr "Télécharger un maximum de %1 fichiers" - -#: lib/RT/CustomField_Overlay.pm:81 -msgid "Upload up to %1 images" -msgstr "Télécharger au plus %1 images" - -#: html/Tools/Offline.html:93 -msgid "Upload your changes" -msgstr "Télécharger vos changements" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "Utiliser les autres outils d'administration de RT" - -#: lib/RT/Ticket_Overlay.pm:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "L'utilisateur %1 ne peut être trouvé." - -#: etc/initialdata:132 etc/initialdata:206 -msgid "User Defined" -msgstr "Défini par l'utilisateur" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "Conditions et actions définies par l'utilisateur" - -#: 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 "Droits utilisateurs" - -#: NOT FOUND IN SOURCE -msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" -msgstr "L'utilisateur a demandé un type de mise à jour non connu pour le champ personnalisé %1 de l'objet %2 n°%3" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "L'utilisateur ne peut être créé : %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Utilisateur créé" - -#: 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 "Groupes définis par l'utilisateur" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Utilisateur chargé" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Groupe définis par l'utilisateur" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Nom d'utilisateur" - -#: 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 "Utilisateurs" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Utilisateurs correspondants aux critères de recherche" - -#: bin/rt-crontool:134 -#. ($transaction->id) -msgid "Using transaction #%1..." -msgstr "Utilisation de la transaction #%1..." - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Valider la requête" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "Validation" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Valeurs" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "Observer" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "ObserverCommeAdminCC" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Observateurs" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Mer." - -#: html/Tools/MyDay.html:75 -msgid "What I did today" -msgstr "Ce que j'ai fait aujourd'hui" - -#: etc/initialdata:521 -msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" -msgstr "Quand un ticket a été approuvé par tous les approbateurs, ajoute le courrier au ticket source" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "Quand un ticket a été approuvé par au moins un approbateur, ajoute le courrier au ticket source " - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "Quand un ticket est créé" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "Quand un ticket d'approbation est créé, informer l'intervenant et l'AdminCC de l'élément attendant leur approbation" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "Quand quelque chose arrive" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "Lorsqu'un ticket quelconque est résolu/clos" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "Lorsqu'un ticket quelconque change d'intervenant" - -#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "Lorsqu'un ticket change de priorité" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "Lorsqu'un ticket quelconque change de file" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "Lorsqu'un ticket quelconque change de statut" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "Lorsqu'une condition définie par l'utilisateur est satisfaite" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "Lorsque un commentaire arrive" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "Lorsque un courrier arrive" - -#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88 -msgid "Work" -msgstr "Travail" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "Travail hors ligne" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Travaillé" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Vous êtes déjà intervenant de ce ticket" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Vous n'êtes pas un utilisateur autorisé" - -#: html/Prefs/Search.html:56 -msgid "You can also edit the predefined search itself" -msgstr "Vous pouvez aussi modifier la recherche prédéfinie elle-même" - -#: lib/RT/Ticket_Overlay.pm:3025 -msgid "You can only reassign tickets that you own or that are unowned" -msgstr "Vous pouvez seulement réaffecter vos ticket ou ceux qui ne sont pas affectés" - -#: lib/RT/Ticket_Overlay.pm:3021 -msgid "You can only take tickets that are unowned" -msgstr "Vous pouvez uniquement prendre des tickets sans propriétaire" - -#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 -#. ($num, $queue) -msgid "You found %1 tickets in queue %2" -msgstr "%1 tickets trouvés dans la file %2" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Vous avez été déconnecté de RT." - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "Vous n'avez pas l'autorisation de créer des tickets dans cette file." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "Vous ne pouvez pas créer de demandes dans cette file." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Vous êtes invité à vous identifier à nouveau" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Votre demande a été approuvée par %1. D'autres approbations sont peut être toujours en attente." - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "Votre demande a été approuvée." - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "Votre demande a été rejetée." - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "Votre nom d'utilisateur ou votre mot de passe est incorrect" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "Code Postal" - -#: lib/RT/System.pm:87 -msgid "allow creation of saved searches" -msgstr "autorise la création de recherches sauvées" - -#: lib/RT/System.pm:86 -msgid "allow loading of saved searches" -msgstr "autorise le chargement de recherches sauvées" - -#: html/User/Elements/DelegateRights:80 -#. ($right->PrincipalObj->Object->SelfDescription) -msgid "as granted to %1" -msgstr "comme accordé à %1" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "graphique" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "fermé" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 -msgid "contains" -msgstr "contient" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "jours" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "effacé" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "ne correspond pas" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "ne contient pas" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "égal à" - -#: html/Search/Build.html:547 -msgid "error: can't move down" -msgstr "erreur : ne peut aller plus bas" - -#: html/Search/Build.html:569 -msgid "error: can't move left" -msgstr "erreur : ne peut aller à gauche" - -#: html/Search/Build.html:528 -msgid "error: can't move up" -msgstr "erreur : ne peut aller plus haut" - -#: html/Search/Build.html:612 -msgid "error: nothing to delete" -msgstr "erreur : rien à effacer" - -#: 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 "erreur : rien à déplacer" - -#: html/Search/Build.html:630 -msgid "error: nothing to toggle" -msgstr "erreur : rien à commuter" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "supérieur à" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr "groupe '%1'" - -#: html/Search/Results.html:88 -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -msgid "grouped by %1" -msgstr "groupés par %1" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "heures" - -#: html/Search/Elements/PickBasics:48 -msgid "id" -msgstr "n°" - -#: 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 "est" - -#: 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 "n'est pas" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "inférieur à" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "correspond" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "min" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "mois" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "nouveau" - -#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "sans nom" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "non renseigné" - -#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "aucun" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "différent de" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "ouvert" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "groupe personnel '%1' pour l'utilisateur '%2'" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "file %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "rejeté" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "résolu" - -#: lib/RT/Date.pm:334 -msgid "sec" -msgstr "sec" - -#: lib/RT/System.pm:85 -msgid "show Configuration tab" -msgstr "montrer l'onglet de configuration" - -#: html/Search/Results.html:80 -msgid "spreadsheet" -msgstr "feuille de calcul" - -#: lib/RT/Queue_Overlay.pm:84 -msgid "stalled" -msgstr "stagnant" - -#: html/Search/Results.html:89 -#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle')) -msgid "style: %1" -msgstr "style : %1" - -#: html/Prefs/MyRT.html:93 -msgid "summary rows" -msgstr "lignes de sommaire" - -#: lib/RT/Group_Overlay.pm:222 -#. ($self->Type) -msgid "system %1" -msgstr "système %1" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "groupe système '%1'" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "le composant appelant n'a pas spécifié pourquoi" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "ticket n°%1 %2" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "groupe %1 non décrit" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "utilisateur %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "semaines" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "années" - diff --git a/rt/lib/RT/I18N/he.po b/rt/lib/RT/I18N/he.po deleted file mode 100644 index aa6309d96..000000000 --- a/rt/lib/RT/I18N/he.po +++ /dev/null @@ -1,5414 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"PO-Revision-Date: 2005-10-03 13:47-0400\n" -"Last-Translator: FULL NAME \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 "" - -#: 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 "" - -#: html/Elements/ShowSearch:105 -msgid "$1" -msgstr "" - -#: lib/RT/Record.pm:940 -#. ($label) -msgid "$prefix %1" -msgstr "" - -#: lib/RT/URI/fsck_com_rt.pm:256 -#. ($self->ObjectType, $self->Object->Id) -msgid "%1 #%2" -msgstr "" - -#: lib/RT/Date.pm:365 -#. ($s, $time_unit) -msgid "%1 %2" -msgstr "" - -#: lib/RT/Date.pm:401 -#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) -msgid "%1 %2 %3 %4:%5:%6 %7" -msgstr "" - -#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690 -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 added" -msgstr "" - -#: lib/RT/Date.pm:362 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 מוצגים" - -#: 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 "" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "" - -#: bin/rt-crontool:253 -#. ("--template-id") -msgid "%1 - Specify id of the template you want to use" -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 "" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -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 "" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "" - -#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151 -#. ($args{'Base'}) -#. ($args{'Target'}) -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "" - -#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531 -#. ($self->BriefDescription , $self->CreatorObj->Name) -#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) -msgid "%1 by %2" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800 -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -msgid "%1 changed from %2 to %3" -msgstr "" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "" - -#: 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 הפניות עם העדיפות הגבוהה ביותר שאני פתחתי..." - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "" - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "" - -#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49 -#. ($minutes) -msgid "%1 min" -msgstr "" - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "זכויות" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "" - -#: 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 "" - -#: html/Ticket/Elements/ShowTransactionAttachments:78 -#. ($size) -msgid "%1b" -msgstr "" - -#: html/Ticket/Elements/ShowTransactionAttachments:75 -#. (int( $size / 102.4 ) / 10) -msgid "%1k" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "" - -#: html/Ticket/Update.html:90 -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does not change who 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 "" - -#: 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 "" - -#: 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 "" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -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 "" - -#: 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 "" - -#: html/Elements/EditCustomFieldSelect:57 -msgid "-" -msgstr "" - -#: bin/rt-crontool:95 -msgid "--transaction argument could be only 'first' or 'last'" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "" - -#: html/Elements/SelectTicketTypes:48 -msgid "<% $_ %>" -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" - -#: 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 "" - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "" - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "" - -#: html/User/Elements/Tabs:53 -msgid "About me" -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 "" - -#: 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 "" - -#: 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 "" - -#: html/Ticket/Create.html:147 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "הוסף עוד קבצים" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "הוסף מבקש" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "" - -#: html/Search/Build.html:109 html/Search/Build.html:94 -msgid "Add and Search" -msgstr "" - -#: html/Search/Bulk.html:124 -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 "" - -#: lib/RT/Queue_Overlay.pm:763 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "כתובת1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "כתובת2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113 -msgid "AdminCc" -msgstr "העתק ניהולי" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -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 "" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "העתק ניהולי" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "אחרי" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "" - -#: 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 "אישור" - -#: 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 "" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "" - -#: html/Approvals/index.html:73 -#. ($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:69 -msgid "Approve" -msgstr "" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "אפריל" - -#: NOT FOUND IN SOURCE -msgid "April" -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 "" - -#: 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 "" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "אוגוסט" - -#: NOT FOUND IN SOURCE -msgid "August" -msgstr "אוגוסט" - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "" - -#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "בסיסי" - -#: 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 "לפני" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -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 "עדכון פניות מרוכז" - -#: 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 "" - -#: 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 "" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -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 "העתק" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -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 "ילדים" - -#: 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 "עיר" - -#: 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 "נסגר" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -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 "" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "הערה" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -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 "הערות נוספו" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -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 "" - -#: 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 "" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167 -#. ($id) -msgid "Couldn't load scrip #%1" -msgstr "" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "" - -#: 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 "צור" - -#: etc/initialdata:135 -msgid "Create Tickets" -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 "" - -#: 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 "צור משתמש חדש" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "" - -#: 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 "יחסים נוכחיים" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -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 "צופים נוכחיים" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "" - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "" - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "" - -#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121 -#. ($cf) -#. ($obj->Name) -msgid "Custom field '%1'" -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 "" - -#: 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 "" - -#: 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 "תאריכים" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "דצמבר" - -#: NOT FOUND IN SOURCE -msgid "December" -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 "" - -#: 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 "" - -#: 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 "" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "דלגציות" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204 -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 "" - -#: 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 "" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "" - -#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "תלויים בו" - -#: 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 "תלוי ב" - -#: 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 "Details" -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 "" - -#: 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 "אל תראה את תוצאות החיפוש" - -#: 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 "" - -#: 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 "תאריך יעד" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -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 "" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "" - -#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608 -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 "אי-מייל" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -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 "" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "" - -#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138 -#. (loc_fuzzy($msg)) -msgid "Enabled status %1" -msgstr "" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -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 "" - -#: 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 "" - -#: 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 "" - -#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47 -msgid "Error" -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 "" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "" - -#: bin/rt-crontool:271 -msgid "Example:" -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 "" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "פברואר" - -#: NOT FOUND IN SOURCE -msgid "February" -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 "" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "" - -#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841 -msgid "Final Priority" -msgstr "עדיפות סופית" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "מצא אנשים ש" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "מצא פניות" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "First page" -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 "הכרח שינוי" - -#: 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 "" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "שישי" - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "כותרים מלאים" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "" - -#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 -msgid "Global" -msgstr "גלובאלי" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -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 "" - -#: 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 "חפש" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -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" - -#: 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 "זכויות קבוצה" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "" - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: html/Admin/Users/History.html:62 -#. ($UserObj->Name) -msgid "History of the user %1" -msgstr "" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "דף הבית" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "" - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -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 "" - -#: 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 "" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "" - -#: 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 "" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -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 "" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "ינואר" - -#: NOT FOUND IN SOURCE -msgid "January" -msgstr "ינואר" - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "יולי" - -#: NOT FOUND IN SOURCE -msgid "July" -msgstr "יולי" - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "ג'מבו" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "יוני" - -#: NOT FOUND IN SOURCE -msgid "June" -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 "עדכון אחרון" - -#: 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 "תן למשתמש זה לגשת ל R" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "תן אפשרות להעניק זכויות למשתמש זה" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -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 "" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "" - -#: 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 "" - -#: 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 "קישורים" - -#: 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 "מיקום" - -#: 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 "יציאה" - -#: 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 "" - -#: 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 "נהל משתמשים וספריות" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "מרץ" - -#: NOT FOUND IN SOURCE -msgid "March" -msgstr "מרץ" - -#: NOT FOUND IN SOURCE -msgid "May" -msgstr "מאי" - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "מאי" - -#: 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 "חבר הוסף" - -#: 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 "חבר ב" - -#: 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 "" - -#: 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 "מיזוג הצליח" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "מיזוג נכשל. לא יכולתי להגדיר מזהה אפקטיבי" - -#: 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 "" - -#: 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 "" - -#: 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" - -#: 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 "" - -#: html/Admin/Elements/ObjectCustomFields:98 -#. (loc(lc($Types))) -msgid "Modify Custom Fields which apply to all %1" -msgstr "" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -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 "" - -#: 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 "" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63 -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 "" - -#: 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 "" - -#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 -#. ($Group->Name) -msgid "Modify the group %1" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -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 "" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "שני" - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "עוד לגבי %1" - -#: 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 "" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "האישורים שלי" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -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 "שם בשימוש" - -#: 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 "" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -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 "צופים חדשים" - -#: 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 "כינוי" - -#: 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 "" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "" - -#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78 -#. (ref $self) -msgid "No description for %1" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "אף אחד" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "" - -#: 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 "" - -#: html/Approvals/Elements/Approve:81 -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 "" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "נובמבר" - -#: NOT FOUND IN SOURCE -msgid "November" -msgstr "נובמבר" - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "" - -#: 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 "" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "אוקטובר" - -#: NOT FOUND IN SOURCE -msgid "October" -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 "" - -#: 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 "" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -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 "ארגון" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -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 "" - -#: 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 "בעלים" - -#: 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 "" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "הבעלים" - -#: 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 "ביפר" - -#: 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 "הורים" - -#: 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 "" - -#: 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 "" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "אנשים" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "" - -#: 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 "" - -#: 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 "קבוצות אישיות" - -#: 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 "קבוצות אישיות" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "מספרי טלפון" - -#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49 -msgid "Preferences" -msgstr "מאפיינים" - -#: 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 "" - -#: 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 "דף קודם" - -#: 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 "" - -#: 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 "" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -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 "" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -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 "" - -#: 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 "" - -#: 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 "" - -#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 -#. ($RT::VERSION, $RT::rtname) -msgid "RT %1 for %2" -msgstr "" - -#: html/Admin/index.html:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "ניהול RT" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "" - -#: 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 ממבט כולל" - -#: 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 "" - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "" - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr "RT / %1" - -#: html/Search/Simple.html:58 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "" - -#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119 -msgid "RT will replace __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "" - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "שם אמיתי" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "שם אמיתי" - -#: 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 "מתייחסים אליו" - -#: 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 "Refine search" -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 "" - -#: 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 "הסר העתק ניהולי" - -#: 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 "מענה לפנייה" - -#: 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 "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 "" - -#: 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 "בית" - -#: 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 "תגובה למבקשים" - -#: 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 "" - -#: 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 "" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "" - -#: 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 "שבת" - -#: 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 "" - -#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84 -#. ($scrip->Id) -#. ($id) -msgid "Scrip #%1" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -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 "" - -#: 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 "חיפוש" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "ספטמבר" - -#: NOT FOUND IN SOURCE -msgid "September" -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 "הצג בקשות שממתינות לאישורים אחרים" - -#: 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 "חתימה" - -#: 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 "" - -#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 -msgid "Sort" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Sort results by" -msgstr "סדר תוצאות על פי" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "מושהה" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "התחיל" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "מתחיל ב" - -#: 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 "" - -#: 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 "" - -#: 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 "שלח" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "הצליח" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "ראשון" - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "סופר-משתמש" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "מערכת" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -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 "נלקחה" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "" - -#: 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 "" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "חמישי" - -#: NOT FOUND IN SOURCE -msgid "Ticket" -msgstr "פנייה" - -#: 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 "" - -#: 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 "" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "" - -#: 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 "" - -#: 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 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 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 "פניות" - -#: html/Tools/Reports/CreatedByDates.html:86 -msgid "Tickets created after" -msgstr "" - -#: html/Tools/Reports/CreatedByDates.html:88 -msgid "Tickets created before" -msgstr "" - -#: 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 "זמן עבודה" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "" - -#: 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 "" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -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 "עדכן פנייה" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Ticket_Overlay.pm:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "" - -#: 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 "מזהה המשתמש" - -#: NOT FOUND IN SOURCE -msgid "User Id" -msgstr "מזהה המשתמש" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "זכויות המשתמש" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "" - -#: 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 "שם משתמש" - -#: 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 "" - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -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 "זמן טיפול" - -#: 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 "אינך משתמש מורשה" - -#: 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 "מצאת %1 פניות בתור %2" - -#: 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 "אין לך הרשאות ליצור פניות בתור זה." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "אינך מורשה ליצור פניות בתור זה." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "הנך מוזמן להיכנס שנית" - -#: NOT FOUND IN SOURCE -msgid "Your %1 requests" -msgstr "%1 הבקשות שלך" - -#: NOT FOUND IN SOURCE -msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" -msgstr "מנהל המערכת לא הגדיר את כתובות הדואר שמפעילות את התוכנה כמו שצריך" - -#: 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 "בקשתך נדחתה" - -#: 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 "[ללא נושא]" - -#: 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 "שהוענק ל%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 "התכתבות נשלחה" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "ימים" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "מחק" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "מחוק" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "לא מכיל" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "לא מכיל" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -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 "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 "" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "שעות" - -#: html/Search/Elements/PickBasics:48 -msgid "id" -msgstr "מזהה" - -#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53 -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 "פחות מ" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "מכיל" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "דקות" - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "דקות" - -#: 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 "לא שווה ל" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "פתוח" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "נדחה" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "פתור" - -#: 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 "" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "" - diff --git a/rt/lib/RT/I18N/hu.po b/rt/lib/RT/I18N/hu.po deleted file mode 100644 index 1edebd14c..000000000 --- a/rt/lib/RT/I18N/hu.po +++ /dev/null @@ -1,5170 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"POT-Creation-Date: 2002-06-22 06:06+0200\n" -"PO-Revision-Date: 2005-10-03 13:48-0400\n" -"Last-Translator: Attila K. Mergl \n" -"Language-Team: rt-devel \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Record.pm:940 -#. ($label) -msgid "$prefix %1" -msgstr "" - -#: 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 %7. %2 %3 %4:%5:%6" - -#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690 -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 added" -msgstr "[%1] mezõbe '%2' érték felvétele" - -#: lib/RT/Date.pm:362 -#. ($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 változtatása: '%2' --> '%3'" - -#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696 -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 deleted" -msgstr "%1 %2 törölve" - -#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103 -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -msgid "%1 %2 with template %3" -msgstr "%1 %2 a %3 sablonnal" - -#: 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 "%1 (változatlan)" - -#: 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-nek átadandó argumentum" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - Státuszfrissítés kiíratása a STDOUT-ra" - -#: bin/rt-crontool:253 -#. ("--template-id") -msgid "%1 - Specify id of the template you want to use" -msgstr "" - -#: bin/rt-crontool:256 -#. ("--transaction") -msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction" -msgstr "" - -# msgstr "%1 - Schreibe Statusupdates nach STDOUT" -#: bin/rt-crontool:247 -#. ("--action") -msgid "%1 - Specify the action module you want to use" -msgstr "%1 - Adja meg a használandó akciómodult!" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Adja meg a használandó kondiciómodult!" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Adja meg a használandó keres?modult!" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -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 "ScripAction %1 betöltve" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "%1 értéke hozzáadva %2 höz" - -#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151 -#. ($args{'Base'}) -#. ($args{'Target'}) -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "%1 nem találhato az adatbázisban, pedig helyi objektumnak látszik" - -#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531 -#. ($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 változtatása: '%2' --> '%3'" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1 nem állítható %2 re." - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "" -"%1 nem tudta a státuszt lezártra állítani. Az RT adatbázisa talán " -"inkonzisztens." - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "%1 létrehozva" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "%1 törölve" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "A %1 nekem kiosztott, legsürgõsebb probléma..." - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "" - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "Ennek a sornak %1 már nem %2-je." - -#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49 -#. ($minutes) -msgid "%1 min" -msgstr "%1 perc" - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "%1 legújabb gazdátlan probléma" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "%1 jogok" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "" - -#: 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: Nincs melléklet megadva!" - -#: 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' nem lehet státusz érték" - -#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76 -msgid "(Check box to delete)" -msgstr "(Törléshez kiválasztandó!)" - -#: 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 "(Szóközökkel elválasztva adható meg a problémák sorszáma vagy URL-je.)" - -#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1)" -msgstr "(Ha üresen marad: %1)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Nincs egyéni mezõ)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Nincsenek tagok)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Nincs Scrip)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Nincs sablon)" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(nincs név)" - -#: html/Ticket/Update.html:90 -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does not change who 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 "" - -#: 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 "" - -#: 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 "(üres)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(Nincs név a listában)" - -#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591 -msgid "(no value)" -msgstr "(nincs adat)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(nincs adat)" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "
    (Csak egy probléma adható meg!)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(szükséges)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(névtelen)" - -#: 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 "" - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "" - -#: html/Elements/SelectTicketTypes:48 -msgid "<% $_ %>" -msgstr "" - -#: html/Search/Elements/SelectLinks:48 -msgid "<%$_%>" -msgstr "" - -#: html/Search/Elements/DisplayOptions:73 -msgid "<%$field%>" -msgstr "" - -#: html/Elements/CreateTicket:47 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid " %1" -msgstr "" - -#: 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 "Üres sablon" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "" - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE nem található" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACE-k csak létrehozhatók és törölhetõk." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "ÉS" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Magamról" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Hozzáférés ellenõrzése" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Akció" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "%1 akció nem található" - -#: bin/rt-crontool:171 -msgid "Action committed.\\n" -msgstr "Akció végrehajtva.\\n" - -#: lib/RT/Scrip_Overlay.pm:168 -msgid "Action is mandatory argument" -msgstr "" - -#: bin/rt-crontool:167 -msgid "Action prepared..." -msgstr "Akció elõkészítve..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Hozzáad" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Adminisztratív tájékotatást kapó hozzáadása" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Tájékotatást kapó hozzáadása" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Mezõk hozzáadása" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Bõvített keresési feltételek" - -#: html/Ticket/Create.html:147 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "További fájlok csatolása" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Beküldõ hozáadása" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Értékek hozzáadása" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Minden sorra vonatkozó Scrip hozzáadása" - -#: NOT FOUND IN SOURCE -msgid "Add additional criteria" -msgstr "További feltételek hozzáadása" - -#: html/Search/Build.html:109 html/Search/Build.html:94 -msgid "Add and Search" -msgstr "" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "A kiválasztott problémákhoz válasz vagy kiegészítés hozzáadása" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Tagfelvétel" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Új résztvevõk hozzáadása" - -#: 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 "Egyéni mezõk lehetséges értékeinek létrehozása, módosítása, törlése" - -#: lib/RT/Queue_Overlay.pm:763 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "Hozzendelt egy vezetõt mint %1 ehhez a sorhoz" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Hozzárendelt egy vezetõt mint %1 ehhez a problémához" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Utca, házszám" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Postafiók" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "Adminisztratív tájékoztatást kap" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "Adminisztratív megjegyzés" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Válasszon sort!" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Konfiguráció / Általános beállítások" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113 -msgid "AdminCc" -msgstr "Adminisztratív tájékoztatást kap" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -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 "" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Adminisztratív tájékoztatást kap" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Kézi lekérdezés" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "után" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Minden sor" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "ÉS/VAGY" - -#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "" - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Mentés" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "A változtatás mentése" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Lezárás" - -#: 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 "Engedélyezés #%1: %2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Engedélyezés #%1: A megjegyzés rendszerhiba miatt nem rögzíthetõ" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Engedélyezés #%1: Megjegyzés rögzítve" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Lezárás rendben" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Lezárás visszautasítva" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Lezár" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Az engedélyezõ megjegyzése: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "ápr." - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "növekvõ" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Assign and remove custom fields" -msgstr "Egyéni mezõ hozzárendelése vagy törlése" - -#: 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 "Csatol" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Fájl csatolása" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Csatolt fájl" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "A csatolt '%1' nem betölthetõ" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Csatolt fájl létrehozva" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Csatolt fájl neve" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Csatolt fájlok" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "aug." - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "Automatikus válasz" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Automatikus válasz a beküldõnek" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "" - -#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Alapadatok módosítása" - -#: 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 "" -"Ha valamit módosított ne felejtsen el ide kattintani, hogy megtörténjen a" - -# ## wieder - Duzen??? -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "elõtt" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Üres" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "Félkövér" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Tömör fejléc" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Tömeges problémafrissítés" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Rendszerfelhasználó nem módosítható" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Ez a vezetõ nem láthatja ezt a sort" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Egyéni mehzõ név nélkül nem hozzáadható" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($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 "A problémát nem lehet önmagához kapcsolni!" - -#: 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 "Ezt a lekérdezést nem lehet lementeni" - -#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "Nem adhat meg egyszerre bázist és célt" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "A felhasználó nem hozható létre: %1" - -#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58 -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 "Tájékoztatást kap" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -msgstr "Jelszó-változtatás" - -#: 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 "Törléshez bejelölni" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Jog megvonásához megjelölni" - -#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Leszármazottak" - -#: 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 "Város" - -#: 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 "Lezárva" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Lezárt problémák" - -#: 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 "" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Kiegészít" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Kiegészitõcím" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Kiegészítés (a beküldõ nem kapja meg!))" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Kiegészítés (a beküldõ nem kapja meg!)" - -#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Kiegészítés ehhez a felhasználóhoz" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Kiegészítés hozzáfûzése" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Feltétel" - -#: 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 "A feltétel nem található" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Konfiguráció" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Igazolás" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Tartalom" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Másol" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Válasz" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Válasz hozzáfûzése" - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "Az egyéni mezõt nem sikerült hozzáadni." - -#: lib/RT/Record.pm:1660 -#. (, $value_msg) -msgid "Could not add new custom field value. %1 " -msgstr "Az egyéni mezõértéket nem sikerült hozzáadni a #%1 problémához" - -#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073 -msgid "Could not change owner. " -msgstr "Nem sikerült a tulajdonost megváltoztatni! " - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Nem sikerült létrehozni az egyéni mezõt" - -#: html/Admin/Elements/EditCustomField:113 -#. ($msg) -msgid "Could not create CustomField: %1" -msgstr "Nem sikerült létrehozni a(z) %1 egyéni mezõt" - -#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "Nem sikerült létrehozni a csoportot" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "A sablom nem jött létre: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Nem jött létre a probléma. A sor nincs meghatározva" - -#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496 -msgid "Could not create user" -msgstr "A felhasználó nem jött létre" - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "A felhasználót nem sikerült megtalálni vagy létrehozni" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "A vezetõ nem található" - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "A(z) %1 egyéni mezõ nem betölthetõ" - -#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 -msgid "Could not load group" -msgstr "A csoport nem betölthetõ" - -#: 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 "A vezetõ nem lehet %1-e a sornak" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "A vezetõ nem lehet %1-e a problémának" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "A vezetõt nem lehet mint a sor %1-ét eltávolítani" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "A felhasználó adatait nem sikerült elmenteni" - -#: 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 "A tagot nem lehet a csoporthoz adni" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "A tanzakció nem létrehozható: %1" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "A sor nem található" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "A csoport/felhasználó nem található" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Az érték nem található" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "" - -#: 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 "A(z) %1 egyéni mezõ nem betölthetõ" - -#: 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 csoport nem betölthetõ" - -#: 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 objektum nem betölthetõ" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "A sor nem betölthetõ" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "%1 sor nem betölthetõ" - -#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167 -#. ($id) -msgid "Couldn't load scrip #%1" -msgstr "" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "A(z) '%1' nem betölthetõ" - -#: 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 "Ország" - -#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235 -msgid "Create" -msgstr "Felvesz" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Probléma megadása" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Hozzon létre egy új egyéni mezõt!" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "Hozzon létre egy egyéni mezõt a(z) %1 sorhoz" - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Hozzon létre új csoportot!" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Hozzon létre egy új saját csoportot!" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Új probléma felvétele" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Hozzon létre egy új felhasználót!" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Hozzon létre egy sort!" - -#: html/Admin/Queues/Scrip.html:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Hozzon létre egy scrip-et a(z) %1 sorhoz!" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Hozzon létre egy sablont!" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Új probléma" - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Hozzon létre egy új problémát ennek a sablonnak scripjeire alapozva" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Létrehozás" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Hozzon létre problémákat ebben a sorban!" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Egyéni mezõk létrehozása, módosítása, törlése" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Sor létrehozása, módosítása, törlése" - -#: 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 "Felhasználók létrehozása, módosítása, törlése" - -#: 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 "Felvéve" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Létrehozó" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Jelenlegi kapcsolatok" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Jelenlegi Scripek" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Jelenlegi tagok" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Jelenlegi jogok" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Jelenlegi résztvevõk" - -#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "Egyéni mezõk" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "%1 egyéni mezõi" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Az akcióhoz rendelt egyéni lezáró kód" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Az akcióhoz rendelt egyéni elõkészítõ kód" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Egyéni feltétel" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 %2 %3" -msgstr "Egyéni mezõ %1 %2 %3" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "[%1] egyéni mezõnek van értéke." - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "[%1] egyéni mezõnek nincs értéke." - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "[%1] egyéni mezõ nem található" - -#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121 -#. ($cf) -#. ($obj->Name) -msgid "Custom field '%1'" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Egyéni mezõ nem található" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "A(z) %2 egyéni mezõ %1értéke nem található" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "Az egyéni mezõ értéke nem található" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "Az egyéni mezõ értéke nem található" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Az egyéni mezõ értéke törölve" - -#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "" - -#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75 -msgid "Customize" -msgstr "" - -#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65 -msgid "Dates" -msgstr "Idõpontok" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "dec." - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Alapértlemezett sor" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Alapértelmezett beküldõ" - -#: 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 "" - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Jogok továbbadása" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "" - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Jogok továbbadása" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "Töröl" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "Sablon törlése" - -#: lib/RT/SavedSearch.pm:220 -#. ($msg) -msgid "Delete failed: %1" -msgstr "" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Kiválasztott Scrip törlése" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Problémák törlése" - -#: 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 "" - -#: 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 "" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Elutasítva" - -#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "Ettõl függnek" - -#: 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 "A következõktõl függ" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "csökkenõ" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "A probléma szabatos leírása" - -#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70 -msgid "Description" -msgstr "Leírás" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Mutat" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Mezõk kiválasztása" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Láthatóak legyenek az ehhez a sorhoz tartozó scrip sablonok" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Láthatóak legyen a sorhoz tartozó scripek" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Megjelenítési mód" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "" - -#: 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 "" - -#: NOT FOUND IN SOURCE -msgid "Do the Search" -msgstr "Keresés indítása" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Ne frissítse ezt az oldalt." - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Letölt" - -#: 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 "Határidõ" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -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 "Módosítsa %1 egyéni mezõit!" - -#: 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 "Kapcsolatok módosítása" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Lekérdezés szerkesztése kézzel" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "" - -#: html/Admin/Queues/Templates.html:63 -#. ($QueueObj->Name) -msgid "Edit Templates for queue %1" -msgstr "Módosítsa a(z) %1 sor sablonjait!" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Módosítsa a rendszersablonokat!" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Módosítsa a(z) %1 csoport tagságát!" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "" - -#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608 -msgid "Either base or target must be specified" -msgstr "Meg kell adni a bázist vagy a célt" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "E-mail cím" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "E-Mail-cím már foglalt" - -# ## muss das überhaupt übersetzt werden??? -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Aktivált (kiválasztása letiltja ezt az egyéni mezõt)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Aktivált (Kiválasztása letiltja ezt a csoportot)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Aktivált (Kiválasztása letiltja ezt a sort)" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Aktív sorok" - -#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138 -#. (loc_fuzzy($msg)) -msgid "Enabled status %1" -msgstr "Status %1 aktiviert" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Adjon meg több értéket!" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Objektum vagy URI. Szóközzel elválasztva több is megadható" - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Adjon meg egy értéket!" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Sor vagy URI. Szóközzel elválasztva több is megadható" - -#: html/Elements/EditLinks:119 html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Probléma szám vagy URI. Szóközzel elválasztva több is megadható" - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Adjon meg egy értéket!" - -#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47 -msgid "Error" -msgstr "Hiba" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Hiba a sor paraméterezésében ->AddWatcher" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Hiba a sor paraméterezésében->DelWatcher" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Hiba a probléma paraméterezésében -> AddWatcher" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Hiba a probléma paraméterezésében->DelWatcher" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Becsült" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Mindenki" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Például:" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Kiegészítõ információk" - -#: 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 "A %1 Modul nem betölthetõ. (%2)" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "feb." - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "fájlnév" - -#: 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 "" - -#: 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 "Végsõ prioritás" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Találjon olyan csoportot, amelyiknél a" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Találj olyan embereket, akiknél a" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Problémák keresése" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Elsõ" - -#: 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 "A változtatás kikényszerítése" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "%quant(%1) problémát találtam" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "P" - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Teljes fejléc" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "%1 felhasználónak adva" - -#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 -msgid "Global" -msgstr "Általános" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "Globális egyéni mezõ" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "Egyéni mezõk általános beállításai" - -#: 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 "Általános probléma: %1" - -#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89 -msgid "Go" -msgstr "Hajrá!" - -#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57 -msgid "Go!" -msgstr "Hajrá!" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Mutassa a problémát" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Csoport" - -#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Csoportjogok" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Csoportnak már vannak tagjai" - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "A csoportot nem lehetett létrehozni: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Csoport létrehozva" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "A csoportnak már van ilyen tagja" - -#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510 -msgid "Group not found" -msgstr "Csoport nem található" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210 -msgid "Groups" -msgstr "Csoportok" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Csoportok nem lehetnek a saját tagjaik tagjai!" - -#: html/Admin/Groups/index.html:86 -msgid "Groups matching search criteria" -msgstr "A keresési feltételeknek megfeleõ csoportok" - -#: 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 "Részletes történet" - -#: html/Admin/Groups/History.html:62 -#. ($GroupObj->Name) -msgid "History of the group %1" -msgstr "A %1 csoport története" - -#: html/Admin/Users/History.html:62 -#. ($UserObj->Name) -msgid "History of the user %1" -msgstr "%1 felhasználó története" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Kezdõlap" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "" - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766 -msgid "Id" -msgstr "Sorszám" - -#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 -msgid "Identity" -msgstr "Személy" - -#: 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 "Ha a beküldõ ismeretlen, ezzel legyen az új probléma beküldõje" - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Ha nincs megadva sor, ebbe a sorba kerüljenek az új problémák" - -#: bin/rt-crontool:267 -msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT." -msgstr "" - -#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60 -msgid "If you've updated anything above, be sure to" -msgstr "" -"Ha valamit módosított, ne felejtsen el ide kattintani, hogy megtörténjen a" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Érvénytelen érték %1-nek" - -#: NOT FOUND IN SOURCE -msgid "Image" -msgstr "Kép" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Nem változtatható mezõ" - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Láthatóak legyenek a letiltott sorok is." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Láthatóak legyenek a letiltott sorok is." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Keresés a letiltott felhasználók között is." - -#: 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 "Kezdõ prioritás" - -#: 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 "Input hiba" - -#: 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 "" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Belsõ hiba" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Belsõ hiba: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Érvénytelen csoportfajta" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Érvénytelen jog" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Érvénytelen dátum" - -#: 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 "Érvénytelen sor" - -#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290 -msgid "Invalid right" -msgstr "Érvénytelen jog" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "Érvénytelen érték %1-nek" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Érvénytelen érték az egyéni mezõhöz" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Érvénytelen státuszérték" - -#: 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 "" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "jan." - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "júl." - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Minden módosítása" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "jún." - -#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 -msgid "Language" -msgstr "Nyelv" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "Nagy" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Utolsó" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Utolsó kapcsolat" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Utoljára foglalkoztak vele" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Utoljára aktualizálva" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "Utoljára aktualizálta" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Felhasználónak RT-hozzáférés engedélyezése" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Felhasználónak több jog engedélyezése" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Kapcsolat már létezik" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Kapcsolat nem hozható létre" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Kapcsolat létrehozva (%1)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Kapcsolat törölve (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Kapcsolat nem található" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "%1. számú probléma kapcsolatainak módosítása" - -#: 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 "Kapcsolatok módosítása" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Lekérdezés betöltése" - -#: 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 "Cím" - -#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 -msgid "Location" -msgstr "Cím" - -#: NOT FOUND IN SOURCE -msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "" -"Log-könyvtár %1 nem található, vagy nincs írási joga.\\n Az RT tud elindulni." - -#: html/Elements/Header:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "%1-ként van bejelentkezve" - -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Bejelentkezés" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Kijelentkezés" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Legyen a tulajdonos" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Státusz változtatása" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Határidõ változtatása" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Megoldási dátum változtatása" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Hozzáfogás dátumának változtatása" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Kiosztás dátumának változtatása" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Bejelentés dátumának változtatása" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Prioritás állítása" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Sor változtatása" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Tárgy változtatása" - -#: 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 "Csoportok és tagjaik kezelése" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Minden sorra vonatkozó tulajdonságok és beállítások kezelése" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Sorok és a sorokra jellemzõ beállítások kezelése" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Felhasználók és jelszavaik kezelése" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "már." - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "máj." - -#: lib/RT/Transaction_Overlay.pm:731 -#. ($value) -msgid "Member %1 added" -msgstr "Tag hozzáadva" - -#: lib/RT/Transaction_Overlay.pm:771 -#. ($value) -msgid "Member %1 deleted" -msgstr "Tag törölve" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Tag hozzáadva" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Tag törölve" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Tag nincs törölve" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Tagja a" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Tagok" - -#: lib/RT/Transaction_Overlay.pm:728 -#. ($value) -msgid "Membership in %1 added" -msgstr "%1 tag hozzáadva" - -#: lib/RT/Transaction_Overlay.pm:768 -#. ($value) -msgid "Membership in %1 deleted" -msgstr "%1-beli tagság törölve" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Tagságok" - -#: html/Admin/Users/Memberships.html:60 -#. ($UserObj->Name) -msgid "Memberships of the user %1" -msgstr "%1 felhasználó tagságai" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Beolvasztás sikeres" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Beolvasztás sikertelen Konnte EffectiveId nicht setztn" - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "Beolvasztás sikertelen Konnte EffectiveId nicht setztn" - -#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Beolvasztani ebbe" - -#: lib/RT/Transaction_Overlay.pm:734 -#. ($value) -msgid "Merged into %1" -msgstr "Beolvasztva %1-be" - -#: html/Search/Bulk.html:143 html/Ticket/Update.html:118 -msgid "Message" -msgstr "Üzenet szövege" - -#: html/Ticket/Elements/ShowTransactionAttachments:164 -msgid "Message body not shown because it is too large or is not plain text." -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2451 -msgid "Message could not be recorded" -msgstr "A sor nem hozható létre" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Üzenet rögzítve" - -#: 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 "" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Mobil" - -#: 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 "" - -#: html/Admin/Elements/ObjectCustomFields:98 -#. (loc(lc($Types))) -msgid "Modify Custom Fields which apply to all %1" -msgstr "Változtassa meg a %1-re vonatkozó egyéni mezõket!" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Csoportjogok módosítása" - -#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Tagok módosítása" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Jogok módosítása" - -#: 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 "" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Felhasználói jogok módosítása" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "Változtassa meg a(z) %1 sor egyéni mezõjét!" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "%1. számú probléma idõadatainak módosítása" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "%1. számú probléma idõadatainak módosítása" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 -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 "Változtassa meg az általános csoportjogokat!" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Változtassa meg az általános csoportjogokat!" - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Változtassa meg az általános felhasználói jogokat!" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Változtassa meg az általános felhasználói jogokat!" - -#: 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 "Változztassa meg a(z) %1 sor csoportjogait!" - -#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 -#. ($GroupObj->Name) -msgid "Modify group rights for group %1" -msgstr "Módosítsa a(z) %1 csoport jogait" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "Változtassa meg a %1 sor csoportjogait!" - -#: 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 "Változtassa meg a %1 sorhoz tarozó részvevõket!" - -#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57 -#. ($Ticket->id) -#. ($Ticket->Id) -msgid "Modify people related to ticket #%1" -msgstr "A %1. számú problémában érintett személyek változtatása" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Változtassa meg a(z) %1 sor Scripjeit" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63 -msgid "Modify scrips which apply to all queues" -msgstr "Változtassa meg a minden sorra vonatkozó scripeket!" - -#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99 -#. (loc($TemplateObj->Name())) -#. ($TemplateObj->id) -msgid "Modify template %1" -msgstr "Hozzon létre egy sablont!" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Változtassa meg az általános sablonokat!" - -#: 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 "A %1 csoport módosítása" - -#: 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 felhasználó módosítása" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "%1. számú probléma adatainak módosítása" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "%1. számú probléma alapadatainak módosítása" - -#: 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 "" - -#: 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 "Változtassa meg a(z) %1 csoport jogait!" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Változtassa meg a(z) %1 sor felhasználói jogait!" - -#: 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 "" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "H" - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "További részletek %1 felhasználóról" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Lefelé mozgatni" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Felfelé mozgatni" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "%1 problémáim" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Lezárás" - -#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Saját lekérdezések" - -#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65 -msgid "Name" -msgstr "Név" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "A felhasználói név már foglalt" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Soha" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Új" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Új kapcsolatok" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Új jelszó" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "New Query" -msgstr "Új lekérdezés" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Új egyéni mezõ" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Új csoport" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Új jelszó" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Új sor" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Új jogok" - -#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Új Scrip" - -#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Új sablon" - -#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Új probléma" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "Az új probléma nem létezik" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Új felhasználó" - -#: 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 "Új résztvevõk" - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Következõ" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Következõ oldal" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Becenév" - -#: 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 "Nincs egyéni mezõ" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Nincs egyéni mezõ meghatározva" - -#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Nincs csoport meghatározva" - -#: 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 "Nincs sor meghatározva" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "" -"RT-felhasználó nem található. Vegyew fel a kapcsolatot az RT-" -"adminisztrátorral.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Nincs sablon" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "Nincs sor megadva!" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Nincs kiegészítés tárolva" - -#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78 -#. (ref $self) -msgid "No description for %1" -msgstr "Nincs leírás a(z) %1-hez" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Nincs csoport megadva!" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "Nincs a keresési feltételeknek megfeleõ csoport." - -#: lib/RT/Ticket_Overlay.pm:2393 -msgid "No message attached" -msgstr "" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "Nincs jelszó megadva" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Nincs joga sort létrehozni" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "Nincs joga a(z) '%1' sorban problémát létrehozni" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Nincs joga felhasználót létrehozni" - -#: 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 "Nincs joga ezt a problémát aktualizálni" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Nincs felelõs megadva!" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Nincs vezetõ kiválasztva." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Nem található a keresési fletételeknek megfelelõ sor" - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Nem találhatók jogok" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Nincsenek jogok engedélyezve." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Nincs feldolgozható keresési lista." - -#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78 -msgid "No subject" -msgstr "(nincs tárgy)" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Nincs értesítési típus megadva!" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Nincs a keresési feltételeknek megfeleõ felhasználó." - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Senki" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Nem létezõ mezõ?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Nincs bejelentkezve." - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Nincs megadva" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "" - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Megjegyzések" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Értesítést nem sikerült elküldeni." - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "AdminCCs értesítése" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "AdminCCs értesítése kiegészítésként" - -#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 -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 "Más címzettek értesítése" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Más címzettek értesítése kiegészítésként" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "A tulajdonos értesítése" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "A tulajdonos értesítése kiegészítésként" - -#: 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 "Beküldõ értesítése" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "A beküldõ és a tájékoztatást kapó értesítése" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "A beküldõ és a tájékoztatást kapó értesítése kiegészítésként" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Minden résztvevõ tájékozatatása" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Minden résztvevõ értesítése kiegészítésként" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "nov." - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "VAGY" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "Objekum nem hozható létre" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "Az objekumot nem sikerült törölni" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Objektum létehozva" - -#: lib/RT/Record.pm:120 -msgid "Object deleted" -msgstr "Objektum törölve" - -#: 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." - -#: 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 "e napon" - -#: lib/RT/Transaction_Overlay.pm:326 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Kiegészítéskor" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "Válaszoláskor" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Létrehozáskor" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Tulajdonos változásakor" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "Prioritás változásakor" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Sor megváltozásakor" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Megoldáskor" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Státusz megváltozásakor" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Tranzakciónál" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Csak a(z) %1 után létrejött poblémák engedélyezései legyenek láthatóak" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "" -"Csak a(z) %1 elõtt létrejött problémák engedélyezései legyenek láthatóak" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Nyitott" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Megnyit" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Nyitott problémák" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Rendezés" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Cég, szervezet" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -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 "Prioritás idõvel emelkedik" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Saját problémák" - -#: 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 "Tulajdonos" - -#: 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 "Erõszakos tulajdonosváltás: %1 --> %2" - -#: html/Elements/TicketList:78 -#. ($Page, int($TotalFound/$Rows)+$oddRows) -msgid "Page %1 of %2" -msgstr "%1/%2 oldal" - -#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96 -msgid "Pager" -msgstr "" - -#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "Felmenõk" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Jelszó" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Jelszó-emlékeztetõ" - -#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045 -msgid "Password changed" -msgstr "Jelszó megváltoztatva" - -#: 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 "A jelszó túl rövid!" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Jelszó: %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "A jelszavak nem egyeznek." - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Résztvevõk" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Perl konfiguráció" - -#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774 -msgid "Permission Denied" -msgstr "Hozzáférés visszautasítva" - -#: 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 "Saját Csoportok" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Saját csoportok" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Saját csoportok:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Telefonszámok" - -#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Beállításaim" - -#: 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 "" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Elõzõ" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "Elõzõ oldal" - -#: lib/RT/ACE_Overlay.pm:157 lib/RT/ACE_Overlay.pm:239 lib/RT/ACE_Overlay.pm:569 -#. ($args{'PrincipalId'}) -msgid "Principal %1 not found." -msgstr "%1 vezetõ nem található." - -#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790 -msgid "Priority" -msgstr "Prioritás" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "Prioritás kezdõ értéke" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Kiemelt" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Kiemelt felhasználók:" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Query" -msgstr "Lekérdezés" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Lekérdezésszerkesztõ" - -#: 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 "Sor" - -#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65 -#. ($Queue) -#. ($id) -msgid "Queue %1 not found" -msgstr "%2 sor nem található" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "A sor neve" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "Sor már létezik" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "A sor nem hozható létre" - -#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "a sor nem tölthetõ be." - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "A sor létrehozva" - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "A sor nem található" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Sorok" - -#: 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 "Gyors lekérdezés" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Probléma felvétele (gyors)" - -#: 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 %2-nek" - -#: html/Admin/index.html:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "Konfiguráció" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "RT Hiba" - -#: 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 "Áttekintés" - -#: 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 "" - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "" - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr " %1 -- Request Tracker " - -#: html/Search/Simple.html:58 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "" - -#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119 -msgid "RT will replace __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "" - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Valódi név" - -#: 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 "%1 hivatkozás törölve" - -#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72 -msgid "Referred to by" -msgstr "A következõk kapcsolódnak hozzá" - -#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "A következõkhöz kapcsolódik" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "%1 percenként frissítse ezt az oldalt." - -#: 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 "Adminisztratív tájékoztatást kapó eltávolítása" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Tájékoztatást kapó eltávolítása" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Beküldõ eltávolítása" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Válaszol" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Válaszcím" - -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Válasz a beküldõknek" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Válasz a problémákra" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -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 "Beküldõ" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Beküldõ" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "A problémát meg kell oldani" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Visszaállít" - -#: 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 "Otthoni" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Megold" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "%1. (%2) probléma lezárása" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Megoldva" - -#: 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 "" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Változtatások eredménye" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Jelszó megismételve" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "A jog megosztva" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "A jog betöltve" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "A jog nem vonnható vissza" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "A jog nem található" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "A jog nem található." - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Jog visszavonva" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Jogok" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr " %1 jogai nem vonhatók vissza" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Szerepek" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Sorok száma oldalanként" - -#: lib/RT/Date.pm:422 -msgid "Sat." -msgstr "Szo" - -#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211 -msgid "Save" -msgstr "Mentés" - -#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77 -msgid "Save Changes" -msgstr "Változtatások mentése" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Beállítások mentése" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Változtatások mentése" - -#: lib/RT/SavedSearch.pm:173 -#. ($name) -msgid "Saved search %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Saved searches" -msgstr "Elmentett lekérdezés" - -#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84 -#. ($scrip->Id) -#. ($id) -msgid "Scrip #%1" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Scrip létrehozva" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Scrip mezök" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Scrip törölve" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Scrips" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Minden sorhoz érvényes Scripek" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Keresés" - -#: 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 "Engedélyezések keresése" - -#: 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 "Biztonság:" - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Eyéni mezõk" - -#: 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 "" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Válasszon egy egyéni mezõt!" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Válasszon csoportot!" - -#: 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 "" - -#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Válasszon felhasználót!" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Válasszon egy egyéni mezõt!" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Válasszon egy egyéni mezõt!" - -#: 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 "Válasszon csoportot!" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Válasszon több értéket!" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Válasszon értéket!" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Válasszon sort!" - -#: 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 "Válasszon Scripet!" - -#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Válasszon sablont!" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Válasszon (legfeljebb %1) értéket!" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Válasszon felhasználót" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Kiválasztott egy egyéni mezõk" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "Kiválasztott problémák" - -#: html/Widgets/SelectionBox:209 -msgid "Selections modified. Please save your changes" -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 "" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "szep." - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Lezárások" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Látható mezõk" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Lekérdezés eredménye" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Láthatóak legyenek a felszabadított problémák" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Problémaleírás" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "láthatóak legyenek az elutasított problémák" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Attribútumok" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Láthatóak legyenek a folyamatban levõ problémák" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Láthatóak legyenek a mások engedélyezésére váró problémák" - -#: 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 "Aláírás (e-mail-hez)" - -#: 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 "Kicsi" - -#: 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 "Rendezés" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Elkezdve" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Kiosztva" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Állam" - -#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651 -msgid "Status" -msgstr "Státusz" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Státusz változtatása: '%1' --> '%2'" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Elcsen" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Problémák elcsenése" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:678 -#. ($Old->Name) -msgid "Stolen from %1" -msgstr "Probléma elcsenése %1 tulajdonostól" - -#: NOT FOUND IN SOURCE -msgid "Stolen from %1 " -msgstr "Probléma elcsenése %1 tulajdonostól " - -#: 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 "Tárgy" - -#: 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 "" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Mentés" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Sikerült" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "V" - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Rendszer" - -#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Rendszerkonfiguráció" - -#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989 -msgid "System Error" -msgstr "Rendszerhiba" - -#: 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 "Rendszerkonfiguráció" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Rendszerhiba. Jog nem delegálható ." - -#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920 -msgid "System error. Right not granted." -msgstr "Rendszerhiba. Jog nem adható." - -#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Rendszercsoportok" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Atvesz" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Take tickets" -msgstr "Problémák átvétele" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Átvéve" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Sablon" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Sablon #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Sablon törölve" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Sablon nem található" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Sablon beolvasva" - -#: 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 "Sablonok" - -#: NOT FOUND IN SOURCE -msgid "Text" -msgstr "Szöveg" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Már ez az aktuális érték" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "Egyéni mezõhöz érvénytelen értek" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Ez ugyanaz az érték" - -#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "A felhasználónak/csoportnak mát van ilyen joga" - -#: lib/RT/Queue_Overlay.pm:753 -#. ($args{'Type'}) -msgid "That principal is already a %1 for this queue" -msgstr "A vezetõ már %1-a a sornak" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "A vezetõ már %1-a a problémának" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "A vezetõ már nem %1-a a sornak" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Ez a sor nem létezik" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Már ez a felhasználó a tulajdonos!" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Ilyen felhasználó nem létezik" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "A felhasználó már kiemelt" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "A felhasználó már nem kiemelt" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "A felhasználó mostantól kiemelt" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "A felhasználó mostantól nem kiemelt" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "a felhasználóhoz nem tartozhatnak problémák ebbõl a sorból" - -#: lib/RT/Link_Overlay.pm:233 -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 "Alapadatok" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Diese Transaktion scheint keinen Inhalt zu haben" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "A felhasználó által felvetett %1 legsürgõsebb probléma" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Cs" - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "%1. számú (%2) probléma jellemzõinek módosítása" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Probléma. %1: %2" - -#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741 -#. ($T::Tickets{$template_id}->Id) -#. ($T::Tickets{$template_id}->id) -#. ($ticket->Id) -msgid "Ticket %1" -msgstr "%1. probléma" - -#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775 -#. ($self->Id, $QueueObj->Name) -msgid "Ticket %1 created in queue '%2'" -msgstr "" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Probléma %1: %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Probléma egyéni mezõi" - -#: html/Ticket/History.html:46 html/Ticket/History.html:49 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket History # %1 %2" -msgstr "" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Pobléma megoldva" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "Probléma tranzakciói" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "A probléma tartalma" - -#: 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 "" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Probléma metadata" - -#: etc/initialdata:310 -msgid "Ticket status changed" -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 "Problémák" - -#: html/Tools/Reports/CreatedByDates.html:86 -msgid "Tickets created after" -msgstr "" - -#: html/Tools/Reports/CreatedByDates.html:88 -msgid "Tickets created before" -msgstr "" - -#: 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 "Maradék idõ" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Ráfordított munkaidõ" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Maradék idõ" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Munkaidõ" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "Ráfordított munkaidõ" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "" - -#: 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 "Beérkezett" - -#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49 -msgid "Tools" -msgstr "Eszközök" - -#: 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 "" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Tranzakció egyéni mezõi" - -#: 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 "" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "K" - -#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Típus" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "korlátlan" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Névtelen lekérdezés" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Nem kiemelt" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Inaktív egyéni mezõk" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "Inaktív objektumok" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "Probléma visszaadása" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Frissít" - -#: NOT FOUND IN SOURCE -msgid "Update All" -msgstr "Mindet frissíti" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Probléma frissítése" - -#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Frissítés típusa" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "A kiválasztott problémák frissítése" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Update selected tickets" -msgstr "A kiválasztott problémák frissítése" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "%1. számú (%2) probléma aktualizálása" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -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 "Frissítve" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Feltöltés" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Több fájl feltöltése egyszerre" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Több kép feltöltése egyszerre" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Egy fájl feltöltése" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Egy kép feltöltése" - -#: 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 "Módosítások feltöltése" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "'%1' felhasználó nem található" - -#: etc/initialdata:132 etc/initialdata:206 -msgid "User Defined" -msgstr "Felhasználó által meghatározott" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Felhasználói jogok" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Felhasználó létrehozva" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Felhasználó által definiált csoport" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Felhasználó betöltve" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Felhasználó által definiált csoportok" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Felhasználó" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208 -msgid "Users" -msgstr "Felhasználók" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "" - -#: 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 "" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Értékek" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Résztvevõk" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Sze" - -#: 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 "Munkahelyi" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Munkaidõ" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Már az öné ez a probléma" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -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 "" - -#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 -#. ($num, $queue) -msgid "You found %1 tickets in queue %2" -msgstr "%1 Problémát talált a %2 sorban" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Kilépett a Request Tracker programból." - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "Nincs joga létrehozni problémákat ebben a sorban" - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "Nem hozhat létre problémákat ebben a sorban" - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Itt ismét bejelentkezhetsz!" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "" - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "A problémája engedélyezve." - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "A problémája elutasítva." - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "A begépelt felhasználói név vagy jelszó hibás!" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "Irányítószám" - -#: lib/RT/System.pm:87 -msgid "allow creation of saved searches" -msgstr "létrehozhat saját lekérdezéseket" - -#: lib/RT/System.pm:86 -msgid "allow loading of saved searches" -msgstr "betölthet saját lekérdezéseket" - -#: html/User/Elements/DelegateRights:80 -#. ($right->PrincipalObj->Object->SelfDescription) -msgid "as granted to %1" -msgstr "%1nak engedélyezve" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "Lezárt" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 -msgid "contains" -msgstr "tartalmazza" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "napja" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "törölve" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "nem" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "nem tartalmazza" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "egyenlõ" - -#: 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 "hiba: nincs mit törölni" - -#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603 -msgid "error: nothing to move" -msgstr "" - -#: html/Search/Build.html:630 -msgid "error: nothing to toggle" -msgstr "" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "nagyobb mint" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr " '%1' csopot" - -#: html/Search/Results.html:88 -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -msgid "grouped by %1" -msgstr "" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "órája" - -#: html/Search/Elements/PickBasics:48 -msgid "id" -msgstr "Sorszám" - -#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53 -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 " nem " - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "kisebb mint" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "==" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "perce" - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "perc" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "hónapja" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "új" - -#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "(nincs név)" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "Nincs érték" - -#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "senki" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "nem egyenlõ" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "Nyitott" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "Stapel %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "elutasítva" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "megoldva" - -#: lib/RT/Date.pm:334 -msgid "sec" -msgstr "sec" - -#: 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 "várakozik" - -#: 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 "rendszer %1" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "probléma #%1 %2" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "felhasználó %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "hete" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "éve" - diff --git a/rt/lib/RT/I18N/i_default.pm b/rt/lib/RT/I18N/i_default.pm deleted file mode 100644 index 0f02a4357..000000000 --- a/rt/lib/RT/I18N/i_default.pm +++ /dev/null @@ -1,110 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::I18N::i_default; - -use strict; -use vars qw/@ISA/; -@ISA = qw(RT::I18N); - -eval "require RT::I18N::i_default_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/I18N/i_default_Vendor.pm}); -eval "require RT::I18N::i_default_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/I18N/i_default_Local.pm}); - -1; - -__END__ - -This class just zero-derives from the project base class, which -is English for this project. i-default is "English at least". It -wouldn't be a bad idea to make our i-default messages be English -plus, say, French -- i-default is meant to /contain/ English, not -be /just/ English. If you have all your English messages in -Whatever::en and all your French messages in Whatever::fr, it -would be straightforward to define Whatever::i_default's as a subclass -of Whatever::en, but for every case where a key gets you a string -(as opposed to a coderef) from %Whatever::en::Lexicon and -%Whatever::fr::Lexicon, you could make %Whatever::i_default::Lexicon -be the concatenation of them both. So: "file '[_1]' not found.\n" and -"fichier '[_1]' non trouve\n" could make for an -%Whatever::i_default::Lexicon entry of -"file '[_1]' not found\nfichier '[_1]' non trouve.\n". - -There may be entries, however, where that is undesirable. -And in any case, it's not feasable once you have an _AUTO lexicon -in the mix, as wo do here. - - - -RFC 2277 says: - -4.5. Default Language - - When human-readable text must be presented in a context where the - sender has no knowledge of the recipient's language preferences (such - as login failures or E-mailed warnings, or prior to language - negotiation), text SHOULD be presented in Default Language. - - Default Language is assigned the tag "i-default" according to the - procedures of RFC 1766. It is not a specific language, but rather - identifies the condition where the language preferences of the user - cannot be established. - - Messages in Default Language MUST be understandable by an English- - speaking person, since English is the language which, worldwide, the - greatest number of people will be able to get adequate help in - interpreting when working with computers. - - Note that negotiating English is NOT the same as Default Language; - Default Language is an emergency measure in otherwise unmanageable - situations. - - In many cases, using only English text is reasonable; in some cases, - the English text may be augumented by text in other languages. - - diff --git a/rt/lib/RT/I18N/id.po b/rt/lib/RT/I18N/id.po deleted file mode 100644 index 77922aa6f..000000000 --- a/rt/lib/RT/I18N/id.po +++ /dev/null @@ -1,5520 +0,0 @@ -# Copyright (c) 2002 Jesse Vincent -# -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2005-10-03 13:48-0400\n" -"Last-Translator: James \n" -"Language-Team: rt-devel \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=US-ASCII\n" -"Content-Transfer-Encoding: 7bit\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 "" - -#: 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 "" - -#: lib/RT/Record.pm:940 -#. ($label) -msgid "$prefix %1" -msgstr "$Awalan %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 "%1 %2 %3 %4:%5:%6 %7" - -#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690 -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 added" -msgstr "%1 %2 sudah ditambah" - -#: lib/RT/Date.pm:362 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "%1 %2 yang lalu" - -#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654 -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -msgid "%1 %2 changed to %3" -msgstr "%1 %2 diganti menjadi %3" - -#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696 -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 deleted" -msgstr "%1 %2 sudah dihapus" - -#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103 -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -msgid "%1 %2 with template %3" -msgstr "%1 %2 gunakan template %3" - -#: html/Ticket/Elements/ShowAttachments:72 -#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) -msgid "%1 (%2) by %3" -msgstr "%1 (%2) oleh %3" - -#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66 -#. (loc($DefaultStatus)) -#. (loc($Ticket->Status())) -#. (loc($TicketObj->Status)) -#. ($TicketObj->OwnerObj->Name()) -msgid "%1 (Unchanged)" -msgstr "(Belum diubah)" - -#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250 -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -msgid "%1 - An argument to pass to %2" -msgstr "%1 - Sebuah penjelasan untuk dilewati ke %2" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - status Output diperbaharui menjadi 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 - menetapkan modul aksi yang ingin digunakan oleh anda" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - menetapkan moduk kondisi yang ingin digunakan oleh anda" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - menetapkan modul pencarian yang ingin digunakan oleh anda" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -msgstr "" - -#: html/Elements/Footer:56 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -msgid "%1 RT %2 Copyright 1996-%3 %4." -msgstr "%1 RT %2 Hak Cipta 1996-%3 %4." - -#: lib/RT/ScripAction_Overlay.pm:150 -#. ($self->Id) -msgid "%1 ScripAction loaded" -msgstr "%1 Memanggil AksiScrip" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "%1 ditambahkan sebagai nilai untuk %2" - -#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151 -#. ($args{'Base'}) -#. ($args{'Target'}) -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "%1 ditampilkan sebagai objek lokal, tetapi tidak dapat ditemukan di dalam database" - -#: 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 oleh %2" - -#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800 -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -msgid "%1 changed from %2 to %3" -msgstr "%1 sudah diganti dari %2 ke %3" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "%1 ditiru" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1 tidak bisa diatur ke %2." - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 tidak dapat mengatur status untuk diselesaikan. Database RT's mungkin tidak konsisten." - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "%1 sudah dibuat" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "%1 sudah dihapus" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "%1 Tiket dengan prioritas paling tinggi yang saya miliki" - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I requested..." -msgstr "%1 Tiket dengan prioritas paling tinggi yang saya minta..." - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 adalah sebuah alat yang berfungsi pada tiket dari alat penjadwalan eksternal, seperti Cron." - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 tidak lagi menjadi %2 untuk antrian ini." - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a value for custom field %2" -msgstr "%1 tidak lagi menjadi nilai untuk kolom kustom %2" - -#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49 -#. ($minutes) -msgid "%1 min" -msgstr "%1 menit" - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "%1 tiket terbaru yang belum dimiliki" - -#: NOT FOUND IN SOURCE -msgid "%1 newest unowned tickets..." -msgstr "%1 tiket terbaru yang belum dimiliki..." - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "%1 objek" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "hak-hak %1" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 akan memecahkan semua anggota dari grup tiket yang dipecahkan." - -#: lib/RT/CustomField_Overlay.pm:894 -msgid "%1's %2 objects" -msgstr "%1's %2 objek" - -#: lib/RT/CustomField_Overlay.pm:895 -msgid "%1's %2's %3 objects" -msgstr "%1's %2's %3 objek" - -#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57 -#. ($object->Name) -#. ($Object->Name) -msgid "%1's saved searches" -msgstr "%1's pencarian disimpan" - -#: lib/RT/Transaction_Overlay.pm:481 -#. ($self) -msgid "%1: no attachment specified" -msgstr "%1: tidak ada lampiran yang ditentukan" - -#: 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' adalah nilai yang tidak valid untuk status" - -#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76 -msgid "(Check box to delete)" -msgstr "(Klik kotak ini untuk hapus)" - -#: html/Ticket/Elements/PreviewScrips:99 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(Klik kotak ini untuk menon-aktifkan pemberitahuan kepada penerima yang sudah terdaftar)" - -#: html/Ticket/Elements/PreviewScrips:123 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "(Klik kotak ini untuk mengaktifkan pemberitahuan kepada penerima yang sudah terdaftar)" - -#: html/Ticket/Create.html:218 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(Masukkan ID Tiket atau URL, dipisahkan dengan spasi)" - -#: NOT FOUND IN SOURCE -msgid "(If left blank, will default to %1" -msgstr "(Jika ditinggalkan kosong, default akan diatur menjadi %1" - -#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1)" -msgstr "(Jika ditinggalkan kosong, default akan menjadi %1)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Tidak ada kolom kustom)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Tidak ada anggota)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Tidak ada scrip)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Tidak ada template)" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(Tidak satu pun)" - -#: 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 "(Kirim salinan tembusan untuk memperbaharui daftar alamat email yang dibatasi dengan koma. Tidak akan mengubah siapakah yang akan menerima pembaharuan di masa datang.)" - -#: html/Ticket/Update.html:90 -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does 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 "(Kirim salinan tembusan untuk memperbaharui daftar alamat administrasi email. Orang-orang ini akan menerima pembaharuan di masa datang.)" - -#: 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 "(Kirim salinan tembusan untuk memperbaharui daftar alamat email. Tidak akan mengubah siapakah yang akan menerima pembaharuan di masa datang.)" - -#: html/Ticket/Update.html:86 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does 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 "(Kirim salinan tembusan untuk memperbaharui daftar alamat email. Orang-orang ini akan menerima pembaharuan di masa datang.)" - -#: 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 "Gunakan kolom ini ketika anda memilih 'Definisikan Pengguna' untuk sebuah kondisi atau aksi" - -#: 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 "(kosong)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(tidak ada nama yang terdaftar)" - -#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591 -msgid "(no value)" -msgstr "(Tidak ada nilai)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(Tidak ada nilai-nilai)" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(hanya satu Tiket)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(izin ditunda)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "(Koleksi yang lain ditunda)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(diperlukan)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(tidak ada judul)" - -#: 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 "" - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "<% $Tiket->Status%>" - -#: html/Elements/SelectTicketTypes:48 -msgid "<% $_ %>" -msgstr "<% $_ %>" - -#: html/Search/Elements/SelectLinks:48 -msgid "<%$_%>" -msgstr "<%$_%>" - -#: html/Search/Elements/DisplayOptions:73 -msgid "<%$field%>" -msgstr "<%$kolom%>" - -#: 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" - -#: etc/initialdata:218 -msgid "A blank template" -msgstr "Template kosong" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "" - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE tidak ditemukan" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACE hanya dapat dibuat dan dihapus." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "DAN" - -#: NOT FOUND IN SOURCE -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Dibatalkan untuk menghindari modifikasi tiket yang tidak diharapkan.\\n" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Tentang Aku" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Kontrol Akses" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Aksi" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "Aksi %1 tidak ditemukan" - -#: NOT FOUND IN SOURCE -msgid "Action committed." -msgstr "Aksi dijalankan." - -#: bin/rt-crontool:171 -msgid "Action committed.\\n" -msgstr "Aksi dijalankan." - -#: lib/RT/Scrip_Overlay.pm:168 -msgid "Action is mandatory argument" -msgstr "" - -#: bin/rt-crontool:167 -msgid "Action prepared..." -msgstr "Aksi disiapkan..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Tambah" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Tambah AdminCc" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Tambah Cc" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Tambah Kolom" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Tambah Kriteria" - -#: html/Ticket/Create.html:147 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Tambah File Lagi" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Tambah Pemohon" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Tambah Nilai" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Tambah scrip yang akan digunakan di semua antrian" - -#: NOT FOUND IN SOURCE -msgid "Add additional criteria" -msgstr "Tambahkan kriteria tambahan" - -#: html/Search/Build.html:109 html/Search/Build.html:94 -msgid "Add and Search" -msgstr "" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "Tambah Komentar atau balas ke tiket yang sudah dipilih" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Tambah Anggota" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Tambah Pengamat Baru" - -#: 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 "Tambah, hapus dan ubah nilai kolom kustom untuk objek" - -#: lib/RT/Queue_Overlay.pm:763 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "Tambahkan prinsipal sebagai %1 untuk antrian ini" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Tambahkan prinsipal sebagai %1 untuk Tiket ini" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Alamat1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Alamat2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "Admin Cc" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "Komentar Admin" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "Korespondensi Admin" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Antrian Admin" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Konfigurasi Admin/Global" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113 -msgid "AdminCc" -msgstr "AdminCc" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "Kolom Kustom Admin" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "Grup Admin" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "Keanggotaan Grup Admin" - -#: lib/RT/System.pm:80 -msgid "AdminOwnPersonalGroups" -msgstr "Milik Grup Pribadi Admin" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "AdminQueue" -msgstr "Antrian Admin" - -#: lib/RT/System.pm:81 -msgid "AdminUsers" -msgstr "Pengguna Admin" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Cc Administrasi" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Lanjutan" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "Setelah" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "Kumpulan" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "Semua Izin terlewati" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Semua Antrian" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "Dan/Atau" - -#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "Digunakan untuk" - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Digunakan" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Digunakan untuk perubahan anda" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Izin" - -#: 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 "Izin #%1: %2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Izin #%1: Catatan yang tidak dicatat karena kesalahan sistem" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Izin #%1: Catatan yang dicatat" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Izin dilewati" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Izin ditolak" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Disetujui" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Catatan Pemberi Persetujuan: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Apr." - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Naik" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Assign and remove custom fields" -msgstr "Menentukan dan memindahkan kolom kustom" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "AssignCustomFields" -msgstr "Menentukan Kolom Kustom" - -#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116 -msgid "Attach" -msgstr "Melampirkan" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Melampirkan file" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "File dilampirkan" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Lampiran '%1' tidak dapat dipanggil" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Lampiran dibuat" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Nama File Lampiran" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Lampiran-lampiran" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "Attribut sudah dihapus" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Agst." - -#: NOT FOUND IN SOURCE -msgid "AuthSystem" -msgstr "Sistem Otorisasi" - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "Balas Otomatis" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Balas Otomatis ke Pemohon" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Available Columns" -msgstr "Kolom Tersedia " - -#: NOT FOUND IN SOURCE -msgid "Bad data in %1" -msgstr "Data buruk di dalam %1" - -#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Dasar-dasar" - -#: 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 "Pastikanlah untuk menyimpan setiap perubahan anda" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "Sebelum" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "Pemecahan Praktis yang terbaik, Logo bisnis LLC" - -#: NOT FOUND IN SOURCE -msgid "Binary" -msgstr "Binary" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Kosong" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "Diberi huruf tebal" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "Menyimpan penunjuk link" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Catatan Atas Singkat" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Memperbaharui tiket dengan jumlah banyak pada waktu yang sama" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Tidak dapat mengubah sistem pengguna" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Dapatkah prinsipal melihat antrian ini" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Tidak dapat menambah nilai kolom kustom tanpa nama" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($Class) -msgid "Can't find a collection class for '%1'" -msgstr "Tidak dapat menemukan kelas koleksi untuk '%'" - -#: html/Search/Build.html:286 -msgid "Can't find a saved search to work with" -msgstr "Tidak dapat menemukan pencarian yang disimpan untuk bekerja dengan" - -#: lib/RT/Link_Overlay.pm:159 -msgid "Can't link a ticket to itself" -msgstr "Tidak dapat menghubungkan tiket tersebut dengan dirinya sendiri" - -#: NOT FOUND IN SOURCE -msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Tidak dapat digabungkan ke dalam tiket gabungan. Anda seharusnya tidak pernah mendapatkan kesalahan ini." - -#: html/Widgets/SavedSearch:63 -#. (loc($self->{SearchType})) -msgid "Can't save %1" -msgstr "" - -#: html/Search/Build.html:290 -msgid "Can't save this search" -msgstr "Tidak dapat menyimpan pencarian ini" - -#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "Tidak dapat menentukan baik dasar dan sasaran" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Tidak dapat membuat pengguna: %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 "Ubah Sandi" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Periksa Semua" - -#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "Klik kotak ini untuk hapus" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Klik kotak ini untuk menghilangkan hak-hak" - -#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Anak" - -#: 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 "Kota" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Hapus Semua" - -#: html/Helpers/CalPopup.html:51 -msgid "Close window" -msgstr "" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Ditutup" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Tiket sudah ditutup" - -#: 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 "" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Komentar" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Alamat Komentar" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Komentar pada Tiket" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "Komentar Pada Tiket" - -#: NOT FOUND IN SOURCE -msgid "Comments" -msgstr "Komentar" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Komentar (Tidak dikirim ke pemohon)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Komentar (tidak dikirim ke pemohon)" - -#: NOT FOUND IN SOURCE -msgid "Comments about %1" -msgstr "Komentar mengenai %1" - -#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Komentar tentang pengguna ini" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Komentar sudah ditambahkan" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "Potongan Tiket Dijalankan" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Kondisi" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "Kondisi sesuai dengan ..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Kondisi tidak ditemukan" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Konfigurasi" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Konfirmasi" - -#: NOT FOUND IN SOURCE -msgid "ContactInfoSystem" -msgstr "Hubungi Sistem Info" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Isi" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "Tipe - Isi" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Tiru" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Korespondensi" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Korespondensi sudah ditambah" - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. " -msgstr "Tidak dapat menambah nilai kolom kustom baru untuk tiket." - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "Tidak dapat menambah nilai kolom kustom baru" - -#: lib/RT/Record.pm:1660 -#. (, $value_msg) -msgid "Could not add new custom field value. %1 " -msgstr "Tidak dapat menambah nilai kolom kustom baru" - -#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073 -msgid "Could not change owner. " -msgstr "Tidak dapat mengubah pemilik tiket. " - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Tidak dapat membuat Kolom Kustom" - -#: html/Admin/Elements/EditCustomField:113 -#. ($msg) -msgid "Could not create CustomField: %1" -msgstr "Tidak dapat membuat Kolom Kustom:%1 " - -#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "Tidak dapat membuat grup" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "Tidak dapat membuat template: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Tidak dapat membuat tiket. Antrian tidak dapat diatur" - -#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496 -msgid "Could not create user" -msgstr "Tidak dapat membuat pengguna" - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "Tidak dapat menemukan atau membuat pengguna tersebut" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "Tidak dapat menemukan prinsipal tersebut" - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "Tidak dapat memanggil KolomKustom %1" - -#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 -msgid "Could not load group" -msgstr "Tidak dapat memanggil grup" - -#: lib/RT/SavedSearch.pm:119 -#. ($privacy) -msgid "Could not load object for %1" -msgstr "Tidak dapat memanggil objek untuk %1" - -#: lib/RT/SavedSearch.pm:197 -msgid "Could not load search attribute" -msgstr "Tidak dapat memanggil attribut pencarian" - -#: lib/RT/Queue_Overlay.pm:761 -#. ($args{'Type'}) -msgid "Could not make that principal a %1 for this queue" -msgstr "Tidak dapat membuat prinsipal tersebut %1 untuk antrian ini" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "Tidak dapat membuat prinsipal tersebut %1 untuk Tiket ini" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Tidak dapat menghapus prinsipal tersebut sebagai %1 untuk antrian ini" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "Tidak dapat mengatur informasi pengguna" - -#: 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 "Tidak dapat menambah anggota ke grup" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "Tidak dapat membuat transaksi: %1" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "Tidak dapat menemukan baris" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Tidak dapat menemukan prinsipal tersebut" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Tidak dapat menemukan nilai tersebut" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "Tidak dapat memanggil %1 dari database pengguna.\\n" - -#: html/Admin/CustomFields/UserRights.html:149 -#. ($id) -msgid "Couldn't load Class %1" -msgstr "Tidak dapat memanggil Kelas %1" - -#: html/Admin/CustomFields/GroupRights.html:107 -#. ($id) -msgid "Couldn't load CustomField %1" -msgstr "Tidak dapat memanggil Kolom Kustom %1" - -#: 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 "Tidak dapat memanggil grup %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 "Tidak dapat memanggil link" - -#: 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 "Tidak dapat memanggil objek %1" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "Tidak dapat memanggil antrian" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "Tidak dapat memanggil antrian %1" - -#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167 -#. ($id) -msgid "Couldn't load scrip #%1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load that user (%1)" -msgstr "Tidak dapat memanggil pengguna tersebut (%1)" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "Tidak dapat memanggil Tiket '%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 "Negara" - -#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235 -msgid "Create" -msgstr "Dibuat" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Buat Tiket" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Buat Kolom Kustom" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "Buat Kolom Kustom untuk antrian %1" - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Buat grup baru" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Buat grup pribadi baru" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Buat tiket baru" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Buat pengguna baru" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Buat antrian" - -#: html/Admin/Queues/Scrip.html:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Buat scrip untuk antrian %1" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Buat template" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Buat Tiket" - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Buat Tiket baru berdasarkan pada template scrip ini" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Buat Tiket" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Buat tiket untuk antrian ini" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Buat, hapus dan ubah kolom kustom" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Buat, hapus dan ubah antrian" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Buat, hapus dan ubah anggota dari grup pribadi" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Buat, hapus dan ubah pengguna" - -#: lib/RT/System.pm:87 -msgid "CreateSavedSearch" -msgstr "Buat Pencarian yang Disimpan" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "CreateTicket" -msgstr "Buat Tiket" - -#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169 -msgid "Created" -msgstr "sudah Dibuat" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "Kolom Kustom sudah dibuat %1" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Pencipta" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Link yang sekarang" - -#: NOT FOUND IN SOURCE -msgid "Current Relationships" -msgstr "Hubungan Sekarang" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Scrips Sekarang " - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Anggota Sekarang" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Hak-hak Sekarang" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Current search criteria" -msgstr "Kriteria pencarian sekarang" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Pengamat sekarang" - -#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "Kolom Kustom" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "Kolom Kustom untuk %1" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Aksi kustom membersihkan kode" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Aksi kustom menyiapkan kode" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Kondisi kustom" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 %2 %3" -msgstr "Kolom kustom %1 %2 %3" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 does not apply to this object" -msgstr "Kolom kustom %1 tidak dapat digunakan untuk objek ini" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "Kolom kustom %1 memiliki nilai." - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "Kolom kustom %1 tidak memiliki nilai." - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Kolom kustom %1 tidak ditemukan" - -#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121 -#. ($cf) -#. ($obj->Name) -msgid "Custom field '%1'" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Kolom kustom tidak ditemukan" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Nilai kolom kustom %1 tidak dapat ditemukan untuk kolom kustom %2" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "Nilai kolom kustom tidak dapat dihapus" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "Nilai kolom kustom tidak dapat ditemukan" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Nilai kolom kustom sudah dihapus" - -#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "Kolom kustom" - -#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75 -msgid "Customize" -msgstr "" - -#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65 -msgid "Dates" -msgstr "Tanggal" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Des." - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Default template Balas Otomatis" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Default Antrian" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Default Pemohon" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Default template komentar admin" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Default template korespondensi admin" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Default template korespondensi" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Default template transaksi" - -#: NOT FOUND IN SOURCE -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Default: %1/%2 diganti dari %3 ke %4" - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Hak-hak Utusan" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "Hak-hak spesifik utusan yang sudah diberikan kepada anda." - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "Hak-hak Utusan" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Delegasi" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "Hapus" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "Hapus Template" - -#: NOT FOUND IN SOURCE -msgid "Delete article #%1" -msgstr "Hapus artikel #%1" - -#: lib/RT/SavedSearch.pm:220 -#. ($msg) -msgid "Delete failed: %1" -msgstr "Gagal dihapus: %1" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Hapus scrip yang sudah dipilih" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Hapus tiket" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "Hapus tiket" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "Pencarian dihapus" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object could break referential integrity" -msgstr "Menghapuskan objek ini dapat memutuskan integrasi referensial" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "Menghapuskan objek ini dapat memutuskan integrasi referensial" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Menghapuskan objek ini dapat melanggar integrasi referensial" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Ditolak" - -#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "Bergantung oleh" - -#: lib/RT/Transaction_Overlay.pm:718 -#. ($value) -msgid "Dependency by %1 added" -msgstr "Ketergantungan oleh %1 sudah ditambah" - -#: lib/RT/Transaction_Overlay.pm:758 -#. ($value) -msgid "Dependency by %1 deleted" -msgstr "Ketergantungan oleh %1 sudah dihapus" - -#: lib/RT/Transaction_Overlay.pm:715 -#. ($value) -msgid "Dependency on %1 added" -msgstr "Ketergantungan oleh %1 sudah dihapus" - -#: lib/RT/Transaction_Overlay.pm:755 -#. ($value) -msgid "Dependency on %1 deleted" -msgstr "Ketergantungan oleh %1 sudah dihapus" - -#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46 -msgid "Depends on" -msgstr "Bergantung pada" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Turun" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Gambarkan persoalan dibawah ini" - -#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70 -msgid "Description" -msgstr "Deskripsi" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Tampilkan" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Tampilkan Daftar Kontrol Akses" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Tampilkan Kolom" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Tampilkan template Scrip untuk antrian ini" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Tampilkan Scrip untuk antrian ini" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Tampilkan mode" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "Tampilkan pencarian yang disimpan untuk grup ini" - -#: html/Elements/Footer:61 -msgid "Distributed under version 2 of the GNU GPL." -msgstr "Didistribusikan dibawah versi 2 dari GNU GPL." - -#: lib/RT/System.pm:75 -msgid "Do anything and everything" -msgstr "Lakukan apa saja dan semuanya" - -#: NOT FOUND IN SOURCE -msgid "Do the Search" -msgstr "Lakukan Pencarian" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Jangan refresh halaman ini." - -#: NOT FOUND IN SOURCE -msgid "Don't show search results" -msgstr "Jangan tampilkan hasil pencarian" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Download" - -#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Download sebagai file yang dibatasi dengan tab" - -#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173 -msgid "Due" -msgstr "Batas Waktu" - -#: NOT FOUND IN SOURCE -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "KESALAHAN: Tidak dapat memanggil Tiket '%1': %2.\\n" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Ubah" - -#: 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 "Ubah Kolom Kustom untuk %1" - -#: html/Admin/Global/CustomFields/Groups.html:54 -msgid "Edit Custom Fields for all groups" -msgstr "Ubah Kolom Kustom untuk semua grup" - -#: html/Admin/Global/CustomFields/Users.html:54 -msgid "Edit Custom Fields for all users" -msgstr "Ubah Kolom Kustom untuk semua pengguna" - -#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54 -msgid "Edit Custom Fields for tickets in all queues" -msgstr "Ubah Kolom Kustom untuk tiket di dalam semua antrian" - -#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Ubah Link" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Ubah Query" - -#: NOT FOUND IN SOURCE -msgid "Edit Relationships" -msgstr "Ubah Hubungan" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "" - -#: html/Admin/Queues/Templates.html:63 -#. ($QueueObj->Name) -msgid "Edit Templates for queue %1" -msgstr "Ubah Templates untuk antrian %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "Ubah pencarian yang disimpan untuk grup ini" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Ubah template sistem" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "Ubah Pencarian yang Disimpan" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "Mengubah Konfigurasi untuk antrian %1" - -#: NOT FOUND IN SOURCE -msgid "Editing Configuration for user %1" -msgstr "Mengubah Konfigurasi untuk pengguna %1" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Mengubah Kolom Kustom %1" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Mengubah keanggotaan untuk grup ini %1" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Mengubah keanggotaan untuk grup pribadi %1" - -#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608 -msgid "Either base or target must be specified" -msgstr "Baik dasar ataupun sasaran harus ditentukan" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "Email" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "Alamat Email yang digunakan" - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "Alamat Email" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "Set Karakter Email" - -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Mengaktifkan (Klik kotak ini untuk menon-aktifkan kolom kustom)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Mengaktifkan (Klik kotak ini untuk menon-aktifkan grup ini)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Mengaktifkan (Klik kotak ini untuk menon-aktifkan antrian ini)" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Mengaktifkan Antrian" - -#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138 -#. (loc_fuzzy($msg)) -msgid "Enabled status %1" -msgstr "Mengaktifkan status %1" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -msgstr "Mengaktifkan status: %1" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Masukkan beberapa nilai" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Masukan objek atau URI untuk menghubungkan object tersebut. Pisahkan beberapa input tersebut dengan spasi." - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Masukkan satu nilai" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Masukkan antrian atau URIs untuk menghubungkan antrian tersebut. Pisahkan beberapa input dengan spasi." - -#: html/Elements/EditLinks:119 html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Masukkan tiket atau URIs untuk menghubungkan Tiket tersebut. Pisahkan beberapa input dengan spasi." - -#: NOT FOUND IN SOURCE -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "Masukkan tiket atau URIs untuk menghubungkan Tiket tersebut. Pisahkan beberapa input dengan spasi." - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Masukkan sampai %1 nilai" - -#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47 -msgid "Error" -msgstr "Kesalahan" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Kesalahan di dalam parameter ke Antrian->Tambah Pengamat" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Kesalahan di dalam parameter Ke Antrian->Hapus Pengamat" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Kesalahan di dalam parameter ke Antrian->Hapus Pengamat" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Kesalahan di dalam parameter ke Tiket->Tambah Pengamat" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "Kesalahan di dalam parameter ke Tiket->Hapus Pengamat" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Kesalahan di dalam parameter ke Ticket->Hapus Pengamat" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "Meningkatkan Prioritas Tiket" - -#: NOT FOUND IN SOURCE -msgid "Estimate" -msgstr "Perkiraan" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Diperkirakan" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Setiap Orang" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Contoh:" - -#: NOT FOUND IN SOURCE -msgid "ExternalAuthId" -msgstr "AuthID Eksternal" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr " Kontak Info ID Eksternal" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Info Tambahan" - -#: lib/RT/SavedSearch.pm:177 -msgid "Failed to create search attribute" -msgstr "Gagal untuk membuat atribut pencarian" - -#: lib/RT/User_Overlay.pm:376 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Gagal untuk menemukan pengguna pseudogroup yang memiliki 'Hak-hak Istimewa'." - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Gagal untuk menemukan pengguna pseudogroup yang tidak memiliki 'Hak-Hak Istimewa.'" - -#: bin/rt-crontool:206 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "Gagal untuk memanggil modul %1. (%2)" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "Gagal memanggil objek untuk %1" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Feb." - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "Nama File" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Isilah di dalam beberapa area teks" - -#: lib/RT/CustomField_Overlay.pm:74 -msgid "Fill in multiple wikitext areas" -msgstr "Isilah di dalam beberapa area wikiteks" - -#: lib/RT/CustomField_Overlay.pm:70 -msgid "Fill in one text area" -msgstr "Isilah di dalam satu area teks" - -#: lib/RT/CustomField_Overlay.pm:75 -msgid "Fill in one wikitext area" -msgstr "Isilah di dalam satu area wikiteks" - -#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118 -msgid "Fill in this field with a URL." -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:71 -msgid "Fill in up to %1 text areas" -msgstr "Isilah sampai %1 area teks" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "Isilah sampai %1 area wikiteks" - -#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841 -msgid "Final Priority" -msgstr "Prioritas Akhir" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "Prioritas Akhir" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Cari grup yang" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Cari orang yang" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Cari tiket" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Pertama" - -#: 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 "Diubah dengan paksa" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Format" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "Ditemukan % quant(%1,tiket)" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Objek ditemukan" - -#: NOT FOUND IN SOURCE -msgid "Freeform" -msgstr "Freeform" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "FreeformContactInfo" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Jum." - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Catatan Atas Lengkap" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Ambil template dari file" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "Berikan ke %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 "Kolom Kustom Global" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "Konfigurasi kolom kustom global" - -#: 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 "Template Global: %1" - -#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89 -msgid "Go" -msgstr "Ambil" - -#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57 -msgid "Go!" -msgstr "Ambil!" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Ambil tiket" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Grup" - -#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Hak Grup" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Grup sudah memiliki anggota" - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "Grup tidak dapat dibuat: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Grup sudah dibuat" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Grup tidak memiliki anggota terseperti ini" - -#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510 -msgid "Group not found" -msgstr "Grup tidak ditemukan" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210 -msgid "Groups" -msgstr "Grup" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Grup tidak bisa menjadi anggota dari mereka" - -#: html/Admin/Groups/index.html:86 -msgid "Groups matching search criteria" -msgstr "Grup sesuai dengan kriteria pencarian" - -#: html/Ticket/Elements/ShowRequestor:77 -msgid "Groups this user belongs to" -msgstr "Pengguna ini milik grup" - -#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 -msgid "Hello!" -msgstr "Halo!" - -#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 -#. ($name) -msgid "Hello, %1" -msgstr "Halo, %1" - -#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Historis" - -#: html/Admin/Groups/History.html:62 -#. ($GroupObj->Name) -msgid "History of the group %1" -msgstr "Historis grup %1" - -#: html/Admin/Users/History.html:62 -#. ($UserObj->Name) -msgid "History of the user %1" -msgstr "Historis pengguna %1" - -#: NOT FOUND IN SOURCE -msgid "HomePhone" -msgstr "Telepon Rumah" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Homepage" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "Saya memiliki %quant (%1,concrete mixer)." - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "Saya tersesat" - -#: 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 "Identitas" - -#: etc/initialdata:429 -msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "Jika izin ditolak, tolak izin yang asli dan hapus izin yang masih ditunda" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "Jika tidak ada pemohon yang ditentukan, buat tiket dengan pemohon ini." - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Jika tidak ada antrian yang ditentukan, buat tiket untuk antrian ini." - -#: bin/rt-crontool:267 -msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT." -msgstr "Jika alat ini adalah setgid, hostile local user dapat menggunakan alat ini untuk mendapatkan akses administrasi ke RT." - -#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60 -msgid "If you've updated anything above, be sure to" -msgstr "Jika anda memperbaharui apapun diatas, pastikanlah untuk" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Nilai Ilegal untuk %1" - -#: NOT FOUND IN SOURCE -msgid "Image" -msgstr "Gambar" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Kolom yang tetap" - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Termasuk menon-aktifkan grup di dalam daftar." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Termasuk menon-aktifkan antrian di dalam daftar." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Termasuk menon-aktifkan pengguna di dalam pencarian." - -#: 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 "Query tidak lengkap" - -#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438 -msgid "Incomplete query" -msgstr "query tidak lengkap" - -#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816 -msgid "Initial Priority" -msgstr "Prioritas Awal" - -#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "Prioritas Awal" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Kesalahan Input" - -#: 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 "" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Kesalahan Internal" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Kesalahan Internal: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Tipe Grup tidak valid" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Hak-hak tidak valid" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Data tidak valid" - -#: 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 "Antrian tidak valid" - -#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290 -msgid "Invalid right" -msgstr "Hak tidak valid" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "Nilai tidak valid untuk %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Nilai tidak valid untuk kolom kustom" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Nilai tidak valid untuk status" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Hal ini sangat penting bahwa pengguna yang tidak memiliki hak-hak istimewa tidak dapat diizinkan untuk menjalankan program ini." - -#: bin/rt-crontool:269 -msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool." -msgstr "Sangat disarankan bahwa anda membuat pengguna unix yang tidak memiliki hak-hak istimewa dengan keanggotaan grup yang benar dan akses RT untuk menjalankan alat ini." - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Hal ini memerlukan beberapa penjelasan:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "Diberi huruf miring" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Jan." - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Bergabung atau tinggalkan grup ini" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Jul." - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Jumbo" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Jun." - -#: NOT FOUND IN SOURCE -msgid "Lang" -msgstr "Bhs" - -#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 -msgid "Language" -msgstr "Bahasa" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "Besar" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Akhir" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Kontak Terakhir" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Kontak Terakhir" - -#: NOT FOUND IN SOURCE -msgid "Last Notified" -msgstr "Pemberitahuan Terakhir" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Pembaharuan Terakhir" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "Pembaharuan Terakhir Oleh" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Kirim" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Biarkan pengguna ini mengakses RT" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Biarlah pengguna ini diberi hak-hak" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "Link" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Link sudah ada" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Link tidak dapat dibuat" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Link sudah dibuat (%1)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Link sudah dihapus (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Link tidak ditemukan" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Link tiket #%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 "Link-link" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "Memanggil" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Memanggil pencarian yang disimpan:" - -#: lib/RT/System.pm:86 -msgid "LoadSavedSearch" -msgstr "Memanggil pencarian yang disimpan" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Memanggil modul perl" - -#: lib/RT/SavedSearch.pm:111 -#. ($self->Name) -msgid "Loaded search %1" -msgstr "Memanggil pencarian %1" - -#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 -msgid "Location" -msgstr "Lokasi" - -#: NOT FOUND IN SOURCE -msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "Direktori Log %1 tidak ditemukan atau tidak dapat ditulis.\\n RT tidak dapat dijalankan." - -#: html/Elements/Header:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "Masuk sebagai %1" - -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Login" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Logout" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "Mencari tipe yang tidak sesuai (mismatch)" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Buat Pemilik" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Buat Status" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Buat Tanggal Batas Waktu" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Buat Tanggal Penyelesaian" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Buat Tanggal Mulai" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Buat Tanggal Mulai" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Buat Tanggal Pemberitahuan" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Buat prioritas" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Buat antrian" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Buat subjek" - -#: lib/RT/Group_Overlay.pm:169 -msgid "Make this group visible to user" -msgstr "Buat agar grup ini terlihat pada sisi pengguna" - -#: html/Admin/index.html:78 -msgid "Manage custom fields and custom field values" -msgstr "Mengatur kolom kustom dan nilai kolom kustom" - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Mengatur grup dan keanggotaan grup" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Mengatur propertis dan konfigurasi yang akan digunakan di setiap antrian" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Mengatur antrian dan propertis antrian tertentu" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Mengatur pengguna dan sandi" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Mar." - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "Mei." - -#: lib/RT/Transaction_Overlay.pm:731 -#. ($value) -msgid "Member %1 added" -msgstr "Anggota %1 sudah ditambah" - -#: lib/RT/Transaction_Overlay.pm:771 -#. ($value) -msgid "Member %1 deleted" -msgstr "Anggota %1 sudah dihapus" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Anggota sudah ditambah" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Anggota sudah dihapus" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Anggota tidak dihapus" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Anggota dari" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Anggota-anggota" - -#: lib/RT/Transaction_Overlay.pm:728 -#. ($value) -msgid "Membership in %1 added" -msgstr "Keanggotaan di dalam %1 sudah ditambah" - -#: lib/RT/Transaction_Overlay.pm:768 -#. ($value) -msgid "Membership in %1 deleted" -msgstr "Keanggotaan di dalam %1 sudah dihapus" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Keanggotaan" - -#: html/Admin/Users/Memberships.html:60 -#. ($UserObj->Name) -msgid "Memberships of the user %1" -msgstr "Keanggotaan dari pengguna %1" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Penggabungan Berhasil" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Penggabungan gagal. Tidak dapat mengatur EffectiveId" - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "Penggabungan gagal. Tidak dapat mengatur Status" - -#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Bergabung ke dalam" - -#: lib/RT/Transaction_Overlay.pm:734 -#. ($value) -msgid "Merged into %1" -msgstr "Bergabung ke dalam %1" - -#: html/Search/Bulk.html:143 html/Ticket/Update.html:118 -msgid "Message" -msgstr "Pesan" - -#: 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 "Pesan tidak dapat dicatat" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Pesan sudah dicatat" - -#: html/Ticket/Elements/PreviewScrips:122 -msgid "Messages about this ticket will not be sent to..." -msgstr "Pesan mengenai Tiket ini tidak akan dikirim ke..." - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -msgstr "" - -#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445 -msgid "Mismatched parentheses" -msgstr "tanda kurung tidak sama" - -#: lib/RT/Record.pm:954 -msgid "Missing a primary key?: %1" -msgstr "Kunci utama tidak ditemukan?: %1" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Hp" - -#: NOT FOUND IN SOURCE -msgid "MobilePhone" -msgstr "Handphone" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Mengubah Daftar Kontrol Akses" - -#: html/Admin/Elements/ObjectCustomFields:96 -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "Ubah Kolom Kustom yang digunakan untuk %1 untuk semua %2" - -#: html/Admin/Elements/ObjectCustomFields:98 -#. (loc(lc($Types))) -msgid "Modify Custom Fields which apply to all %1" -msgstr "Mengatur Kolom Kustom yang dapat digunakan untuk seluruh %1" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Fields which apply to all queues" -msgstr "Mengatur Kolom Kustom yang dapat digunakan di seluruh antrian" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Ubah Hak Grup" - -#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Ubah Anggota" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Ubah Hak-hak" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Modify Scrip templates for this queue" -msgstr "Mengubah template Scrip untuk antrian ini" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Mengubah Scrip untuk antrian ini" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Ubah Hak Pengguna" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "Mengubah Kolom Kustom untuk antrian %1" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "Mengubah scrip untuk antrian %1" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Mengubah scrip yang dapat digunakan di seluruh antrian" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "Mengubah objek-objek yang berhubungan untuk %1" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "Mengubah tanggal untuk #%1" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Mengubah tanggal untuk tiket # %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 -msgid "Modify global custom fields" -msgstr "Mengubah kolom kustom global" - -#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77 -msgid "Modify global group rights" -msgstr "Mengubah hak grup global" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Mengubah hak grup global." - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Mengubah hak pengguna global" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Mengubah hak pengguna global." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Mengubah grup metadata atau menghapus grup" - -#: html/Admin/CustomFields/GroupRights.html:164 -#. ($CustomFieldObj->Name) -msgid "Modify group rights for custom field %1" -msgstr "Mengubah hak grup untuk kolom kustom %1" - -#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 -#. ($GroupObj->Name) -msgid "Modify group rights for group %1" -msgstr "Mengubah hak grup untuk grup %1" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "Mengubah hak grup untuk antrian %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Mengubah daftar nama keanggotaan untuk grup ini" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Mengubah pemilik account RT" - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "Mengubah orang-orang yang berhubungan dengan antrian %1" - -#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57 -#. ($Ticket->id) -#. ($Ticket->Id) -msgid "Modify people related to ticket #%1" -msgstr "Mengubah orang-orang yang berhubungan dengan tiket #%1" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Mengubah scrip untuk antrian %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63 -msgid "Modify scrips which apply to all queues" -msgstr "Mengubah scrip yang dapat digunakan di seluruh antrian" - -#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99 -#. (loc($TemplateObj->Name())) -#. ($TemplateObj->id) -msgid "Modify template %1" -msgstr "Mengubah template %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Mengubah template yang dapat digunakan di seluruh antrian" - -#: 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 "Mengubah grup %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Mengubah pengamat antrian" - -#: html/Admin/Users/Modify.html:309 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "Mengubah pengguna %1" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "Mengubah tiket # %1" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "Mengubah tiket #%1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Mengubah tiket-tiket" - -#: html/Admin/CustomFields/UserRights.html:157 -#. ($CustomFieldObj->Name) -msgid "Modify user rights for custom field %1" -msgstr "Mengubah hak pengguna untuk kolom kustom %1" - -#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 -#. ($GroupObj->Name) -msgid "Modify user rights for group %1" -msgstr "Mengubah hak pengguna untuk grup %1" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Mengubah hak pengguna untuk antrian %1" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ModifyACL" -msgstr "Mengubah ACL" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "Mengubah Kolom Kustom" - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "Mengubah Milik Keanggotaan" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyQueueWatchers" -msgstr "Mengubah Pengamat Antrian" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ModifyScrips" -msgstr "Mengubah Scrip" - -#: lib/RT/System.pm:82 -msgid "ModifySelf" -msgstr "Mengubah Sendiri" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "ModifyTemplate" -msgstr "Mengubah Template" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "ModifyTicket" -msgstr "Mengubah Tiket" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Sen." - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "Lebih mengenai %1" - -#: NOT FOUND IN SOURCE -msgid "Move" -msgstr "Pindah" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Pindah ke bawah" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Pindah ke atas" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Beberapa" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "Harus menentukan 'Nama' attribut" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "%1 tiketku" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Izinku" - -#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Pencarian yang kusimpan" - -#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65 -msgid "Name" -msgstr "Nama" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Nama yang digunakan" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Tidak pernah" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Baru" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Link Baru" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Sandi Baru" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Izin Baru yang Ditunda" - -#: NOT FOUND IN SOURCE -msgid "New Query" -msgstr "Query Baru" - -#: NOT FOUND IN SOURCE -msgid "New Relationships" -msgstr "Hubungan Baru" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Kolom Kustom Baru" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Grup Baru" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Sandi Baru" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Kirim Pemberitahuan Sandi Baru" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Antrian Baru" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Hak-hak Baru" - -#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Scrip Baru" - -#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Template Baru" - -#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Tiket Baru" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "Tidak ada Tiket baru" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Pengguna Baru" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Pengguna Baru disebut" - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Pengamat Baru" - -#: NOT FOUND IN SOURCE -msgid "New window setting" -msgstr "Setting Window Baru" - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Berikutnya" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Halaman Berikutnya" - -#: NOT FOUND IN SOURCE -msgid "NickName" -msgstr "Nama Panggilan" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Nama Panggilan" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "Tidak ada Kelas yang didefinisikan" - -#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "Tidak ada Kolom Kustom" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Tidak ada Kolom Kustom yang didefinisikan" - -#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Tidak ada Grup yang didefinisikan" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "Tidak ada Query" - -#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "Tidak ada Antrian yang didefinisikan" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Tidak ada pengguna RT yang ditemukan. Silakan berkonsultasi dengan administrator RT anda.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Tidak ada Template" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket " -msgstr "Tidak ada Tiket yang ditentukan. Batalkan tiket " - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "Tidak ada aksi" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "Tidak ada kolom yang ditentukan" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Tidak ada komentar yang dimasukkan mengenai pengguna ini" - -#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78 -#. (ref $self) -msgid "No description for %1" -msgstr "Tidak ada deskripsi untuk %1" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Tidak ada grup yang ditentukan" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "Grup yang sesuai dengan kriteria pencarian tidak ditemukan." - -#: lib/RT/Ticket_Overlay.pm:2393 -msgid "No message attached" -msgstr "Tidak ada pesan yang dilampirkan" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "Tidak ada pengaturan Sandi" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Tidak ada izin untuk membuat antrian" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "Tidak ada izin untuk membuat tiket ini di dalam antrian '%1'" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Tidak ada izin untuk membuat pengguna" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Tidak ada izin untuk menampilkan tiket tersebut" - -#: 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 "Tidak ada izin untuk menampilkan tiket yang sudah diperbaharui" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Tidak ada prinsipal yang ditentukan" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Tidak ada prinsipal yang dipilih." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Antrian yang sesuai dengan kriteria pencarian tidak ditemukan." - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Tidak ada hak-hak yang ditemukan" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Tidak ada hak-hak yang diberikan." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "Tidak ada pencarian yang dipanggil" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Tidak ada pencarian untuk dijalankan di." - -#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Tidak ada subjek" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Tidak ada tipe transaksi yang ditentukan" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Pengguna yang sesuai dengan kriteria pencarian tidak ditemukan." - -#: NOT FOUND IN SOURCE -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Tidak ada pengguna RT yang valid ditemukan. RT cvs handler dilepaskan. Silakan berkonsultasi dengan administrator RT anda.\\n" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "Tidak ada nilai yang dikirim ke _Set!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Tidak seorangpun" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Kolom kosong?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Belum log in" - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Belum diatur" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Belum diimplementasikan." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Catatan" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Pemberitahuan tidak dapat dikirimkan" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "Beritahu AdminCcs" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "Beritahu AdminCcs dengan komentar" - -#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 -msgid "Notify Ccs" -msgstr "Beritahu Ccs" - -#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "Beritahu Ccs dengan komentar" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "Beritahu Penerima Lain" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Beritahu Penerima Lain dengan komentar" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "Beritahu Pemilik" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "Beritahu Pemilik dengan komentar" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "Beritahu pemilik bahwa tiketnya ditolak" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "Beritahu Pemilik bahwa tiketnya sudah disetujui oleh seluruh pemberi persetujuan" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "Beritahu Pemilik bahwa tiketnya sudah disetujui oleh beberapa pemberi persetujuan" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Beritahu Pemilik dan AdminCcs mengenai izin item baru yang ditunda" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "Beritahu Pemohon" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "Beritahu Pemohon dan Ccs" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "Beritahu Pemohon dan Ccs dengan komentar" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Beritahu Pemohon, Ccs dan AdminCcs" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Beritahu Pemohon, Ccs dan AdminCcs dengan komentar" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Nop." - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "ATAU" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "Objek tidak dapat dibuat" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "Objek tidak dapat dihapus" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Object sudah dibuat" - -#: lib/RT/Record.pm:120 -msgid "Object deleted" -msgstr "Objek sudah dihapus" - -#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 -#. ($ObjectType) -#. ($LookupType) -msgid "Object of type %1 cannot take custom fields" -msgstr "Tipe Objek %1 tidak dapat mengambil kolom kustom" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "Tipe Objek tidak sesuai (mismatch)" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Okt." - -#: html/Tools/Elements/Tabs:55 -msgid "Offline" -msgstr "Offline" - -#: html/Tools/Offline.html:49 -msgid "Offline edits" -msgstr "Ubah Offline" - -#: html/Tools/Offline.html:46 -msgid "Offline upload" -msgstr "Upload Offline" - -#: html/Elements/SelectDateRelation:56 -msgid "On" -msgstr "Pada" - -#: lib/RT/Transaction_Overlay.pm:326 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Pada Komentar" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "Pada Hubungan" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Pada Pembuatan" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Pada Perubahan Pemilik" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "Pada Perubahan Prioritas" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Pada Perubahan Antrian" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Pada Penyelesaian" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Pada Perubahan Status" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Pada Transaksi" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Hanya menampilkan izin untuk permintaan yang dibuat sesudah %1" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "Hanya menampilkan izin untuk permintaan yang dibuat sebelum %1" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Buka" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Buka ini" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Buka tiket" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in a new window" -msgstr "Buka tiket (dari daftar) di window yang baru" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in another window" -msgstr "Buka tiket (dari daftar) di window yang lain" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Buka tiket pada korespondensi" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Diurutkan sesuai" - -#: NOT FOUND IN SOURCE -msgid "Ordering and sorting" -msgstr "Diurutkan dan disortir" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Organisasi" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Tiket Awal: #%1" - -#: lib/RT/Transaction_Overlay.pm:622 -msgid "Outgoing email about a comment recorded" -msgstr "Email yang keluar mengenai komentar yang dicatat" - -#: lib/RT/Transaction_Overlay.pm:626 -msgid "Outgoing email recorded" -msgstr "Email keluar yang dicatat" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Lewat Batas waktu, prioritas pindah ke arah" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Memiliki tiket-tiket" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "Memiliki tiket" - -#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006 -msgid "Owner" -msgstr "Pemilik" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "Pemilik tidak dapat diatur." - -#: lib/RT/Transaction_Overlay.pm:672 -#. ($Old->Name , $New->Name) -msgid "Owner forcibly changed from %1 to %2" -msgstr "Pemilik secara paksa digantikan dari %1 ke %2" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "Pemilik adalah" - -#: html/Elements/TicketList:78 -#. ($Page, int($TotalFound/$Rows)+$oddRows) -msgid "Page %1 of %2" -msgstr "Halaman %1 dari %2" - -#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96 -msgid "Pager" -msgstr "Pager" - -#: NOT FOUND IN SOURCE -msgid "PagerPhone" -msgstr "Pager" - -#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "Induk " - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Sandi" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Pengingat Sandi" - -#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045 -msgid "Password changed" -msgstr "Sandi sudah diubah" - -#: 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 "Minimal sandi memerlukan paling sedikit %1 karakter" - -#: lib/RT/User_Overlay.pm:1044 -msgid "Password set" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Password too short" -msgstr "Sandi terlalu singkat" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Sandi: %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "Sandi tidak sesuai." - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "Sandi tidak sesuai. Sandi anda belum diganti" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Orang-Orang" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Menampilkan aksi pengguna yang belum didefinisikan" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Konfigurasi Perl" - -#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774 -msgid "Permission Denied" -msgstr "Izin ditolak" - -#: 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 "Grup Pribadi" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Grup pribadi" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Grup pribadi:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Nomor Telepon" - -#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Pilihan" - -#: 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 "" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "Siapkan Potongan Tiket" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Sebelumnya" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "Halaman Sebelumnya" - -#: 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 "Prinsipal %1 tidak ditemukan." - -#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790 -msgid "Priority" -msgstr "Prioritas" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "Prioritas dimulai pada" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Pribadi:" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Hak-hak Istimewa" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Status Hak-hak Istimewa: %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Pengguna Hak-hak Istimewa" - -#: NOT FOUND IN SOURCE -msgid "Projects" -msgstr "Proyek-Proyek" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Pseudogroup digunakan untuk internal" - -#: NOT FOUND IN SOURCE -msgid "Query" -msgstr "Query" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Pembuat Query" - -#: 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 "Antrian" - -#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65 -#. ($Queue) -#. ($id) -msgid "Queue %1 not found" -msgstr "Antrian %1 tidak ditemukan" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Nama Antrian" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "Antrian sudah ada" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "Antrian tidak dapat dibuat" - -#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "Antrian tidak dapat dipanggil." - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Antrian sudah dibuat" - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Antrian tidak dapat ditemukan" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Antrian-antrian" - -#: 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 "Pencarian Cepat" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Pembuatan Tiket Cepat" - -#: 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 "RT %1 untuk %2" - -#: html/Admin/index.html:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "Administrasi RT" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "Kesalahan RT" - -#: html/Admin/Tools/Configuration.html:73 -msgid "RT Variables" -msgstr "Variable RT " - -#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75 -msgid "RT at a glance" -msgstr "Sekilas RT" - -#: 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 "" - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "RT tidak dapat menyimpan sesi anda" - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr "RT untuk %1" - -#: html/Search/Simple.html:58 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "" - -#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119 -msgid "RT will replace __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "" - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Nama Asli" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "Nama Asli" - -#: lib/RT/Transaction_Overlay.pm:725 -#. ($value) -msgid "Reference by %1 added" -msgstr "Referensi oleh %1 sudah ditambah" - -#: lib/RT/Transaction_Overlay.pm:765 -#. ($value) -msgid "Reference by %1 deleted" -msgstr "Referensi oleh %1 sudah dihapus" - -#: lib/RT/Transaction_Overlay.pm:722 -#. ($value) -msgid "Reference to %1 added" -msgstr "Referensi ke %1 sudah ditambah" - -#: lib/RT/Transaction_Overlay.pm:762 -#. ($value) -msgid "Reference to %1 deleted" -msgstr "Referensi ke %1 sudah dihapus" - -#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72 -msgid "Referred to by" -msgstr "Diserahkan oleh" - -#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "Diserahkan ke" - -#: NOT FOUND IN SOURCE -msgid "Refine search" -msgstr "Membersihkan pencarian" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Refresh halaman ini setiap %1 menit." - -#: NOT FOUND IN SOURCE -msgid "Relationships" -msgstr "Hubungan" - -#: 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 "Hapus AdminCc" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Hapus Cc" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Hapus Pemohon" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Balas" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Balas ke Alamat" - -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Balas ke Pemohon" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Balas ke tiket" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "Balas ke Tiket" - -#: 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 "Pemohon" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Pemohon" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "permintaan akan melewati batas waktu dalam" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "Parameter yang diperlukan '%1' tidak didefinisikan" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Ulangi" - -#: 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 "Tempat Tinggal" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Penyelesaian" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "Penyelesaian tiket #%1 (%2)" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Sudah Diselesaikan" - -#: 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 "Balas ke pemohon" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Hasil" - -#: NOT FOUND IN SOURCE -msgid "Results per page" -msgstr "Hasil per halaman" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Ketik Ulang Sandi" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "Kembali pada" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Hak-hak Utusan" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Memberikan Hak-hak" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Memanggil Hak-hak" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Hak-hak tidak dapat dihilangkan" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Hak-hak tidak ditemukan" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Hak-hak tidak dapat dipanggil." - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Hak-hak tidak dapat dihilangkan" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Hak-hak" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "Hak-hak tidak dapat diberikan untuk %1" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "Hak-hak tidak dapat dihilangkan untuk %1" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Aturan" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Baris per halaman" - -#: lib/RT/Date.pm:422 -msgid "Sat." -msgstr "Sab." - -#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211 -msgid "Save" -msgstr "Simpan" - -#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77 -msgid "Save Changes" -msgstr "Simpan Perubahan" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Simpan Pilihan" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Simpan perubahaan" - -#: lib/RT/SavedSearch.pm:173 -#. ($name) -msgid "Saved search %1" -msgstr "Simpan pencarian %1" - -#: NOT FOUND IN SOURCE -msgid "Saved searches" -msgstr "Simpan pencarian" - -#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84 -#. ($scrip->Id) -#. ($id) -msgid "Scrip #%1" -msgstr "Scrip #%1" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Scrip sudah dibuat" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Kolom Scrip" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Scrip sudah dihapus" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Scrip" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Scrip yang digunakan di seluruh antrian" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Pencarian" - -#: 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 "Gagal memanggil atribut pencarian" - -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Pencarian untuk izin" - -#: 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 "Perbaharui Pencarian: %1" - -#: NOT FOUND IN SOURCE -msgid "Searches can't be associated with that kind of object" -msgstr "Pencarian tidak dapat dihubungkan dengan objek yang seperti ini" - -#: html/Search/Simple.html:57 -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 "Keamanan:" - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Lihat kolom kustom" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "See exact outgoing email messages and their recipeients" -msgstr "Lihat pesan email yang keluar dan semua penerimanya dengan tepat" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket private commentary" -msgstr "Lihat Penjelasan Tiket Pribadi" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "See ticket summaries" -msgstr "Lihat Ringkasan Tiket" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "Lihat Kolom Kustom" - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "Lihat Grup" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "SeeQueue" -msgstr "Lihat Antrian" - -#: NOT FOUND IN SOURCE -msgid "Select" -msgstr "Pilih" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Pilih Kolom Kustom" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Pilih grup" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Pilih antrian" - -#: html/SelfService/CreateTicketInQueue.html:48 -msgid "Select a queue for your new ticket" -msgstr "Pilih antrian untuk tiket baru anda" - -#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Pilih Pengguna" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Pilih kolom kustom" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Pilih kolom kustom untuk seluruh grup pengguna" - -#: html/Admin/Global/CustomFields/index.html:65 -msgid "Select custom fields for all users" -msgstr "Pilih kolom kustom untuk seluruh pengguna" - -#: html/Admin/Global/CustomFields/index.html:76 -msgid "Select custom fields for tickets in all queues" -msgstr "Pilih kolom kustom untuk tiket di seluruh antrian" - -#: html/Admin/Global/CustomFields/index.html:83 -msgid "Select custom fields for transactions on tickets in all queues" -msgstr "Pilih kolom kustom untuk transaksi pada tiket di dalam seluruh antrian" - -#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Pilih grup" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Pilih beberapa nilai" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Pilih satu nilai" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Pilih antrian" - -#: 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 "Pilih scrip" - -#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Pilih template" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Pilih sampai %1 nilai" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Pilih pengguna" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Kolom Kustom yang dipilih" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "Objek yang dipilih" - -#: html/Widgets/SelectionBox:209 -msgid "Selections modified. Please save your changes" -msgstr "" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Kirim pesan ke seluruh pengamat" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Kirim pesan ke seluruh pengamat dengan \"komentar\"" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Kirim pesan ke pemohon dan Ccs" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Kirim pesan ke pemohon dan Ccs dengan komentar" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Kirim pesan ke pemohon" - -#: etc/initialdata:125 etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Kirim pesan ke Ccs and Bccs yang terdaftar dengan jelas" - -#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 -msgid "Sends mail to the Ccs" -msgstr "Kirim pesan ke Ccs" - -#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 -msgid "Sends mail to the Ccs as a comment" -msgstr "Kirim pesan ke Ccs dengan komentar" - -#: etc/initialdata:102 -msgid "Sends mail to the administrative Ccs" -msgstr "Kirim pesan ke Ccs administrasi" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Kirim pesan ke Ccs administrasi dengan komentar" - -#: etc/initialdata:82 etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Kirim pesan ke pemilik" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Sep." - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Tampilkan" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Tampilkan Izin" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Tampilkan Kolom" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Tampilkan Hasil" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Tamplikan permintaan yang disetujui" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Tampilkan dasar-dasar" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Tampilkan permintaan yang ditolak" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Tampilkan detil" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Tampilkan permintaan yang ditunda" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Tampilkan permintaan izin lain yang ditunggu" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "ShowACL" -msgstr "Tampilkan ACL" - -#: lib/RT/System.pm:85 -msgid "ShowConfigTab" -msgstr "Tampilkan Tab Config" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "ShowOutgoingEmail" -msgstr "Tampilkan Email yang Keluar" - -#: lib/RT/Group_Overlay.pm:168 -msgid "ShowSavedSearches" -msgstr "Tampilkan Pencarian yang Disimpan" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "ShowScrips" -msgstr "Tampilkan Scrip" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "ShowTemplate" -msgstr "Tampilkan Template" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowTicket" -msgstr "Tampilkan Tiket" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicketComments" -msgstr "Tampilkan Komentar Tiket" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "Daftar sebagai pemohon tiket atau tiket atau antrian Cc" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Daftar sebagai tiket atau antrian AdminCc" - -#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168 -msgid "Signature" -msgstr "Tanda Tangan" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Tunggal" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "Ukuran" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Lewati Menu" - -#: html/Search/Elements/EditFormat:78 -msgid "Small" -msgstr "Kecil" - -#: 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 "Sortir" - -#: NOT FOUND IN SOURCE -msgid "Sort results by" -msgstr "Sortir hasil dengan" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "Tingkat" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Sudah dimulai" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Mulai" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Negara" - -#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651 -msgid "Status" -msgstr "Status" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "Status Diubah" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Status diubah dari %1 ke %2" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Curi" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Curi tiket" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "Curi Tiket" - -#: lib/RT/Transaction_Overlay.pm:678 -#. ($Old->Name) -msgid "Stolen from %1" -msgstr "Dicuri dari %1" - -#: NOT FOUND IN SOURCE -msgid "Stolen from %1 " -msgstr "Dicuri dari %1 " - -#: html/Search/Elements/EditFormat:81 -msgid "Style" -msgstr "Gaya" - -#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733 -msgid "Subject" -msgstr "Subjek" - -#: 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 "Subjek diganti menjadi %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Submit" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Berhasil" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Min." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "PenggunaSuper" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Sistem" - -#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Konfigurasi Sistem" - -#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989 -msgid "System Error" -msgstr "Kesalahan Sistem" - -#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230 -#. ($msg) -msgid "System Error: %1" -msgstr "Kesalahan sistem: %1" - -#: html/Admin/Tools/index.html:47 -msgid "System Tools" -msgstr "Peralatan Sistem" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Kesalahan sistem. Hak-hak tidak dapat diserahkan." - -#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920 -msgid "System error. Right not granted." -msgstr "Kesalahan sistem. Hak-hak tidak dapat diberikan." - -#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Grup Sistem" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr " GrupAturanSistem yang digunakan untuk internal" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "TES_STRING" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Ambil" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Take tickets" -msgstr "Ambil tiket" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "Ambil Tiket" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Diambil" - -#: NOT FOUND IN SOURCE -msgid "Task" -msgstr "Tugas" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Template" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Template #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Template sudah dihapus" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Template tidak ditemukan" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Template parsed" - -#: 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 "Template-template" - -#: NOT FOUND IN SOURCE -msgid "Text" -msgstr "Teks" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Ini adalah nilai yang sekarang" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "Ini bukan nilai untuk kolom kustom ini" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Ini adalah nilai yang sama" - -#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "Prinsipal ini sudah memiliki hak-hak tersebut" - -#: lib/RT/Queue_Overlay.pm:753 -#. ($args{'Type'}) -msgid "That principal is already a %1 for this queue" -msgstr "Prinsipal ini sudah %1 untuk antrian ini" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Prinsipal ini sudah %1 untuk tiket ini" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Prinsipal ini bukan %1 untuk antrian ini" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Antrian ini tidak ada" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "Tiket ini mempunyai ketergantungan yang belum dapat diselesaikan" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Pengguna ini sudah memiliki tiket tersebut" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Pengguna ini tidak ada" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Pengguna ini sudah memiliki hak-hak istimewa" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Pengguna ini sudah tidak memiliki hak-hak istimewa" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Pengguna tersebut sekarang memiliki hak-hak istimewa" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Pengguna tersebut sekarang tidak memiliki hak-hak istimewa" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "Pengguna tersebut mungkin tidak memiliki tiket di dalam antrian tersebut" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "Ini bukan menurut angka ID" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Dasar-dasar" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "CC tiket" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The administrative CC of a ticket" -msgstr "CC tiket administrasi" - -#: 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 "Perintah berikut ini akan menemukan seluruh tiket yang aktif di dalam antrian 'umum' dan mengatur prioritas mereka ke 99 jika mereka tidak digunakan dalam waktu 4 jam:" - -#: NOT FOUND IN SOURCE -msgid "The following commands were not proccessed:\\n\\n" -msgstr "Perintah berikut ini tidak akan dijalankan:\\n\\n" - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "Nilai baru sudah diatur." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "Pemilik tiket" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "Pemohon tiket" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Komentar ini umumnya tidak jelas bagi pengguna" - -#: lib/RT/CustomField_Overlay.pm:978 -msgid "This custom field does not apply to that object" -msgstr "Kolom kustom ini tidak dapat digunakan pada objek tersebut" - -#: html/Admin/Tools/Configuration.html:50 -msgid "This feature is only available to system administrators" -msgstr "Fitur ini hanya tersedia untuk sistem administrator" - -#: html/Ticket/Elements/PreviewScrips:96 -msgid "This message will be sent to..." -msgstr "Pesan ini akan dikirim ke..." - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Alat ini mengijinkan pengguna untuk menjalankan modul perl yang berubah-ubah dari dalam RT." - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Transaksi ini tampaknya tidak memiliki isi" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "Pengguna ini memiliki %1 tiket dengan prioritas tertinggi" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Kms." - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Tiket #%1 Perbaharui Jumbo: %2" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Tiket #%1: %2" - -#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741 -#. ($T::Tickets{$template_id}->Id) -#. ($T::Tickets{$template_id}->id) -#. ($ticket->Id) -msgid "Ticket %1" -msgstr "Tiket %1" - -#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775 -#. ($self->Id, $QueueObj->Name) -msgid "Ticket %1 created in queue '%2'" -msgstr "Tiket %1 sudah dibuat di dalam antrian '%2'" - -#: NOT FOUND IN SOURCE -msgid "Ticket %1 loaded\\n" -msgstr "Tiket %1 sudah dipanggil\\n" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Tiket %1: %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Tiket Kolom Kustom" - -#: html/Ticket/History.html:46 html/Ticket/History.html:49 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket History # %1 %2" -msgstr "Historis Tiket # %1 %2" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Tiket sudah diselesaikan" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "Transaksi Tiket" - -#: NOT FOUND IN SOURCE -msgid "Ticket attachment" -msgstr "Lampiran Tiket" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Isi Tiket" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Tipe isi Tiket" - -#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763 -msgid "Ticket could not be created due to an internal error" -msgstr "Tiket tidak dapat dibuat karena ada kesalahan internal" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Metadata Tiket" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Status tiket sudah diubah" - -#: lib/RT/Search/FromSQL.pm:82 -#. (ref $self) -msgid "TicketSQL search module" -msgstr "Pencarian modul Tiket SQL" - -#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206 -msgid "Tickets" -msgstr "Tiket-tiket" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 %2" -msgstr "Tiket %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 by %2" -msgstr "Tiket %1 oleh %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 "Tiket dari %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 "Tiket yang bergantung dengan izin ini:" - -#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72 -msgid "Time Estimated" -msgstr "Perkiraan Waktu" - -#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85 -msgid "Time Left" -msgstr "Sisa Waktu" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Waktu Kerja" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Sisa waktu" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Waktu untuk ditampilkan" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Waktu kerja" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "Waktu Kerja" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "Judul" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:" -msgstr "To generate a diff of this commit:" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:\\n" -msgstr "To generate a diff of this commit:\\n" - -#: html/Elements/Footer:62 -#. ('sales@bestpractical.com') -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "Untuk menanyakan tentang bantuan, latihan, perkembangan kustom atau izin, silakan hubungi %1." - -#: lib/RT/Ticket_Overlay.pm:1170 -msgid "Told" -msgstr "Memberitahukan" - -#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49 -msgid "Tools" -msgstr "alat-alat" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transaksi" - -#: lib/RT/Transaction_Overlay.pm:805 -#. ($self->Data) -msgid "Transaction %1 purged" -msgstr "Transaksi %1 sudah dibersihkan" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Transaksi sudah dibuat" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Kolom Kustom Transaksi" - -#: lib/RT/Transaction_Overlay.pm:128 -msgid "Transaction->Create couldn't, as you didn't specify an object type and id" -msgstr "Transaksi->Tidak dapat dibuat, karena anda tidak menentukan tipe objek dan id" - -#: lib/RT/Transaction_Overlay.pm:870 -msgid "Transactions are immutable" -msgstr "Transaksi yang tetap" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Sel." - -#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Tipe" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "Belum diimplementasikan" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Login Unix" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "Nama Pengguna Unix" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "Content Encoding tidak dikenali%1" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "Kolom tidak dikenali: $key" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Tidak terbatas" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Pencarian tidak dikenal" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Tidak memiliki hak-hak istimewa" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Kolom Kustom tidak dipilih" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "Objek tidak dipilih" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "Belum diambil" - -#: NOT FOUND IN SOURCE -msgid "Untitled search" -msgstr "Pencarian yang tidak memiliki judul" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Perbaharui" - -#: NOT FOUND IN SOURCE -msgid "Update All" -msgstr "Perbahurui Semua" - -#: NOT FOUND IN SOURCE -msgid "Update ID" -msgstr "Perbaharui ID" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Perbaharui Tiket" - -#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Perbaharui Tipe" - -#: NOT FOUND IN SOURCE -msgid "Update all these tickets at once" -msgstr "Perbaharui seluruh tiket ini pada saat yang sama" - -#: NOT FOUND IN SOURCE -msgid "Update email" -msgstr "Perbaharui email" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Perbaharui beberapa tiket" - -#: NOT FOUND IN SOURCE -msgid "Update name" -msgstr "Perbaharui nama" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Perbaharui tidak dicatat." - -#: NOT FOUND IN SOURCE -msgid "Update selected tickets" -msgstr "Perbaharui tiket yang terpilih" - -#: NOT FOUND IN SOURCE -msgid "Update signature" -msgstr "Perbaharui tanda tangan" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Perbaharui tiket" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Perbaharui tiket #%1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Perbaharui tiket #%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr " Memperbarui tipe baik korespondensi ataupun penjelasan." - -#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Sudah diperbaharui" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Upload" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Upload beberapa file" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Upload beberapa gambar" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Upload satu file" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Upload satu gambar" - -#: lib/RT/CustomField_Overlay.pm:86 -msgid "Upload up to %1 files" -msgstr "Upload sampai %1 file" - -#: lib/RT/CustomField_Overlay.pm:81 -msgid "Upload up to %1 images" -msgstr "Upload sampai %1 gambar" - -#: html/Tools/Offline.html:93 -msgid "Upload your changes" -msgstr "Upload perubahan anda" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "Gunakan alat administrative RT yang lain" - -#: lib/RT/Ticket_Overlay.pm:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "Pengguna '%1' tidak dapat ditemukan." - -#: etc/initialdata:132 etc/initialdata:206 -msgid "User Defined" -msgstr "Pengguna didefinisikan" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "Pengguna mendefinisikan kondisi dan aksi" - -#: NOT FOUND IN SOURCE -msgid "User ID" -msgstr "ID Pengguna" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Hak Pengguna" - -#: NOT FOUND IN SOURCE -msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" -msgstr "Pengguna akan ditanya mengenai tipe pembaharuan yang tidak dikenal untuk kolom kustom %1 untuk %2 objek #%3" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "Pengguna tidak dapat dibuat: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Pengguna sudah dibuat" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Pengguna mendefinisikan grup" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Pengguna sudah dipanggil" - -#: NOT FOUND IN SOURCE -msgid "User view" -msgstr "Lihat Pengguna" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Definisi Grup Pengguna" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Nama Pengguna" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208 -msgid "Users" -msgstr "Pengguna" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Pengguna sesuai dengan kriteria pencarian" - -#: bin/rt-crontool:134 -#. ($transaction->id) -msgid "Using transaction #%1..." -msgstr "" - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Query yang valid" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Nilai-nilai" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "Amati" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "Amati Sebagai AdminCc" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Pengamat" - -#: NOT FOUND IN SOURCE -msgid "WebEncoding" -msgstr "WebEncoding" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Rabu." - -#: 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 "Kalau tiket sudah disetujui oleh semua pemberi persetujuan, tambahkan korespondesi ke tiket yang asli" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "Kalau tiket sudah disetujui oleh beberapa pemberi persetujuan, tambahkan korespondensi ke tiket yang asli" - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "Kalau tiket sudah dibuat" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "Kalau tiket persetujuan sudah dibuat, beritahukan pemilik dan AdminCc dari item yang sedang ditunggu persetujuannya" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "Kalau sesuatu terjadi" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "Setiap saat tiket dapat diselesaikan" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "Setiap saat pemilik tiket dapat diubah" - -#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "Setiap saat prioritas tiket dapat diubah" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "Setiap saat antrian tiket dapat diubah" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "Setiap saat status tiket dapat diubah" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "Setiap saat kondisi yang didefinisikan oleh pengguna terjadi" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "Setiap saat komentar dapat masuk" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "Setiap saat korespondensi dapat masuk" - -#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88 -msgid "Work" -msgstr "Bekerja" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "Bekerja offline" - -#: NOT FOUND IN SOURCE -msgid "WorkPhone" -msgstr "Telepon Kantor" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Sedang Bekerja" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Anda sudah memiliki tiket ini" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Anda bukanlah pengguna yang sah" - -#: 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 "Anda hanya bisa menugaskan kembali tiket yang anda miliki atau yang belum anda miliki" - -#: lib/RT/Ticket_Overlay.pm:3021 -msgid "You can only take tickets that are unowned" -msgstr "" - -#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 -#. ($num, $queue) -msgid "You found %1 tickets in queue %2" -msgstr "Anda menemukan %1 tiket di dalam antrian ini %2" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Anda sudah log out dari RT." - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "Anda tidak memiliki izin untuk membuat tiket di dalam antrian tersebut." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "Anda mungkin tidak akan membuat permintaan di dalam antrian ini." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Anda dapat login kembali" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Permintaan anda sudah disetujui oleh. Persetujuan yang lain mungkin masih ditunda." - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "Permintaan anda sudah disetujui." - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "Permintaan anda sudah ditolak." - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "Nama pengguna dan sandi anda tidak sama" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "Zip" - -#: lib/RT/System.pm:87 -msgid "allow creation of saved searches" -msgstr "mengijinkan pembuatan pencarian yang disimpan" - -#: lib/RT/System.pm:86 -msgid "allow loading of saved searches" -msgstr "mengijinkan memanggil pencarian yang disimpan" - -#: html/User/Elements/DelegateRights:80 -#. ($right->PrincipalObj->Object->SelfDescription) -msgid "as granted to %1" -msgstr "sudah diberikan ke %1" - -#: NOT FOUND IN SOURCE -msgid "belongs to" -msgstr "Milik" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "sudah ditutup" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 -msgid "contains" -msgstr "berisi" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "hari" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "sudah dihapus" - -#: NOT FOUND IN SOURCE -msgid "does not belong to" -msgstr "Bukan milik" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "tidak sama" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "tidak berisi" - -#: NOT FOUND IN SOURCE -msgid "email address" -msgstr "alamat email" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "sama dengan" - -#: html/Search/Build.html:547 -msgid "error: can't move down" -msgstr "kesalahan: tidak dapat dipindahkan ke bawah" - -#: html/Search/Build.html:569 -msgid "error: can't move left" -msgstr "kesalahan: tidak dapat dipindahkan ke kiri" - -#: html/Search/Build.html:528 -msgid "error: can't move up" -msgstr "kesalahan: tidak dapat dipindahkan ke atas" - -#: html/Search/Build.html:612 -msgid "error: nothing to delete" -msgstr "kesalahan: tidak ada apapun yang dapat dihapus" - -#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603 -msgid "error: nothing to move" -msgstr "kesalahan: tidak ada apapun yang dapat dipindahkan" - -#: html/Search/Build.html:630 -msgid "error: nothing to toggle" -msgstr "kesalahan: tidak ada apapun yang dapat dihubungkan" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "lebih dari" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr "grup '%1'" - -#: html/Search/Results.html:88 -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -msgid "grouped by %1" -msgstr "" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "jam" - -#: 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 "adalah" - -#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54 -msgid "isn't" -msgstr "tidak" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "kurang dari" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "sama" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "mnt" - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "menit" - -#: NOT FOUND IN SOURCE -msgid "modifications\\n\\n" -msgstr "perubahan\\n\\n" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "bulan" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "baru" - -#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "tidak ada nama" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "tidak ada nilai" - -#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "tidak satupun" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "tidak sama dengan" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "buka" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "grup pribadi '%1' untuk pengguna '%2'" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "antrian %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "sudah ditolak" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "sudah diselesaikan" - -#: lib/RT/Date.pm:334 -msgid "sec" -msgstr "dtk" - -#: lib/RT/System.pm:85 -msgid "show Configuration tab" -msgstr "tampilkan tab konfigurasi" - -#: html/Search/Results.html:80 -msgid "spreadsheet" -msgstr "lembar kerja" - -#: lib/RT/Queue_Overlay.pm:84 -msgid "stalled" -msgstr "alasan" - -#: 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 "sistem %1" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "grup sistem '%1'" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "Pemanggilan komponent tidak menetapkan mengapa" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "tiket #%1 %2" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "grup yang belum dijelaskan %1" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "pengguna %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "minggu" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "tahun" - diff --git a/rt/lib/RT/I18N/it.po b/rt/lib/RT/I18N/it.po deleted file mode 100644 index 13cbc9bf7..000000000 --- a/rt/lib/RT/I18N/it.po +++ /dev/null @@ -1,6655 +0,0 @@ -# -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"POT-Creation-Date: 2002-05-02 11:36+0800\n" -"PO-Revision-Date: 2005-10-03 13:48-0400\n" -"Last-Translator: Angelo Turetta \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 "n°" - -#: NOT FOUND IN SOURCE -msgid "#%1" -msgstr "n°%1" - -#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51 -#. ($Ticket->id, $Ticket->Subject) -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#. ($ticket->Id, $ticket->Subject) -#. ($TicketObj->Id, $TicketObj->Subject) -msgid "#%1: %2" -msgstr "n°%1: %2" - -#: html/Elements/ShowSearch:105 -msgid "$1" -msgstr "" - -#: lib/RT/Record.pm:940 -#. ($label) -msgid "$prefix %1" -msgstr "" - -#: lib/RT/URI/fsck_com_rt.pm:256 -#. ($self->ObjectType, $self->Object->Id) -msgid "%1 #%2" -msgstr "%1 n°%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 "%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 "Aggiunto %1 %2" - -#: lib/RT/Date.pm:362 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "%1 %2 fa" - -#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654 -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -msgid "%1 %2 changed to %3" -msgstr "%1 %2 cambiato in %3" - -#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696 -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 deleted" -msgstr "%1 %2 eliminato" - -#: NOT FOUND IN SOURCE -msgid "%1 %2 of group %3" -msgstr "%1 %2 del gruppo %3" - -#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103 -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -msgid "%1 %2 with template %3" -msgstr "%1 %2 con il modello %3" - -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 questo ticket\\n" - -#: html/Ticket/Elements/ShowAttachments:72 -#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) -msgid "%1 (%2) by %3" -msgstr "%1 (%2) da %3" - -#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66 -#. (loc($DefaultStatus)) -#. (loc($Ticket->Status())) -#. (loc($TicketObj->Status)) -#. ($TicketObj->OwnerObj->Name()) -msgid "%1 (Unchanged)" -msgstr "%1 (invariato)" - -#: NOT FOUND IN SOURCE -msgid "%1 - %2 shown" -msgstr "Mostrati da %1 a %2" - -#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250 -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -msgid "%1 - An argument to pass to %2" -msgstr "%1 - Un parametro da passare a %2" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - Visualizza aggiornamenti dello stato su 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 - Specificare l'azione che si vuole eseguire" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Specificare la condizione che si vuole utilizzare" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Specificare la ricerca che si vuole utilizzare" - -#: 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 "ScripAction %1 caricato" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "%1 aggiunto come valore di %2" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on" -msgstr "gli alias %1 necessitano di un TicketId su cui lavorare" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on " -msgstr "gli alias %1 necessitano di un TicketId su cui lavorare" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "gli alias %1 necessitano di un TicketId per lavorare con (da %2) %3" - -#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151 -#. ($args{'Base'}) -#. ($args{'Target'}) -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "%1 sembra essere un oggetto locale, ma non è presente nel database" - -#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531 -#. ($self->BriefDescription , $self->CreatorObj->Name) -#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) -msgid "%1 by %2" -msgstr "%1 da %2" - -#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800 -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -msgid "%1 changed from %2 to %3" -msgstr "%1 cambiato da %2 a %3" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "copia di %1" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1 non può essere impostato a %2" - -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1 non ha potuto iniziare una transazione (%2)\\n" - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 non ho potuto mettere lo stato a risolto. Il database RT potrebbe essere corrotto." - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "creato %1" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "eliminato %1" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "I %1 ticket a maggior priorità che ho in carico" - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I own..." -msgstr "I %1 ticket a maggior priorità che ho in carico..." - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I requested..." -msgstr "I %1 ticket a maggior priorità che ho richiesto..." - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 è uno strumento per agire sui ticket da uno schedulatore esterno, per esempio cron." - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 non è più un %2 per questa coda." - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 non è più un %2 per questo ticket." - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a value for custom field %2" -msgstr "%1 non è più un valore per il campo personalizzato %2" - -#: NOT FOUND IN SOURCE -msgid "%1 isn't a valid Queue id." -msgstr "%1 non è un identificativo di coda valido" - -#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49 -#. ($minutes) -msgid "%1 min" -msgstr "%1 min" - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "I %1 ticket più recenti non ancora assegnati" - -#: NOT FOUND IN SOURCE -msgid "%1 not shown" -msgstr "%1 non mostrato" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "%1 oggetti" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "Diritti su %1" - -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "%1 riuscito\\n" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "Tipo %1 sconosciuto per $MessageId" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "Tipo %1 sconosciuto per %2" - -#: NOT FOUND IN SOURCE -msgid "%1 was created without a CurrentUser\\n" -msgstr "%1 è stato creato senza un CurrentUser\\n" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 risolverà tutti i membri di un gruppo di ticket risolto." - -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "%1 bloccherà una BASE [locale] se dipende da [o è membro di] una richiesta collegata." - -#: lib/RT/CustomField_Overlay.pm:894 -msgid "%1's %2 objects" -msgstr "%2 oggetti di %1" - -#: lib/RT/CustomField_Overlay.pm:895 -msgid "%1's %2's %3 objects" -msgstr "%3 oggetti di %2 di %1" - -#: 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 "ricerche salvate di %1" - -#: lib/RT/Transaction_Overlay.pm:481 -#. ($self) -msgid "%1: no attachment specified" -msgstr "%1: nessun allegato specificato" - -#: 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' è uno stato non valido" - -#: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "'%1' non è un'azione conosciuta. " - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete group member)" -msgstr "(spunta la casella per rimuovere un appartenente dal gruppo)" - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete scrip)" -msgstr "(spunta la casella per cancellare uno scrip)" - -#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76 -msgid "(Check box to delete)" -msgstr "(spunta la casella per cancellare)" - -#: NOT FOUND IN SOURCE -msgid "(Check boxes to delete)" -msgstr "(spunta le caselle per cancellare)" - -#: html/Ticket/Elements/PreviewScrips:99 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(i destinatari con la casella spuntata non ricevono la notifica)" - -#: html/Ticket/Elements/PreviewScrips:123 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "(solo i destinatari con la casella spuntata ricevono la notifica)" - -#: html/Ticket/Create.html:218 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(inserire i numeri o gli URL dei ticket, separati da spazi)" - -#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1)" -msgstr "(Se non specificato usa: %1)" - -#: NOT FOUND IN SOURCE -msgid "(No Value)" -msgstr "(nessun valore)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(nessun campo personalizzato)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(nessun appartenente)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(nessuno Scrip)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(nessun modello)" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(nessuno)" - -#: NOT FOUND IN SOURCE -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does not change who will receive future updates.)" -msgstr "(invia copia silente di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò non cambierà i destinatari dei successivi aggiornamenti.)" - -#: NOT FOUND IN SOURCE -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does not change who will recieve future updates.)" -msgstr "(invia copia silente di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò non cambierò i destinatari dei successivi aggiornamenti.)" - -#: html/Ticket/Update.html:90 -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does 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 "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email amministrativi separati da virgole. Queste persone riceveranno i successivi aggiornamenti.)" - -#: 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 "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò non cambierà i destinatari dei successivi aggiornamenti.)" - -#: NOT FOUND IN SOURCE -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does not change who will recieve future updates.)" -msgstr "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò non cambierà i destinatari dei successivi aggiornamenti.)" - -#: 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 "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email separati da virgole. Queste persone riceveranno i successivi aggiornamenti.)" - -#: 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 "(usa questi campi se si sceglie 'Definito dall'utente' come condizione o azione)" - -#: 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 "(vuoto)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(nessun nome in elenco)" - -#: NOT FOUND IN SOURCE -msgid "(no subject)" -msgstr "(nessun oggetto)" - -#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591 -msgid "(no value)" -msgstr "(nessun valore)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(nessun valore)" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(un solo ticket)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(in attesa di approvazione)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "(in attesa di un'altra Raccolta)" - -#: NOT FOUND IN SOURCE -msgid "(pending other ticket)" -msgstr "(in attesa di altri ticket)" - -#: NOT FOUND IN SOURCE -msgid "(requestor's group)" -msgstr "(gruppo del richiedente)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(richiesto)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(senza titolo)" - -#: 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 "I 25 ticket con priorità più alta che ho in carico..." - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "I 25 ticket con priorità più alta da me richiesti..." - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "" - -#: html/Elements/SelectTicketTypes:48 -msgid "<% $_ %>" -msgstr "" - -#: html/Search/Elements/SelectLinks:48 -msgid "<%$_%>" -msgstr "" - -#: html/Search/Elements/DisplayOptions:73 -msgid "<%$field%>" -msgstr "" - -#: html/Elements/CreateTicket:47 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid " %1" -msgstr "" - -#: 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 "Un modello vuoto" - -#: 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 eliminata" - -#: NOT FOUND IN SOURCE -msgid "ACE Loaded" -msgstr "ACE caricata" - -#: NOT FOUND IN SOURCE -msgid "ACE could not be deleted" -msgstr "impossibile eliminare l'ACE" - -#: NOT FOUND IN SOURCE -msgid "ACE could not be found" -msgstr "impossibile trovare l'ACE" - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE non trovata" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "Le ACE possono essere solo create e cancellate." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Interruzione per evitare modifiche di ticket involontarie.\\n" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Informazioni personali" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Controllo di Accesso" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Azione" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "Azione %1 non trovata" - -#: NOT FOUND IN SOURCE -msgid "Action committed." -msgstr "Azione eseguita." - -#: bin/rt-crontool:171 -msgid "Action committed.\\n" -msgstr "Azione eseguita.\\n" - -#: lib/RT/Scrip_Overlay.pm:168 -msgid "Action is mandatory argument" -msgstr "" - -#: bin/rt-crontool:167 -msgid "Action prepared..." -msgstr "Azione preparata..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Aggiungi" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Aggiungi AdminCc" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Aggiungi Cc" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Aggiungi colonne" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Aggiungi criterio" - -#: html/Ticket/Create.html:147 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Aggiungi altri file" - -#: NOT FOUND IN SOURCE -msgid "Add Next State" -msgstr "Aggiungi prossimo stato" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Aggiungi il richiedente" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Aggiungi un valore" - -#: NOT FOUND IN SOURCE -msgid "Add a keyword selection to this queue" -msgstr "Aggiungi una selezione di parole chiave a questa coda" - -#: NOT FOUND IN SOURCE -msgid "Add a new a global scrip" -msgstr "Aggiungi un nuovo scrip globale" - -#: NOT FOUND IN SOURCE -msgid "Add a scrip to this queue" -msgstr "Aggiungi uno scrip a questa coda" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Aggiungi uno scrip da applicare a tutte le code" - -#: NOT FOUND IN SOURCE -msgid "Add additional criteria" -msgstr "Aggiungi criteri addizionali" - -#: 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 "Aggiungere commenti o repliche ai ticket selezionati" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Aggiungi appartenenti" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Aggiungi nuovi osservatori" - -#: 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 "Aggiungi, cancella o modifica il valore dei campi personalizzati per gli oggetti" - -#: NOT FOUND IN SOURCE -msgid "AddNextState" -msgstr "AggiunguProssimoStato" - -#: lib/RT/Queue_Overlay.pm:763 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "Aggiunto gruppo/utente come %1 per questa coda" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Aggiunto gruppo/utente come %1 per questo ticket" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Indirizzo1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Indirizzo2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "Cc amministrativo" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "Commento Amministrativo" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "Corrispondenza Amministrativa" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Gestione delle code" - -#: NOT FOUND IN SOURCE -msgid "Admin users" -msgstr "Gestione degli utenti" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Amministra/Configurazione globale" - -#: NOT FOUND IN SOURCE -msgid "Admin/Groups" -msgstr "Gestione/Gruppi" - -#: NOT FOUND IN SOURCE -msgid "Admin/Queue/Basics" -msgstr "Gestione/Code/Base" - -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "GestisciTuttiGruppiPersonali" - -#: 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 "GestisciCommenti" - -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" -msgstr "GestisciCorrispondenza" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "GestisciCampoPers." - -#: NOT FOUND IN SOURCE -msgid "AdminCustomFields" -msgstr "GestisciCampiPers." - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "GestisciGruppo" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "GestisciAppartenenzaGruppo" - -#: lib/RT/System.pm:80 -msgid "AdminOwnPersonalGroups" -msgstr "GestisciGruppiPersonali" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "AdminQueue" -msgstr "GestisciCoda" - -#: lib/RT/System.pm:81 -msgid "AdminUsers" -msgstr "GestisciUtenti" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "AdminCc" - -#: NOT FOUND IN SOURCE -msgid "Admins" -msgstr "Amministratori" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Avanzata" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "Ricerca avanzata" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "dopo il" - -#: NOT FOUND IN SOURCE -msgid "Age" -msgstr "Età" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "Aggregatore" - -#: NOT FOUND IN SOURCE -msgid "Alias for" -msgstr "Alias per" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "Ottenute tutte le approvazioni" - -#: NOT FOUND IN SOURCE -msgid "All Custom Fields" -msgstr "Tutti i campi personalizzati" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Tutte le code" - -#: NOT FOUND IN SOURCE -msgid "Always sends a message to the requestors independent of message sender" -msgstr "Invia comunque un messaggio al richiedente, anche se è lui stesso il mittente" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "" - -#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "Si applica a" - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Applica" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Applica modifiche" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Approvazione" - -#: 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 "Approvazione n°%1: %2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Approvazione n°%1: Note non registrate a causa di un errore di sistema" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Approvazione n°%1: Note registrate" - -#: NOT FOUND IN SOURCE -msgid "Approval Details" -msgstr "Dettagli dell'approvazione" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Approvazione ottenuta" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Approvazione rifiutata" - -#: NOT FOUND IN SOURCE -msgid "Approval diagram" -msgstr "Diagramma dell'approvazione" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Approva" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Note dell'approvatore: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Apr." - -#: NOT FOUND IN SOURCE -msgid "April" -msgstr "Aprile" - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Crescente" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Assign and remove custom fields" -msgstr "Assegna e rimuovi campi personalizzati" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "AssignCustomFields" -msgstr "AssegnaCampiPers." - -#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116 -msgid "Attach" -msgstr "Allega" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Allega un file" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "File allegato" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Impossibile caricare l'allegato '%1'" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Allegato creato" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Nome file dell'allegato" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Allegati" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "Attributo cancellato" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Ago." - -#: NOT FOUND IN SOURCE -msgid "August" -msgstr "Agosto" - -#: NOT FOUND IN SOURCE -msgid "AuthSystem" -msgstr "SistemaAutorizzazioni" - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "RispostaAutomatica" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Risposta automatica ai richiedenti" - -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "RispostaAutomaticaAiRichiedenti" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "Firma PGP invalida: %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "Identificativo allegato errato. Impossibile trovare l'allegato '%1'\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad data in %1" -msgstr "Dati incorretti in %1" - -#: NOT FOUND IN SOURCE -msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "Numero di transazione incorretto per l'allegato. %1 dovrebbe essere %2\\n" - -#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Dati base" - -#: 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 "Se hai aggiornato qualche impostazione, assicurati di premere" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "prima del" - -#: NOT FOUND IN SOURCE -msgid "Begin Approval" -msgstr "Inizia approvazione" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "Logo Best Practical Solutions, LLC" - -#: NOT FOUND IN SOURCE -msgid "Binary" -msgstr "Binario" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Vuoto" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "Grassetto" - -#: NOT FOUND IN SOURCE -msgid "Bookmarkable URL for this search" -msgstr "URL assoluto per questa ricerca" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "Link assoluto" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Intestazione breve" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Modifica di ticket in blocco" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Gli utenti di sistema non possono essere modificati" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Può il gruppo/utente vedere questa coda" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Impossibile aggiungere un valore di campo personalizzato senza un nome" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($Class) -msgid "Can't find a collection class for '%1'" -msgstr "Impossibile trovare una classe collection per '%1'" - -#: html/Search/Build.html:286 -msgid "Can't find a saved search to work with" -msgstr "Impossibile trovare una ricerca salvata su cui lavorare" - -#: lib/RT/Link_Overlay.pm:159 -msgid "Can't link a ticket to itself" -msgstr "Non è possibile collegare un ticket a se stesso" - -#: NOT FOUND IN SOURCE -msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Impossibile unire un ticket ad un ticket già unito. Questo errore non dovrebbe mai verificarsi" - -#: html/Widgets/SavedSearch:63 -#. (loc($self->{SearchType})) -msgid "Can't save %1" -msgstr "" - -#: html/Search/Build.html:290 -msgid "Can't save this search" -msgstr "Impossibile salvare questa ricerca" - -#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "Impossibile specificare sia la base che il target" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Impossibile creare l'utente: %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 "Cambia la password" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Spunta tutte le caselle" - -#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "Spunta la casella per cancellare" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Spunta la casella per revocare i diritti" - -#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Derivati" - -#: 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 "Città" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Azzera" - -#: html/Helpers/CalPopup.html:51 -msgid "Close window" -msgstr "" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Chiuso" - -#: NOT FOUND IN SOURCE -msgid "Closed Tickets" -msgstr "Ticket chiusi" - -#: NOT FOUND IN SOURCE -msgid "Closed requests" -msgstr "Richieste chiuse" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Ticket chiusi" - -#: 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 "Comando non riconosciuto!\\n" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Commento" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Inidirizzo per i commenti" - -#: NOT FOUND IN SOURCE -msgid "Comment not recorded" -msgstr "Commento non registrato" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Aggiunta di commenti ai ticket" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "AggiungiCommentiAlTicket" - -#: NOT FOUND IN SOURCE -msgid "Comments" -msgstr "Commenti" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Commenti (non inviati ai richiedenti)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Commenti (non inviati ai richiedenti)" - -#: NOT FOUND IN SOURCE -msgid "Comments about %1" -msgstr "Commenti su %1" - -#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Commenti su questo utente" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Aggiunto commento" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "Restrizioni di compilazione" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Condizione" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "La condizione è soddisfatta..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Condizione non trovata" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Configurazione" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Conferma" - -#: NOT FOUND IN SOURCE -msgid "ContactInfoSystem" -msgstr "ContactInfoSystem" - -#: NOT FOUND IN SOURCE -msgid "Contacted date '%1' could not be parsed" -msgstr "Impossibile interpretare la data di contatto '%1'" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Contenuto" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Coould not create group" -msgstr "Impossibile creare il gruppo" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Copia" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Corrispondenza" - -#: NOT FOUND IN SOURCE -msgid "Correspondence Address" -msgstr "Inidirizzo di corrispondenza" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Aggiunta corrispondenza" - -#: NOT FOUND IN SOURCE -msgid "Correspondence not recorded" -msgstr "Corrispondenza non registrata" - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. " -msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato al ticket. " - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. %1 " -msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato al ticket. %1 " - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato. " - -#: lib/RT/Record.pm:1660 -#. (, $value_msg) -msgid "Could not add new custom field value. %1 " -msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato. %1 " - -#: lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3056 lib/RT/Ticket_Overlay.pm:3073 -msgid "Could not change owner. " -msgstr "Impossibile cambiare l'incaricato. " - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Impossibile creare il campo personalizzato" - -#: html/Admin/Elements/EditCustomField:113 -#. ($msg) -msgid "Could not create CustomField: %1" -msgstr "Impossibile creare il campo personalizzato: %1" - -#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "Impossibile creare il gruppo" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "Impossibile creare il modello: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Impossibile creare il ticket. Queue non impostata" - -#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496 -msgid "Could not create user" -msgstr "Impossibile creare l'utente" - -#: NOT FOUND IN SOURCE -msgid "Could not create watcher for requestor" -msgstr "Impossibile creare l'osservatore per il richiedente" - -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" -msgstr "Impossibile trovare il ticket numero %1" - -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." -msgstr "Impossibile trovare il gruppo %1." - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "Impossibile trovare o creare questo utente" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "Impossibile trovare questo gruppo/utente" - -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." -msgstr "Impossibile trovare l'utente %1." - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "Impossibile caricare il campo personalizzato %1" - -#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 -msgid "Could not load group" -msgstr "Impossibile caricare questo gruppo" - -#: lib/RT/SavedSearch.pm:119 -#. ($privacy) -msgid "Could not load object for %1" -msgstr "Impossibile caricare l'oggetto per %1" - -#: lib/RT/SavedSearch.pm:197 -msgid "Could not load search attribute" -msgstr "Impossibile caricare un attributo della ricerca" - -#: lib/RT/Queue_Overlay.pm:761 -#. ($args{'Type'}) -msgid "Could not make that principal a %1 for this queue" -msgstr "Impossibile rendere questo gruppo/utente un %1 per questa coda" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "Impossibile rendere questo gruppo/utente un %1 per questo ticket" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Impossibile rimuovere questo gruppo/utente come un %1 per questa coda" - -#: NOT FOUND IN SOURCE -msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Impossibile rimuovere questo gruppo/utente come un %1 per questo ticket" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "Impossibile impostare le informazioni dell'utente" - -#: 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 "Impossibile aggiungere un appartenente al gruppo" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "Impossibile creare una transazione: %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "Impossibile capire che cosa fare con questa risposta gpg\\n" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find group\\n" -msgstr "Impossibile trovare il gruppo\\n" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "Impossibile trovare la riga" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Impossibile trovare questo gruppo/utente" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Impossibile trovare questo valore" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find that watcher" -msgstr "Impossibile trovare questo osservatore" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "Impossibile trovare l'utente\\n" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "Impossibile caricare %1 dal database degli utenti.\\n" - -#: html/Admin/CustomFields/UserRights.html:149 -#. ($id) -msgid "Couldn't load Class %1" -msgstr "Impossibile caricare la classe %1" - -#: html/Admin/CustomFields/GroupRights.html:107 -#. ($id) -msgid "Couldn't load CustomField %1" -msgstr "Impossibile caricare ilcampo personalizzato %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load KeywordSelects." -msgstr "Impossibile caricare KeywordSelects" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" -msgstr "Impossibile caricare il file di configurazione RT '%1' %2" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "Impossibile caricare gli Scrips" - -#: lib/RT/Ticket_Overlay.pm:2016 -#. ($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 "Impossibile caricare il gruppo %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 "Impossibile caricare il collegamento" - -#: 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 "Impossibile caricare l'oggetto %1" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "Impossibile caricare la coda" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "Impossibile caricare la coda %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "Impossibile caricare lo Scrip" - -#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167 -#. ($id) -msgid "Couldn't load scrip #%1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load template" -msgstr "Impossibile caricare il modello" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load that user (%1)" -msgstr "Impossibile caricare questo utente (%1)" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "Impossibile caricare il ticket '%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 "Nazione" - -#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235 -msgid "Create" -msgstr "Crea" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Crea ticket" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Crea un campo Personalizzato" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "Crea un campo personalizzato per la coda %1" - -#: NOT FOUND IN SOURCE -msgid "Create a CustomField which applies to all queues" -msgstr "Crea un campo personalizzato valido per tutte le code" - -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "Crea un nuovo campo personalizzato" - -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "Crea un nuovo scrip globale" - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Crea un nuovo gruppo" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Crea un nuovo gruppo personale" - -#: NOT FOUND IN SOURCE -msgid "Create a new queue" -msgstr "Crea una nuova coda" - -#: NOT FOUND IN SOURCE -msgid "Create a new scrip" -msgstr "Crea un nuovo scrip" - -#: NOT FOUND IN SOURCE -msgid "Create a new template" -msgstr "Crea un nuovo modello" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Crea un nuovo ticket" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Crea un nuovo utente" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Crea una coda" - -#: NOT FOUND IN SOURCE -msgid "Create a queue called" -msgstr "Crea una nuova coda di nome" - -#: NOT FOUND IN SOURCE -msgid "Create a request" -msgstr "Crea una richiesta" - -#: html/Admin/Queues/Scrip.html:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Crea uno scrip per la coda %1" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Crea un modello" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Nuovo ticket" - -#: NOT FOUND IN SOURCE -msgid "Create failed: %1 / %2 / %3 " -msgstr "Creazione fallita: %1 / %2 / %3" - -#: NOT FOUND IN SOURCE -msgid "Create failed: %1/%2/%3" -msgstr "Creazione fallita: %1/%2/%3" - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Creare nuovi ticket basati su questo modello di scrip" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Crea il ticket" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Crea nuovi ticket in questa coda" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Crea, elimina e modifica campi personalizzati" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Crea, elimina e modifica le code" - -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "Crea, elimina e modifica gli appartenenti ai gruppi personali di un qualunque utente" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Crea, elimina e modifica gli appartenenti ai gruppi personali " - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Crea, elimina e modifica gli utenti" - -#: lib/RT/System.pm:87 -msgid "CreateSavedSearch" -msgstr "CreaRichiestaSalvata" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "CreateTicket" -msgstr "CreaTicket" - -#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169 -msgid "Created" -msgstr "Creato" - -#: NOT FOUND IN SOURCE -msgid "Created By" -msgstr "Creato da" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "Campo personalizzato %1 creato" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Created template %1" -msgstr "Modello %1 creato" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "CreatedBy" -msgstr "CreatoDa" - -#: NOT FOUND IN SOURCE -msgid "CreatedRelative" -msgstr "TempoDaCreazione" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "CreatoDa" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Collegamenti attuali" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Scrips attuali" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Appartenenti attuali" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Diritti attuali" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Current search criteria" -msgstr "Criterio di ricerca attuale" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Osservatori attuali" - -#: NOT FOUND IN SOURCE -msgid "Custom Field #%1" -msgstr "Campo personalizzato n°%1" - -#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "Campi personalizzati" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "Campi personalizzati per %1" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Programma di pulizia dell'azione personalizzata" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Programma di preparazione dell'azione personalizzata" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Condizione personalizzata" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 %2 %3" -msgstr "Campi personalizzati %1 %2 %3" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "Il campo personalizzato %1 ha un valore." - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "Il campo personalizzato %1 non ha valore." - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Campo personalizzato %1 non trovato" - -#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121 -#. ($cf) -#. ($obj->Name) -msgid "Custom field '%1'" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Custom field deleted" -msgstr "Campo personalizzato cancellato" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Campo personalizzato %1 non trovato" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Impossibile trovare il valore %1 per il campo personalizzato %2" - -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "Valore del campo personalizzato cambiato da %1 a %2" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "Impossibile cancellare il valore del campo personalizzato" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "Valore del campo personalizzato non trovato" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Il valore del vampo personalizzato è stato eliminato" - -#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "CampoPersonalizzato" - -#: 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 "Errore nei dati" - -#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65 -msgid "Dates" -msgstr "Date" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Dic." - -#: NOT FOUND IN SOURCE -msgid "December" -msgstr "Dicembre" - -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" -msgstr "Modello di default per la risposta automatica" - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Modello di default per la risposta automatica" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Coda di default" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Richiedente di default" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Modello di default per il commento amministrativo" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Modello di default per la corrispondenza amministrativa" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Modello di default per la corrispondenza" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Modello di default per la transazione" - -#: NOT FOUND IN SOURCE -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Default: %1/%2 modificato da %3 a %4" - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Delega i diritti" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "Delega diritti specifici tra quelli che ti sono stati accordati" - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "DelegaDiritti" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Delega" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "Cancella" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "Cancella modello" - -#: lib/RT/SavedSearch.pm:220 -#. ($msg) -msgid "Delete failed: %1" -msgstr "Cancellazione fallita: %1" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Cancella gli scrips selezionati" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Cancella ticket" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "CancellaTicket" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "Ricerca cancellata" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object could break referential integrity" -msgstr "La cancellazione di quest'oggetto può danneggiare l'integrità referenziale" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "La cancellazione di quest'oggetto danneggerebbe l'integrità referenziale" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "La cancellazione di quest'oggetto violerebbe l'integrità referenziale" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity." -msgstr "La cancellazione di quest'oggetto violerebbe l'integrità referenziale" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity. That's bad." -msgstr "La cancellazione di quest'oggetto violerebbe l'integrità referenziale. Ciò è male!" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Nega" - -#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "È una dipendenza per" - -#: NOT FOUND IN SOURCE -msgid "DependedOnBy" -msgstr "DipendenzaPer" - -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "Dipendenze: \\n" - -#: lib/RT/Transaction_Overlay.pm:718 -#. ($value) -msgid "Dependency by %1 added" -msgstr "Aggiunta dipendenza da parte di %1" - -#: lib/RT/Transaction_Overlay.pm:758 -#. ($value) -msgid "Dependency by %1 deleted" -msgstr "Cancellata dipendenza da parte di %1" - -#: lib/RT/Transaction_Overlay.pm:715 -#. ($value) -msgid "Dependency on %1 added" -msgstr "Aggiunta dipendenza da %1" - -#: lib/RT/Transaction_Overlay.pm:755 -#. ($value) -msgid "Dependency on %1 deleted" -msgstr "Cancellata dipendenza da %1" - -#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46 -msgid "Depends on" -msgstr "Dipende da" - -#: NOT FOUND IN SOURCE -msgid "DependsOn" -msgstr "DipendeDa" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Decrescente" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Descrivi il problema qui sotto" - -#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70 -msgid "Description" -msgstr "Descrizione" - -#: NOT FOUND IN SOURCE -msgid "Details" -msgstr "Dettagli" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Visualizza" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Visualizza la Lista Controllo Accessi (ACL)" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Visualizza colonne" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Visualizza i modelli di Scrips per questa coda" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Visualizza gli Scrips per questa coda" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Modalità visualizzazione" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "Visualizza le ricerche salvate per questo gruppo" - -#: NOT FOUND IN SOURCE -msgid "Display ticket #%1" -msgstr "Visualizza il ticket n°%1" - -#: html/Elements/Footer:61 -msgid "Distributed under version 2 of the GNU GPL." -msgstr "Distribuito in accordo con la versione 2 della GNU GPL." - -#: lib/RT/System.pm:75 -msgid "Do anything and everything" -msgstr "Fai di tutto e di più" - -#: NOT FOUND IN SOURCE -msgid "Do the Search" -msgstr "Esegui la ricerca" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Non aggiornare questa pagina." - -#: NOT FOUND IN SOURCE -msgid "Don't show search results" -msgstr "Non mostrare i risultati della ricerca" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Download" - -#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Scarica come file separato da TAB" - -#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173 -msgid "Due" -msgstr "Scadenza" - -#: NOT FOUND IN SOURCE -msgid "Due date '%1' could not be parsed" -msgstr "Impossibile interpretare la data di scadenza '%1'" - -#: NOT FOUND IN SOURCE -msgid "DueRelative" -msgstr "TempoDaScadenza" - -#: NOT FOUND IN SOURCE -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "ERRORE: impossibile caricare il ticket '%1' : %2.\\n" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Modifica" - -#: NOT FOUND IN SOURCE -msgid "Edit Conditions" -msgstr "Modifica condizioni" - -#: 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 "Modifica i campi personalizzati per %1" - -#: html/Admin/Global/CustomFields/Groups.html:54 -msgid "Edit Custom Fields for all groups" -msgstr "Modifica i campi personalizzati per tutti i gruppi" - -#: html/Admin/Global/CustomFields/Users.html:54 -msgid "Edit Custom Fields for all users" -msgstr "Modifica i campi personalizzati per tutti gli utenti" - -#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54 -msgid "Edit Custom Fields for tickets in all queues" -msgstr "Modifica i campi personalizzati per tutte le code" - -#: NOT FOUND IN SOURCE -msgid "Edit Custom Fields for transactions on tickets in all queues" -msgstr "Modifica i campi personalizzati per le transazioni sui ticket in tutte le code" - -#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Modifica collegamenti" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Modifica query" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "" - -#: html/Admin/Queues/Templates.html:63 -#. ($QueueObj->Name) -msgid "Edit Templates for queue %1" -msgstr "Modifica i modelli per la coda %1" - -#: NOT FOUND IN SOURCE -msgid "Edit keywords" -msgstr "Modifica parole chiave" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "Modifica ricerche salvate per questo gruppo" - -#: NOT FOUND IN SOURCE -msgid "Edit scrips" -msgstr "Modifica scrips" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Modifca i modelli di sistema" - -#: NOT FOUND IN SOURCE -msgid "Edit templates for %1" -msgstr "Modifica i modelli per %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "ModificaRicercheSalvate" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "Modifica della configurazione per la coda %1" - -#: NOT FOUND IN SOURCE -msgid "Editing Configuration for user %1" -msgstr "Modifica della configurazione per l'utente %1" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Modifica del campo personalizzato %1" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Modifica degli appartenenti al gruppo %1" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Modifica degli appartenenti al gruppo personale %1" - -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "Modifica del modello %1" - -#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608 -msgid "Either base or target must be specified" -msgstr "È necessario specificare base o target" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "Email" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "Inidirizzo email in uso" - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "IndirizzoEmail" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "CodificaEmail" - -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Abilitato (togliere il segno di spunta per disabilitare questo campo personalizzato)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Abilitato (togliere il segno di spunta per disabilitare questo gruppo)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Abilitato (togliere il segno di spunta per disabilitare questa coda)" - -#: NOT FOUND IN SOURCE -msgid "Enabled Custom Fields" -msgstr "Campi personalizzati abilitati" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Code abilitate" - -#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138 -#. (loc_fuzzy($msg)) -msgid "Enabled status %1" -msgstr "Stato %1 abilitato" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -msgstr "Stato abilitato: %1" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Valori multipli" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Inserire, separati da spazio, gli oggetti (o URI di oggetti) da collegare." - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Valore singolo" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Inserire, separati da spazio, le code (o URI di code) da collegare." - -#: html/Elements/EditLinks:119 html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Inserire, separati da spazio, i ticket (o URI di ticket) da collegare." - -#: NOT FOUND IN SOURCE -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "Inserire, separati da spazio, i ticket (o URI di ticket) da collegare." - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Inserimento di un massimo di %1 valori" - -#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47 -msgid "Error" -msgstr "Errore" - -#: NOT FOUND IN SOURCE -msgid "Error adding watcher" -msgstr "Errore durante l'aggiunta di un osservatore" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Errore nei parametri passati a Queue->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Errore nei parametri passati a Queue->DelWatcher" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Errore nei parametri passati a Queue->DeleteWatcher" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Errore nei parametri passati a Ticket->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "Errore nei parametri passati a Ticket->DelWatcher" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Errore nei parametri passati a Ticket->DeleteWatcher" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "Propaga ticket" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Stima" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Chiunque" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Esempio:" - -#: NOT FOUND IN SOURCE -msgid "ExtendedStatus" -msgstr "StatoAggiuntivo" - -#: NOT FOUND IN SOURCE -msgid "ExternalAuthId" -msgstr "IdAutorizEsterno" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr "IdContattoEsterno" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Informazioni aggiuntive" - -#: lib/RT/SavedSearch.pm:177 -msgid "Failed to create search attribute" -msgstr "Impossibile creare un attributo della ricerca" - -#: lib/RT/User_Overlay.pm:376 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Impossibile trovare il pseudogruppo di utenti 'Privilegiato'." - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Impossibile trovare il pseudogruppo di utenti 'Non Privilegiato'." - -#: bin/rt-crontool:206 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "Errore nel caricamento del modulo %1. (%2)" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "Impossibile caricare un oggetto per %1" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Feb." - -#: NOT FOUND IN SOURCE -msgid "February" -msgstr "Febbraio" - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "Nome file" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Testi multipli" - -#: lib/RT/CustomField_Overlay.pm:74 -msgid "Fill in multiple wikitext areas" -msgstr "Testi WIKI multipli" - -#: lib/RT/CustomField_Overlay.pm:70 -msgid "Fill in one text area" -msgstr "Testo singolo" - -#: lib/RT/CustomField_Overlay.pm:75 -msgid "Fill in one wikitext area" -msgstr "Testo WIKI singolo" - -#: 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 "Testi multipli (max. %1)" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "Testi WIKI multipli (max. %1)" - -#: NOT FOUND IN SOURCE -msgid "Fin" -msgstr "Fin" - -#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841 -msgid "Final Priority" -msgstr "Priorità finale" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "PrioritaFinale" - -#: NOT FOUND IN SOURCE -msgid "Find group whose" -msgstr "Cerca il gruppo in cui" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Cerca i gruppi in cui" - -#: NOT FOUND IN SOURCE -msgid "Find new/open tickets" -msgstr "Cerca ticket nuovi/aperti" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Cerca le persone in cui" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Ricerca ticket" - -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "Completa approvazione" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Primo" - -#: NOT FOUND IN SOURCE -msgid "First page" -msgstr "Prima pagina" - -#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 -msgid "Foo Bar Baz" -msgstr "Tizio Caio Sempronio" - -#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 -msgid "Foo!" -msgstr "Tizio!" - -#: html/Search/Bulk.html:83 -msgid "Force change" -msgstr "Forza la modifica" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Opzioni colonna" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "Trovati %quant(%1,ticket)" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Trovato Oggetto" - -#: NOT FOUND IN SOURCE -msgid "Freeform" -msgstr "Testo libero" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "FreeformContactInfo" - -#: NOT FOUND IN SOURCE -msgid "FreeformMultiple" -msgstr "FreeformMultiple" - -#: NOT FOUND IN SOURCE -msgid "FreeformSingle" -msgstr "FreeformSingle" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Ven." - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Intestazione completa" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Carica da file un modello compilato" - -#: NOT FOUND IN SOURCE -msgid "Getting the current user from a pgp sig\\n" -msgstr "Sto individuando l'utente corrente da una firma pgp\\n" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "Assegnato a %1" - -#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 -msgid "Global" -msgstr "Globale" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "Campi personalizzati globali" - -#: NOT FOUND IN SOURCE -msgid "Global Keyword Selections" -msgstr "Selezione globale delle parole chiave" - -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -msgstr "Scrips globali" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "Configurazione globale campi personalizzati" - -#: 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 "Modello globale: %1" - -#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89 -msgid "Go" -msgstr "Vai" - -#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57 -msgid "Go!" -msgstr "Vai!" - -#: NOT FOUND IN SOURCE -msgid "Good pgp sig from %1\\n" -msgstr "Firma pgp valida da %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Goto page" -msgstr "Vai a pagina" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Vai al ticket" - -#: NOT FOUND IN SOURCE -msgid "Grand" -msgstr "Grand" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Gruppo" - -#: NOT FOUND IN SOURCE -msgid "Group %1 %2: %3" -msgstr "Gruppo %1 %2: %3" - -#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Diritti di gruppo" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Appartiene già al gruppo" - -#: NOT FOUND IN SOURCE -msgid "Group could not be created." -msgstr "Impossibile creare il gruppo." - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "Impossibile creare il gruppo: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Gruppo creato" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Non appartiene al gruppo" - -#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510 -msgid "Group not found" -msgstr "Gruppo non trovato" - -#: NOT FOUND IN SOURCE -msgid "Group not found.\\n" -msgstr "Gruppo non trovato.\\n" - -#: NOT FOUND IN SOURCE -msgid "Group not specified.\\n" -msgstr "Gruppo non specificato.\\n" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210 -msgid "Groups" -msgstr "Gruppi" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "I gruppi non possono appartenere a gruppi che sono già loro appartenenti" - -#: html/Admin/Groups/index.html:86 -msgid "Groups matching search criteria" -msgstr "Gruppi che corrispondono ai criteri di ricerca" - -#: html/Ticket/Elements/ShowRequestor:77 -msgid "Groups this user belongs to" -msgstr "L'utente appartiene ai gruppi" - -#: NOT FOUND IN SOURCE -msgid "HasMember" -msgstr "HaUnAppartenente" - -#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 -msgid "Hello!" -msgstr "Ciao!" - -#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 -#. ($name) -msgid "Hello, %1" -msgstr "Ciao, %1" - -#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Cronologia" - -#: html/Admin/Groups/History.html:62 -#. ($GroupObj->Name) -msgid "History of the group %1" -msgstr "Cronologia del gruppo %1" - -#: html/Admin/Users/History.html:62 -#. ($UserObj->Name) -msgid "History of the user %1" -msgstr "Cronologia dell'utente %1" - -#: NOT FOUND IN SOURCE -msgid "HomePhone" -msgstr "TelefonoCasa" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Homepage" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "Ho %quant(%1,concrete mixer)." - -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." -msgstr "Ho [quant,_1,concrete mixer]." - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "Mi sono perso..." - -#: 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 "Identità" - -#: etc/initialdata:429 -msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "Se un'approvazione viene negata, respingi l'originale e elimina le approvazioni accodate" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "(per i nuovi ticket in cui non viene specificato un richiedente)" - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "(per i nuovi ticket in cui non viene specificata una coda)" - -#: bin/rt-crontool:267 -msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT." -msgstr "Se questo strumento viene ha il flag setgid, un utente locale malintenzionato potrebbe usarlo per ottenere accesso amministrativo a RT." - -#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60 -msgid "If you've updated anything above, be sure to" -msgstr "Se hai aggiornato qualche impostazione, assicurati di premere" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Valore non valido per %1" - -#: NOT FOUND IN SOURCE -msgid "Image" -msgstr "Immagine" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Campo immutabile" - -#: NOT FOUND IN SOURCE -msgid "Include disabled custom fields in listing." -msgstr "Elenca anche i campi personalizzati disabilitati." - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Elenca anche i gruppi disabilitati." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Elenca anche le code disabilitate." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Includi nella ricerca gli utenti disabilitati." - -#: 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 "Query incompleta" - -#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438 -msgid "Incomplete query" -msgstr "Query incompleta" - -#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816 -msgid "Initial Priority" -msgstr "Priorità iniziale" - -#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "PrioritaIniziale" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Errore in input" - -#: 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 annotato" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Errore interno" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Errore interno: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Tipo di gruppo non valido" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Diritto non valido" - -#: NOT FOUND IN SOURCE -msgid "Invalid Type" -msgstr "Tipo non valido" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Dati non validi" - -#: NOT FOUND IN SOURCE -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Incaricato non valido. Uso il default 'nessuno'." - -#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678 -#. ($msg) -msgid "Invalid pattern: %1" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244 -msgid "Invalid queue" -msgstr "Coda non valida" - -#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290 -msgid "Invalid right" -msgstr "Diritto non valido" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "Valore non valido per %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Valore non valido per il campo personalizzato" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Valore non valido per lo stato" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "È estremamente importante che agli utenti non previlegiati non sia consentita l'esecuzione di questo strumento." - -#: bin/rt-crontool:269 -msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool." -msgstr "Per eseguire questo strumento, si suggerisce di creare un utente unix non privilegiato appartenente al gruppo corretto e con i necessari diritti in RT." - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Accetta svariati argomenti:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "Corsivo" - -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" -msgstr "Oggetti in attesa della mia approvazione" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Gen." - -#: NOT FOUND IN SOURCE -msgid "January" -msgstr "Gennaio" - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Cambia appartenenza a questo gruppo" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Lug." - -#: NOT FOUND IN SOURCE -msgid "July" -msgstr "Luglio" - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Jumbo" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Giu." - -#: NOT FOUND IN SOURCE -msgid "June" -msgstr "Giugno" - -#: NOT FOUND IN SOURCE -msgid "Keyword" -msgstr "Parola chiave" - -#: NOT FOUND IN SOURCE -msgid "Lang" -msgstr "Lingua" - -#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 -msgid "Language" -msgstr "Lingua" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "Grande" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Ultimo" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Ultima comunicazione a richiedenti" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Ultima comunicazione a richiedenti" - -#: NOT FOUND IN SOURCE -msgid "Last Notified" -msgstr "Ultima notifica" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Ultima modifica" - -#: NOT FOUND IN SOURCE -msgid "Last Updated By" -msgstr "Modificato Da" - -#: NOT FOUND IN SOURCE -msgid "LastUpdated" -msgstr "UltimaModifica" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "ModificatoPerUltimoDa" - -#: NOT FOUND IN SOURCE -msgid "LastUpdatedRelative" -msgstr "TempoDaUltimoAggiornamento" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Rimasti" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Consenti a questo utente di accedere a RT" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Consenti la concessione di diritti espliciti a questo utente" - -#: NOT FOUND IN SOURCE -msgid "Limiting owner to %1 %2" -msgstr "Limitare l'incaricato a %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Limiting queue to %1 %2" -msgstr "Limitare la coda a %1 %2" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "Collegamento" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Il collegamento esiste già" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Il collegamento non può essere creato" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Collegamento creato (%1)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Collegamento cancellato (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Collegamento non trovato" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Collega ticket n°%1" - -#: NOT FOUND IN SOURCE -msgid "Link ticket %1" -msgstr "Collega ticket %1" - -#: html/Admin/CustomFields/Modify.html:102 -msgid "Link values to" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "LinkedTo" -msgstr "CollegatoA" - -#: 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 "Collegamenti" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "Carica" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Carica ricerca salvata:" - -#: lib/RT/System.pm:86 -msgid "LoadSavedSearch" -msgstr "CaricaRicercheSalvate" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Moduli perl caricati" - -#: lib/RT/SavedSearch.pm:111 -#. ($self->Name) -msgid "Loaded search %1" -msgstr "Caricata ricerca %1" - -#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 -msgid "Location" -msgstr "Domicilio" - -#: NOT FOUND IN SOURCE -msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "Impossibile trovare la directory di log %1 (oppure mancano i permessi di scrittura).\\n RT non può essere eseguito." - -#: html/Elements/Header:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "Accesso effettuato come %1" - -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Accedi" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Esci" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "Tipo di ricerca sbagliato" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Nuovo incaricato" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Nuovo stato" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Nuova data scadenza" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Nuova data risoluzione" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Nuova data iniziato" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Nuova data inizio previsto" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Nuova data ultimo contatto" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Nuova priorità" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Nuova coda" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Nuovo oggetto" - -#: lib/RT/Group_Overlay.pm:169 -msgid "Make this group visible to user" -msgstr "Rendi questo gruppo visibile all'utente" - -#: html/Admin/index.html:78 -msgid "Manage custom fields and custom field values" -msgstr "Gestione campi personalizzati e relativi valori" - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Gestione di gruppi e appartenenze" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Gestione di proprietà e configurazioni che si applicano a tutte le code" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Gestione delle code e delle propietà specifiche delle code" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Gestione di utenti e password" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Mar." - -#: NOT FOUND IN SOURCE -msgid "March" -msgstr "Marzo" - -#: NOT FOUND IN SOURCE -msgid "May" -msgstr "Maggio" - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "Mag." - -#: lib/RT/Transaction_Overlay.pm:731 -#. ($value) -msgid "Member %1 added" -msgstr "Aggiunto appartenente %1" - -#: lib/RT/Transaction_Overlay.pm:771 -#. ($value) -msgid "Member %1 deleted" -msgstr "Rimosso appartenente %1" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Aggiunto appartenente" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Rimosso appartenente" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Appartenente non rimosso" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Appartenente a" - -#: NOT FOUND IN SOURCE -msgid "MemberOf" -msgstr "AppartenteA" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Appartenenti" - -#: lib/RT/Transaction_Overlay.pm:728 -#. ($value) -msgid "Membership in %1 added" -msgstr "Aggiunta appartenenza al gruppo %1" - -#: lib/RT/Transaction_Overlay.pm:768 -#. ($value) -msgid "Membership in %1 deleted" -msgstr "Rimossa appartenenza al gruppo %1" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Appartenenza a gruppi" - -#: html/Admin/Users/Memberships.html:60 -#. ($UserObj->Name) -msgid "Memberships of the user %1" -msgstr "Appartenenza a gruppi per l'utente %1" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Unione avvenuta con Successo" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Unione fallita. Impossibile impostare EffectiveId" - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "Unione fallita. Impossibile impostare Stato" - -#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Unisci a" - -#: lib/RT/Transaction_Overlay.pm:734 -#. ($value) -msgid "Merged into %1" -msgstr "Unito a %1" - -#: html/Search/Bulk.html:143 html/Ticket/Update.html:118 -msgid "Message" -msgstr "Messaggio" - -#: 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 "Impossibile registrare il messaggio" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Messaggio registrato" - -#: html/Ticket/Elements/PreviewScrips:122 -msgid "Messages about this ticket will not be sent to..." -msgstr "I messaggi riguardanti questo ticket non saranno inviati a..." - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -msgstr "" - -#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445 -msgid "Mismatched parentheses" -msgstr "Parentesi non bilanciate" - -#: lib/RT/Record.pm:954 -msgid "Missing a primary key?: %1" -msgstr "Manca una chiave primaria?: %1" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Cellulare" - -#: NOT FOUND IN SOURCE -msgid "MobilePhone" -msgstr "TelefonoCellulare" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Modifica la Lista Controllo Accessi (ACL)" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "Modifica il campo personalizzato %1" - -#: html/Admin/Elements/ObjectCustomFields:96 -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "Modifica campi personalizzati applicabili a %1 per ogni %2" - -#: html/Admin/Elements/ObjectCustomFields:98 -#. (loc(lc($Types))) -msgid "Modify Custom Fields which apply to all %1" -msgstr "Modifica i campi personalizzati applicabili a tutti %1" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Fields which apply to all queues" -msgstr "Modifica i Campi Personalizzati validi per tutte le code" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Modifica diritti del gruppo" - -#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Modifica appartenenti al gruppo" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Modifica diritti" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Modify Scrip templates for this queue" -msgstr "Modifica i modelli di Scrips per questa coda" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Modifica gli Scrips per questa coda" - -#: NOT FOUND IN SOURCE -msgid "Modify System ACLS" -msgstr "Modifica le ACL di Sistema" - -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" -msgstr "Modifica il modello %1" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Modifica diritti utente" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "Modifica un campo personalizzato per la coda %1" - -#: NOT FOUND IN SOURCE -msgid "Modify a CustomField which applies to all queues" -msgstr "Modifica un campo personalizzato valido per tutte le code" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "Modifica uno scrip per la coda %1" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Modifica uno scrip valido per tutte le code" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "Modifica oggetti associati a %1" - -#: NOT FOUND IN SOURCE -msgid "Modify dates for # %1" -msgstr "Modifica le date per n° %1" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "Modifica le date per n°%1" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Modifica le date per il ticket n° %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 -msgid "Modify global custom fields" -msgstr "Modifica campi personalizzati globali" - -#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77 -msgid "Modify global group rights" -msgstr "Modifica i diritti di gruppo globali" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Modifica i diritti di gruppo globali." - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for groups" -msgstr "Modifica i diritti di gruppo globali" - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for users" -msgstr "Modifica i diritti globali per gli utenti" - -#: NOT FOUND IN SOURCE -msgid "Modify global scrips" -msgstr "Modifica gli scrips globali" - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Modifica i diritti globali per gli utenti" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Modifica i diritti globali per gli utenti." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Modifica i metadati del gruppo o elimina un gruppo" - -#: html/Admin/CustomFields/GroupRights.html:164 -#. ($CustomFieldObj->Name) -msgid "Modify group rights for custom field %1" -msgstr "Modifica i diritti di gruppo per il campo personalizzato %1" - -#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 -#. ($GroupObj->Name) -msgid "Modify group rights for group %1" -msgstr "Modifica i diritti di gruppo per il gruppo %1" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "Modifica i diritti di gruppo per la coda %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Modifica gli appartenenti a questo gruppo" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Modifica il proprio account RT" - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "Modifica le persone collegate alla coda %1" - -#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57 -#. ($Ticket->id) -#. ($Ticket->Id) -msgid "Modify people related to ticket #%1" -msgstr "Modifica le persone collegate al ticket n°%1" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Modifica gli scrips per la coda %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63 -msgid "Modify scrips which apply to all queues" -msgstr "Modifica gli scrips validi per tutte le code" - -#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99 -#. (loc($TemplateObj->Name())) -#. ($TemplateObj->id) -msgid "Modify template %1" -msgstr "Modifica modello %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Modifica i modelli validi per tutte le code" - -#: 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 "Modifica il gruppo %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Modifica gli osservatori della coda" - -#: html/Admin/Users/Modify.html:309 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "Modifica l'utente %1" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "Modifica il ticket n° %1" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "Modifica il ticket n°%1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Modifica i ticket" - -#: html/Admin/CustomFields/UserRights.html:157 -#. ($CustomFieldObj->Name) -msgid "Modify user rights for custom field %1" -msgstr "Modifica i diritti utente per il il campo personalizzato %1" - -#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 -#. ($GroupObj->Name) -msgid "Modify user rights for group %1" -msgstr "Modifica i diritti utente per il gruppo %1" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Modifica i diritti utente per la coda %1" - -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "Modifica gli osservatori per la coda '%1'" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ModifyACL" -msgstr "ModificaACL" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "ModificaCampoPers." - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "ModificaPropriaAppartenenzaAlGruppo" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyQueueWatchers" -msgstr "ModificaOsservatoriDellaCoda" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ModifyScrips" -msgstr "ModificaScrips" - -#: lib/RT/System.pm:82 -msgid "ModifySelf" -msgstr "ModificaSuoiDati" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "ModifyTemplate" -msgstr "ModificaModello" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "ModifyTicket" -msgstr "ModificaTicket" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Lun." - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "Maggiori informazioni su %1" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Sposta in basso" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Sposta in alto" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Multiplo" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "L'attributo 'name' deve essere specificato" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "I miei ticket in stato: %1" - -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "Le mie richieste di approvazione" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Le mie richieste di approvazione" - -#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Le mie ricerche salvate" - -#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65 -msgid "Name" -msgstr "Nome" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Nome già usato" - -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "È richiesta l'approvazione da parte del system administrator" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Mai" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Nuovo" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Nuovi collegamenti" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Nuova Password" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Nuove approvazioni pendenti" - -#: NOT FOUND IN SOURCE -msgid "New Query" -msgstr "Nuova query" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Nuova Ricerca" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Nuovo campo personalizzato" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Nuovo gruppo" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Nuova password" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Inviata notifica della nuova password" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Nuova coda" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "New request" -msgstr "Nuova richiesta" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Nuovi diritti" - -#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Nuovo scrip" - -#: NOT FOUND IN SOURCE -msgid "New search" -msgstr "Nuova ricerca" - -#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Nuovo modello" - -#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Nuovo ticket" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "Il nuovo ticket non esiste" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Nuovo utente" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Nuovo utente di nome" - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Nuovo osservatore" - -#: NOT FOUND IN SOURCE -msgid "New window setting" -msgstr "Impostazioni nuova finestra" - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Seguente" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Pagina seguente" - -#: NOT FOUND IN SOURCE -msgid "Next page" -msgstr "Pagina seguente" - -#: NOT FOUND IN SOURCE -msgid "NickName" -msgstr "Nomignolo" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Nomignolo" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "Nessuna classe definita" - -#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "Nessun campo personalizzato" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Nessun campo personalizzato definito" - -#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Nessun gruppo definito" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "Nessuna query" - -#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "Nessuna coda definita" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Nessun utente RT trovato. Consulta il tuo amministratore di RT.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Nessun Modello" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket " -msgstr "Nessun ticket specificato. Annullo il ticket" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "Nessuna azione" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "Nessuna colonna specificata" - -#: NOT FOUND IN SOURCE -msgid "No command found\\n" -msgstr "Nessun comando trovato\\n" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Nessun commento su questo utente" - -#: NOT FOUND IN SOURCE -msgid "No correspondence attached" -msgstr "Nessuna corrispondenza allegata" - -#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78 -#. (ref $self) -msgid "No description for %1" -msgstr "Nessuna descrizione per %1" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Nessun gruppo specificato" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "Nessun gruppo corrisponde ai criteri di ricerca." - -#: lib/RT/Ticket_Overlay.pm:2393 -msgid "No message attached" -msgstr "Nessun messaggio allegato" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "Nessuna password impostata" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Manca il permesso per creare code" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "Manca il permesso per creare ticket nella coda '%1'" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Manca il permesso per creare utenti" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Manca il permesso per visualizzare il ticket" - -#: 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 "Manca il permesso per aggiornare il ticket" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Nessun utente/gruppo specificato" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Nessun utente/gruppo selezionato." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Nessuna coda soddisfa i criteri di ricerca." - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Nessun diritto trovato" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Nessun diritto concesso." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "Nessuna ricerca caricata" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Nessuna ricerca su cui operare." - -#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Senza oggetto" - -#: NOT FOUND IN SOURCE -msgid "No ticket id specified" -msgstr "Nessun identificativo di ticket specificato" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Nessun tipo transazione specificato" - -#: NOT FOUND IN SOURCE -msgid "No user or email address specified" -msgstr "Nessun utente o indirizzo email specificato" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Nessuna utente soddisfa i criteri di ricerca." - -#: NOT FOUND IN SOURCE -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "Nessun valore inviato a _Set!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Nessuno" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Campo inesistente?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Not logged in" -msgstr "Accesso non effettuato" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Accesso non effettuato." - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Non impostato" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Non ancora implementato." - -#: NOT FOUND IN SOURCE -msgid "Not yet implemented...." -msgstr "Non ancora implementato...." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Note" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Impossibile inviare la notifica" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "invia notifica agli AdminCc" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "invia notifica agli AdminCc come commento" - -#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 -msgid "Notify Ccs" -msgstr "invia notifica ai Cc" - -#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "invia notifica ai Cc come commento" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "invia notifica agli altri destinatari" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "invia notifica agli altri destinatari come commento" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "invia notifica all'incaricato" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "invia notifica all'incaricato come commento" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "invia notifica all'incaricato del ticket respinto" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "invia notifica all'incaricato del ticket che tutte le approvazioni sono state concesse" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "invia notifica all'incaricato del ticket che alcune approvazioni sono state concesse" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "invia notifica agli incaricati e AdminCc quando è necessario richiedere nuove approvazione" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "invia notifica al richiedente" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "invia notifica ai richiedenti e ai Cc" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "invia notifica ai richiedenti e ai Cc come commento" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "invia notifica ai richiedenti, Cc e AdminCc" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "invia notifica ai richiedenti, Cc a AdminCc come commento" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Nov." - -#: NOT FOUND IN SOURCE -msgid "November" -msgstr "Novembre" - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "OR" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "L'oggetto non può essere creato" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "L'oggetto non può essere cancellato" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Oggetto creato" - -#: lib/RT/Record.pm:120 -msgid "Object deleted" -msgstr "Oggetto cancellato" - -#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 -#. ($ObjectType) -#. ($LookupType) -msgid "Object of type %1 cannot take custom fields" -msgstr "Oggetto di tipo %1 non accetta campi personalizzati" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "Tipo oggetto non corrisponde" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Oct." - -#: NOT FOUND IN SOURCE -msgid "October" -msgstr "Ottobre" - -#: html/Tools/Elements/Tabs:55 -msgid "Offline" -msgstr "Offline" - -#: html/Tools/Offline.html:49 -msgid "Offline edits" -msgstr "Modifiche offline" - -#: html/Tools/Offline.html:46 -msgid "Offline upload" -msgstr "Upload richiesta offline" - -#: html/Elements/SelectDateRelation:56 -msgid "On" -msgstr "il" - -#: lib/RT/Transaction_Overlay.pm:326 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "All'arrivo di un commento" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "All'arrivo di una corrispondenza" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Alla creazione" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Al cambio dell'incaricato" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "Al cambio della priorità" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Al cambio di coda" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Alla risoluzione" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Al cambio di stato" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Ad ogni transazione" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Mostra le approvazioni solo per le richieste create dopo il %1" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "Mostra le approvazioni solo per le richieste create prima del %1" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Aperto" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Apri" - -#: NOT FOUND IN SOURCE -msgid "Open requests" -msgstr "Richieste aperte" - -#: NOT FOUND IN SOURCE -msgid "Open ticket" -msgstr "Apri ticket" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Ticket aperti" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in a new window" -msgstr "Apre ticket (dalla lista) in una nuova finestra" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in another window" -msgstr "Apre ticket (dalla lista) in un'altra finestra" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Apri i ticket all'arrivo di corrispondenza" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Ordina per" - -#: NOT FOUND IN SOURCE -msgid "Ordering and sorting" -msgstr "Ordinamento" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Azienda" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Ticket originario: n°%1" - -#: lib/RT/Transaction_Overlay.pm:622 -msgid "Outgoing email about a comment recorded" -msgstr "Registrata email in uscita riguardante un commento" - -#: lib/RT/Transaction_Overlay.pm:626 -msgid "Outgoing email recorded" -msgstr "Registrata email in uscita" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Al passare del tempo, la priorità cresce fino a" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Prende in carico ticket" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "PrendeInCaricoTicket" - -#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006 -msgid "Owner" -msgstr "Incaricato" - -#: NOT FOUND IN SOURCE -msgid "Owner changed from %1 to %2" -msgstr "Cambiato incaricato da %1 a %2" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "L'incaricato non può essere impostato." - -#: lib/RT/Transaction_Overlay.pm:672 -#. ($Old->Name , $New->Name) -msgid "Owner forcibly changed from %1 to %2" -msgstr "Cambiato forzatamente l'incaricato da %1 a %2" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "In carico a" - -#: NOT FOUND IN SOURCE -msgid "OwnerName" -msgstr "NomeIncaricato" - -#: html/Elements/TicketList:78 -#. ($Page, int($TotalFound/$Rows)+$oddRows) -msgid "Page %1 of %2" -msgstr "Pagina %1 di %2" - -#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96 -msgid "Pager" -msgstr "Cercapersone" - -#: NOT FOUND IN SOURCE -msgid "PagerPhone" -msgstr "Cercapersone" - -#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "DerivaDa" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Password" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Promemoria password" - -#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045 -msgid "Password changed" -msgstr "Password cambiata" - -#: 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 "La password deve essere lunga almeno %1 caratteri" - -#: lib/RT/User_Overlay.pm:1044 -msgid "Password set" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Password too short" -msgstr "Password troppo corta" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Password: %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "Le passwords non corrispondono." - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "Le password non corrispondono. La password non è stata cambiata" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Persone" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Esegui un'azione personalizzata" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Configurazione perl" - -#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774 -msgid "Permission Denied" -msgstr "Operazione non consentita" - -#: 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 "Gruppi personali" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Gruppi personali" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Gruppi personali:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Numeri telefonici" - -#: NOT FOUND IN SOURCE -msgid "Placeholder" -msgstr "Segnaposto" - -#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Preferenze" - -#: 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 "Prefs" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "Preparazione non necessaria" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Precedente" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "Pagina precedente" - -#: NOT FOUND IN SOURCE -msgid "Previous page" -msgstr "Pagina precedente" - -#: 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 "Utente/gruppo %1 not trovato." - -#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790 -msgid "Priority" -msgstr "Priorità" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "La priorità inizia da" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Riservatezza:" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Privilegiato" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Stato previlegiato: %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Utenti privilegiati" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Pseudogruppo per uso interno" - -#: NOT FOUND IN SOURCE -msgid "Query" -msgstr "Query" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Costruttore di query" - -#: 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 "Coda" - -#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65 -#. ($Queue) -#. ($id) -msgid "Queue %1 not found" -msgstr "Coda %1 non trovata" - -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "Coda '%1' non trovata\\n" - -#: NOT FOUND IN SOURCE -msgid "Queue Keyword Selections" -msgstr "Selezione delle parole chiave per la coda" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Nome della coda" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "Scrips della coda" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "La coda esiste già" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "Impossibile creare la coda" - -#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "Impossibile caricare la coda." - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Coda creata" - -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "Coda non specificata." - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Coda non trovata" - -#: NOT FOUND IN SOURCE -msgid "QueueName" -msgstr "NomeCoda" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Code" - -#: 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 "Ricerca veloce" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Creazione veloce di un ticket" - -#: 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 "RT %1 per %2" - -#: NOT FOUND IN SOURCE -msgid "RT %1 from Best Practical Solutions, LLC." -msgstr "RT %1 da 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 "Amministrazione di RT" - -#: NOT FOUND IN SOURCE -msgid "RT Authentication error." -msgstr "Errore di autenticazione RT." - -#: NOT FOUND IN SOURCE -msgid "RT Bounce: %1" -msgstr "RT Bounce: %1" - -#: NOT FOUND IN SOURCE -msgid "RT Configuration error" -msgstr "Errore nella configurazione di RT" - -#: NOT FOUND IN SOURCE -msgid "RT Critical error. Message not recorded!" -msgstr "Errore critico. Messaggio not registrato!" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "Errore RT" - -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." -msgstr "RT ha ricevuto email (%1) da se stesso." - -#: NOT FOUND IN SOURCE -msgid "RT Recieved mail (%1) from itself." -msgstr "RT ha ricevuto email (%1) da se stesso." - -#: NOT FOUND IN SOURCE -msgid "RT Self Service / Closed Tickets" -msgstr "RT Self Service / Ticket chiusi" - -#: html/Admin/Tools/Configuration.html:73 -msgid "RT Variables" -msgstr "Variabili RT" - -#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75 -msgid "RT at a glance" -msgstr "Quadro d'insieme" - -#: 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 non ha potuto autenticarti" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find requestor via its external database lookup" -msgstr "RT non è riuscito a trovare il richiedente consultando in database esterno" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find the queue: %1" -msgstr "RT non ha trovato la coda: %1" - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "RT non può memorizzare la tua sessione" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't validate this PGP signature. \\n" -msgstr "RT non può verificare questa firma PGP. \\n" - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr "RT / %1" - -#: NOT FOUND IN SOURCE -msgid "RT for %1: %2" -msgstr "RT / %1: %2" - -#: NOT FOUND IN SOURCE -msgid "RT has proccessed your commands" -msgstr "RT ha eseguito i comandi" - -#: 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 is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. RT viene distribuito con la Versione 2 della 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 is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. RT viene distribuito con la Versione 2 della GNU General Public License." - -#: NOT FOUND IN SOURCE -msgid "RT thinks this message may be a bounce" -msgstr "RT thinks this message may be a bounce" - -#: 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 will process this message as if it were unsigned.\\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 "" - -#: NOT FOUND IN SOURCE -msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." -msgstr "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Nome reale" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "NomeReale" - -#: lib/RT/Transaction_Overlay.pm:725 -#. ($value) -msgid "Reference by %1 added" -msgstr "Aggiunto riferimento da %1" - -#: lib/RT/Transaction_Overlay.pm:765 -#. ($value) -msgid "Reference by %1 deleted" -msgstr "Cancellato riferimento da %1" - -#: lib/RT/Transaction_Overlay.pm:722 -#. ($value) -msgid "Reference to %1 added" -msgstr "Aggiunto riferimento a %1" - -#: lib/RT/Transaction_Overlay.pm:762 -#. ($value) -msgid "Reference to %1 deleted" -msgstr "Cancellato riferimento a %1" - -#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72 -msgid "Referred to by" -msgstr "È un riferimento per" - -#: NOT FOUND IN SOURCE -msgid "ReferredToBy" -msgstr "RiferimentoPer" - -#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "Fa riferimento a" - -#: NOT FOUND IN SOURCE -msgid "RefersTo" -msgstr "FaRiferimentoA" - -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "Rifinisci" - -#: NOT FOUND IN SOURCE -msgid "Refine search" -msgstr "Rifinisci la ricerca" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Aggiorna questa pagina ogni %1 minuti." - -#: 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 "Rimuovi AdminCc" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Rimuovi Cc" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Rimuovi richiedente" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Risposta" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Indirizzo a cui indirizzare le risposte" - -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Rispondi ai richiedenti" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Rispondi ai ticket" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "RispondiAlTicket" - -#: 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 "Richiedente" - -#: NOT FOUND IN SOURCE -msgid "Requestor email address" -msgstr "Indirizzo email del richiedente" - -#: NOT FOUND IN SOURCE -msgid "Requestor(s)" -msgstr "Richiedente(i)" - -#: NOT FOUND IN SOURCE -msgid "RequestorAddresses" -msgstr "IndirizzoRichiedente" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Richiedenti" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "Le richieste devono essere soddisfatte entro" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "Il parametro obbligatorio '%1' non è stato specificato" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Azzera" - -#: 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 "Casa" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Risolvi" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "Risolvi il ticket n°%1 (%2)" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Risolto" - -#: 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 "ResolvedRelative" -msgstr "TempoDaRisoluzione" - -#: NOT FOUND IN SOURCE -msgid "Response to requestors" -msgstr "Risposta ai richiedenti" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Risultati" - -#: NOT FOUND IN SOURCE -msgid "Results per page" -msgstr "Risultati per pagina" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Ridigita Password" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "Annulla modifiche" - -#: NOT FOUND IN SOURCE -msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" -msgstr "Diritto %1 non trovato per %2 %3 limitatamente a %4 (%5)\\n" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Diritto delegato" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Diritto concesso" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Diritto caricato" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Il diritto non può essere revocato" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Diritto non trovato" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Diritto non caricato." - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Diritto revocato" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Diritti" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "I diritti per %1 non possono essere concessi" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "I diritti per %1 non possono essere revocati" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Ruoli" - -#: NOT FOUND IN SOURCE -msgid "RootApproval" -msgstr "ApprovazioneAmministratore" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Righe per pagina" - -#: lib/RT/Date.pm:422 -msgid "Sat." -msgstr "Sab." - -#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211 -msgid "Save" -msgstr "Salva" - -#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77 -msgid "Save Changes" -msgstr "Salva modifiche" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Salva preferenze" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Salva modifiche" - -#: lib/RT/SavedSearch.pm:173 -#. ($name) -msgid "Saved search %1" -msgstr "Ricerca %1 salvata" - -#: NOT FOUND IN SOURCE -msgid "Saved searches" -msgstr "Ricerche salvate" - -#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84 -#. ($scrip->Id) -#. ($id) -msgid "Scrip #%1" -msgstr "Scrip n°%1" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Scrip creato" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Campi dello scrip" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Scrip eliminato" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Scrips" - -#: NOT FOUND IN SOURCE -msgid "Scrips for %1\\n" -msgstr "Scrips per %1\\n" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Scrips che si applicano a tutte le code" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Ricerca" - -#: NOT FOUND IN SOURCE -msgid "Search Criteria" -msgstr "Criteri di ricerca" - -#: 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 "Errore nel caricamento degli attributi della ricerca" - -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Ricerca le richieste di approvazione" - -#: 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 "Aggiornamento della ricerca: %1" - -#: 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 "Protezione:" - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Vedi campi personalizzati" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "See exact outgoing email messages and their recipeients" -msgstr "Vedi letteralmente i messaggi in uscita e i loro destinatari" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket private commentary" -msgstr "Vedi commenti privati del ticket" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "See ticket summaries" -msgstr "Vedi riassunto dei ticket" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "VediCampoPers." - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "VediGruppo" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "SeeQueue" -msgstr "VediCoda" - -#: NOT FOUND IN SOURCE -msgid "Select" -msgstr "Seleziona" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Scegli un campo personalizzato" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Seleziona un gruppo" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Seleziona una coda" - -#: html/SelfService/CreateTicketInQueue.html:48 -msgid "Select a queue for your new ticket" -msgstr "Scegli una coda per il nuovo ticket" - -#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Seleziona un utente" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Seleziona un campo personalizzato" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Seleziona i campi personalizzati per tutti i gruppi degli utenti" - -#: html/Admin/Global/CustomFields/index.html:65 -msgid "Select custom fields for all users" -msgstr "Seleziona i campi personalizzati per tutti gli utenti" - -#: html/Admin/Global/CustomFields/index.html:76 -msgid "Select custom fields for tickets in all queues" -msgstr "Seleziona i campi personalizzati per i ticket in tutte le code" - -#: html/Admin/Global/CustomFields/index.html:83 -msgid "Select custom fields for transactions on tickets in all queues" -msgstr "Seleziona i campi personalizzati per le transazioni relative ai ticket in tutte le code" - -#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Seleziona il gruppo" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Elenco a selezione multipla" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Elenco a selezione singola" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Seleziona la coda" - -#: 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 "Seleziona lo scrip" - -#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Seleziona il modello" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Seleziona un massimo di %1 valori" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Seleziona l'utente" - -#: NOT FOUND IN SOURCE -msgid "SelectMultiple" -msgstr "SelezioneMultipla" - -#: NOT FOUND IN SOURCE -msgid "SelectSingle" -msgstr "SelezioneSingola" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Campi personalizzati selezionati" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "Oggetti selezionati" - -#: html/Widgets/SelectionBox:209 -msgid "Selections modified. Please save your changes" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Self Service" -msgstr "Self Service" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Invia una mail a tutti gli osservatori" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Invia una mail atutti gli osservatori come \"commento\"" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Invia mail ai richiedenti e Ccs" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Invia mail come commento a richiedenti e Cc" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Invia un messaggio ai richiedenti" - -#: etc/initialdata:125 etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Invia mail a Cc e Bcc esplicitamente elencati" - -#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 -msgid "Sends mail to the Ccs" -msgstr "Invia mail ai Cc" - -#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 -msgid "Sends mail to the Ccs as a comment" -msgstr "Invia mail ai Cc come commento" - -#: etc/initialdata:102 -msgid "Sends mail to the administrative Ccs" -msgstr "Invia mail ai Cc amministrativi" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Invia mail ai Cc amministrativi come commento" - -#: etc/initialdata:82 etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Invia mail all'incaricato" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Set." - -#: NOT FOUND IN SOURCE -msgid "September" -msgstr "Settembre" - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Mostra" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Mostra richieste di approvazione" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Mostra colonne" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Mostra i risultati" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Mostra le richieste approvate" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Mostra info di base" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Mostra le richieste negate" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Mostra i dettagli" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Mostra le richieste in attesa" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Mostra le richieste in attesa di altre approvazioni" - -#: NOT FOUND IN SOURCE -msgid "Show ticket private commentary" -msgstr "Mostra commenti privati del ticket" - -#: NOT FOUND IN SOURCE -msgid "Show ticket summaries" -msgstr "Mostra riassunto dei ticket" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "ShowACL" -msgstr "MostraACL" - -#: lib/RT/System.pm:85 -msgid "ShowConfigTab" -msgstr "MostraTabConfigurazione" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "ShowOutgoingEmail" -msgstr "MostraEmailUscente" - -#: lib/RT/Group_Overlay.pm:168 -msgid "ShowSavedSearches" -msgstr "MostraRicercheSalvate" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "ShowScrips" -msgstr "MostraScrips" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "ShowTemplate" -msgstr "MostraModello" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowTicket" -msgstr "MostraTicket" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicketComments" -msgstr "MostraCommentiAlTicket" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "Registra come richiede o come Cc del ticket o della coda" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Registra come AdminCc del ticket o della coda" - -#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168 -msgid "Signature" -msgstr "Firma" - -#: NOT FOUND IN SOURCE -msgid "Signed in as %1" -msgstr "Accesso effettuato come %1" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Singolo" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "Carattere" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Salta menu" - -#: html/Search/Elements/EditFormat:78 -msgid "Small" -msgstr "Piccolo" - -#: 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 "Ordinamento" - -#: NOT FOUND IN SOURCE -msgid "Sort key" -msgstr "Chiave di ordinamento" - -#: NOT FOUND IN SOURCE -msgid "Sort results by" -msgstr "Ordina i risultati per" - -#: NOT FOUND IN SOURCE -msgid "SortOrder" -msgstr "Ordinamento" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "In stallo" - -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "Pagina iniziale" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Iniziato" - -#: NOT FOUND IN SOURCE -msgid "Started date '%1' could not be parsed" -msgstr "Impossibile interpretare data inizio '%1'" - -#: NOT FOUND IN SOURCE -msgid "StartedRelative" -msgstr "TempoDaInizio" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "InizioPrevisto" - -#: NOT FOUND IN SOURCE -msgid "Starts By" -msgstr "Inizio previsto il" - -#: NOT FOUND IN SOURCE -msgid "Starts date '%1' could not be parsed" -msgstr "Impossibile interpretare data inizio previsto '%1'" - -#: NOT FOUND IN SOURCE -msgid "StartsRelative" -msgstr "TempoDaInizioPrevisto" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Provincia" - -#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651 -msgid "Status" -msgstr "Stato" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "Cambiamento di stato" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Cambiato lo stato da %1 a %2" - -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "CambiamentoStato" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Sottrai" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Sottrae ticket" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "SottraeTicket" - -#: lib/RT/Transaction_Overlay.pm:678 -#. ($Old->Name) -msgid "Stolen from %1" -msgstr "Sottratto da %1" - -#: NOT FOUND IN SOURCE -msgid "Stolen from %1 " -msgstr "Sottratto da %1 " - -#: html/Search/Elements/EditFormat:81 -msgid "Style" -msgstr "Stile" - -#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733 -msgid "Subject" -msgstr "Oggetto" - -#: 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 "L'oggetto diventa %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Invia" - -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "Imposta workflow" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Completato con successo" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Dom." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "SuperUtente" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Sistema" - -#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Configurazione del sistema" - -#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989 -msgid "System Error" -msgstr "Errore di sistema" - -#: NOT FOUND IN SOURCE -msgid "System Error. Right not granted." -msgstr "Errore di sistema. Diritto non concesso." - -#: NOT FOUND IN SOURCE -msgid "System Error. right not granted" -msgstr "Errore di sistema. Diritto non concesso" - -#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230 -#. ($msg) -msgid "System Error: %1" -msgstr "Errore di sistema: %1" - -#: html/Admin/Tools/index.html:47 -msgid "System Tools" -msgstr "Strumenti di sistema" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Errore di sistema. Diritto non delegato." - -#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920 -msgid "System error. Right not granted." -msgstr "Errore di sistema. Diritto non concesso." - -#: NOT FOUND IN SOURCE -msgid "System error. Unable to grant rights." -msgstr "Errore di sistema. Impossibile concedere i diritti." - -#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Gruppi di sistema" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "SystemRolegroup per uso interno" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "TEST_STRING" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Prendi in carico" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Take tickets" -msgstr "Prendi in carico ticket" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "PrendiInCaricoTicket" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Preso in carico" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Modello" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Modello n°%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Modello eliminato" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Modello non trovato" - -#: NOT FOUND IN SOURCE -msgid "Template not found\\n" -msgstr "Modello non trovato\\n" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Modello elaborato" - -#: 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 "Modelli" - -#: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "Modelli per %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Text" -msgstr "Testo" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Il valore attuale è già questo" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "Questo campo personalizzato non ammette questo valore" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Il valore è lo stesso" - -#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "Questo utente/gruppo ha già questo diritto" - -#: lib/RT/Queue_Overlay.pm:753 -#. ($args{'Type'}) -msgid "That principal is already a %1 for this queue" -msgstr "Questo utente/gruppo è già %1 per questa coda" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Questo utente/gruppo è già %1 per questo ticket" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Questo utente/gruppo non è %1 per questa coda" - -#: NOT FOUND IN SOURCE -msgid "That principal is not a %1 for this ticket" -msgstr "Questo utente/gruppo non è %1 per questo ticket" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "La coda non esiste" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "Il ticket ha dipendenze non risolte" - -#: NOT FOUND IN SOURCE -msgid "That user already has that right" -msgstr "L'utente ha già questo diritto" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "L'utente ha già il ticket in carico" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "L'utente non esiste" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "L'utente è già previlegiato" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "L'utente è già non previlegiato" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Ora l'utente è previlegiato" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Ora l'utente è non previlegiato" - -#: NOT FOUND IN SOURCE -msgid "That user is now unprivilegedileged" -msgstr "Ora l'utente è non previlegiato" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "L'utente non può prendere in carico ticket da questa coda" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "Non è un identificativo numerico" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Dati di base" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "Il Cc di un ticket" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The administrative CC of a ticket" -msgstr "Il Cc amministrativo di un ticket" - -#: NOT FOUND IN SOURCE -msgid "The comment has been recorded" -msgstr "Il commento è stato registrato" - -#: 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 "Il comando seguente troverà tutti i ticket attivi nella coda 'general' e ne imposterà la priorità a 99 se nessuno li ha toccati nelle ultime 4 ore:" - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "Il nuovo valore è stato impostato." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "L'incaricato del ticket" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "Il richiedente del ticket" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Questi commenti non vengono normalmente mostrati all'utente" - -#: lib/RT/CustomField_Overlay.pm:978 -msgid "This custom field does not apply to that object" -msgstr "L'oggetto non ammette questo campo personalizzato" - -#: html/Admin/Tools/Configuration.html:50 -msgid "This feature is only available to system administrators" -msgstr "Questa funzionalità è riservata agli amministratori di sistema" - -#: html/Ticket/Elements/PreviewScrips:96 -msgid "This message will be sent to..." -msgstr "Il messaggio sarà inviato a..." - -#: NOT FOUND IN SOURCE -msgid "This ticket %1 %2 (%3)\\n" -msgstr "Il ticket %1 %2 (%3)\\n" - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Questo strumento permette di eseguire qualsiasi modulo perl da dentro RT." - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "La transazione sembra non avere alcun contenuto" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "I %1 ticket a maggior priorità richiesti da questo utente" - -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "I 25 ticket a maggior priorità richiesti da questo utente" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Gio." - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "Ticket n° %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 Jumbo update: %2" -msgstr "Ticket n° %1 aggiornamento Jumbo: %2" - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Ticket n°%1 aggiornamento Jumbo: %2" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Ticket n°%1: %2" - -#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741 -#. ($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 "Creato ticket %1 nella coda '%2'" - -#: NOT FOUND IN SOURCE -msgid "Ticket %1 loaded\\n" -msgstr "Caricato ticket %1\\n" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Ticket %1: %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Campi personalizzati del ticket" - -#: html/Ticket/History.html:46 html/Ticket/History.html:49 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket History # %1 %2" -msgstr "Cronologia del ticket n° %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket Id" -msgstr "Identificativo ticket" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Ticket risolto" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "Transazioni sul ticket" - -#: NOT FOUND IN SOURCE -msgid "Ticket attachment" -msgstr "Allegato al ticket" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Contenuto del ticket" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Tipo del contenuto del ticket" - -#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763 -msgid "Ticket could not be created due to an internal error" -msgstr "A causa di un errore interno non è stato possibile creare il ticket" - -#: NOT FOUND IN SOURCE -msgid "Ticket created" -msgstr "Ticket creato" - -#: NOT FOUND IN SOURCE -msgid "Ticket creation failed" -msgstr "Creazione del ticket fallita" - -#: NOT FOUND IN SOURCE -msgid "Ticket deleted" -msgstr "Ticket eliminato" - -#: NOT FOUND IN SOURCE -msgid "Ticket id not found" -msgstr "Identificativo del ticket non trovato" - -#: NOT FOUND IN SOURCE -msgid "Ticket killed" -msgstr "Ticket eliminato" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Metadati del ticket" - -#: NOT FOUND IN SOURCE -msgid "Ticket not found" -msgstr "Ticket non trovato" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Stato del ticket cambiato" - -#: NOT FOUND IN SOURCE -msgid "Ticket watchers" -msgstr "Osservatori del ticket" - -#: lib/RT/Search/FromSQL.pm:82 -#. (ref $self) -msgid "TicketSQL search module" -msgstr "Modulo di ricerca TicketSQL" - -#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206 -msgid "Tickets" -msgstr "Ticket" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 by %2" -msgstr "Ticket %1 da %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 "Ticket da %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 "Ticket che dipendono da questa approvazione:" - -#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72 -msgid "Time Estimated" -msgstr "Tempo stimato" - -#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85 -msgid "Time Left" -msgstr "Tempo rimasto" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Tempo lavorato" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Tempo rimanente" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Tempo impiegato per l'elaborazione" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Tempo impiegato" - -#: NOT FOUND IN SOURCE -msgid "TimeEstimated" -msgstr "TempoStimato" - -#: NOT FOUND IN SOURCE -msgid "TimeLeft" -msgstr "TempoRimanente" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "TempoImpiegato" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "Titolo" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:" -msgstr "Per generare una diff dopo il commit:" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:\\n" -msgstr "Per generare una diff dopo il commit:\\n" - -#: html/Elements/Footer:62 -#. ('sales@bestpractical.com') -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "Per richieste di supporto, formazione, personalizzazioni o acquisto di licenze, si prega di contattare %1." - -#: lib/RT/Ticket_Overlay.pm:1170 -msgid "Told" -msgstr "UltimaComunicazioneARichiedenti" - -#: NOT FOUND IN SOURCE -msgid "ToldRelative" -msgstr "TempoDaUltimoContattoRichiedente" - -#: 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 "Strumenti" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transazioni" - -#: lib/RT/Transaction_Overlay.pm:805 -#. ($self->Data) -msgid "Transaction %1 purged" -msgstr "Transazione %1 ripulita" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Transazione creata" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Campi personalizzati della transazione" - -#: NOT FOUND IN SOURCE -msgid "Transaction->Create couldn't, as you didn't specify a ticket id" -msgstr "Transaction->Create fallita, devi specificare l'identificativo dell'oggetto" - -#: lib/RT/Transaction_Overlay.pm:128 -msgid "Transaction->Create couldn't, as you didn't specify an object type and id" -msgstr "Transaction->Create fallita, devi specificare il tipo e l'identificativo dell'oggetto" - -#: lib/RT/Transaction_Overlay.pm:870 -msgid "Transactions are immutable" -msgstr "Le transazioni sono immutabili" - -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "Provo a eliminare un diritto: %1" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Mar." - -#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Tipo" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "NonImplementato" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Username unix" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "UsernameUnix" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "ContentEncoding sconosciuto %1" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "Campo sconosciuto: $key" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Illimitato" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Ricerca senza nome" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "NonPrevilegiato" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Campi personalizzati non selezionati" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "Oggetti non selezionati" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "NonPreso" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Aggiornamento" - -#: NOT FOUND IN SOURCE -msgid "Update All" -msgstr "Aggiorna tutti" - -#: NOT FOUND IN SOURCE -msgid "Update ID" -msgstr "Identificativo aggiornamento" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Aggiorna ticket" - -#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Tipo aggiornamento" - -#: NOT FOUND IN SOURCE -msgid "Update all these tickets at once" -msgstr "Aggiorna tutti questi ticket contemporaneamente" - -#: NOT FOUND IN SOURCE -msgid "Update email" -msgstr "Aggiorna email" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Aggiorna ticket multipli" - -#: NOT FOUND IN SOURCE -msgid "Update name" -msgstr "Aggiorna nome" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Aggiornamento non registrato." - -#: NOT FOUND IN SOURCE -msgid "Update selected tickets" -msgstr "Aggiorna i ticket selezionati" - -#: NOT FOUND IN SOURCE -msgid "Update signature" -msgstr "Aggiorna la firma" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Aggiorna il ticket" - -#: NOT FOUND IN SOURCE -msgid "Update ticket # %1" -msgstr "Aggiorna il ticket n° %1" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Aggiorna il ticket n°%1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Aggiorna il ticket n°%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr "Il tipo aggiornamento non era ne' corrispondenza ne' commento." - -#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Aggiornato" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Upload" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Upload file multipli" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Upload immagini multiple" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Upload file singolo" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Upload immagine singola" - -#: lib/RT/CustomField_Overlay.pm:86 -msgid "Upload up to %1 files" -msgstr "Upload fino a %1 file" - -#: lib/RT/CustomField_Overlay.pm:81 -msgid "Upload up to %1 images" -msgstr "Upload fino a %1 immagini" - -#: html/Tools/Offline.html:93 -msgid "Upload your changes" -msgstr "Upload delle modifiche" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "Usa altri strumenti di amministrazione di RT" - -#: NOT FOUND IN SOURCE -msgid "User %1 %2: %3\\n" -msgstr "Utente %1 %2: %3\\n" - -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" -msgstr "Utente %1 Password: %2\\n" - -#: lib/RT/Ticket_Overlay.pm:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "Impossibile trovare l'utente '%1'" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found" -msgstr "Utente '%1' non trovato" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" -msgstr "Utente '%1' non trovato\\n" - -#: etc/initialdata:132 etc/initialdata:206 -msgid "User Defined" -msgstr "Definito dall'utente" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "Condizioni e azioni definite dall'utente" - -#: NOT FOUND IN SOURCE -msgid "User ID" -msgstr "Username" - -#: NOT FOUND IN SOURCE -msgid "User Id" -msgstr "Username" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Diritti dell'utente" - -#: NOT FOUND IN SOURCE -msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" -msgstr "L'utente ha richiesto un aggiornamento di tipo sconosciuto sul campo personalizzato %1 per %2 l'oggetto n°%3" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "Impossibile creare l'utente: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Utente creato" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Gruppi definiti dall'utente" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Utente caricato" - -#: NOT FOUND IN SOURCE -msgid "User notified" -msgstr "Utente notificato" - -#: NOT FOUND IN SOURCE -msgid "User view" -msgstr "User view" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Gruppi definiti dall'utente" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Username" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208 -msgid "Users" -msgstr "Utenti" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Utenti che soddisfano il criterio di ricerca" - -#: bin/rt-crontool:134 -#. ($transaction->id) -msgid "Using transaction #%1..." -msgstr "" - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Query valida" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "ValueOfQueue" -msgstr "ValoreDellaCoda" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Valori" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "Osserva" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "OsservaComeAdminCc" - -#: NOT FOUND IN SOURCE -msgid "Watcher" -msgstr "Osservatore" - -#: NOT FOUND IN SOURCE -msgid "Watcher loaded" -msgstr "Osservatore caricato" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Osservatori" - -#: NOT FOUND IN SOURCE -msgid "WebEncoding" -msgstr "WebEncoding" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Mer." - -#: 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 "Quando un ticket ha ricevuto tutte le approvazioni richieste, aggiungi una corrispondenza al ticket originale" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "Quando un ticket riceve una qualsiasi delle approvazioni richieste, aggiungi una corrispondenza al ticket originale" - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "Quando viene creato un ticket" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "Quando una richiesta di approvazione viene creata, notifica chi ha in carico il ticket e gli AdminCc che devono approvarlo" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "Quando succede qualsiasi cosa" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "Quando un ticket viene risolto" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "Quando cambia colui che ha in carico il ticket" - -#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "Quando cambia la priorità di un ticket" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "Quando il ticket si sposta in un'altra coda" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "Quando cambia lo stato di un ticket" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "Quando si verifica una condizione definita dall'utente" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "Quando arrivano commenti" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "Quando arrivano corrispondenze" - -#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88 -msgid "Work" -msgstr "Lavoro" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "Lavoro offline" - -#: NOT FOUND IN SOURCE -msgid "WorkPhone" -msgstr "TelefonoLavoro" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Impiegato" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Hai già in carico questo ticket" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Non sei un utente autorizzato" - -#: 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 "Puoi solo riassegnare ticket che hai in carico, o che non sono ancora assegnati" - -#: 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 "Non hai i permessi per visualizzare questo ticket.\\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 "Hai trovato %1 ticket nella coda %2" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Ti sei scollegato da RT." - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "Non hai l'autorizzazione per creare ticket in questa coda." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "Non puoi creare ticket in questa coda." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Collegati di nuovo" - -#: NOT FOUND IN SOURCE -msgid "Your %1 requests" -msgstr "Le tue %1 richieste" - -#: NOT FOUND IN SOURCE -msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" -msgstr "L'amministratore RT non ha configurato correttamente l'alias di email che invoca RT" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "La tua richiesta è stata approvata da %1. Potrebbero essere necessarie altre approvazioni." - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "La tua richiesta è stata approvata." - -#: NOT FOUND IN SOURCE -msgid "Your request was rejected" -msgstr "Your request was rejected" - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "La tua richiesta è stata respinta." - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "Il tuo username o la tua password non sono corretti" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "CAP" - -#: NOT FOUND IN SOURCE -msgid "[no subject]" -msgstr "[senza oggetto]" - -#: lib/RT/System.pm:87 -msgid "allow creation of saved searches" -msgstr "permetti la creazione di ricerche salvate" - -#: lib/RT/System.pm:86 -msgid "allow loading of saved searches" -msgstr "permetti il caricamento di ricerche salvate" - -#: html/User/Elements/DelegateRights:80 -#. ($right->PrincipalObj->Object->SelfDescription) -msgid "as granted to %1" -msgstr "come concesso a %1" - -#: NOT FOUND IN SOURCE -msgid "belongs to" -msgstr "appartiene a" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "chiuso" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 -msgid "contains" -msgstr "contiene" - -#: NOT FOUND IN SOURCE -msgid "content" -msgstr "contenuto" - -#: NOT FOUND IN SOURCE -msgid "content-type" -msgstr "content-type" - -#: NOT FOUND IN SOURCE -msgid "correspondence (probably) not sent" -msgstr "corrispondenza (probabilmente) non inviata" - -#: NOT FOUND IN SOURCE -msgid "correspondence sent" -msgstr "corrispondenza inviata" - -#: NOT FOUND IN SOURCE -msgid "current: $current, want $want, Error near ->$val<- expecting a " -msgstr "attuale: $current, richiesto $want, Errore vicino a ->$val<- mi aspettavo " - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "giorni" - -#: NOT FOUND IN SOURCE -msgid "dead" -msgstr "morto" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "cancella" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "cancellato" - -#: NOT FOUND IN SOURCE -msgid "does not belong to" -msgstr "non appartiene a" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "non corrisponde a" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "non contiene" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "uguale a" - -#: html/Search/Build.html:547 -msgid "error: can't move down" -msgstr "errore: impossibile spostare in basso" - -#: html/Search/Build.html:569 -msgid "error: can't move left" -msgstr "errore: impossibile spostare a sinistra" - -#: html/Search/Build.html:528 -msgid "error: can't move up" -msgstr "errore: impossibile spostare in alto" - -#: html/Search/Build.html:612 -msgid "error: nothing to delete" -msgstr "errore: niente da cancellare" - -#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603 -msgid "error: nothing to move" -msgstr "errore: niente da spostare" - -#: html/Search/Build.html:630 -msgid "error: nothing to toggle" -msgstr "errore: niente da invertire" - -#: NOT FOUND IN SOURCE -msgid "false" -msgstr "falso" - -#: NOT FOUND IN SOURCE -msgid "filename" -msgstr "nome file" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "maggiore di" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr "gruppo '%1'" - -#: html/Search/Results.html:88 -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -msgid "grouped by %1" -msgstr "" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "ore" - -#: html/Search/Elements/PickBasics:48 -msgid "id" -msgstr "Codice" - -#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53 -msgid "is" -msgstr "uguale a" - -#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54 -msgid "isn't" -msgstr "diverso da" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "minore di" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "corrisponde a" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "min" - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "minuti" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "mesi" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "nuovo" - -#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "nessun nome" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "nessun valore" - -#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "nessuno" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "diverso da" - -#: NOT FOUND IN SOURCE -msgid "notlike" -msgstr "diverso da" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "aperto" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "Gruppo personale '%1' per l'utente '%2'" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "coda %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "respinto" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "risolto" - -#: lib/RT/Date.pm:334 -msgid "sec" -msgstr "sec" - -#: lib/RT/System.pm:85 -msgid "show Configuration tab" -msgstr "Mostra configurazione" - -#: html/Search/Results.html:80 -msgid "spreadsheet" -msgstr "foglio di calcolo" - -#: lib/RT/Queue_Overlay.pm:84 -msgid "stalled" -msgstr "in stallo" - -#: 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 "sistema %1" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "gruppo di sistema '%1'" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "il componente chiamante non ha specificato il perché" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "ticket n°%1 %2" - -#: NOT FOUND IN SOURCE -msgid "true" -msgstr "vero" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "gruppo %1 senza descrizione" - -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "gruppo %1 senza descrizione" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "utente %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "settimane" - -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "con il modello %1" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "anni" - diff --git a/rt/lib/RT/I18N/ja.po b/rt/lib/RT/I18N/ja.po deleted file mode 100644 index f266907a5..000000000 --- a/rt/lib/RT/I18N/ja.po +++ /dev/null @@ -1,6749 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: RT 3.6.x\n" -"POT-Creation-Date: 2002-05-02 11:36+0800\n" -"PO-Revision-Date: 2007-11-30 01:18+0900\n" -"Last-Translator: Shinji R. Yamane \n" -"Language-Team: rt-devel \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Country: JAPAN\n" - -#. ($self->{CurrentSearch}{Object}->Description) -#: html/Widgets/SavedSearch:70 -msgid " %1 deleted." -msgstr "%1 を削除しました" - -#. ($self->{CurrentSearch}{Description}, $args->{Description}) -#: html/Widgets/SavedSearch:47 -msgid " %1 renamed to %2." -msgstr "%1 を %2 に変更しました" - -#. ($args->{Description}) -#: html/Widgets/SavedSearch:60 -msgid " %1 saved." -msgstr "%1 を保存しました" - -#: NOT FOUND IN SOURCE -msgid "#" -msgstr "#" - -#. ($Ticket->id, $Ticket->Subject) -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#. ($ticket->Id, $ticket->Subject) -#. ($TicketObj->Id, $TicketObj->Subject) -#: html/Approvals/Elements/Approve:48 -#: html/Approvals/Elements/ShowDependency:71 -#: html/SelfService/Display.html:46 -#: html/Ticket/Display.html:47 -#: html/Ticket/Display.html:51 -msgid "#%1: %2" -msgstr "" - -#: html/Elements/ShowSearch:105 -msgid "$1" -msgstr "" - -#. ($label) -#: lib/RT/Record.pm:940 -msgid "$prefix %1" -msgstr "" - -#. ($self->ObjectType, $self->Object->Id) -#: lib/RT/URI/fsck_com_rt.pm:256 -msgid "%1 #%2" -msgstr "" - -#. ($s, $time_unit) -#: lib/RT/Date.pm:365 -msgid "%1 %2" -msgstr "" - -#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) -#: lib/RT/Date.pm:401 -msgid "%1 %2 %3 %4:%5:%6 %7" -msgstr "%1 %2 %3 %4:%5:%6 %7" - -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -#: lib/RT/Record.pm:1685 -#: lib/RT/Transaction_Overlay.pm:647 -#: lib/RT/Transaction_Overlay.pm:690 -msgid "%1 %2 added" -msgstr "" - -#. ($s, $time_unit) -#: lib/RT/Date.pm:362 -msgid "%1 %2 ago" -msgstr "%1 %2 前" - -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -#: lib/RT/Record.pm:1692 -#: lib/RT/Transaction_Overlay.pm:654 -msgid "%1 %2 changed to %3" -msgstr "%3に変更された%1 %2 " - -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -#: lib/RT/Record.pm:1689 -#: lib/RT/Transaction_Overlay.pm:650 -#: lib/RT/Transaction_Overlay.pm:696 -msgid "%1 %2 deleted" -msgstr "" - -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -#: html/Admin/Elements/EditScrips:65 -#: html/Admin/Elements/ListGlobalScrips:63 -#: html/Ticket/Elements/PreviewScrips:103 -msgid "%1 %2 with template %3" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 このチケット\\n" - -#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) -#: html/Ticket/Elements/ShowAttachments:72 -msgid "%1 (%2) by %3" -msgstr "" - -#. (loc($DefaultStatus)) -#. (loc($Ticket->Status())) -#. (loc($TicketObj->Status)) -#. ($TicketObj->OwnerObj->Name()) -#: html/SelfService/Update.html:60 -#: html/Ticket/Elements/EditBasics:108 -#: html/Ticket/Update.html:61 -#: html/Ticket/Update.html:63 -#: html/Tools/MyDay.html:66 -msgid "%1 (Unchanged)" -msgstr "%1 (変更なし)" - -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -#: bin/rt-crontool:237 -#: bin/rt-crontool:244 -#: bin/rt-crontool:250 -msgid "%1 - An argument to pass to %2" -msgstr "" - -#. ("--verbose") -#: bin/rt-crontool:262 -msgid "%1 - Output status updates to STDOUT" -msgstr "" - -#. ("--template-id") -#: bin/rt-crontool:253 -msgid "%1 - Specify id of the template you want to use" -msgstr "" - -#. ("--transaction") -#: bin/rt-crontool:256 -msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction" -msgstr "" - -#. ("--action") -#: bin/rt-crontool:247 -msgid "%1 - Specify the action module you want to use" -msgstr "" - -#. ("--condition") -#: bin/rt-crontool:241 -msgid "%1 - Specify the condition module you want to use" -msgstr "" - -#. ("--search") -#: bin/rt-crontool:234 -msgid "%1 - Specify the search module you want to use" -msgstr "" - -#. ("--transaction-type") -#: bin/rt-crontool:259 -msgid "%1 - Specify the type of a transaction you want to use" -msgstr "" - -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -#: html/Elements/Footer:56 -msgid "%1 RT %2 Copyright 1996-%3 %4." -msgstr "" - -#. ($self->Id) -#: lib/RT/ScripAction_Overlay.pm:150 -msgid "%1 ScripAction loaded" -msgstr "%1スクリプトアクションロードしました" - -#. ($args{'Value'}, $cf->Name) -#: lib/RT/Record.pm:1722 -msgid "%1 added as a value for %2" -msgstr "%2の値に%1が追加されました" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on" -msgstr "%1aliasesを動かすためにチケットIDが必要です" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on " -msgstr "%1aliasesを動かすためにチケットIDが必要です " - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "%1aliasesを動かすためにチケットIDが必要です(%2から) %3" - -#. ($args{'Base'}) -#. ($args{'Target'}) -#: lib/RT/Link_Overlay.pm:144 -#: lib/RT/Link_Overlay.pm:151 -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "" - -#. ($self->BriefDescription , $self->CreatorObj->Name) -#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) -#: html/Ticket/Elements/ShowDates:73 -#: lib/RT/Transaction_Overlay.pm:531 -msgid "%1 by %2" -msgstr "%1 (%2)" - -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -#: lib/RT/Transaction_Overlay.pm:788 -#: lib/RT/Transaction_Overlay.pm:797 -#: lib/RT/Transaction_Overlay.pm:800 -msgid "%1 changed from %2 to %3" -msgstr "%1は%2から%3に変更されました" - -#. ($Description) -#: html/Search/Build.html:213 -msgid "%1 copy" -msgstr "" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1はトランザクションを開始することができませんでした(%2)\\n" - -#. ($self) -#: lib/RT/Ticket_Overlay.pm:2787 -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1を解決状態に設定できませんでした。RTのデータベースに一貫性がない可能性があります。" - -#. ($obj_type) -#: lib/RT/Transaction_Overlay.pm:571 -msgid "%1 created" -msgstr "" - -#. ($obj_type) -#: lib/RT/Transaction_Overlay.pm:576 -msgid "%1 deleted" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 grouped by %2" -msgstr "優先度の高いチケット%1件" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "優先度の高いチケット%1件" - -#. ($0) -#: bin/rt-crontool:229 -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "" - -#. ($principal->Object->Name, $args{'Type'}) -#: lib/RT/Queue_Overlay.pm:863 -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は有効なキューIDではありません。" - -#. ($minutes) -#: html/Ticket/Elements/ShowTime:47 -#: html/Ticket/Elements/ShowTime:49 -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 "" - -#. (loc($ObjectType =~ /^RT::(.*)$/)) -#: html/User/Elements/DelegateRights:97 -msgid "%1 rights" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "%1 成功しました\\n" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "%1 タイプは $MessageIdID では不明です" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "%1 タイプは%2では不明です" - -#. (ref $self) -#: lib/RT/Action/ResolveMembers.pm:63 -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1はグループチケットのすべてのメンバーを解決状態にします。" - -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "%1がもしリンクされたリクエストに依存する(もしくはメンバーである)場合、[ローカル]ベースがとぎれます。" - -#: lib/RT/CustomField_Overlay.pm:894 -msgid "%1's %2 objects" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:895 -msgid "%1's %2's %3 objects" -msgstr "" - -#. ($object->Name) -#. ($Object->Name) -#: html/Search/Elements/SearchPrivacy:52 -#: html/Search/Elements/SelectSearchObject:55 -#: html/Search/Elements/SelectSearchesForObjects:57 -msgid "%1's saved searches" -msgstr "" - -#. ($self) -#: lib/RT/Transaction_Overlay.pm:481 -msgid "%1: no attachment specified" -msgstr "%1:アタッチメントが指定されていません" - -#. ($size) -#: html/Ticket/Elements/ShowTransactionAttachments:78 -msgid "%1b" -msgstr "" - -#. (int( $size / 102.4 ) / 10) -#: html/Ticket/Elements/ShowTransactionAttachments:75 -msgid "%1k" -msgstr "" - -#. (sprintf("%.1f",$minutes / 60)) -#: html/Ticket/Elements/ShowTime:49 -msgid "%quant(%1,hour)" -msgstr "" - -#. ($args{'Status'}) -#: lib/RT/Ticket_Overlay.pm:1142 -msgid "'%1' is an invalid value for status" -msgstr "%1'はステータスに無効な値です" - -#: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "%1' アクションを認識できませんでした。" - -#: 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 "(ボックスのチェックで削除)" - -#: 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 "(チケットIDまたはURLを空白文字で区切って入力してください)" - -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -#: html/Admin/Queues/Modify.html:75 -#: html/Admin/Queues/Modify.html:81 -msgid "(If left blank, will default to %1)" -msgstr "(空白の場合、%1を指定します)" - -#: 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 "" - -#: 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 recieve future updates.)" -msgstr "(コンマで区切ったEメールアドレスにこの更新情報のBccを送ります。このアドレスは将来の更新情報の送り先には追加されません。)" - -#: 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 "(コンマで区切ったEメールアドレスにこの更新情報のBccを送ります。将来の更新情報の送り先には追加されません。)" - -#: 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 "(コンマで区切った管理メールアドレスにこの更新情報のCcを送ります。そのアドレスは将来の更新情報の送り先に追加されます。)" - -#: 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 "(コンマで区切ったEメールアドレスにこの更新情報のCcを送ります。このアドレスは将来の更新情報の送り先には追加されません。)" - -#: 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 "(コンマで区切ったEメールアドレスにこの更新情報のCcを送ります。将来の更新情報の送り先には追加されません。)" - -#: 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 "(コンマで区切ったEメールアドレスにこの更新情報のCcを送ります。そのアドレスは将来の更新情報の送り先に追加されます。)" - -#: 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 "(空)" - -#: 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 "(他の作業待ち)" - -#: 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 "" - -#: 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 "私が所有している最優先チケット25件" - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "私がリクエストした最優先チケット25件" - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "" - -#: html/Elements/SelectTicketTypes:48 -msgid "<% $_ %>" -msgstr "" - -#: html/Search/Elements/SelectLinks:48 -msgid "<%$_%>" -msgstr "" - -#: html/Search/Elements/DisplayOptions:73 -msgid "<%$field%>" -msgstr "" - -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -#: html/Elements/CreateTicket:47 -msgid " %1" -msgstr " %1" - -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -#: docs/design_docs/string-extraction-guide.txt:54 -#: lib/RT/StyleGuide.pod:787 -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 "" - -#: 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は作成、削除のみです。" - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "意図的でないチケットの修正を防ぐために強制終了します。\\n" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "個人情報" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "アクセスコントロール" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "アクション" - -#. ($args{'ScripAction'}) -#: lib/RT/Scrip_Overlay.pm:172 -msgid "Action %1 not found" -msgstr "アクション%1は見つかりません" - -#: 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 "" - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "追加する" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "管理Ccを追加する" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "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 "さらにファイルを追加" - -#: 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 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 "すべてのキューに適用するスクリプトを追加する" - -#: 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 "" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:763 -msgid "Added principal as a %1 for this queue" -msgstr "このキューに%1の責任者を追加しました" - -#. ($self->loc($args{'Type'})) -#: lib/RT/Ticket_Overlay.pm:1455 -msgid "Added principal as a %1 for this ticket" -msgstr "このチケットに%1の責任者を追加しました" - -#: html/Admin/Users/Modify.html:146 -#: html/User/Prefs.html:133 -msgid "Address1" -msgstr "住所1" - -#: html/Admin/Users/Modify.html:151 -#: html/User/Prefs.html:137 -msgid "Address2" -msgstr "住所2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "管理Cc" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -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 "管理/キュー/基本" - -#: etc/initialdata:56 -#: html/Ticket/Elements/ShowPeople:60 -#: lib/RT/ACE_Overlay.pm:113 -msgid "AdminCc" -msgstr "管理Cc" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "管理グループ" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -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 "管理ユーザー" - -#: html/Admin/Queues/People.html:69 -#: html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "管理者Cc" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "詳細" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "絞込み検索" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "が以下より後である" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "すべてのキュー" - -#: 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 "承認状況" - -#. ($Ticket->Id, $Ticket->Subject) -#. ($ticket->id, $msg) -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#: html/Approvals/Display.html:65 -#: html/Approvals/Elements/ShowDependency:63 -#: html/Approvals/index.html:86 -msgid "Approval #%1: %2" -msgstr "" - -#. ($ticket->Id) -#: html/Approvals/index.html:75 -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "" - -#. ($ticket->Id) -#: html/Approvals/index.html:73 -msgid "Approval #%1: Notes recorded" -msgstr "" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "承認" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "4月" - -#: 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 "" - -#. ($Attachment) -#: html/Ticket/ShowEmailRecord.html:52 -#: html/Ticket/ShowEmailRecord.html:56 -#: html/Ticket/ShowEmailRecord.html:59 -msgid "Attachment '%1' could not be loaded" -msgstr "添付ファイル%1は見つかりません" - -#: lib/RT/Transaction_Overlay.pm:489 -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 "" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "8月" - -#: NOT FOUND IN SOURCE -msgid "AuthSystem" -msgstr "認証システム" - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "リクエストした人に自動返信" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "不正なPGP署名: %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "不正な添付IDです。添付ファイルが見つかりません'%1'\\n" - -#: 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 "基本項目" - -#: 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 "本当に変更を保存してもよろしいですか" - -#: html/Elements/SelectDateRelation:55 -#: lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "が以下より前である" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -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 "この検索にブックマークのできるURLです" - -#: 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 "チケットを一括して更新" - -#: 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 "名前なしにカスタムフィールドバリューの追加はできません" - -#. ($Class) -#: html/Admin/CustomFields/Objects.html:86 -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 "すでに結合したチケットには結合できません。このエラーは決して出さないでください" - -#. (loc($self->{SearchType})) -#: html/Widgets/SavedSearch:63 -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 "ベースとターゲット両方を指定する事はできません" - -#. ($msg) -#: html/autohandler:204 -msgid "Cannot create user: %1" -msgstr "ユーザー: %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 "パスワードを変更する" - -#: 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 "下位チケット" - -#: 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 "市町村" - -#: 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 requests" -msgstr "終了したリクエストです" - -#: html/SelfService/Closed.html:46 -#: html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -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 "" - -#: 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 "コメントが追加されました" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -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 "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 "" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -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 "チケットの新しいカスタムフィールドバリューを追加できませんでした" - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "" - -#. (, $value_msg) -#: lib/RT/Record.pm:1660 -msgid "Could not add new custom field value. %1 " -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 "担当者変更ができませんでした" - -#. ($msg) -#: html/Admin/CustomFields/Modify.html:161 -msgid "Could not create CustomField" -msgstr "カスタムフィールドの作成ができませんでした" - -#. ($msg) -#: html/Admin/Elements/EditCustomField:113 -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 "グループの作成ができませんでした" - -#. ($msg) -#: html/Admin/Global/Template.html:96 -#: html/Admin/Queues/Template.html:93 -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 find a ticket with id %1" -msgstr "チケットとそのID%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 "" - -#: html/Admin/Groups/Members.html:112 -#: html/User/Groups/Members.html:111 -#: html/User/Groups/Modify.html:103 -msgid "Could not load group" -msgstr "グループをロードできませんでした" - -#. ($privacy) -#: lib/RT/SavedSearch.pm:119 -msgid "Could not load object for %1" -msgstr "" - -#: lib/RT/SavedSearch.pm:197 -msgid "Could not load search attribute" -msgstr "" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:761 -msgid "Could not make that principal a %1 for this queue" -msgstr "このキューでその責任者を%1にすることができませんでした" - -#. ($self->loc($args{'Type'})) -#: lib/RT/Ticket_Overlay.pm:1444 -msgid "Could not make that principal a %1 for this ticket" -msgstr "このチケットでその責任者を%1にすることができませんでした" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:860 -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 "グループにメンバーの追加ができませんでした" - -#. ($Msg) -#: lib/RT/Record.pm:1719 -#: lib/RT/Record.pm:1771 -msgid "Couldn't create a transaction: %1" -msgstr "トランザクション: %1の作成ができませんでした" - -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "" -"GPGの返事\\n" -"から何を行ったらよいのかわかりませんでした" - -#: 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 user\\n" -msgstr "" -"ユーザー\\n" -"が見つかりませんでした" - -#. ($self->Id) -#: lib/RT/CurrentUser.pm:145 -msgid "Couldn't load %1 from the users database.\\n" -msgstr "" -"ユーザーデータベース\\n" -"から%1をロードできませんでした" - -#. ($id) -#: html/Admin/CustomFields/UserRights.html:149 -msgid "Couldn't load Class %1" -msgstr "" - -#. ($id) -#: html/Admin/CustomFields/GroupRights.html:107 -msgid "Couldn't load CustomField %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" -msgstr "RT設定ファイル'%1' %2をロードできませんでした" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "スクリプトをロードできませんでした" - -#. ($self->Id) -#: lib/RT/Ticket_Overlay.pm:2016 -msgid "Couldn't load copy of ticket #%1." -msgstr "" - -#. ($id) -#: html/Admin/Groups/GroupRights.html:109 -#: html/Admin/Groups/UserRights.html:96 -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 "リンクをロードできませんでした" - -#. ($id) -#: html/Admin/Elements/ObjectCustomFields:83 -#: html/Admin/Queues/CustomFields.html:59 -#: html/Admin/Users/CustomFields.html:59 -msgid "Couldn't load object %1" -msgstr "" - -#. ($id) -#: html/Admin/Queues/People.html:142 -msgid "Couldn't load queue" -msgstr "キューをロードできませんでした" - -#. ($id) -#: html/Admin/Queues/GroupRights.html:122 -#: html/Admin/Queues/UserRights.html:93 -msgid "Couldn't load queue %1" -msgstr "キュー%1をロードできませんでした" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "スクリプトをロードできませんでした" - -#. ($id) -#: html/Admin/Elements/EditScrip:126 -#: html/Admin/Elements/EditScrip:167 -msgid "Couldn't load scrip #%1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load template" -msgstr "テンプレートをロードできませんでした" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load that user (%1)" -msgstr "そのユーザー(%1)をロードできませんでした" - -#. ($id) -#: html/SelfService/Display.html:158 -#: lib/RT/Action/CreateTickets.pm:680 -msgid "Couldn't load ticket '%1'" -msgstr "チケット'%1'をロードできませんでした" - -#. ($args{'URI'}) -#: lib/RT/Ticket_Overlay.pm:2643 -msgid "Couldn't resolve '%1' into a URI." -msgstr "" - -#: html/Admin/Users/Modify.html:173 -#: html/User/Prefs.html:153 -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 "作成" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "" - -#: html/Admin/CustomFields/Modify.html:150 -#: html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "カスタムフィールドの作成" - -#. ($QueueObj->Name()) -#: html/Admin/Queues/CustomField.html:69 -msgid "Create a CustomField for queue %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "新しいカスタムフィールドの作成" - -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "新しいグローバルスクリプトの作成" - -#: 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 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 "新規ユーザーの作成" - -#: 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 "リクエストの作成" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Scrip.html:89 -msgid "Create a scrip for queue %1" -msgstr "" - -#: html/Admin/Global/Template.html:90 -#: html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "テンプレートの作成" - -#: html/SelfService/Create.html:46 -#: html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -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 "" - -#: 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 "作成日時" - -#. ($CustomFieldObj->Name()) -#: html/Admin/CustomFields/Modify.html:163 -#: html/Admin/Elements/EditCustomField:117 -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 "" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "作成者" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "現在のリンク" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -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 "現在の検索式" - -#: html/Admin/Queues/People.html:62 -#: html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "現在のウォッチャー" - -#: html/Admin/Elements/SystemTabs:61 -#: html/Admin/Elements/Tabs:62 -#: html/Admin/Global/index.html:71 -#: html/Admin/Users/Modify.html:205 -#: html/Admin/index.html:77 -#: html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "カスタムフィールド" - -#. ($lookup) -#: html/Admin/CustomFields/index.html:60 -msgid "Custom Fields for %1" -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" - -#. ($CF->Name) -#: lib/RT/Tickets_Overlay.pm:2424 -msgid "Custom field %1 has a value." -msgstr "カスタムフィールド%1は値が入力されています" - -#. ($CF->Name) -#: lib/RT/Tickets_Overlay.pm:2420 -msgid "Custom field %1 has no value." -msgstr "カスタムフィールド%1は値がありません" - -#. ($args{'Field'}) -#: lib/RT/Record.pm:1592 -#: lib/RT/Record.pm:1754 -msgid "Custom field %1 not found" -msgstr "カスタムフィールド%1が見つかりません" - -#. ($cf) -#. ($obj->Name) -#: lib/RT/Report/Tickets.pm:118 -#: lib/RT/Report/Tickets.pm:121 -msgid "Custom field '%1'" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "カスタムフィールドが見つかりません" - -#. ($args{'Content'}, $self->Name) -#: lib/RT/CustomField_Overlay.pm:1157 -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "カスタムフィールド%2のためのカスタムフィールドバリュー%1が見つかりません" - -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "カスタムフィールドが%1から%2に変更されました" - -#: 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 "カスタマイズ: " - -#: 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 "日付" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "12月" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "" - -#: html/Admin/Elements/EditScrips:75 -#: html/Search/Elements/EditFormat:103 -#: html/Search/Elements/EditQuery:57 -#: html/Search/Elements/EditSearches:63 -#: html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "削除" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "" - -#. ($msg) -#: lib/RT/SavedSearch.pm:220 -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 "このオブジェクトを削除すると指示の完全性が妨害されます" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "" - -#: html/Elements/EditLinks:140 -#: html/Elements/EditLinks:66 -#: html/Elements/ShowLinks:58 -#: html/Ticket/Create.html:221 -#: html/Ticket/Elements/BulkLinks:56 -#: html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "依存されているチケット" - -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "従属チケット: \\n" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:718 -msgid "Dependency by %1 added" -msgstr "" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:758 -msgid "Dependency by %1 deleted" -msgstr "" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:715 -msgid "Dependency on %1 added" -msgstr "" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:755 -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 "依存しているチケット" - -#: 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 "Details" -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 GPL version 2 にもとづいて配布" - -#: lib/RT/System.pm:75 -msgid "Do anything and everything" -msgstr "" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -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 "" - -#: 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 '%1' could not be parsed" -msgstr "期限が切れる日'%1'は解析されません" - -#: NOT FOUND IN SOURCE -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "" -"ERROR: チケット '%1': %2.\\n" -"をロードできませんでした" - -#: html/Elements/Quicksearch:48 -#: html/Elements/ShowSearch:49 -#: html/index.html:107 -msgid "Edit" -msgstr "編集" - -#: html/Search/Bulk.html:149 -msgid "Edit Custom Fields" -msgstr "" - -#. ($Object->Name) -#: html/Admin/Elements/ObjectCustomFields:92 -#: html/Admin/Queues/CustomFields.html:64 -#: html/Admin/Users/CustomFields.html:64 -msgid "Edit Custom Fields for %1" -msgstr "%1のカスタムフィールドを編集する" - -#: html/Admin/Global/CustomFields/Groups.html:54 -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 "リンク関係を編集する" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "クエリの直接編集" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "検索を編集" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Templates.html:63 -msgid "Edit Templates for queue %1" -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 templates for %1" -msgstr "%1のテンプレートを編集する" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Modify.html:140 -msgid "Editing Configuration for queue %1" -msgstr "キュー%1の設定を編集する" - -#: NOT FOUND IN SOURCE -msgid "Editing Configuration for user %1" -msgstr "ユーザー%1の設定を編集する" - -#. ($CustomFieldObj->Name()) -#: html/Admin/CustomFields/Modify.html:167 -#: html/Admin/Elements/EditCustomField:120 -msgid "Editing CustomField %1" -msgstr "カスタムフィールド%1を編集する" - -#. ($Group->Name) -#: html/Admin/Groups/Members.html:53 -msgid "Editing membership for group %1" -msgstr "グループ%1のメンバーを編集する" - -#. ($Group->Name) -#: html/User/Groups/Members.html:150 -msgid "Editing membership for personal group %1" -msgstr "個人グループ%1のメンバーを編集する" - -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "テンプレート%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 "ベースもしくはターゲットを指定しなければなりません" - -#: html/Admin/Users/Modify.html:74 -#: html/Ticket/Elements/AddWatchers:77 -#: html/User/Prefs.html:65 -msgid "Email" -msgstr "Eメール" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "お使いのEメールアドレス" - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "Eメールアドレス" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "Eメールエンコーディング" - -#: 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 "有効になりました(もう一度このボックスをチェックするとこのキューは有効でなくなります)" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "有効なキュー" - -#. (loc_fuzzy($msg)) -#: html/Admin/Elements/EditCustomField:136 -#: html/Admin/Groups/Modify.html:150 -#: html/Admin/Users/Modify.html:350 -#: html/User/Groups/Modify.html:138 -msgid "Enabled status %1" -msgstr "有効なステータス%1" - -#. (loc_fuzzy($msg)) -#: html/Admin/CustomFields/Modify.html:185 -#: html/Admin/Queues/Modify.html:162 -msgid "Enabled status: %1" -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 "" - -#: 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 "" - -#: html/Elements/EditLinks:119 -#: html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "チケットをリンクするチケットまたはURLsを入力してください。入力する項目がいくつかある場合にはスペースで区切ってください。" - -#: 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 "エラー" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "パラメーターのエラーQueue->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Queue->DelWatcher" -msgstr "パラメーターのエラーQueue->DelWatcher" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "パラメーターのエラーTicket->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "パラメーターのエラーTicket->DelWatcher" - -#: lib/RT/Ticket_Overlay.pm:1538 -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 "" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "ExternalAuthId" -msgstr "外部の認証ID" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr "外部のコンタクト情報ID" - -#: 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 "'特権のない'ユーザーの擬似グループの検索が失敗しました" - -#. ($modname, $@) -#: bin/rt-crontool:206 -msgid "Failed to load module %1. (%2)" -msgstr "" - -#. ($privacy) -#: lib/RT/SavedSearch.pm:152 -msgid "Failed to load object for %1" -msgstr "" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "2月" - -#: 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 "終了" - -#: 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 "" - -#: 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 "個人をさがす:" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "最初の" - -#: NOT FOUND IN SOURCE -msgid "First page" -msgstr "最初のページ" - -#: 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 "ばか!" - -#: html/Search/Bulk.html:83 -msgid "Force change" -msgstr "変更を強制します" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "表示フォーマット" - -#. ($ticketcount) -#: html/Search/Results.html:145 -msgid "Found %quant(%1,ticket)" -msgstr "" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "コンタクト情報(書式自由)" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "金曜日" - -#: html/Ticket/Elements/ShowHistory:66 -#: html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -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" - -#. ($New->Name) -#: lib/RT/Transaction_Overlay.pm:684 -msgid "Given to %1" -msgstr "担当者変更: %1" - -#: html/Admin/Elements/Tabs:65 -#: html/Admin/index.html:82 -msgid "Global" -msgstr "グローバル" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -msgstr "グローバルスクリプト" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "" - -#. ($pane) -#: html/Admin/Global/MyRT.html:48 -msgid "Global portlet %1 saved." -msgstr "" - -#. (loc($Template->Name)) -#: html/Admin/Elements/SelectTemplate:59 -msgid "Global template: %1" -msgstr "" - -#: html/Admin/CustomFields/index.html:80 -#: html/Search/Results.html:90 -#: html/Tools/Offline.html:89 -msgid "Go" -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\\n" -"からの正しいPGP署名" - -#: NOT FOUND IN SOURCE -msgid "Goto page" -msgstr "ページへ移動" - -#: html/Elements/GotoTicket:46 -#: html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -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" - -#: 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 "グループ権利" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "グループにはすでにメンバーがいます" - -#. ($create_msg) -#: html/Admin/Groups/Modify.html:109 -msgid "Group could not be created: %1" -msgstr "" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "グループが作成されました" - -#: 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" - -#: 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 "" - -#: lib/RT/Interface/CLI.pm:94 -msgid "Hello!" -msgstr "こんにちは!" - -#. ($name) -#: docs/design_docs/string-extraction-guide.txt:40 -#: lib/RT/StyleGuide.pod:773 -msgid "Hello, %1" -msgstr "こんにちは、%1さん" - -#: html/Admin/Elements/GroupTabs:70 -#: html/Admin/Elements/UserTabs:64 -#: html/Ticket/Elements/ShowHistory:53 -#: html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "更新履歴" - -#. ($GroupObj->Name) -#: html/Admin/Groups/History.html:62 -msgid "History of the group %1" -msgstr "" - -#. ($UserObj->Name) -#: html/Admin/Users/History.html:62 -msgid "History of the user %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "HomePhone" -msgstr "電話(自宅)" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "ホーム" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "時間" - -#. (6) -#: lib/RT/Base.pm:119 -msgid "I have %quant(%1,concrete mixer)." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." -msgstr "私は[quant,_1,concrete mixer]があります。" - -#: html/Search/Build.html:460 -#: lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -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 "個人識別情報" - -#: 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 "" - -#: 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 "" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -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 "" - -#: 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 "入力エラー" - -#. ($self->FriendlyPattern) -#. ($CF->FriendlyPattern) -#: html/Elements/ValidateCustomFields:68 -#: lib/RT/CustomField_Overlay.pm:1021 -#: lib/RT/CustomField_Overlay.pm:1162 -msgid "Input must match %1" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "" - -#. ($id->{error_message}) -#: lib/RT/Record.pm:308 -msgid "Internal Error: %1" -msgstr "" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "無効なグループタイプです" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "無効な担当者です。 'nobody'に設定します." - -#. ($msg) -#: lib/RT/CustomField_Overlay.pm:207 -#: lib/RT/CustomField_Overlay.pm:678 -msgid "Invalid pattern: %1" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:157 -#: lib/RT/Template_Overlay.pm:244 -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 "無効な権利です" - -#. ($key) -#: lib/RT/Record.pm:283 -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 "ステータスには無効な値です" - -#: 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 "" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "1月" - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "7月" - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "総合ビュー" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "6月" - -#: NOT FOUND IN SOURCE -msgid "Keyword" -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 "最終コンタクト" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -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 "このユーザーをRTにアクセス可能にします" - -#: 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 "リンク" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "すでにリンクしています" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "リンクが作成されませんでした" - -#. ($TransString) -#: lib/RT/Record.pm:1326 -msgid "Link created (%1)" -msgstr "リンクが作成されました(%1)" - -#. ($TransString) -#: lib/RT/Record.pm:1387 -msgid "Link deleted (%1)" -msgstr "リンクが削除されました(%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "リンクが見つかりません" - -#. ($Ticket->Id) -#: html/Ticket/ModifyLinks.html:46 -#: html/Ticket/ModifyLinks.html:50 -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 "リンク" - -#: 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モジュール" - -#. ($self->Name) -#: lib/RT/SavedSearch.pm:111 -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が動きません" - -#. ("".$session{'CurrentUser'}->Name."") -#: html/Elements/Header:91 -msgid "Logged in as %1" -msgstr "\"%1\"でログインしています" - -#: docs/design_docs/string-extraction-guide.txt:71 -#: html/Elements/Login:100 -#: html/Elements/Login:68 -#: html/Elements/Login:84 -#: lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "ログイン" - -#: html/Elements/Header:101 -msgid "Logout" -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 "" - -#: 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 "" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "3月" - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "5月" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:731 -msgid "Member %1 added" -msgstr "" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:771 -msgid "Member %1 deleted" -msgstr "" - -#: 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 "メンバー:" - -#: html/Admin/Elements/GroupTabs:63 -#: html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "メンバー" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:728 -msgid "Membership in %1 added" -msgstr "" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:768 -msgid "Membership in %1 deleted" -msgstr "" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "" - -#. ($UserObj->Name) -#: html/Admin/Users/Memberships.html:60 -msgid "Memberships of the user %1" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "結合が成功しました" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "結合が失敗しました。有効なIDが設定できませんでした" - -#: 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 "次のチケットに結合" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:734 -msgid "Merged into %1" -msgstr "" - -#: 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 "分" - -#: 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 "" - -#: 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 "" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "カスタムフィールド%1を修正する" - -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -#: html/Admin/Elements/ObjectCustomFields:96 -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "" - -#. (loc(lc($Types))) -#: html/Admin/Elements/ObjectCustomFields:98 -msgid "Modify Custom Fields which apply to all %1" -msgstr "" - -#: html/Admin/Global/GroupRights.html:106 -#: html/Admin/Groups/GroupRights.html:94 -#: html/Admin/Queues/GroupRights.html:107 -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 "" - -#: html/Admin/Global/UserRights.html:75 -#: html/Admin/Groups/UserRights.html:76 -#: html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "" - -#. ($QueueObj->Name()) -#: html/Admin/Queues/CustomField.html:66 -msgid "Modify a CustomField for queue %1" -msgstr "" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Scrip.html:82 -msgid "Modify a scrip for queue %1" -msgstr "" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "" - -#. ($CF->Name) -#: html/Admin/CustomFields/Objects.html:90 -msgid "Modify associated objects for %1" -msgstr "" - -#. ($TicketObj->Id) -#: html/Ticket/ModifyDates.html:46 -#: html/Ticket/ModifyDates.html:50 -msgid "Modify dates for #%1" -msgstr "#%1の期日を修正する" - -#. ($TicketObj->Id) -#: html/Ticket/ModifyDates.html:57 -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 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 "" - -#. ($CustomFieldObj->Name) -#: html/Admin/CustomFields/GroupRights.html:164 -msgid "Modify group rights for custom field %1" -msgstr "" - -#. ($GroupObj->Name) -#: html/Admin/Groups/GroupRights.html:46 -#: html/Admin/Groups/GroupRights.html:50 -#: html/Admin/Groups/GroupRights.html:56 -msgid "Modify group rights for group %1" -msgstr "%1のグループ権利を修正する" - -#. ($QueueObj->Name) -#: html/Admin/Queues/GroupRights.html:46 -#: html/Admin/Queues/GroupRights.html:50 -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 "" - -#. ($QueueObj->Name) -#: html/Admin/Queues/People.html:46 -#: html/Admin/Queues/People.html:50 -msgid "Modify people related to queue %1" -msgstr "キュー%1の関与者を修正する" - -#. ($Ticket->id) -#. ($Ticket->Id) -#: html/Ticket/ModifyPeople.html:46 -#: html/Ticket/ModifyPeople.html:50 -#: html/Ticket/ModifyPeople.html:57 -msgid "Modify people related to ticket #%1" -msgstr "チケット#%1の関与者を修正する" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Scrips.html:67 -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 "" - -#. (loc($TemplateObj->Name())) -#. ($TemplateObj->id) -#: html/Admin/Global/Template.html:102 -#: html/Admin/Global/Template.html:46 -#: html/Admin/Global/Template.html:51 -#: html/Admin/Queues/Template.html:99 -msgid "Modify template %1" -msgstr "テンプレート%1を修正する" - -#: 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 "" - -#. ($Group->Name) -#: html/Admin/Groups/Modify.html:119 -#: html/User/Groups/Modify.html:107 -msgid "Modify the group %1" -msgstr "グループ%1を修正する" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "" - -#. ($UserObj->Name) -#: html/Admin/Users/Modify.html:309 -msgid "Modify the user %1" -msgstr "ユーザー%1を修正する" - -#. ($Ticket->Id) -#: html/Ticket/ModifyAll.html:58 -msgid "Modify ticket # %1" -msgstr "チケット# %1を修正する" - -#. ($TicketObj->Id) -#: html/Ticket/Modify.html:46 -#: html/Ticket/Modify.html:49 -#: html/Ticket/Modify.html:55 -msgid "Modify ticket #%1" -msgstr "チケット#%1を修正する" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "" - -#. ($CustomFieldObj->Name) -#: html/Admin/CustomFields/UserRights.html:157 -msgid "Modify user rights for custom field %1" -msgstr "" - -#. ($GroupObj->Name) -#: html/Admin/Groups/UserRights.html:46 -#: html/Admin/Groups/UserRights.html:50 -#: html/Admin/Groups/UserRights.html:56 -msgid "Modify user rights for group %1" -msgstr "グループ%1のユーザー権利を修正する" - -#. ($QueueObj->Name) -#: html/Admin/Queues/UserRights.html:46 -#: html/Admin/Queues/UserRights.html:50 -msgid "Modify user rights for queue %1" -msgstr "キュー%1のユーザー権利を修正する" - -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "キュー'%1'のウォッチャーを修正する" - -#: 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 "" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "月曜日" - -#. ($name) -#: html/Ticket/Elements/ShowRequestor:61 -msgid "More about %1" -msgstr "さらに%1について" - -#: 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 "'名前'の属性を指定してください" - -#. ($friendly_status) -#: html/SelfService/Elements/MyRequests:57 -msgid "My %1 tickets" -msgstr "" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -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 "現在お使いの名前" - -#: 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 "" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -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 "新しいウインドウ設定" - -#: 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 "次のページ" - -#: html/Admin/Users/Modify.html:84 -#: html/User/Prefs.html:72 -msgid "Nickname" -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" - -#: 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 "コマンドが見つかりません\\n" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "このユーザーに関してのコメントは入力されていません" - -#: NOT FOUND IN SOURCE -msgid "No correspondence attached" -msgstr "メールの添付はありません" - -#. (ref $self) -#: lib/RT/Action/Generic.pm:185 -#: lib/RT/Condition/Generic.pm:197 -#: lib/RT/Search/ActiveTicketsInQueue.pm:77 -#: lib/RT/Search/Generic.pm:134 -#: lib/RT/Search/Googleish.pm:78 -msgid "No description for %1" -msgstr "%1 詳細情報がありません" - -#: lib/RT/Users_Overlay.pm:190 -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 "キューを作成する許可がされていません" - -#. ($QueueObj->Name) -#: lib/RT/Ticket_Overlay.pm:420 -msgid "No permission to create tickets in the queue '%1'" -msgstr "" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "ユーザーを作成する許可がされていません" - -#: html/SelfService/Display.html:167 -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 "責任者が選択されていません" - -#: 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 "チケットIDが指定されていません" - -#: lib/RT/Transaction_Overlay.pm:528 -#: lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type 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 cvcハンドラが分離しています。RT管理者に相談してください。\\n" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "" - -#: html/Search/Chart:71 -#: html/Search/Elements/Chart:88 -msgid "Not Set" -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 "付記" - -#: 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 "" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "11月" - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "" - -#: 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 "" - -#. ($ObjectType) -#. ($LookupType) -#: html/Admin/CustomFields/Objects.html:72 -#: html/Admin/Elements/ObjectCustomFields:63 -msgid "Object of type %1 cannot take custom fields" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "10月" - -#: 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 "が以下である" - -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -#: lib/RT/Transaction_Overlay.pm:326 -msgid "On %1, %2 wrote:" -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 "" - -#: NOT FOUND IN SOURCE -msgid "Open requests" -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 "" - -#: 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 "組織" - -#. ($approving->Id, $approving->Subject) -#: html/Approvals/Elements/Approve:53 -msgid "Originating ticket: #%1" -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 "時間切れです、優先順位がうつりました" - -#: 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 "担当者" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "" - -#. ($Old->Name , $New->Name) -#: lib/RT/Transaction_Overlay.pm:672 -msgid "Owner forcibly changed from %1 to %2" -msgstr "担当者は強制的に%1から%2を変更しました" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "担当者は" - -#. ($Page, int($TotalFound/$Rows)+$oddRows) -#: html/Elements/TicketList:78 -msgid "Page %1 of %2" -msgstr "" - -#: html/Admin/Users/Modify.html:198 -#: html/User/Prefs.html:96 -msgid "Pager" -msgstr "ポケットベル" - -#: NOT FOUND IN SOURCE -msgid "PagerPhone" -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 "上位チケット" - -#: 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 "" - -#. ($RT::MinimumPasswordLength) -#: lib/RT/User_Overlay.pm:1037 -#: lib/RT/User_Overlay.pm:214 -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 "パスワードが短すぎます" - -#. (loc_fuzzy($msg)) -#: html/User/Prefs.html:240 -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 "" - -#: html/Ticket/Elements/ShowSummary:62 -#: html/Ticket/Elements/Tabs:119 -#: html/Ticket/ModifyAll.html:72 -msgid "People" -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 "許可が下りませんでした" - -#: 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 "" - -#: 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 "個人グループ:" - -#: html/Admin/Users/Modify.html:180 -#: html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "電話番号" - -#: NOT FOUND IN SOURCE -msgid "Placeholder" -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 "個人設定" - -#. ($pane, $UserObj->Name) -#: html/Admin/Users/MyRT.html:75 -msgid "Preferences %1 for user %2 ." -msgstr "" - -#. ($pane) -#: html/Prefs/MyRT.html:141 -msgid "Preferences saved for %1." -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 "優先度" - -#. ($args{'PrincipalId'}) -#: lib/RT/ACE_Overlay.pm:157 -#: lib/RT/ACE_Overlay.pm:239 -#: lib/RT/ACE_Overlay.pm:569 -msgid "Principal %1 not found." -msgstr "" - -#: html/Search/Elements/PickBasics:147 -#: html/Ticket/Create.html:181 -#: html/Ticket/Elements/EditBasics:92 -#: html/Ticket/Elements/ShowBasics:72 -#: lib/RT/Tickets_Overlay.pm:1790 -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 "" - -#. (loc_fuzzy($msg)) -#: html/Admin/Users/Modify.html:342 -#: html/User/Prefs.html:231 -msgid "Privileged status: %1" -msgstr "特権ステータス: %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "特権のあるユーザー" - -#: etc/initialdata:23 -#: etc/initialdata:29 -#: etc/initialdata:35 -#: etc/initialdata:59 -msgid "Pseudogroup for internal use" -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 "キュー" - -#. ($Queue) -#. ($id) -#: html/Admin/Queues/CustomField.html:63 -#: html/Admin/Queues/Scrip.html:61 -#: html/Admin/Queues/Scrips.html:69 -#: html/Admin/Queues/Templates.html:65 -msgid "Queue %1 not found" -msgstr "キュー %1 はみつかりません" - -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "キュー'%1'は見つかりませんでした\\n" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "キューの名前" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -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 "キューが作成されました" - -#: 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 "チケット新規作成" - -#: 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 "" - -#. ($RT::VERSION, $RT::rtname) -#: docs/design_docs/string-extraction-guide.txt:70 -#: lib/RT/StyleGuide.pod:796 -msgid "RT %1 for %2" -msgstr "%2のRT %1" - -#: NOT FOUND IN SOURCE -msgid "RT %1 from Best Practical Solutions, LLC." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-%1 Jesse Vincent \\n" -msgstr "RT %1. Copyright 1996-%1 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 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 "" - -#. ($UserObj->Name) -#: html/Admin/Users/MyRT.html:30 -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では、ただいまお使いの方の認証ができませんでした" - -#: 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" - -#. ($RT::rtname) -#: html/Elements/Logo:49 -#: html/Elements/PageLayout:172 -msgid "RT for %1" -msgstr "" - -#: 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© Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>。RTはGNU一般公衆利用許諾契約書のバージョン2にもとづいて配布されています。" - -#: 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 "このフォームではあなたがチケットにつけた件名は検索されません." - -#: 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 "" - -#: NOT FOUND IN SOURCE -msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." -msgstr "RTのEメールコマンドモードではPGP認証が必要です。メッセージに電子署名がないか、無効な電子署名です。" - -#: html/Admin/Users/Modify.html:79 -#: html/User/Prefs.html:69 -msgid "Real Name" -msgstr "本名" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "本名" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:725 -msgid "Reference by %1 added" -msgstr "" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:765 -msgid "Reference by %1 deleted" -msgstr "" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:722 -msgid "Reference to %1 added" -msgstr "" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:762 -msgid "Reference to %1 deleted" -msgstr "" - -#: html/Elements/EditLinks:103 -#: html/Elements/EditLinks:156 -#: html/Elements/ShowLinks:92 -#: html/Ticket/Create.html:225 -#: html/Ticket/Elements/BulkLinks:72 -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 "Refine" -msgstr "絞り込む" - -#: NOT FOUND IN SOURCE -msgid "Refine search" -msgstr "絞込み検索" - -#. ($value/60) -#: html/Elements/Refresh:57 -msgid "Refresh this page every %1 minutes." -msgstr "ページを%1分おきに更新する" - -#. ($ticket->Subject) -#: lib/RT/Transaction_Overlay.pm:811 -msgid "Reminder '%1' added" -msgstr "" - -#. ($ticket->Subject) -#: lib/RT/Transaction_Overlay.pm:824 -msgid "Reminder '%1' completed" -msgstr "" - -#. ($ticket->Subject) -#: lib/RT/Transaction_Overlay.pm:817 -msgid "Reminder '%1' reopened" -msgstr "" - -#. ($Ticket->Id) -#: html/Ticket/Reminders.html:46 -msgid "Reminder ticket #%1" -msgstr "" - -#: html/Elements/MyReminders:48 -#: html/Ticket/Elements/ShowSummary:75 -#: html/Ticket/Elements/Tabs:122 -#: html/Ticket/Reminders.html:52 -msgid "Reminders" -msgstr "リマインダ通知" - -#. ($Ticket->Id) -#: html/Ticket/Reminders.html:50 -msgid "Reminders for ticket #%1" -msgstr "" - -#: html/Search/Bulk.html:94 -msgid "Remove AdminCc" -msgstr "管理Ccを削除する" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Ccを削除する" - -#: 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 "" - -#: 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 "作成者のEメールアドレス" - -#: 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 "リクエストは次の日までに行われなければなりません" - -#. ('Object') -#: lib/RT/Attribute_Overlay.pm:146 -msgid "Required parameter '%1' not specified" -msgstr "" - -#: 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 "住所" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "解決済みにする" - -#. ($TicketObj->id, $TicketObj->Subject) -#: html/Ticket/Update.html:156 -msgid "Resolve ticket #%1 (%2)" -msgstr "" - -#: etc/initialdata:323 -#: html/Elements/SelectDateType:49 -#: lib/RT/Ticket_Overlay.pm:1172 -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 "作成者に返答する" - -#: 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 "" -"%2 %3の権利%1が領域%4 %5\\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 "権利" - -#. ($object_type) -#: html/Admin/CustomFields/GroupRights.html:129 -#: lib/RT/Interface/Web.pm:961 -msgid "Rights could not be granted for %1" -msgstr "" - -#. ($object_type) -#: html/Admin/CustomFields/GroupRights.html:156 -#: lib/RT/Interface/Web.pm:990 -msgid "Rights could not be revoked for %1" -msgstr "" - -#: html/Admin/Global/GroupRights.html:72 -#: html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "役割" - -#: 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 "土曜日" - -#: html/Prefs/MyRT.html:72 -#: html/Prefs/Quicksearch.html:64 -#: 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 "変更を保存する" - -#. ($name) -#: lib/RT/SavedSearch.pm:173 -msgid "Saved search %1" -msgstr "" - -#. ($scrip->Id) -#. ($id) -#: html/Admin/Elements/ListGlobalScrips:60 -#: html/Admin/Global/Scrip.html:77 -#: html/Admin/Queues/Scrip.html:84 -msgid "Scrip #%1" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "スクリプトが作成されました" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -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 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 "チケットを検索するには、チケットのid番号, キューの名称, 所有者のユーザー名, リクエスト元のEメールアドレスを入力してください. RT はチケットの本文や添付ファイル以外の項目を検索します." - -#: html/User/Elements/Tabs:62 -msgid "Search options" -msgstr "検索オプション" - -#. ($PrimaryGroupBy) -#: html/Search/Chart.html:56 -msgid "Search results grouped by %1" -msgstr "" - -#. ($msg) -#: lib/RT/SavedSearch.pm:203 -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 "チケットの全文検索は時間がかかりますが、もしも必要な場合は、 fulltext:検索語 と記述してください。" - -#: 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 "" - -#: 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 "" - -#: 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 "" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "" - -#: 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 "セルフサービス" - -#: 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 "" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "9月" - -#: 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 "他からの承認待ちのリクエストを表示する" - -#: 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 "署名" - -#: 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 "" - -#: 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 "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に変更されました" - -#: 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 "" - -#. ($Old->Name) -#: lib/RT/Transaction_Overlay.pm:678 -msgid "Stolen from %1" -msgstr "%1から担当者を変更しました" - -#: NOT FOUND IN SOURCE -msgid "Stolen from %1 " -msgstr "%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 "件名" - -#. ($self->Data) -#: docs/design_docs/string-extraction-guide.txt:89 -#: lib/RT/StyleGuide.pod:815 -#: lib/RT/Transaction_Overlay.pm:700 -msgid "Subject changed to %1" -msgstr "" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "日曜日" - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "システム" - -#: 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 "システムエラー" - -#. ($msg) -#: lib/RT/Transaction_Overlay.pm:224 -#: lib/RT/Transaction_Overlay.pm:230 -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 "システムエラー。権利が委任されていません" - -#: 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 "システムエラー。権利が認可されていません" - -#: 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 "システムグループ" - -#: etc/initialdata:41 -#: etc/initialdata:47 -#: etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -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 "担当済み" - -#: html/Admin/Elements/EditScrip:71 -#: html/Tools/Offline.html:78 -msgid "Template" -msgstr "テンプレート" - -#. ($TemplateObj->Id()) -#: html/Admin/Global/Template.html:112 -#: html/Admin/Queues/Template.html:113 -msgid "Template #%1" -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 for %1\\n" -msgstr "" -"%1\\n" -"のテンプレート" - -#: 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 "" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:753 -msgid "That principal is already a %1 for this queue" -msgstr "その責任者はすでにこのキューの%1です" - -#. ($self->loc($args{'Type'})) -#: lib/RT/Ticket_Overlay.pm:1435 -msgid "That principal is already a %1 for this ticket" -msgstr "その責任者はすでにこのチケットの%1です" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:852 -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 "そのユーザーは今特権を失いました" - -#: 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 "それは数字のIDではありません" - -#: 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 "" - -#: 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 "それらのコメントは実際ユーザーには見ることができません" - -#: 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 "" - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "このトランザクションにはコンテンツがありません" - -#. ($rows) -#: html/Ticket/Elements/ShowRequestor:70 -msgid "This user's %1 highest priority tickets" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "このユーザーの25のもっとも高い優先チケット" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "木曜日" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "チケット# %1 %2" - -#. ($Ticket->Id, $Ticket->Subject) -#: html/Ticket/ModifyAll.html:46 -#: html/Ticket/ModifyAll.html:50 -msgid "Ticket #%1 Jumbo update: %2" -msgstr "チケット #%1 更新(総合ビュー): %2" - -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#: html/Approvals/Elements/ShowDependency:67 -msgid "Ticket #%1: %2" -msgstr "" - -#. ($T::Tickets{$template_id}->Id) -#. ($T::Tickets{$template_id}->id) -#. ($ticket->Id) -#: lib/RT/Action/CreateTickets.pm:1350 -#: lib/RT/Action/CreateTickets.pm:1359 -#: lib/RT/Action/CreateTickets.pm:605 -#: lib/RT/Action/CreateTickets.pm:729 -#: lib/RT/Action/CreateTickets.pm:741 -msgid "Ticket %1" -msgstr "" - -#. ($self->Id, $QueueObj->Name) -#: lib/RT/Ticket_Overlay.pm:755 -#: lib/RT/Ticket_Overlay.pm:775 -msgid "Ticket %1 created in queue '%2'" -msgstr "チケット %1がキュー '%2'で作成されました" - -#: NOT FOUND IN SOURCE -msgid "Ticket %1 loaded\\n" -msgstr "チケット%1がロードされました\\n" - -#. ($Ticket->Id, $_) -#: html/Search/Bulk.html:377 -msgid "Ticket %1: %2" -msgstr "チケット %1: %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "" - -#. ($Ticket->Id, $Ticket->Subject) -#: html/Ticket/History.html:46 -#: html/Ticket/History.html:49 -msgid "Ticket History # %1 %2" -msgstr "チケットヒストリー # %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket Id" -msgstr "チケットID" - -#: etc/initialdata:324 -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 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 "チケットが削除されました" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "チケット情報" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Ticket watchers" -msgstr "チケットウォッチャー" - -#. (ref $self) -#: lib/RT/Search/FromSQL.pm:82 -msgid "TicketSQL search module" -msgstr "" - -#: html/Admin/Elements/GlobalCustomFieldTabs:64 -#: html/Admin/Global/CustomFields/index.html:75 -#: html/Elements/Tabs:71 -#: html/Search/Elements/Chart:109 -#: lib/RT/CustomField_Overlay.pm:1206 -msgid "Tickets" -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 "使った時間" - -#: 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" - -#. ('sales@bestpractical.com') -#: html/Elements/Footer:62 -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "サポート、トレーニング、カスタム開発またはライセンス取得については、%1までお問い合わせください" - -#: lib/RT/Ticket_Overlay.pm:1170 -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 "" - -#. ($self->Data) -#: lib/RT/Transaction_Overlay.pm:805 -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 "" - -#: 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 "トランザクションは変更されることはありません" - -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "権利: %1を削除しています" - -#: 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 "Unixログイン" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "Unixユーザーネーム" - -#. ($self->ContentEncoding) -#. ($ContentEncoding) -#: lib/RT/Attachment_Overlay.pm:289 -#: lib/RT/Record.pm:861 -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 "とられていない" - -#: 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 ID" -msgstr "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 "タイプの更新" - -#: NOT FOUND IN SOURCE -msgid "Update all these tickets at once" -msgstr "すべてのチケットを一度に更新する" - -#: NOT FOUND IN SOURCE -msgid "Update email" -msgstr "Eメールを更新" - -#: 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 を更新" - -#. ($Ticket->id) -#: html/SelfService/Update.html:112 -#: html/SelfService/Update.html:47 -msgid "Update ticket #%1" -msgstr "チケット #%1 を更新" - -#. ($TicketObj->id, $TicketObj->Subject) -#: html/Ticket/Update.html:158 -msgid "Update ticket #%1 (%2)" -msgstr "" - -#: 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 "" - -#: 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 "ユーザー%1 %2: %3\\n" - -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" -msgstr "ユーザー%1パスワード: %2\\n" - -#. ($args{'Owner'}) -#: lib/RT/Ticket_Overlay.pm:506 -msgid "User '%1' could not be found." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found" -msgstr "ユーザー'%1'が見つかりません" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" -msgstr "ユーザー'%1'が見つかりません\\n" - -#: 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" - -#: 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 "ユーザー権利" - -#. ($msg) -#: html/Admin/Users/Modify.html:301 -msgid "User could not be created: %1" -msgstr "ユーザーを作成することができませんでした: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "ユーザーが作成されました" - -#: html/Admin/CustomFields/GroupRights.html:74 -#: html/Admin/Global/GroupRights.html:88 -#: html/Admin/Groups/GroupRights.html:75 -#: html/Admin/Queues/GroupRights.html:90 -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 view" -msgstr "ユーザービュー" - -#: 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 "ユーザー名" - -#: 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 "ユーザーが検索基準にあっています" - -#. ($transaction->id) -#: bin/rt-crontool:134 -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 "" - -#: html/Admin/CustomFields/Modify.html:130 -#: html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "ウォッチャー" - -#: NOT FOUND IN SOURCE -msgid "WebEncoding" -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 "累積作業時間" - -#: 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 "認証されていません" - -#: 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" - -#. ($num, $queue) -#: docs/design_docs/string-extraction-guide.txt:47 -#: lib/RT/StyleGuide.pod:780 -msgid "You found %1 tickets in queue %2" -msgstr "キュー%2で%1件のチケットがヒットしました" - -#: html/NoAuth/Logout.html:52 -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 "指定のキューでリクエストの作成ができません" - -#: 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を呼び出すメールaliasesを設定できませんでした" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "" - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "あなたのリクエストは承認されました" - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "あなたのリクエストは拒否されました" - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "あなたのユーザー名とパスワードが間違っています" - -#: html/Admin/Users/Modify.html:168 -#: html/User/Prefs.html:149 -msgid "Zip" -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 "" - -#. ($right->PrincipalObj->Object->SelfDescription) -#: html/User/Elements/DelegateRights:80 -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 "correspondence (probably) not sent" -msgstr "通知は(おそらく)送信されていません" - -#: NOT FOUND IN SOURCE -msgid "correspondence sent" -msgstr "通知が送信されました" - -#: html/Admin/Queues/Modify.html:98 -#: lib/RT/Date.pm:346 -msgid "days" -msgstr "日" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "削除" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "削除" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "あいません" - -#: html/Elements/SelectCustomFieldOperator:59 -#: html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "が以下を含まない" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -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 "" - -#: html/Elements/SelectCustomFieldOperator:59 -#: html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "より大きい" - -#. ($self->Name) -#: lib/RT/Group_Overlay.pm:214 -msgid "group '%1'" -msgstr "グループ'%1'" - -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -#: html/Search/Results.html:88 -msgid "grouped by %1" -msgstr "" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "時間" - -#: 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 "が以下である" - -#: 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 "より小さい" - -#: 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 "等しくない" - -#: html/SelfService/Elements/MyRequests:82 -#: lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "着手" - -#. ($self->Name, $user->Name) -#: lib/RT/Group_Overlay.pm:219 -msgid "personal group '%1' for user '%2'" -msgstr "ユーザー '%2' のパーソナルグループ '%1' " - -#. ($queue->Name, $self->Type) -#: lib/RT/Group_Overlay.pm:227 -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 "解決済み" - -#: 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 "保留" - -#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle')) -#: html/Search/Results.html:89 -msgid "style: %1" -msgstr "" - -#: html/Prefs/MyRT.html:93 -msgid "summary rows" -msgstr "" - -#. ($self->Type) -#: lib/RT/Group_Overlay.pm:222 -msgid "system %1" -msgstr "システム %1" - -#. ($self->Type) -#: lib/RT/Group_Overlay.pm:233 -msgid "system group '%1'" -msgstr "システムグループ '%1'" - -#: html/Elements/Error:64 -#: html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "呼び出しているコンポーネントはなぜ次のようなことが起こるのか特定できませんでした" - -#. ($self->Instance, $self->Type) -#: lib/RT/Group_Overlay.pm:230 -msgid "ticket #%1 %2" -msgstr "チケット #%1 %2" - -#. ($self->Id) -#: lib/RT/Group_Overlay.pm:236 -msgid "undescribed group %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "表示されないグループ %1" - -#. ($user->Object->Name) -#: lib/RT/Group_Overlay.pm:211 -msgid "user %1" -msgstr "ユーザー %1" - -#: 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 "å¹´" - diff --git a/rt/lib/RT/I18N/nl.po b/rt/lib/RT/I18N/nl.po deleted file mode 100644 index d7f01a427..000000000 --- a/rt/lib/RT/I18N/nl.po +++ /dev/null @@ -1,6195 +0,0 @@ -# -msgit "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"PO-Revision-Date: 2005-10-03 13:50-0400\n" -"Last-Translator: FULL NAME \n" -"Language-Team: rt-devel \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: NOT FOUND IN SOURCE -msgid "#" -msgstr "#" - -#: NOT FOUND IN SOURCE -msgid "#%1" -msgstr "msgstr "" " - -#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51 -#. ($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:86 -msgid "$1" -msgstr "" - -#: lib/RT/Record.pm:941 -#. ($label) -msgid "$prefix %1" -msgstr "" - -#: lib/RT/URI/fsck_com_rt.pm:257 -#. ($self->ObjectType, $self->Object->Id) -msgid "%1 #%2" -msgstr "" - -#: lib/RT/Date.pm:361 -#. ($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:397 -#. ($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:1685 lib/RT/Transaction_Overlay.pm:634 lib/RT/Transaction_Overlay.pm:677 -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 added" -msgstr "%1 %2 toegevoegd" - -#: lib/RT/Date.pm:358 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "%1 %2 geleden" - -#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:641 -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -msgid "%1 %2 changed to %3" -msgstr "%1 %2 veranderd naar %3" - -#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:637 lib/RT/Transaction_Overlay.pm:683 -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 deleted" -msgstr "%1 %2 verwijderd" - -#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:64 html/Ticket/Elements/PreviewScrips:99 -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -msgid "%1 %2 with template %3" -msgstr "%1 %2 met sjabloon %3" - -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 dit ticket\\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:104 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:65 -#. (loc($DefaultStatus)) -#. (loc($Ticket->Status())) -#. (loc($TicketObj->Status)) -#. ($TicketObj->OwnerObj->Name()) -msgid "%1 (Unchanged)" -msgstr "" - -#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -msgid "%1 - An argument to pass to %2" -msgstr "%1 - Een argument om door te geven aan %2" - -#: bin/rt-crontool:210 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - Uitvoer status herzieningen naar STDOUT" - -#: bin/rt-crontool:204 -#. ("--action") -msgid "%1 - Specify the action module you want to use" -msgstr "%1 - Specificeer de actie module die u wenst te gebruiken" - -#: bin/rt-crontool:198 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Specificeer de conditie module die u wenst te gebruiken" - -#: bin/rt-crontool:191 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Specificeer de zoek module die u wenst te gebruiken" - - $RT::VERSION, - '2004', - 'Best Practical Solutions, LLC',) - $RT::VERSION, - '2004', - 'Best Practical Solutions, LLC',) - $RT::VERSION, - '2004', - 'Best Practical Solutions, LLC',) - $RT::VERSION, - '2004', - 'Best Practical Solutions, LLC',) - $RT::VERSION, - '2004', - 'Best Practical Solutions, LLC',) - $RT::VERSION, - '2005', - 'Best Practical Solutions, LLC',) - $RT::VERSION, - '2005', - 'Best Practical Solutions, LLC',) - $RT::VERSION, - '2005', - 'Best Practical Solutions, LLC',) -#: html/Elements/Footer:57 -#. ('»|«', $RT::VERSION, '2005', 'Best Practical Solutions, LLC',) -msgid "%1 RT %2 Copyright 1996-%3 %4." -msgstr "" - -#: lib/RT/ScripAction_Overlay.pm:151 -#. ($self->Id) -msgid "%1 ScripAction loaded" -msgstr "%1 ScripAction geladen" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "%1 toegevoegd als waarde voor %2" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on" -msgstr "%1 aliassen hebben een TicketId nodig om mee te werken" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on " -msgstr "%1 aliassen hebben een TicketId nodig om mee te werken" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "%1 aliassen hebben een TicketId nodig om mee te werken (van %2) %3" - -#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 -#. ($args{'Base'}) -#. ($args{'Target'}) -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "%1 lijkt een lokaal object te zijn maar kan niet gelokaliseerd worden in de database" - -#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:518 -#. ($self->BriefDescription , $self->CreatorObj->Name) -#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) -msgid "%1 by %2" -msgstr "%1 door %2" - -#: lib/RT/Transaction_Overlay.pm:775 lib/RT/Transaction_Overlay.pm:784 lib/RT/Transaction_Overlay.pm:787 -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -msgid "%1 changed from %2 to %3" -msgstr "%1 veranderd van %2 naar %3" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "" - -#: lib/RT/Record.pm:945 -msgid "%1 could not be set to %2." -msgstr "%1 kon niet veranderd worden naar %2" - -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1 kon geen transactie initiëren (%2)" - -#: lib/RT/Ticket_Overlay.pm:2732 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 kon status niet veranderen naar opgelost. RT's Database zou inconsistent kunnen zijn" - -#: lib/RT/Transaction_Overlay.pm:558 -#. ($obj_type) -msgid "%1 created" -msgstr "%1 aangemaakt" - -#: lib/RT/Transaction_Overlay.pm:563 -#. ($obj_type) -msgid "%1 deleted" -msgstr "%1 verwijderd" - -#: html/Search/Chart:71 -#. ($Query, $PrimaryGroupBy) -msgid "%1 grouped by %2" -msgstr "" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "De %1 hoogste prioriteit tickets die ik bezit" - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I own..." -msgstr "De %1 hoogste prioriteit tickets die ik bezit..." - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I requested..." -msgstr "De %1 hoogste prioriteit tickets waar ik om verzocht heb..." - -#: bin/rt-crontool:186 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 is een gereedschap om te reageren op tickets van een extern rooster programma, zoals cron" - -#: lib/RT/Queue_Overlay.pm:864 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 is niet langer een %2 voor deze queue" - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 is niet langer een %2 voor dit ticket" - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a value for custom field %2" -msgstr "%1 is niet langer een waarde voor custom field %2" - -#: NOT FOUND IN SOURCE -msgid "%1 isn't a valid Queue id." -msgstr "%1 is niet een geldig queue id" - -#: html/Ticket/Elements/ShowTime:2 html/Ticket/Elements/ShowTime:4 -#. ($minutes) -msgid "%1 min" -msgstr "%1 min" - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "De %1 nieuwste tickets die van niemand zijn" - -#: NOT FOUND IN SOURCE -msgid "%1 not shown" -msgstr "%1 niet afgebeeld" - -#: lib/RT/CustomField_Overlay.pm:892 -msgid "%1 objects" -msgstr "%1 objecten" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "%1 rechten" - -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "%1 gelukt\\n" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "%1 type onbekend voor $MessageId" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "%1 type onbekend voor %2" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 zal alle leden van een opgelost groep ticket omzetten." - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1's %2 objects" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:894 -msgid "%1's %2's %3 objects" -msgstr "" - -#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 -#. ($object->Name) -#. ($Object->Name) -msgid "%1's saved searches" -msgstr "%1's opgeslagen zoekopdrachten" - -#: lib/RT/Transaction_Overlay.pm:468 -#. ($self) -msgid "%1: no attachment specified" -msgstr "%1: geen attachment gespecificeerd" - -#: 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:4 -#. (sprintf("%.1f",$minutes / 60)) -msgid "%quant(%1,hour)" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:1119 -#. ($args{'Status'}) -msgid "'%1' is an invalid value for status" -msgstr "'%1 is een ongeldige waarde voor status" - -#: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "'%1' onherkende actie. " - -#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76 -msgid "(Check box to delete)" -msgstr "(Vink hokje af om te verwijderen)" - -#: html/Ticket/Elements/PreviewScrips:94 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(Markeer hokje om notificaties voor de genoemde ontvangers uit te zetten)" - -#: html/Ticket/Elements/PreviewScrips:118 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "(Markeer hokje om notificaties voor de genoemde ontvangers aan te zetten)" - -#: html/Ticket/Create.html:217 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(Voer ticket ids of URLs in, gescheiden door spaties)" - -#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1)" -msgstr "(Indien leeggelaten, wordt voorzien van %1)" - -#: NOT FOUND IN SOURCE -msgid "(No Value)" -msgstr "(Geen Waarde)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Geen eigen velden)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Geen Leden)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 -msgid "(No scrips)" -msgstr "(Geen scrips)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Geen slablonen)" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr (Geen)"" - -#: 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 "(Stuur een BCC van deze update naar een door komma's gescheiden lijst van e-mail adressen. Deze personen zullen toekomstige updates niet ontvangen.)" - -#: 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 "(Stuur een BCC van deze update naar een door komma's gescheiden lijst van e-mail adressen. Deze personen zullen toekomstige updates niet ontvangen. )" - -#: html/Ticket/Create.html:102 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people will receive future updates.)" -msgstr "(Stuur een CC van deze update naar een door komma's gescheiden lijst van administratieve e-mail adressen. Deze personen zullen toekomstige updates wel ontvangen. )" - -#: 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 "(Stuur een CC van deze update naar een door komma's gescheiden lijst van e-mail adressen. Deze personen zullen toekomstige updates niet ontvangen.)" - -#: 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 "(Stuur een CC van deze update naar een door komma's gescheiden lijst van e-mail adressen. Deze personen zullen toekomstige updates niet ontvangen. )" - -#: 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 "(Stuur een CC van deze update naar een door komma's gescheiden lijst van e-mail-adressen. Deze personen zullen toekomstige updates wel ontvangen.)" - -#: html/Ticket/Create.html:92 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people will receive future updates.)" -msgstr "(Stuur een CC van deze update naar een door komma's gescheiden lijst van e-mail-adressen. Deze personen zullen toekomstige updates wel ontvangen.)" - -#: html/Admin/Elements/EditScrip:102 -msgid "(Use these fields when you choose 'User Defined' for a condition or action)" -msgstr "(Gebruik deze velden wanneer U kiest voor 'User Defined' in een conditie of actie)" - -#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 -msgid "(empty)" -msgstr "(leeg)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(geen naam weergegeven)" - -#: NOT FOUND IN SOURCE -msgid "(no subject)" -msgstr "(geen onderwerp)" - -#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:70 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:86 lib/RT/Transaction_Overlay.pm:578 -msgid "(no value)" -msgstr "(geen waarde)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(geen waarden)" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(slechts één ticket)" - -#: html/Elements/RT__Ticket/ColumnMap:147 -msgid "(pending approval)" -msgstr "(wacht op goedkeuring)" - -#: html/Elements/RT__Ticket/ColumnMap:150 -msgid "(pending other Collection)" -msgstr "(wacht op andere Collection)" - -#: NOT FOUND IN SOURCE -msgid "(pending other tickets)" -msgstr "(wacht op andere tickets)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(verplicht)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(zonder titel)" - -#: html/Ticket/Elements/Reminders:88 -msgid "(yyyy/mm/dd)" -msgstr "" - -#: html/Elements/EditCustomFieldSelect:58 -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 "" - -#: 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 "Een leeg sjabloon" - -#: html/Admin/Users/Modify.html:360 -msgid "A password was not set, so user won't be able to login." -msgstr "Omdat er geen wachtwoord gezet is, kunt u niet inloggen" - -#: NOT FOUND IN SOURCE -msgid "ACE Deleted" -msgstr "ACE Verwijderd" - -#: NOT FOUND IN SOURCE -msgid "ACE Loaded" -msgstr "ACE Geladen" - -#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE niet gevonden" - -#: lib/RT/ACE_Overlay.pm:854 -msgid "ACEs can only be created and deleted." -msgstr "ACEs kunnen allen gecreëerd of verwijderd worden." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Afbraak om ongewenste ticket aanpassing te voorkomen.\\n" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Over mijzelf" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Toegangscontrole" - -#: html/Admin/Elements/EditScrip:71 -msgid "Action" -msgstr "Actie" - -#: lib/RT/Scrip_Overlay.pm:173 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "Actie %1 niet gevonden" - -#: NOT FOUND IN SOURCE -msgid "Action committed." -msgstr "Actie uitgevoerd." - -#: bin/rt-crontool:148 -msgid "Action committed.\\n" -msgstr "" - -#: bin/rt-crontool:144 -msgid "Action prepared..." -msgstr "Actie voorbereid..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Voeg toe" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Voeg AdminCc toe" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Voeg Cc toe" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Voeg kolommen toe" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Criterium toevoegen" - -#: html/Ticket/Create.html:146 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Voeg Meer Bestanden Toe" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Voeg aanvrager Toe" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Add a Scrip to this queue" -msgstr "Voeg een Scrip toe aan deze queue" - -#: html/Admin/Global/Scrip.html:76 -msgid "Add a scrip which will apply to all queues" -msgstr "Voeg een scrip toe dat voor alle queues zal gelden" - -#: html/Search/Build.html:109 html/Search/Build.html:94 -msgid "Add and Search" -msgstr "Toevoegen en zoeken" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "Voeg commentaar of reacties toe aan geselecteerde tickets" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Voeg leden toe" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Voeg nieuwe toeschouwers toe" - -#: html/Search/Build.html:85 -msgid "Add these terms to your search" -msgstr "Voeg dit criterium toe aan de zoekopdracht" - -#: 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 "VoegVolgendeStaatToe" - -#: lib/RT/Queue_Overlay.pm:764 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "Hoofdgebruiker toegevoegd als %1 voor deze queue" - -#: lib/RT/Ticket_Overlay.pm:1426 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Hoofdgebruiker toegevoegd als %1 voor dit ticket" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Adres1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Adres2" - -#: html/Ticket/Create.html:97 -msgid "Admin Cc" -msgstr "Beheerder Cc" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Beheerder queues" - -#: NOT FOUND IN SOURCE -msgid "Admin users" -msgstr "Beheerdergebruikers" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Beheerder/Globale configuratie" - -#: NOT FOUND IN SOURCE -msgid "Admin/Groups" -msgstr "Beheerder/Groepen" - -#: NOT FOUND IN SOURCE -msgid "Admin/Queue/Basics" -msgstr "Beheerder/Queue/Basis" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 -msgid "AdminCc" -msgstr "BeheerderCc" - -#: NOT FOUND IN SOURCE -msgid "AdminComment" -msgstr "BeheerderCommentaar" - -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" -msgstr "BeheerderCorrespondentie" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "Beheerder custom field" - -#: NOT FOUND IN SOURCE -msgid "AdminCustomFields" -msgstr "BeheerderSpecifiekeVelden" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "BeheerderGroep" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "BeheerderGroepLidmaatschap" - -#: lib/RT/System.pm:81 -msgid "AdminOwnPersonalGroups" -msgstr "BeheerderBezitPersoonlijkeGroepen" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "AdminQueue" -msgstr "Beheerder queue" - -#: lib/RT/System.pm:82 -msgid "AdminUsers" -msgstr "BeheerderGebruikers" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Administratieve Cc" - -#: html/Ticket/Elements/Tabs:209 -msgid "Advanced" -msgstr "Geavanceerd" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "Uitgebreid Zoeken" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "Na" - -#: NOT FOUND IN SOURCE -msgid "Age" -msgstr "Leeftijd" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "Alle Gegeven Goedkeuringen" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Alle queues" - -#: NOT FOUND IN SOURCE -msgid "Always sends a message to the requestors independent of message sender" -msgstr "Stuurt altijd een bericht naar de aanvrager ongeacht de verzender van het bericht" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "" - -#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "Heeft betrekking op" - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Doorvoeren" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Doorvoeren van de wijzigingen" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Autorisatie" - -#: 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 "Goedkeuring #%1: %2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Goedkeuring #%1: Notities niet bewaard vanwege een systeem fout" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Goedkeuring #%1: Notities bewaard" - -#: NOT FOUND IN SOURCE -msgid "Approval Details" -msgstr "Goedkeuring Details" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Approval diagram" -msgstr "Goedkeuring diagram" - -#: html/Approvals/Elements/Approve:65 -msgid "Approve" -msgstr "Goedkeuring" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Notities van de goedkeurer: %1" - -#: lib/RT/Date.pm:440 -msgid "Apr." -msgstr "Ggk." - -#: NOT FOUND IN SOURCE -msgid "April" -msgstr "April" - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "Oplopend" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Oplopend" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Assign and remove custom fields" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "AssignCustomFields" -msgstr "WijsSpecifiekeVeldenToe" - -#: html/Search/Bulk.html:142 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:116 -msgid "Attach" -msgstr "Toevoegen" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:142 -msgid "Attach file" -msgstr "Hecht bestand aan" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:130 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Aangehecht bestand" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Attachment '%1' kon niet geladen worden" - -#: lib/RT/Transaction_Overlay.pm:476 -msgid "Attachment created" -msgstr "Attachment gecreëerd" - -#: lib/RT/Tickets_Overlay.pm:1932 -msgid "Attachment filename" -msgstr "Attachment bestandsnaam" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Attachments" - -#: lib/RT/Attributes_Overlay.pm:172 -msgid "Attribute Deleted" -msgstr "Attribuut Verwijderd" - -#: lib/RT/Date.pm:444 -msgid "Aug." -msgstr "Aug." - -#: NOT FOUND IN SOURCE -msgid "August" -msgstr "Augustus" - -#: NOT FOUND IN SOURCE -msgid "AuthSystem" -msgstr "AuthenticatieSysteem" - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "Automatisch-antwoord" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Automatisch-antwoord aan aanvragers" - -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "Automatisch-antwoord aan aanvragers" - -#: html/Widgets/SelectionBox:186 -msgid "Available" -msgstr "Beschikbaar" - -#: NOT FOUND IN SOURCE -msgid "Available Columns" -msgstr "Beschikbare Kolommen" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "Ongeldige PGP Signature: %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "Ongeldig attachment id. Kan attachment '%1' niet vinden\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad data in %1" -msgstr "Ongeldige data in %1" - -#: NOT FOUND IN SOURCE -msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "Ongeldig transactienummer voor attachment. %1 zou %2 moeten zijn\\n" - -#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Basis" - -#: 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:95 -msgid "Be sure to save your changes" -msgstr "Zorg ervoor dat u uw veranderingen bewaard" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 -msgid "Before" -msgstr "Voor" - -#: NOT FOUND IN SOURCE -msgid "Begin Approval" -msgstr "Begin Goedkeuring" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Blanco" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bookmarkable URL for this search" -msgstr "URL voor deze zoekopdracht, geschikt als bookmark" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Korte koppen" - -#: html/Ticket/Elements/Tabs:220 -msgid "Bulk Update" -msgstr "Bulk update" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Bulk ticketherziening" - -#: lib/RT/User_Overlay.pm:1790 -msgid "Can not modify system users" -msgstr "Kan systeemgebruikers niet wijzigen" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Can this principal see this queue" -msgstr "Kan deze hoofdgebruiker deze queue zien" - -#: lib/RT/CustomField_Overlay.pm:378 -msgid "Can't add a custom field value without a name" -msgstr "Kan geen custom field toevoegen zonder een naam" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($Class) -msgid "Can't find a collection class for '%1'" -msgstr "Kan geen bewaarde zoekopdracht vinden om mee te werken" - -#: html/Search/Build.html:745 -msgid "Can't find a saved search to work with" -msgstr "Kan geen bewaarde zoekopdracht vinden om mee te werken" - -#: lib/RT/Link_Overlay.pm:160 -msgid "Can't link a ticket to itself" -msgstr "Kan een ticket niet koppelen aan zichzelf" - -#: NOT FOUND IN SOURCE -msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Kan niet samenvoegen met een reeds samengevoegd ticket. U zou deze boodschap nooit mogen krijgen" - -#: html/Search/Build.html:751 -msgid "Can't save this search" -msgstr "Kan deze zoekopdracht niet opslaan" - -#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1359 -msgid "Can't specifiy both base and target" -msgstr "Kan niet zowel basis als doel specificeren" - -#: html/autohandler:193 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Kan gebruiker %1 niet aanmaken" - -#: 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:87 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:113 -msgid "Cc" -msgstr "Cc" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -msgstr "Wijzig wachtwoord" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Allemaal markeren" - -#: html/SelfService/Update.html:78 html/Ticket/Create.html:133 html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "Vink hokje om te verwijderen" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Vink hokje om de rechten te verwijderen" - -#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Afstammelingen" - -#: html/NoAuth/js/util.js:157 -msgid "Choose a date" -msgstr "Kies een datum" - -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 -msgid "City" -msgstr "Stad" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Allemaal wissen" - -#: html/Helpers/CalPopup.html:6 -msgid "Close window" -msgstr "Sluit window" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Gesloten" - -#: NOT FOUND IN SOURCE -msgid "Closed requests" -msgstr "Gesloten verzoeken" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:89 -msgid "Combobox: Select or enter multiple values" -msgstr "Combobox: Selecteer of voer meerdere waardes in" - -#: lib/RT/CustomField_Overlay.pm:90 -msgid "Combobox: Select or enter one value" -msgstr "Combobox: Selecteer of voer één waarde in" - -#: lib/RT/CustomField_Overlay.pm:91 -msgid "Combobox: Select or enter up to %1 values" -msgstr "Combobox: Selecteer of voer tot %1 waarden in" - -#: NOT FOUND IN SOURCE -msgid "Command not understood!\\n" -msgstr "Commando niet begrepen!\\n" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:178 -msgid "Comment" -msgstr "Commentaar" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Commentaar Adres" - -#: NOT FOUND IN SOURCE -msgid "Comment not recorded" -msgstr "Commentaar niet bewaard" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Comment on tickets" -msgstr "Commentaar op tickets" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "CommentOnTicket" -msgstr "Commentaar op ticket" - -#: NOT FOUND IN SOURCE -msgid "Comments" -msgstr "Commentaar" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Commentaar (Wordt niet verstuurd aan aanvragers)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Commentaar (Wordt niet verstuurd aan aanvragers)" - -#: NOT FOUND IN SOURCE -msgid "Comments about %1" -msgstr "Commentaar over %1" - -#: html/Admin/Users/Modify.html:221 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Opmerkingen over deze gebruiker" - -#: lib/RT/Transaction_Overlay.pm:621 -msgid "Comments added" -msgstr "Commentaar toegevoegd" - -#: lib/RT/Action/Generic.pm:176 -msgid "Commit Stubbed" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "Compilatie Restricties" - -#: html/Admin/Elements/EditScrip:63 -msgid "Condition" -msgstr "Voorwaarde" - -#: bin/rt-crontool:131 -msgid "Condition matches..." -msgstr "Voorwaarde komt overeen..." - -#: lib/RT/Scrip_Overlay.pm:189 -msgid "Condition not found" -msgstr "Voorwaarde niet gevonden" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Configuratie" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Bevestig" - -#: NOT FOUND IN SOURCE -msgid "ContactInfoSystem" -msgstr "ContactInfoSysteem" - -#: NOT FOUND IN SOURCE -msgid "Contacted date '%1' could not be parsed" -msgstr "Contact datum '%1' kon niet ontleed worden" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Inhoud" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "" - -#: html/Search/Elements/EditSearches:64 -msgid "Copy" -msgstr "" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Correspondentie" - -#: NOT FOUND IN SOURCE -msgid "Correspondence Address" -msgstr "Correspondentieadres" - -#: lib/RT/Transaction_Overlay.pm:617 -msgid "Correspondence added" -msgstr "Correspondentie toegevoegd" - -#: NOT FOUND IN SOURCE -msgid "Correspondence not recorded" -msgstr "Correspondentie niet bewaard" - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. " -msgstr "Kan het nieuw custom field niet toevoegen voor dit ticket. " - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. %1 " -msgstr "Kan het nieuw custom field niet toevoegen voor dit ticket. %1" - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "Kan de nieuwe waarde voor dit custom field niet toevoegen" - -#: lib/RT/Record.pm:1660 -#. (, $value_msg) -msgid "Could not add new custom field value. %1 " -msgstr "Kan het nieuwe custom field niet toevoegen. %1 " - -#: lib/RT/Ticket_Overlay.pm:2993 lib/RT/Ticket_Overlay.pm:3001 lib/RT/Ticket_Overlay.pm:3018 -msgid "Could not change owner. " -msgstr "Kan de eigenaar niet wijzigen. " - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Kan custom field niet creëren" - -#: 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 "Kan de groep niet creëren" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "Kan het sjabloon niet creëren: %1" - -#: lib/RT/Ticket_Overlay.pm:1052 lib/RT/Ticket_Overlay.pm:397 -msgid "Could not create ticket. Queue not set" -msgstr "Kan het ticket niet creëren. Queue niet ingesteld" - -#: lib/RT/User_Overlay.pm:256 lib/RT/User_Overlay.pm:270 lib/RT/User_Overlay.pm:279 lib/RT/User_Overlay.pm:288 lib/RT/User_Overlay.pm:297 lib/RT/User_Overlay.pm:311 lib/RT/User_Overlay.pm:321 lib/RT/User_Overlay.pm:497 -msgid "Could not create user" -msgstr "Kan de gebruiker niet creëren" - -#: NOT FOUND IN SOURCE -msgid "Could not create watcher for requestor" -msgstr "Kan toeschouwer niet creëren voor aanvrager" - -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" -msgstr "Kan geen ticket vinden met id %1" - -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." -msgstr "Kan groep %1 niet vinden. " - -#: lib/RT/Queue_Overlay.pm:742 lib/RT/Ticket_Overlay.pm:1394 -msgid "Could not find or create that user" -msgstr "Kan deze gebruiker niet vinden of creëren" - -#: lib/RT/Queue_Overlay.pm:803 lib/RT/Ticket_Overlay.pm:1475 -msgid "Could not find that principal" -msgstr "Kan deze hoofdgebruiker niet vinden" - -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." -msgstr "Kan gebruiker %1 niet vinden." - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "Kan custom field %1 niet laden" - -#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 -msgid "Could not load group" -msgstr "Kan groep niet laden" - -#: lib/RT/SavedSearch.pm:120 -#. ($privacy) -msgid "Could not load object for %1" -msgstr "" - -#: lib/RT/SavedSearch.pm:188 -msgid "Could not load search attribute" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:762 -#. ($args{'Type'}) -msgid "Could not make that principal a %1 for this queue" -msgstr "Kan deze hoofdgebruiker geen %1 maken voor deze queue" - -#: lib/RT/Ticket_Overlay.pm:1415 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "Kan deze hoofdgebruiker geen %1 maken voor dit ticket" - -#: lib/RT/Queue_Overlay.pm:861 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Kan deze hoofdgebruiker niet verwijderen als %1 voor deze queue" - -#: NOT FOUND IN SOURCE -msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Kan deze hoofdgebruiker niet verwijderen als %1 voor dit ticket" - -#: lib/RT/User_Overlay.pm:192 -msgid "Could not set user info" -msgstr "Kan gebruikersinformatie niet toewijzen" - -#: lib/RT/Group_Overlay.pm:1003 -msgid "Couldn't add member to group" -msgstr "Kan gebruiker niet toevoegen aan groep" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "Kan geen transactie creëren: %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "Kan niet bepalen welke actie te ondernemen aan de hand van gpg's antwoord\\n" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find group\\n" -msgstr "Kan de groep niet vinden\\n" - -#: lib/RT/Record.pm:954 -msgid "Couldn't find row" -msgstr "Kan de rij niet vinden" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Kan deze hoofdgebruiker niet vinden" - -#: lib/RT/CustomField_Overlay.pm:408 -msgid "Couldn't find that value" -msgstr "Kan die waarde niet vinden" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find that watcher" -msgstr "Kan die toeschouwer niet vinden" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "Kan gebruiker niet vinden\\n" - -#: lib/RT/CurrentUser.pm:146 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "Kan %1 niet laden uit de gebruikersdatabase.\\n" - -#: html/Admin/CustomFields/UserRights.html:149 -#. ($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 "Kan KeywordSelects niet laden." - -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" -msgstr "Kan het RT configuratie bestand niet laden '%1' %2" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "Kan de scrips niet laden" - -#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 -#. ($id) -msgid "Couldn't load group %1" -msgstr "Kan de groep %1 niet laden" - -#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 -msgid "Couldn't load link" -msgstr "Kan de link niet laden" - -#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 -#. ($id) -msgid "Couldn't load object %1" -msgstr "Kan het object %1 niet laden" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "Kan de queue niet laden" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "Kan de queue %1 niet laden " - -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "Kan het scrip niet laden" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load template" -msgstr "Kan het sjabloon niet laden" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load that user (%1)" -msgstr "Kan de gebruiker (%1) niet laden" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "Kan ticket '%1' niet laden" - -#: lib/RT/Ticket_Overlay.pm:2590 -#. ($args{'Base'}) -msgid "Couldn't resolve base '%1' into a URI." -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2589 -#. ($args{'Target'}) -msgid "Couldn't resolve target '%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:132 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:167 html/Ticket/Create.html:234 -msgid "Create" -msgstr "Creëer" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Creëer Tickets" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Creëer een custom field" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "Creëer een niuew Specifiek Veld" - -#: NOT FOUND IN SOURCE -msgid "Create a new global Scrip" -msgstr "Creëer een nieuw globaal Scrip" - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Creëer een nieuwe groep" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Creëer een nieuwe persoonlijke groep" - -#: NOT FOUND IN SOURCE -msgid "Create a new queue" -msgstr "Creëer een nieuwe queue" - -#: NOT FOUND IN SOURCE -msgid "Create a new scrip" -msgstr "Creëer een nieuw scrip" - -#: NOT FOUND IN SOURCE -msgid "Create a new template" -msgstr "Creëer een nieuw template" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:59 -msgid "Create a new ticket" -msgstr "Creëer een nieuw ticket" - -#: html/Admin/Users/Modify.html:248 html/Admin/Users/Modify.html:303 -msgid "Create a new user" -msgstr "Creëer een nieuwe gebruiker" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Creëer een queue" - -#: NOT FOUND IN SOURCE -msgid "Create a queue called" -msgstr "Creëer een queue genaamd" - -#: NOT FOUND IN SOURCE -msgid "Create a request" -msgstr "Creëer een verzoek" - -#: html/Admin/Queues/Scrip.html:80 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Creëer een scrip voor queue %1" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Creëer een sjabloon" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Maak een ticket aan" - -#: NOT FOUND IN SOURCE -msgid "Create failed: %1 / %2 / %3 " -msgstr "Creatie mislukt: %1 / %2 / %3 " - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Creëer nieuwe tickets gebaseerd op het sjabloon van dit scrip" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Creëer ticket" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Create tickets in this queue" -msgstr "Creëer tickets in deze queue" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Creëer, verwijder en wijzig custom fields" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Create, delete and modify queues" -msgstr "Creëer, verwijder en wijzig queues" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify the members of personal groups" -msgstr "Creëer, verwijder en wijzig de leden van persoonlijke groepen" - -#: lib/RT/System.pm:82 -msgid "Create, delete and modify users" -msgstr "Creëer, verwijder en wijzig gebruikers" - -#: lib/RT/System.pm:88 -msgid "CreateSavedSearch" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "CreateTicket" -msgstr "Creëer ticket" - -#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1146 -msgid "Created" -msgstr "Gecreëerd" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "Custom field %1 gecreëerd" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "Aangemaakt in een tijdvenster" - -#: NOT FOUND IN SOURCE -msgid "Created template %1" -msgstr "Sjabloon %1 Gecreëerd" - -#: html/Tools/Reports/CreatedByDates.html:7 -msgid "Created tickets in period, grouped by status" -msgstr "" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Aanvrager" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Huidige Relaties" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Huidige Scrips" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Huidige leden" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Huidige rechten" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Current search criteria" -msgstr "Huidige zoekcriteria" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Huidige toeschouwers" - -#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "Custom fields" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "Custom fields voor %1" - -#: html/Admin/Elements/EditScrip:123 -msgid "Custom action cleanup code" -msgstr "Specifieke actie opruim code" - -#: html/Admin/Elements/EditScrip:115 -msgid "Custom action preparation code" -msgstr "Specifieke actie voorbereidings code" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom condition" -msgstr "Specifieke voorwaarde" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 %2 %3" -msgstr "Specifiek veld %1 %2 %3" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 does not apply to this object" -msgstr "Specifiek Veld %1 is niet van toepassing op dit object" - -#: lib/RT/Tickets_Overlay.pm:2411 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "Specifiek veld %1 heeft een waarde." - -#: lib/RT/Tickets_Overlay.pm:2407 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "Specifiek veld %1 heeft geen waarde." - -#: lib/RT/Record.pm:1593 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Specifiek veld %1 niet gevonden" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Specifiek veld niet gevonden" - -#: lib/RT/CustomField_Overlay.pm:1155 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Specifiek veld waarde %1 kon niet gevonden worden voor custom field %2" - -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "Specifiek veld waarde veranderd van %1 naar %2" - -#: lib/RT/CustomField_Overlay.pm:418 -msgid "Custom field value could not be deleted" -msgstr "Specifiek veld waarde kon niet verwijderd worden" - -#: lib/RT/CustomField_Overlay.pm:1167 -msgid "Custom field value could not be found" -msgstr "Specifiek veld waarde kon niet gevonden worden" - -#: lib/RT/CustomField_Overlay.pm:1169 lib/RT/CustomField_Overlay.pm:416 -msgid "Custom field value deleted" -msgstr "Specifiek veld waarde verwijderd" - -#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:625 -msgid "CustomField" -msgstr "Custom field" - -#: html/Prefs/MyRT.html:70 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75 -msgid "Customize" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Data error" -msgstr "Data fout" - -#: html/SelfService/Display.html:61 html/Ticket/Create.html:202 html/Ticket/Elements/ShowSummary:81 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65 -msgid "Dates" -msgstr "Data" - -#: lib/RT/Date.pm:448 -msgid "Dec." -msgstr "Dec." - -#: NOT FOUND IN SOURCE -msgid "December" -msgstr "December" - -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" -msgstr "Standaard Auto-antwoord Sjabloon" - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Standaard queue" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Standaard aanvrager" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Standaard admin commentaar sjabloon" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Standaard admin correspondentie sjabloon" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Standaard correspondentie sjabloon" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Standaard transactie sjabloon" - -#: NOT FOUND IN SOURCE -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Standaard: %1/%2 verandered van %3 naar %4" - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Delegeer rechten" - -#: lib/RT/System.pm:85 -msgid "Delegate specific rights which have been granted to you." -msgstr "Delegeer specifieke rechten die aan u verleend zijn." - -#: lib/RT/System.pm:85 -msgid "DelegateRights" -msgstr "DelegeerRechten" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Delegeren" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:205 -msgid "Delete" -msgstr "Verwijderen" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "" - -#: lib/RT/SavedSearch.pm:211 -#. ($msg) -msgid "Delete failed: %1" -msgstr "" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Delete tickets" -msgstr "Verwijder tickets" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "DeleteTicket" -msgstr "VerwijderTicket" - -#: lib/RT/SavedSearch.pm:209 -msgid "Deleted search" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object could break referential integrity" -msgstr "Het verwijderen van dit object zou de referentiële integriteit kunnen ondermijnen" - -#: lib/RT/Queue_Overlay.pm:395 -msgid "Deleting this object would break referential integrity" -msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermijnen" - -#: lib/RT/User_Overlay.pm:513 -msgid "Deleting this object would violate referential integrity" -msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermijnen" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity." -msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermijnen" - -#: html/Approvals/Elements/Approve:69 -msgid "Deny" -msgstr "Wijs af" - -#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "Afhankelijkheid van" - -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "Afhankelijkheden: \\n" - -#: lib/RT/Transaction_Overlay.pm:705 -#. ($value) -msgid "Dependency by %1 added" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:745 -#. ($value) -msgid "Dependency by %1 deleted" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:702 -#. ($value) -msgid "Dependency on %1 added" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:742 -#. ($value) -msgid "Dependency on %1 deleted" -msgstr "" - -#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:219 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46 -msgid "Depends on" -msgstr "Is afhankelijk van" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "Aflopend" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Aflopend" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:151 -msgid "Describe the issue below" -msgstr "Omschrijf onderstaande kwestie" - -#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:56 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70 -msgid "Description" -msgstr "Omschrijving" - -#: NOT FOUND IN SOURCE -msgid "Details" -msgstr "Details" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Toon" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Display Access Control List" -msgstr "Toon de toegangscontrole lijst" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Toon de kolommen" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Display Scrip templates for this queue" -msgstr "Toon de scrip template voor deze queue" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "Display Scrips for this queue" -msgstr "Toon de scrips voor deze queue" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Toon de modus" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "Toon de bewaarde zoekopdrachten voor deze groep" - -#: NOT FOUND IN SOURCE -msgid "Display ticket #%1" -msgstr "Toon ticket #%1" - -#: html/Elements/Footer:62 -msgid "Distributed under version 2 of the GNU GPL." -msgstr "Gedistribueerd onder versie 2 van de GNU GPL." - -#: lib/RT/System.pm:76 -msgid "Do anything and everything" -msgstr "Doe iets en alles" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Ververs deze pagina niet" - -#: NOT FOUND IN SOURCE -msgid "Don't show search results" -msgstr "Toon zoekresultaten niet" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Download" - -#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Download als een met tabs gescheiden bestand" - -#: html/Elements/SelectDateType:53 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:88 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1150 -msgid "Due" -msgstr "Verwacht" - -#: NOT FOUND IN SOURCE -msgid "Due date '%1' could not be parsed" -msgstr "Verwachte datum '%1' kon niet ontleed worden" - -#: NOT FOUND IN SOURCE -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "FOUT: Kan ticket '%1' niet laden: %2.\\n" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Wijzig" - -#: 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 "Wijzig custom fields voor %1" - -#: html/Admin/Global/CustomFields/Groups.html:9 -msgid "Edit Custom Fields for all groups" -msgstr "" - -#: html/Admin/Global/CustomFields/Users.html:9 -msgid "Edit Custom Fields for all users" -msgstr "" - -#: html/Admin/Global/CustomFields/Queue-Tickets.html:9 html/Admin/Global/CustomFields/Queue-Transactions.html:9 -msgid "Edit Custom Fields for tickets in all queues" -msgstr "" - -#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Wijzig Relaties" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Wijzig Zoekopdracht" - -#: html/Ticket/Elements/Tabs:207 -msgid "Edit Search" -msgstr "Wijzig zoekopdracht" - -#: html/Admin/Queues/Templates.html:63 -#. ($QueueObj->Name) -msgid "Edit Templates for queue %1" -msgstr "" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Wijzig systeem sjablonen" - -#: NOT FOUND IN SOURCE -msgid "Edit templates for %1" -msgstr "Wijzig sjablonen voor %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "WijzigOpgeslagenZoekopdrachten" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "Bezig met wijzigen van de configuratie voor queue %1" - -#: NOT FOUND IN SOURCE -msgid "Editing Configuration for user %1" -msgstr "Bezit met het wijzigen van de configuratie voor gebruiker %1" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Bezit met het wijzigen van custom field %1" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Bezit met het wijzigen van lidmaatschap voor groep %1" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Bezit met het wijzigen van lidmaatschap voor persoonlijke groep %1" - -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "Bezit met het wijzigen van sjabloon %1" - -#: lib/RT/Record.pm:1296 lib/RT/Record.pm:1373 -msgid "Either base or target must be specified" -msgstr "Of basis of doel moeten gespecificeerd zijn" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "E-mail" - -#: lib/RT/User_Overlay.pm:236 -msgid "Email address in use" -msgstr "E-mailadres in gebruik" - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "E-mail adres" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "E-mailCodering" - -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Actief (Het uitzetten van dit vinkje deactiveert dit custom field)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Actief (Het uitzetten van dit vinkje deactiveert deze groep)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Actief (Het uitzetten van dit vinkje deactiveert deze queue)" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Actieve queues" - -#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:339 html/User/Groups/Modify.html:138 -#. (loc_fuzzy($msg)) -msgid "Enabled status %1" -msgstr "Actieve status %1" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Voer meerdere waarden in" - -#: 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 "Voer één waarde in" - -#: 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 "Vul tickets of URIs in om deze tickets aan te koppelen. Scheidt meerdere elementen met spaties." - -#: 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 "Fout" - -#: lib/RT/Queue_Overlay.pm:673 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Fout in paramaters naar Queue->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Fout in paramaters naar Queue->DelWatcher" - -#: lib/RT/Queue_Overlay.pm:834 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:1343 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Fout in paramaters naar Ticket->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "Fout in paramaters naar Ticket->DelWatcher" - -#: lib/RT/Ticket_Overlay.pm:1509 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "" - -#: bin/rt-crontool:233 -msgid "Escalate tickets" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Iedereen" - -#: bin/rt-crontool:219 -msgid "Example:" -msgstr "Voorbeeld:" - -#: NOT FOUND IN SOURCE -msgid "ExternalAuthId" -msgstr "ExternAuteurId" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr "ExternContactInfoId" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Extra informatie" - -#: lib/RT/SavedSearch.pm:165 -msgid "Failed to create search attribute" -msgstr "" - -#: lib/RT/User_Overlay.pm:377 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Kan de gebruikers pseudogroep 'Privileged' niet vinden." - -#: lib/RT/User_Overlay.pm:384 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Kan de gebruikers pseudogroep 'Unprivileged' niet vinden." - -#: bin/rt-crontool:163 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "Kan module %1 niet laden. (%2)" - -#: lib/RT/SavedSearch.pm:168 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "" - -#: lib/RT/Date.pm:438 -msgid "Feb." -msgstr "Feb." - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "Bestandsnaam" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Vul meerdere tekst velden" - -#: lib/RT/CustomField_Overlay.pm:74 -msgid "Fill in multiple wikitext areas" -msgstr "Vul meerdere wikitekst velden" - -#: lib/RT/CustomField_Overlay.pm:70 -msgid "Fill in one text area" -msgstr "Vul één tekst veld" - -#: lib/RT/CustomField_Overlay.pm:75 -msgid "Fill in one wikitext area" -msgstr "Vul één wiki tekst veld" - -#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118 -msgid "Fill in this field with a URL." -msgstr "Vul dit veld met een URL" - -#: lib/RT/CustomField_Overlay.pm:71 -msgid "Fill in up to %1 text areas" -msgstr "Vul tot %1 tekst velden" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "Vul tot %1 wiki tekst velden" - -#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 lib/RT/Tickets_Overlay.pm:1828 -msgid "Final Priority" -msgstr "Uiteindelijke prioriteit" - -#: lib/RT/Ticket_Overlay.pm:1141 -msgid "FinalPriority" -msgstr "Uiteindelijke prioriteit" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Zoek groepen waarvan" - -#: NOT FOUND IN SOURCE -msgid "Find new/open tickets" -msgstr "Zoek nieuwe/open tickets" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Zoek mensen waarvan" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Zoek tickets" - -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "Beëindig Goedkeuring" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Eerste" - -#: NOT FOUND IN SOURCE -msgid "First page" -msgstr "Eerste pagina" - -#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 -msgid "Foo Bar Baz" -msgstr "Aap Noot Mies" - -#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 -msgid "Foo!" -msgstr "Aap!" - -#: html/Search/Bulk.html:83 -msgid "Force change" -msgstr "" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Formaat" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "" - -#: lib/RT/Record.pm:957 -msgid "Found Object" -msgstr "Gevonden Object" - -#: NOT FOUND IN SOURCE -msgid "Freeform" -msgstr "Vrije vorm" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "Vrije vorm contact informatie" - -#: NOT FOUND IN SOURCE -msgid "FreeformMultiple" -msgstr "VrijevormMeerdere" - -#: lib/RT/Date.pm:417 -msgid "Fri." -msgstr "Vr." - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Volledige Kop" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Vul sjabloon vanuit bestand" - -#: NOT FOUND IN SOURCE -msgid "Getting the current user from a pgp sig\\n" -msgstr "Bezig met het ophalen van de huidige gebruiker middels een pgp handtekening" - -#: lib/RT/Transaction_Overlay.pm:671 -#. ($New->Name) -msgid "Given to %1" -msgstr "Aan %1 gegeven" - -#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 -msgid "Global" -msgstr "Globaal" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "Globaal custom fields" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "" - -#: html/Admin/Elements/SelectTemplate:59 -#. (loc($Template->Name)) -msgid "Global template: %1" -msgstr "Globaal sjabloon: %1" - -#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89 -msgid "Go" -msgstr "Ga" - -#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57 -msgid "Go!" -msgstr "Ga!" - -#: NOT FOUND IN SOURCE -msgid "Good pgp sig from %1\\n" -msgstr "Goede pgp handtekening van %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Goto page" -msgstr "Ga naar pagina" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Ga naar ticket" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Groep" - -#: NOT FOUND IN SOURCE -msgid "Group %1 %2: %3" -msgstr "Groep %1 %2: %3" - -#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Groeps rechten" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Groep heeft al een lid" - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "Groep kon niet gecreërd worden: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Groep gecreërd" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Groep heeft geen lid onder die naam" - -#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:749 lib/RT/Queue_Overlay.pm:809 lib/RT/Ticket_Overlay.pm:1401 lib/RT/Ticket_Overlay.pm:1481 -msgid "Group not found" -msgstr "Groep niet gevonden" - -#: NOT FOUND IN SOURCE -msgid "Group not found.\\n" -msgstr "Groep niet gevonden.\\n" - -#: NOT FOUND IN SOURCE -msgid "Group not specified.\\n" -msgstr "Groep niet gespecificeerd.\\n" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1208 -msgid "Groups" -msgstr "Groepen" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Groepen kunnen geen leden zijn van hun leden" - -#: html/Admin/Groups/index.html:82 -msgid "Groups matching search criteria" -msgstr "" - -#: html/Ticket/Elements/ShowRequestor:77 -msgid "Groups this user belongs to" -msgstr "Groepen waar deze gebruiker deel van uitmaakt" - -#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 -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 "Geschiedenis" - -#: 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 "ThuisNummer" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Startpagina" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "Uren" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "Ik heb %quant(%1,betonmixer)." - -#: html/Search/Build.html:400 -msgid "I'm lost" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1753 -msgid "Id" -msgstr "Id" - -#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 -msgid "Identity" -msgstr "Identiteit" - -#: etc/initialdata:429 -msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "Als een goedkeuring afgewezen is, wijs het origineel af en verwijder goedkeuringen die in behandeling zijn" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "Indien geen aanvrager is gespecificeerd, maak dan de tickets aan met deze aanvrager" - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Creëer tickets in deze queue indien geen queue is opgegeven." - -#: bin/rt-crontool:215 -msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT." -msgstr "Als dit gereedschap setgid zou zijn, zou een kwaadwillende lokale gebruiker dit gereedschap kunnen gebruiken om administratieve toegang te verkrijgen tot RT" - -#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60 -msgid "If you've updated anything above, be sure to" -msgstr "Als u een van de bovenstaande elemented ververst heeft, zorg dan dat u" - -#: lib/RT/Record.pm:948 -msgid "Illegal value for %1" -msgstr "Illegale waarde voor %1" - -#: NOT FOUND IN SOURCE -msgid "Image" -msgstr "Afbeelding" - -#: lib/RT/Record.pm:951 -msgid "Immutable field" -msgstr "Niet-wijzigbaar veld" - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Neem inactieve groepen op in de weergave." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Neem inactieve queues op in de weergave." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Neem inactieve gebruikers op in de zoek opdracht" - -#: html/Admin/CustomFields/Modify.html:113 -msgid "Include page" -msgstr "Pagina toevoegen" - -#: html/Search/Build.html:426 -msgid "Incomplete Query" -msgstr "Incomplete query" - -#: html/Search/Build.html:423 -msgid "Incomplete query" -msgstr "Incomplete query" - -#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1803 -msgid "Initial Priority" -msgstr "Initiële prioriteit" - -#: lib/RT/Ticket_Overlay.pm:1140 lib/RT/Ticket_Overlay.pm:1142 -msgid "InitialPriority" -msgstr "Initiële prioriteit" - -#: lib/RT/ScripAction_Overlay.pm:134 -msgid "Input error" -msgstr "Invoer fout" - -#: html/Elements/ValidateCustomFields:23 lib/RT/CustomField_Overlay.pm:1019 lib/RT/CustomField_Overlay.pm:1160 -#. ($self->FriendlyPattern) -#. ($CF->FriendlyPattern) -msgid "Input must match %1" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3448 -msgid "Internal Error" -msgstr "Interne Fout" - -#: lib/RT/Record.pm:309 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Interne Fout: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Ongeldig Groep Type" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Ongeldig Recht" - -#: NOT FOUND IN SOURCE -msgid "Invalid Type" -msgstr "Ongeldig Type" - -#: lib/RT/Record.pm:953 -msgid "Invalid data" -msgstr "Ongeldige data" - -#: NOT FOUND IN SOURCE -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Ongeldige eigenaar. Val terug op 'nobody'." - -#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:677 -#. ($msg) -msgid "Invalid pattern: %1" -msgstr "Ongeldig patroon: %1" - -#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:244 -msgid "Invalid queue" -msgstr "Ongeldige queue" - -#: lib/RT/ACE_Overlay.pm:265 lib/RT/ACE_Overlay.pm:274 lib/RT/ACE_Overlay.pm:280 lib/RT/ACE_Overlay.pm:291 -msgid "Invalid right" -msgstr "Ongeldige recht" - -#: lib/RT/Record.pm:284 -#. ($key) -msgid "Invalid value for %1" -msgstr "Ongeldige waarde voor %1" - -#: lib/RT/Record.pm:1611 -msgid "Invalid value for custom field" -msgstr "Ongeldige waarde voor custom field" - -#: lib/RT/Ticket_Overlay.pm:414 -msgid "Invalid value for status" -msgstr "Ongeldige waarde voor status" - -#: bin/rt-crontool:216 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Het is ontzettend belangrijk dat onbevoorrechtigde gebruikers geen toestemming hebben om dit gereedschap te gebruiken." - -#: bin/rt-crontool:217 -msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool." -msgstr "We stellen voor dat u een onbevoorrechtigde unix gebruiker aanmaakt met het juiste groep lidmaatschap en RT toegang om dit gereedschap te gebruiken." - -#: bin/rt-crontool:188 -msgid "It takes several arguments:" -msgstr "Het accepteerd meerdere argumenten:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" -msgstr "Zaken die wachten op mijn goedkeuring" - -#: lib/RT/Date.pm:437 -msgid "Jan." -msgstr "Jan." - -#: NOT FOUND IN SOURCE -msgid "January" -msgstr "Januari" - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Sluit u aan of verlaat deze groep" - -#: lib/RT/Date.pm:443 -msgid "Jul." -msgstr "Jul." - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Jumbo" - -#: lib/RT/Date.pm:442 -msgid "Jun." -msgstr "Jun." - -#: NOT FOUND IN SOURCE -msgid "Keyword" -msgstr "Sleutelwoord" - -#: NOT FOUND IN SOURCE -msgid "Lang" -msgstr "Taal" - -#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 -msgid "Language" -msgstr "Taal" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Laatste" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Laatste Contact" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Laatste contact" - -#: NOT FOUND IN SOURCE -msgid "Last Notified" -msgstr "Laatste bericht" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Laatste aanpassing" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "Laatste aangepast door" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Over" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Geef deze gebruiker toegang tot RT" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Geef deze gebruiker rechten" - -#: NOT FOUND IN SOURCE -msgid "Limiting owner to %1 %2" -msgstr "Eigenaar wordt gelimieteerd tot %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Limiting queue to %1 %2" -msgstr "Queue wordt gelimiteerd tot %1 %2" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "" - -#: lib/RT/Record.pm:1307 -msgid "Link already exists" -msgstr "Koppeling bestaat al" - -#: lib/RT/Record.pm:1321 -msgid "Link could not be created" -msgstr "Koppeling kon niet gecreëerd worden" - -#: lib/RT/Record.pm:1327 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Koppeling gecreëerd (%1)" - -#: lib/RT/Record.pm:1388 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Koppelink verwijderd (%1)" - -#: lib/RT/Record.pm:1394 -msgid "Link not found" -msgstr "Koppeling niet gevonden" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Koppel ticket #%1" - -#: html/Admin/CustomFields/Modify.html:102 -msgid "Link values to" -msgstr "Link waarden aan" - -#: html/Ticket/Create.html:215 html/Ticket/Elements/ShowSummary:87 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 -msgid "Links" -msgstr "Koppelingen" - -#: html/Search/Elements/EditSearches:73 -msgid "Load" -msgstr "Laden" - -#: html/Search/Elements/EditSearches:71 -msgid "Load saved search:" -msgstr "Laad opgeslagen zoekopdracht:" - -#: lib/RT/System.pm:87 -msgid "LoadSavedSearch" -msgstr "Laad opgeslagen zoekopdracht" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Laad perl modules" - -#: lib/RT/SavedSearch.pm:112 -#. ($self->Name) -msgid "Loaded search %1" -msgstr "Geladen zoekopdracht %1" - -#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 -msgid "Location" -msgstr "Locatie" - -#: NOT FOUND IN SOURCE -msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "Log folder %1 niet gevonden of niet toegankelijk.\\n RT kan niet starten." - -#: html/Elements/Header:86 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "Aangemeld als %1" - -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Aanmelden" - -#: html/Elements/Header:96 -msgid "Logout" -msgstr "Afmelden" - -#: lib/RT/CustomField_Overlay.pm:931 -msgid "Lookup type mismatch" -msgstr "Lookup type komt niet overeen" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Maak Eigenaar" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Maak Status" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Maak verwachtingsdatum" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Make oplossingsdatum" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Maak startdatum" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Maak datum gestart" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Maak datum gemeld" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Maak prioriteit" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Maak queue" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Maak onderwerp" - -#: 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 "Beheer van custom fields" - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Beheer van groepen" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Beheer van eigenschappen en configuraties die betrekking hebben op alle queues" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Beheer van queues" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Beheer van gebruikers" - -#: lib/RT/Date.pm:439 -msgid "Mar." -msgstr "Maa." - -#: NOT FOUND IN SOURCE -msgid "March" -msgstr "Maart" - -#: NOT FOUND IN SOURCE -msgid "May" -msgstr "Mei" - -#: lib/RT/Date.pm:441 -msgid "May." -msgstr "Mei." - -#: lib/RT/Transaction_Overlay.pm:718 -#. ($value) -msgid "Member %1 added" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:758 -#. ($value) -msgid "Member %1 deleted" -msgstr "" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Lid toegevoegd" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Lid verwijderd" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Lid niet verwijderd" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Lid van" - -#: NOT FOUND IN SOURCE -msgid "HasMember" -msgstr "Bevat lid" - -msgid "MemberOf" -msgstr "Lid van" - -msgid "DependedOnBy" -msgstr "Afhankelijkheid voor" - -msgid "DependsOn" -msgstr "Afhankelijk van" - -msgid "RefersTo" -msgstr "Verwijst naar" - -msgid "ReferredToBy" -msgstr "Verwezen vanaf" - -msgid "LinkedTo" -msgstr "Gekoppeld aan" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Leden" - -#: lib/RT/Transaction_Overlay.pm:715 -#. ($value) -msgid "Membership in %1 added" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:755 -#. ($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:2838 -msgid "Merge Successful" -msgstr "Samenvoeging Succesvol" - -#: lib/RT/Ticket_Overlay.pm:2725 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Samenvoeging mislukt. Kan EffectiefId niet instellen" - -#: lib/RT/Ticket_Overlay.pm:2733 -msgid "Merge failed. Couldn't set Status" -msgstr "" - -#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Voeg samen in" - -#: lib/RT/Transaction_Overlay.pm:721 -#. ($value) -msgid "Merged into %1" -msgstr "Samengevoegd tot %1" - -#: html/Search/Bulk.html:143 html/Ticket/Update.html:118 -msgid "Message" -msgstr "Bericht" - -#: html/Ticket/Elements/ShowTransactionAttachments:163 -msgid "Message body not shown because it is too large or is not plain text." -msgstr "Bericht inhoud niet weergegeven omdat het te groot is of niet in platte tekst" - -#: lib/RT/Ticket_Overlay.pm:2416 -msgid "Message could not be recorded" -msgstr "bericht kon niet opgeslagen worden" - -#: lib/RT/Ticket_Overlay.pm:2419 -msgid "Message recorded" -msgstr "Bericht opgeslagen" - -#: html/Ticket/Elements/PreviewScrips:117 -msgid "Messages about this ticket will not be sent to..." -msgstr "Berichten over dit ticket worden niet verzonden aan..." - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -msgstr "Minuten" - -#: html/Search/Build.html:430 -msgid "Mismatched parentheses" -msgstr "" - -#: lib/RT/Record.pm:955 -msgid "Missing a primary key?: %1" -msgstr "Mist primaire sleutel?: %1" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Mobiel" - -#: NOT FOUND IN SOURCE -msgid "MobilePhone" -msgstr "MobieleTelefoon" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify Access Control List" -msgstr "Wijzig Toegangs Controle Lijst" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "Wijzig Specifiek Veld %1" - -#: html/Admin/Elements/ObjectCustomFields:96 -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "Wijzig custom fields die betrekking hebben op %1 voor alle %2" - -#: html/Admin/Elements/ObjectCustomFields:98 -#. (loc(lc($Types))) -msgid "Modify Custom Fields which apply to all %1" -msgstr "Wijzig custom fields die betrekking hebben op alle %1" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Wijzig groep rechten" - -#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Wijzig leden" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Wijzig rechten" - -#: lib/RT/Queue_Overlay.pm:98 -msgid "Modify Scrip templates for this queue" -msgstr "Wijzit Scrip sjabloon voor deze queue" - -#: lib/RT/Queue_Overlay.pm:101 -msgid "Modify Scrips for this queue" -msgstr "Wijzig Scrips voor deze queue" - -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" -msgstr "Wijzig Sjabloon %1" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "Wijzig een Specifiek Veld voor deze queue %1" - -#: html/Admin/Queues/Scrip.html:75 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "Wijzig een scrip voor deze queue %1" - -#: html/Admin/Global/Scrip.html:69 -msgid "Modify a scrip which applies to all queues" -msgstr "Wijzig een scrip die betrekking heeft op alle queues" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "Wijzig objecten geassocieerd aan %1" - -#: NOT FOUND IN SOURCE -msgid "Modify dates for # %1" -msgstr "Wijzig data voor # %1" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "Wijzig data voor #%1" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Wijzig data voor ticket # %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 -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 "Wijzig globale groepsrechten" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Wijzig globale groepsrechten" - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Wijzig globale gebruikersrechten" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Wijzig globale gebruikersrechten" - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Wijzig groepsmetadata of verwijder groep" - -#: html/Admin/CustomFields/GroupRights.html:164 -#. ($CustomFieldObj->Name) -msgid "Modify group rights for custom field %1" -msgstr "Wijzig groepsrechten voor custom field %1" - -#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 -#. ($GroupObj->Name) -msgid "Modify group rights for group %1" -msgstr "Wijzig groepsrechten voor groep %1" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "Wijzig groepsrechten voor queue %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Wijzig lidmaatschap rooster voor dze groep" - -#: lib/RT/System.pm:83 -msgid "Modify one's own RT account" -msgstr "Wijzig uw eigen RT " - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "Wijzig mensen gekoppeld aan queue %1" - -#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57 -#. ($Ticket->id) -#. ($Ticket->Id) -msgid "Modify people related to ticket #%1" -msgstr "Wijzig mensen gekoppeld aan ticket #%1" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Wijzig scrips voor queue %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63 -msgid "Modify scrips which apply to all queues" -msgstr "Wijzig scrips die betrekking hebben op alle queues" - -#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99 -#. (loc($TemplateObj->Name())) -#. ($TemplateObj->id) -msgid "Modify template %1" -msgstr "Wijzig sjabloon %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Wijzig sjablonen die van toepassing zijn op alle queues" - -#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 -#. ($Group->Name) -msgid "Modify the group %1" -msgstr "Wijzig de groep %1" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Modify the queue watchers" -msgstr "Wijzig de toeschouwers van de queue" - -#: html/Admin/Users/Modify.html:298 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "Wijzig de gebruiker %1" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "Wijzig ticket # %1" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "Wijzig ticket #%1" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Modify tickets" -msgstr "Wijzig tickets" - -#: html/Admin/CustomFields/UserRights.html:157 -#. ($CustomFieldObj->Name) -msgid "Modify user rights for custom field %1" -msgstr "Wijzig gebruikersrechten voor custom field %1" - -#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 -#. ($GroupObj->Name) -msgid "Modify user rights for group %1" -msgstr "Wijzig gebruikersrechten voor groep %1" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Wijzig gebruikersrechten voor queue %1" - -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "Wijzig toeschouwers voor queue '%1'" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyACL" -msgstr "WijzigACL" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "" - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "WijzigEigenLidmaatschap" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "ModifyQueueWatchers" -msgstr "Wijzig queue toeschouwers" - -#: lib/RT/Queue_Overlay.pm:101 -msgid "ModifyScrips" -msgstr "Wijzig scrips" - -#: lib/RT/System.pm:83 -msgid "ModifySelf" -msgstr "WijzigZelf" - -#: lib/RT/Queue_Overlay.pm:98 -msgid "ModifyTemplate" -msgstr "WijzigSjabloon" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "ModifyTicket" -msgstr "WijzigTicket" - -#: lib/RT/Date.pm:413 -msgid "Mon." -msgstr "Ma." - -#: html/Ticket/Elements/ShowRequestor:62 -#. ($name) -msgid "More about %1" -msgstr "Meer over %1" - -#: 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 "Meerdere" - -#: lib/RT/User_Overlay.pm:227 -msgid "Must specify 'Name' attribute" -msgstr "Specificeren van 'Naam' attribuut verplicht" - -#: html/SelfService/Elements/MyRequests:69 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "Mijn %1 tickets" - -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "Mijn Goedkeuringen" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Mijn goedkeuringen" - -#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 -msgid "My saved searches" -msgstr "Mijn bewaarde zoekopdrachten" - -#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65 -msgid "Name" -msgstr "Naam" - -#: lib/RT/User_Overlay.pm:234 -msgid "Name in use" -msgstr "Naam in gebruik" - -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "Goedkeuring benodigd van de systeem beheerder" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Nooit" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Nieuw" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Nieuwe Relaties" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Nieuw wachtwoord" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Nieuwe wachtende goedkeuring" - -#: NOT FOUND IN SOURCE -msgid "New Query" -msgstr "Nieuwe zoekopdracht" - -#: html/Ticket/Elements/Tabs:205 -msgid "New Search" -msgstr "Nieuwe zoekopdracht" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Nieuw custom field" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Nieuwe group" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Nieuw wachtwoord" - -#: lib/RT/User_Overlay.pm:817 -msgid "New password notification sent" -msgstr "Bericht voor nieuw wachtwoord verzonden" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Nieuwe queue" - -#: html/Ticket/Elements/Reminders:73 -msgid "New reminder:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "New request" -msgstr "Nieuw verzoek" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Nieuwe rechten" - -#: html/Admin/Global/Scrip.html:61 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:64 html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Nieuw scrip" - -#: NOT FOUND IN SOURCE -msgid "New search" -msgstr "Nieuwe zoekopdracht" - -#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Nieuw sjabloon" - -#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Nieuw ticket" - -#: lib/RT/Ticket_Overlay.pm:2702 -msgid "New ticket doesn't exist" -msgstr "Nieuw ticket bestaat niet" - -#: html/Admin/Elements/UserTabs:78 -msgid "New user" -msgstr "Nieuwe gebruiker" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Nieuwe gebruiker genaamd" - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Nieuwe toeschouwers" - -#: NOT FOUND IN SOURCE -msgid "New window setting" -msgstr "Nieuwe venster instelling" - -#: html/Helpers/CalPopup.html:13 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Volgende" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Volgende pagina" - -#: NOT FOUND IN SOURCE -msgid "Next page" -msgstr "Volgende pagina" - -#: NOT FOUND IN SOURCE -msgid "NickName" -msgstr "Bijnaam" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Bijnaam" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "Geen Klasse gedefinieerd" - -#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "Geen custom field" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Geen custom field gedefinieerd" - -#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Geen Groep gedefinieerd" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "Geen Zoekopdracht" - -#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "Geen queue gedefinieerd" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Geen RT-gebruiker gevonden. Raadpleeg uw RT-beheerder.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Geen Sjabloon" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket " -msgstr "Geen ticket gespecificeerd. Ticket afgebroken " - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket modifications\\n\\n" -msgstr "Geen ticket gespecificeerd. Ticket wijzigingen afgebroken\\n\\n" - -#: html/Approvals/Elements/Approve:73 -msgid "No action" -msgstr "Geen actie" - -#: lib/RT/Record.pm:950 -msgid "No column specified" -msgstr "Geen kolom gespecificeerd" - -#: NOT FOUND IN SOURCE -msgid "No command found\\n" -msgstr "Geen commando gevonden\\n" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Geen commentaar ingevuld over deze gebruiker" - -#: NOT FOUND IN SOURCE -msgid "No correspondence attached" -msgstr "Geen correspondentie aangehecht" - -#: lib/RT/Action/Generic.pm:186 lib/RT/Condition/Generic.pm:198 lib/RT/Search/ActiveTicketsInQueue.pm:78 lib/RT/Search/Generic.pm:135 lib/RT/Search/Googleish.pm:78 -#. (ref $self) -msgid "No description for %1" -msgstr "Geen omschrijving voor %1" - -#: lib/RT/Users_Overlay.pm:191 -msgid "No group specified" -msgstr "Geen groep gespecificeerd" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "Er zijn geen groepen gevonden die voldoen aan het zoek criterium." - -#: lib/RT/Ticket_Overlay.pm:2359 -msgid "No message attached" -msgstr "Geen bericht toegevoegd" - -#: lib/RT/User_Overlay.pm:1035 -msgid "No password set" -msgstr "Geen wachtwoord ingesteld" - -#: lib/RT/Queue_Overlay.pm:362 -msgid "No permission to create queues" -msgstr "Geen rechten om queues te creëren" - -#: lib/RT/Ticket_Overlay.pm:410 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "Geen rechten om tickets te creëren in de queue '%1'" - -#: lib/RT/User_Overlay.pm:187 -msgid "No permission to create users" -msgstr "Geen rechten om gebruikers te creëren" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Geen rechten om dat ticket te tonen" - -#: html/SelfService/Update.html:117 -msgid "No permission to view update ticket" -msgstr "Geen rechten om verversing ticket te bekijken" - -#: lib/RT/Queue_Overlay.pm:796 lib/RT/Ticket_Overlay.pm:1460 -msgid "No principal specified" -msgstr "Geen hoofdgebruiker gespecificeerd" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Geen hoofdgebruikers geselecteerd" - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Geen queues gevonden die aan de zoekcriteria voldoen" - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Geen rechten gevonden" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Geen rechten toegekend" - -#: lib/RT/SavedSearch.pm:187 -msgid "No search loaded" -msgstr "" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Geen zoek opdracht om uit te voeren." - -#: html/Elements/RT__Ticket/ColumnMap:135 html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Geen onderwerp" - -#: NOT FOUND IN SOURCE -msgid "No ticket id specified" -msgstr "Geen ticket id gespecificeerd" - -#: lib/RT/Transaction_Overlay.pm:515 lib/RT/Transaction_Overlay.pm:552 -msgid "No transaction type specified" -msgstr "Geen transactie type gespecificeerd" - -#: NOT FOUND IN SOURCE -msgid "No user or email address specified" -msgstr "Geen gebruiker of email-adres gespecificeerd" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Geen gebruikers gevonden die aan de zoekcriteria voldoen" - -#: NOT FOUND IN SOURCE -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Geen geldige RT gebruiker gevonden. RT cvs behandelaar losgemaakt. Neemt u alstublieft contact op met uw RT beheerder.\\n" - -#: lib/RT/Record.pm:947 -msgid "No value sent to _Set!\\n" -msgstr "Geen waarde gestuurd naar _Set!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Niemand" - -#: lib/RT/Record.pm:952 -msgid "Nonexistant field?" -msgstr "Nietbestaand veld?" - -#: html/Elements/Header:91 -msgid "Not logged in." -msgstr "Niet aangemeld." - -#: lib/RT/Date.pm:393 -msgid "Not set" -msgstr "Niet gezet" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Nog niet geïmplementeerd." - -#: NOT FOUND IN SOURCE -msgid "Not yet implemented...." -msgstr "Nog niet geïmplementeerd...." - -#: html/Approvals/Elements/Approve:77 -msgid "Notes" -msgstr "Notities" - -#: lib/RT/User_Overlay.pm:820 -msgid "Notification could not be sent" -msgstr "Bericht kon niet verstuurd worden" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "Informeer AdminCcs" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "Informeer AdminCcs als Commentaar" - -#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 -msgid "Notify Ccs" -msgstr "Informeer Ccs" - -#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "Informeer Ccs als CC" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "Bericht Andere Ontvangers" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Bericht Andere Ontvangers als Commentaar" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "Bericht Eigenaar" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "Bericht Eigenaar als Commentaar" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "Informeer de eigenaar over hun geweigerde ticket" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "Informeer de eigenaar als hun ticket is geautoriseerd door de approvers" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "Informeer de eigenaar als hun ticket is geautoriseerd door een aprover" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Informeer Eigenaars en AdminCcs over nieuwe zaken welke wachten op hun goedkeuring" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "Informeer aanvragers" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "Informeer aanvragers en Ccs" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "Informeer aanvragers en Ccs als CC" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Informeer aanvragers, Ccs en AdminCcs" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Informeer aanvragers, Ccs en AdminCcs als CC" - -#: lib/RT/Date.pm:447 -msgid "Nov." -msgstr "Nov." - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "" - -#: lib/RT/Record.pm:323 -msgid "Object could not be created" -msgstr "Object kon niet gecreëerd worden" - -#: lib/RT/Record.pm:124 -msgid "Object could not be deleted" -msgstr "" - -#: lib/RT/Record.pm:342 -msgid "Object created" -msgstr "Object gecreëerd" - -#: lib/RT/Record.pm:121 -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:966 -msgid "Object type mismatch" -msgstr "" - -#: lib/RT/Date.pm:446 -msgid "Oct." -msgstr "Okt." - -#: 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 "Op" - -#: lib/RT/Transaction_Overlay.pm:313 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Bij Commentaar" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "Bij Overeenkomst" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Bij Creatie" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Bij Eigenaarwijziging" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Bij queue wijziging" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Bij Oplossing" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Bij Statuswijziging" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Bij Transactie" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Toon alleen goedkeuringen voor verzoeken gecreëerd na %1" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "Toon alleen goedkeuringen voor verzoeken gecreëerd voor %1" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "Toon alleen de custom fields voor:" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Open" - -#: html/Ticket/Elements/Tabs:161 -msgid "Open it" -msgstr "Open" - -#: NOT FOUND IN SOURCE -msgid "Open requests" -msgstr "Open verzoeken" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in a new window" -msgstr "Open tickets (van lijst) in een nieuw venster" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in another window" -msgstr "Open tickets (van lijst) in een ander venster" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Open ticket bij correspondentie" - -#: html/Prefs/MyRT.html:62 -msgid "Options" -msgstr "Opties" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Sorteer op" - -#: NOT FOUND IN SOURCE -msgid "Ordering and sorting" -msgstr "Ordening en sortering" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Organisatie" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Voortgekomen uit ticket: #%1" - -#: lib/RT/Transaction_Overlay.pm:609 -msgid "Outgoing email about a comment recorded" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:613 -msgid "Outgoing email recorded" -msgstr "" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Naar mate de tijd vordert, verschuift de prioriteit richting" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Own tickets" -msgstr "Eigen tickets" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "OwnTicket" -msgstr "EigenTicket" - -#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/SelfService/Elements/MyRequests:51 html/Ticket/Create.html:71 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:84 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:111 lib/RT/Tickets_Overlay.pm:1993 -msgid "Owner" -msgstr "Eigenaar" - -#: NOT FOUND IN SOURCE -msgid "Owner changed from %1 to %2" -msgstr "Eigenaar veranderd van %1 naar %2" - -#: lib/RT/Ticket_Overlay.pm:496 -msgid "Owner could not be set." -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:659 -#. ($Old->Name , $New->Name) -msgid "Owner forcibly changed from %1 to %2" -msgstr "Eigenaar gedwongen veranderd van %1 naar %2" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "Eigenaar is" - -#: html/Elements/TicketList:78 -#. ($Page, int($TotalFound/$Rows)+$oddRows) -msgid "Page %1 of %2" -msgstr "Pagina %1 van %2" - -#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96 -msgid "Pager" -msgstr "Pieper" - -#: NOT FOUND IN SOURCE -msgid "PagerPhone" -msgstr "Pieper" - -#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "Ouders" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Wachtwoord" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Wachtwoord Herinnering" - -#: lib/RT/Transaction_Overlay.pm:768 lib/RT/User_Overlay.pm:1046 -msgid "Password changed" -msgstr "" - -#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 -#. ($RT::MinimumPasswordLength) -msgid "Password needs to be at least %1 characters long" -msgstr "" - -#: lib/RT/User_Overlay.pm:1045 -msgid "Password set" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Password too short" -msgstr "Wachtwoord te kort" - -#: html/User/Prefs.html:239 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Wachtwoord: %1" - -#: lib/RT/User_Overlay.pm:1031 -msgid "Password: Permission Denied" -msgstr "" - -#: html/Admin/Users/Modify.html:353 -msgid "Passwords do not match." -msgstr "" - -#: html/User/Prefs.html:241 -msgid "Passwords do not match. Your password has not been changed" -msgstr "" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Mensen" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Verricht een gebruiker gedefiniëerde actie" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Perl-configuratie" - -#: lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:581 lib/RT/ACE_Overlay.pm:591 lib/RT/ACE_Overlay.pm:601 lib/RT/ACE_Overlay.pm:666 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:117 lib/RT/CurrentUser.pm:126 lib/RT/CustomField_Overlay.pm:1015 lib/RT/CustomField_Overlay.pm:1136 lib/RT/CustomField_Overlay.pm:1279 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:402 lib/RT/CustomField_Overlay.pm:762 lib/RT/CustomField_Overlay.pm:935 lib/RT/CustomField_Overlay.pm:970 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1055 lib/RT/Queue_Overlay.pm:141 lib/RT/Queue_Overlay.pm:159 lib/RT/Queue_Overlay.pm:658 lib/RT/Queue_Overlay.pm:668 lib/RT/Queue_Overlay.pm:682 lib/RT/Queue_Overlay.pm:820 lib/RT/Queue_Overlay.pm:829 lib/RT/Queue_Overlay.pm:842 lib/RT/Scrip_Overlay.pm:150 lib/RT/Scrip_Overlay.pm:161 lib/RT/Scrip_Overlay.pm:226 lib/RT/Scrip_Overlay.pm:540 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1328 lib/RT/Ticket_Overlay.pm:1338 lib/RT/Ticket_Overlay.pm:1352 lib/RT/Ticket_Overlay.pm:1493 lib/RT/Ticket_Overlay.pm:1503 lib/RT/Ticket_Overlay.pm:1517 lib/RT/Ticket_Overlay.pm:1634 lib/RT/Ticket_Overlay.pm:1954 lib/RT/Ticket_Overlay.pm:2092 lib/RT/Ticket_Overlay.pm:2262 lib/RT/Ticket_Overlay.pm:2312 lib/RT/Ticket_Overlay.pm:2484 lib/RT/Ticket_Overlay.pm:2555 lib/RT/Ticket_Overlay.pm:2603 lib/RT/Ticket_Overlay.pm:2693 lib/RT/Ticket_Overlay.pm:2707 lib/RT/Ticket_Overlay.pm:2931 lib/RT/Ticket_Overlay.pm:2941 lib/RT/Ticket_Overlay.pm:2946 lib/RT/Ticket_Overlay.pm:3169 lib/RT/Ticket_Overlay.pm:3173 lib/RT/Ticket_Overlay.pm:3316 lib/RT/Ticket_Overlay.pm:3442 lib/RT/Transaction_Overlay.pm:503 lib/RT/Transaction_Overlay.pm:510 lib/RT/Transaction_Overlay.pm:538 lib/RT/Transaction_Overlay.pm:545 lib/RT/User_Overlay.pm:1184 lib/RT/User_Overlay.pm:1793 lib/RT/User_Overlay.pm:370 lib/RT/User_Overlay.pm:736 lib/RT/User_Overlay.pm:775 -msgid "Permission Denied" -msgstr "Toestemming Geweigerd" - -#: 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 "Persoonlijke Groepen" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Persoonlijke groepen" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Persoonlijke groepen:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Telefoonnummers" - -#: NOT FOUND IN SOURCE -msgid "Placeholder" -msgstr "Plaatshouder" - -#: html/Elements/Header:88 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Instelingen" - -#: NOT FOUND IN SOURCE -msgid "Prefs" -msgstr "Voorkeuren" - -#: lib/RT/Action/Generic.pm:196 -msgid "Prepare Stubbed" -msgstr "Bereid Plaatshouder Voor" - -#: html/Helpers/CalPopup.html:11 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Vorige" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Previous page" -msgstr "Vorige pagina" - -#: NOT FOUND IN SOURCE -msgid "Pri" -msgstr "Pri" - -#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 -#. ($args{'PrincipalId'}) -msgid "Principal %1 not found." -msgstr "Hoofd %1 niet gevonden." - -#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:180 html/Ticket/Elements/EditBasics:87 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1777 -msgid "Priority" -msgstr "Prioriteit" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "Prioriteit begint bij" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Privacy:" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Gerechtigd" - -#: html/Admin/Users/Modify.html:331 html/User/Prefs.html:230 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Gerechtigde status: %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Gerechtigde gebruikers" - -#: NOT FOUND IN SOURCE -msgid "Projects" -msgstr "Projecten" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Pseudogroep voor intern gebruik" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Zoek criteria" - -#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:61 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:40 html/Tools/Reports/ResolvedByDates.html:41 html/Tools/Reports/ResolvedByOwner.html:21 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1604 -msgid "Queue" -msgstr "Queue" - -#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65 -#. ($Queue) -#. ($id) -msgid "Queue %1 not found" -msgstr "Queue %1 niet gevonden" - -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "Queue '%1' niet gevonden\\n" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Queue Naam" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "Queue Scrips" - -#: lib/RT/Queue_Overlay.pm:366 -msgid "Queue already exists" -msgstr "Queue bestaat al" - -#: lib/RT/Queue_Overlay.pm:375 lib/RT/Queue_Overlay.pm:381 -msgid "Queue could not be created" -msgstr "Queue kon niet aangemaakt worden" - -#: html/Ticket/Create.html:243 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "Queue kon niet geladen worden." - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:385 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Queue aangemaakt" - -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "Queue is niet gespecificeerd" - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Queue niet gevonden" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Queues" - -#: html/Elements/MyAdminQueues:46 -msgid "Queues I administer" -msgstr "Queues die ik beheer" - -#: html/Elements/MySupportQueues:46 -msgid "Queues I'm an AdminCc for" -msgstr "Queues waarvan in een AdminCC ben" - -#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70 -msgid "Quick search" -msgstr "Snel zoeken" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Snel een ticket aanmaken" - -#: 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 "RT %1 voor %2" - -#: NOT FOUND IN SOURCE -msgid "RT %1 from Best Practical Solutions, LLC." -msgstr "RT %1 van 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" - -#: html/Admin/index.html:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "RT Beheer" - -#: NOT FOUND IN SOURCE -msgid "RT Authentication error." -msgstr "RT Authenticatie fout" - -#: NOT FOUND IN SOURCE -msgid "RT Bounce: %1" -msgstr "RT Doorgestuurd: %1" - -#: NOT FOUND IN SOURCE -msgid "RT Configuration error" -msgstr "RT Configuratie fout" - -#: NOT FOUND IN SOURCE -msgid "RT Critical error. Message not recorded!" -msgstr "RT Kritieke fout: Bericht niet bewaard!" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "RT Fout" - -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." -msgstr "RT Ontving mail (%1) van zichzelf." - -#: NOT FOUND IN SOURCE -msgid "RT Self Service / Closed Tickets" -msgstr "RT Zelfbediening / Afgesloten Tickets" - -#: html/Admin/Tools/Configuration.html:73 -msgid "RT Variables" -msgstr "RT Variabelen" - -#: html/Prefs/MyRT.html:58 html/Prefs/MyRT.html:70 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75 -msgid "RT at a glance" -msgstr "RT in een oogopslag" - -#: html/Admin/CustomFields/Modify.html:117 -msgid "RT can include content from another web service when showing this custom field." -msgstr "RT kan content van een andere webpagina toevoegen wanneer dit custom field wordt weergegeven." - -#: html/Admin/CustomFields/Modify.html:106 -msgid "RT can make this custom field's values into hyperlinks to another service." -msgstr "RT kan deze custom field waarden omzetten in hyperlinks naar andere services." - -#: NOT FOUND IN SOURCE -msgid "RT couldn't authenticate you" -msgstr "RT kon u niet authenticeren" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find requestor via its external database lookup" -msgstr "RT kan de aanvrager niet vinden in zijn interne database" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find the queue: %1" -msgstr "RT kon de queue %1 niet vinden" - -#: html/Elements/SetupSessionCookie:90 -msgid "RT couldn't store your session." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't validate this PGP signature. \\n" -msgstr "RT kon deze PGP signatuur niet valideren. \\n" - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr "RT voor %1" - -#: NOT FOUND IN SOURCE -msgid "RT for %1: %2" -msgstr "RT voor %1: %2" - -#: NOT FOUND IN SOURCE -msgid "RT has proccessed your commands" -msgstr "RT heeft uw commando's verwerkt" - -#: 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 is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Het is gedistribueerd onder Versie 2 van de GNU General Public License."" - -#: NOT FOUND IN SOURCE -msgid "RT thinks this message may be a bounce" -msgstr "RT denkt dat dit bericht onbestelbaar zou kunnen zijn" - -#: html/Search/Simple.html:60 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "Standaard zoekt RT in de ticket onderwerpen" - -#: NOT FOUND IN SOURCE -msgid "RT will process this message as if it were unsigned.\\n" -msgstr "RT zal dit bericht verwerken als of het ongesigneerd is.\\n" - -#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119 -msgid "RT will replace __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "RT zal __id__ en __CustomField__ vervangen met het record id respectievelijk de custom field waarde" - -#: NOT FOUND IN SOURCE -msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." -msgstr "RT's email commando modus vereist PGP authenticatie. Of u heeft uw bericht niet gesigneerd, of uw signatuur kon niet geverifieerd worden." - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Echte Naam" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "EchteNaam" - -#: lib/RT/Transaction_Overlay.pm:712 -#. ($value) -msgid "Reference by %1 added" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:752 -#. ($value) -msgid "Reference by %1 deleted" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:709 -#. ($value) -msgid "Reference to %1 added" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:749 -#. ($value) -msgid "Reference to %1 deleted" -msgstr "" - -#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:72 -msgid "Referred to by" -msgstr "Naar gerefeerd door" - -#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "Refereert aan" - -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "Verfijn" - -#: NOT FOUND IN SOURCE -msgid "Refine search" -msgstr "Verfijn Zoekopdracht" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Ververs deze pagina elke %1 minuten." - -#: lib/RT/Transaction_Overlay.pm:798 -#. ($ticket->Subject) -msgid "Reminder '%1' added" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:811 -#. ($ticket->Subject) -msgid "Reminder '%1' completed" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:804 -#. ($ticket->Subject) -msgid "Reminder '%1' reopened" -msgstr "" - -#: html/Ticket/Reminders.html:46 -#. ($Ticket->Id) -msgid "Reminder ticket #%1" -msgstr "" - -#: html/Elements/MyReminders:49 html/Ticket/Elements/ShowSummary:73 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52 -msgid "Reminders" -msgstr "Herinneringen" - -#: html/Ticket/Reminders.html:50 -#. ($Ticket->Id) -msgid "Reminders for ticket #%1" -msgstr "" - -#: html/Search/Bulk.html:94 -msgid "Remove AdminCc" -msgstr "Verwijder AdminCc" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Verwijder Cc" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Verwijder aanvrager" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Antwoord" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Antwoord naar adres" - -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Antwoord naar aanvragers" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Reply to tickets" -msgstr "Antwoord op tickets" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "ReplyToTicket" -msgstr "Antwoord op ticket" - -#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:1 html/Tools/Reports/index.html:2 -msgid "Reports" -msgstr "Rapportage" - -#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 -msgid "Requestor" -msgstr "Aanvrager" - -#: NOT FOUND IN SOURCE -msgid "Requestor email address" -msgstr "Aanvrager email adres" - -#: NOT FOUND IN SOURCE -msgid "Requestor(s)" -msgstr "Aanvrager(s)" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:79 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Aanvragers" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "Verzoek is terug verwacht" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "Verplichte parameter '%1' ontbreekt" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Herstel" - -#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84 -msgid "Residence" -msgstr "Woonplaats" - -#: html/Ticket/Elements/Tabs:157 -msgid "Resolve" -msgstr "Los op" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "Los ticket #%1 (%2) op" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1149 -msgid "Resolved" -msgstr "Opgelost" - -#: html/Tools/Reports/Elements/Tabs:55 -msgid "Resolved by owner" -msgstr "Opgeloste incidenten per eigenaar" - -#: html/Tools/Reports/Elements/Tabs:59 -msgid "Resolved in date range" -msgstr "Opgelost in het tijdvenster" - -#: html/Tools/Reports/ResolvedByDates.html:7 -msgid "Resolved tickets in period, grouped by owner" -msgstr "" - -#: html/Tools/Reports/ResolvedByOwner.html:5 -msgid "Resolved tickets, grouped by owner" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Response to requestors" -msgstr "Antwoord aan aanvragers" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Resultaten" - -#: NOT FOUND IN SOURCE -msgid "Results per page" -msgstr "Resultaten per pagina" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Herhaal het wachtwoord" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "Herstel" - -#: NOT FOUND IN SOURCE -msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" -msgstr "Recht %1 niet gevonden voor %2 %3 in bereik %4 (%5)\\n" - -#: lib/RT/ACE_Overlay.pm:631 -msgid "Right Delegated" -msgstr "Recht Gedelegeerd" - -#: lib/RT/ACE_Overlay.pm:321 -msgid "Right Granted" -msgstr "Recht Toegekend" - -#: lib/RT/ACE_Overlay.pm:179 -msgid "Right Loaded" -msgstr "Recht geladen" - -#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 -msgid "Right could not be revoked" -msgstr "Recht kon niet afgenomen worden" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Recht niet gevonden" - -#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 -msgid "Right not loaded." -msgstr "Recht niet geladen" - -#: lib/RT/ACE_Overlay.pm:713 -msgid "Right revoked" -msgstr "Recht ingetrokken" - -#: html/Admin/Elements/UserTabs:67 -msgid "Rights" -msgstr "Rechten" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Rollen" - -#: NOT FOUND IN SOURCE -msgid "RootApproval" -msgstr "RootGoedkeuring" - -#: html/Prefs/MyRT.html:64 -msgid "Rows per box" -msgstr "Rijen per box" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Rijen per pagina" - -#: lib/RT/Date.pm:418 -msgid "Sat." -msgstr "Za." - -#: html/Prefs/MyRT.html:64 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:68 html/Widgets/SelectionBox:212 -msgid "Save" -msgstr "Bewaren" - -#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:235 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77 -msgid "Save Changes" -msgstr "Bewaar wijzigingen" - -#: html/User/Prefs.html:180 -msgid "Save Preferences" -msgstr "Bewaar instellingen" - -#: html/Ticket/Elements/PreviewScrips:126 -msgid "Save changes" -msgstr "Bewaar wijzigingen" - -#: lib/RT/SavedSearch.pm:162 -#. ($name) -msgid "Saved search %1" -msgstr "" - -#: html/Search/Elements/EditSearches:46 -msgid "Saved searches" -msgstr "Opgeslagen zoekopdrachten" - -#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 -#. ($scrip->Id) -#. ($id) -#. ($ARGS{'id'}) -msgid "Scrip #%1" -msgstr "Scrip #%1" - -#: lib/RT/Scrip_Overlay.pm:205 -msgid "Scrip Created" -msgstr "Scrip aangemaakt" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Script verwijderd" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Scrips" - -#: NOT FOUND IN SOURCE -msgid "Scrips for %1\\n" -msgstr "Scrips voor %1\\n" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Scrips die betrekking hebben op alle queues" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:65 -msgid "Search" -msgstr "Zoek" - -#: NOT FOUND IN SOURCE -msgid "Search Criteria" -msgstr "Zoek Criteria" - -#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50 -msgid "Search Preferences" -msgstr "" - -#: lib/RT/SavedSearch.pm:116 -msgid "Search attribute load failure" -msgstr "" - -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Zoeken naar autorisaties" - -#: html/Search/Simple.html:69 -msgid "Search for tickets" -msgstr "Zoeken naar tickets" - -#: 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 "Zoeken naar tickets. Voer het id nummer, de queue naam, de naam van de eigenaar of het e-mail adres van de aanvrager in. RT zal zoeken in de ticket inhoud en attachments." - -#: html/User/Elements/Tabs:62 -msgid "Search options" -msgstr "Zoek opties" - -#: html/Search/Chart.html:7 -#. ($PrimaryGroupBy) -msgid "Search results grouped by %1" -msgstr "" - -#: lib/RT/SavedSearch.pm:194 -#. ($msg) -msgid "Search update: %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Searches can't be associated with that kind of object" -msgstr "Zoekopdrachten kunnen niet met dat type object geassocieerd worden" - -#: html/Search/Simple.html:59 -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 "Het doorzoeken van de gehele tekst van alle tickets kan lang duren, maar als dit nodig is, dan kun je ieder woord in de volledige ticket history opzoeken door het typen van fulltext:woord." - -#: bin/rt-crontool:213 -msgid "Security:" -msgstr "Veiligheid" - -#: html/Elements/ShowCustomFields:76 -#. ('' . $Value->IncludeContentForValue."") -msgid "See also: %1" -msgstr "Bekijk ook: %1" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Bekijk custom fields" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "See exact outgoing email messages and their recipeients" -msgstr "Bekijk de uitgaande mail en haar ontvangers" - -#: lib/RT/Queue_Overlay.pm:105 -msgid "See ticket private commentary" -msgstr "Bekijk ticket " - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket summaries" -msgstr "Bekijk ticket samenvatting" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "Bekijk custom field" - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "Bekijk groep" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "SeeQueue" -msgstr "Bekijk queue" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Selecteer een custom field" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Selecteer een groep" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Selecteer een queue" - -#: html/SelfService/CreateTicketInQueue.html:48 -msgid "Select a queue for your new ticket" -msgstr "Selecteer een queue voor je nieuwe ticket" - -#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Selecteer een gebruiker" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Selecteer custom field" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Selecteer custom fields voor alle gebruikers groepen" - -#: html/Admin/Global/CustomFields/index.html:65 -msgid "Select custom fields for all users" -msgstr "Selecteer custom fields voor alle gebruikers" - -#: html/Admin/Global/CustomFields/index.html:76 -msgid "Select custom fields for tickets in all queues" -msgstr "Selecteer custom fields voor tickets in alle queues" - -#: html/Admin/Global/CustomFields/index.html:83 -msgid "Select custom fields for transactions on tickets in all queues" -msgstr "Selecteer custom fields for transacties op tickets in alle queues" - -#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Selecteer de groep" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Selecteer meerdere waarden" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Selecteer één waarde" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Selecteer de queue" - -#: html/Prefs/Quicksearch.html:53 -msgid "Select queues to be displayed on the \"RT at a glance\" page" -msgstr "Selecteer de queues die weergegeven worden op de \"RT in een oogopslag\" pagina" - -#: html/Admin/Global/Scrip.html:58 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:73 -msgid "Select scrip" -msgstr "Selecteer het scrip" - -#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Selecteer de template" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Selecteer tot %1 waarden" - -#: html/Admin/Elements/UserTabs:75 -msgid "Select user" -msgstr "Selecteer de gebruiker" - -#: NOT FOUND IN SOURCE -msgid "SelectMultiple" -msgstr "SelecteerMeerdere" - -#: NOT FOUND IN SOURCE -msgid "SelectSingle" -msgstr "SelecteerEnkele" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "" - -#: html/Widgets/SelectionBox:210 -msgid "Selections modified. Please save your changes" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Self Service" -msgstr "Zelfbediening" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Stuurt mail naar alle toeschouwers" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Stuurt mail naar alle toeschouwers als een \"commentaar\"" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Stuurt mail naar alle aanvragers en Ccs" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Stuurt mail naar alle aanvragers en Ccs als een \"commentaar\"" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Stuurt een bericht aan de aanvragers" - -#: etc/initialdata:125 etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Stuurt mail aan expliciet genoemde Ccs en Bccs" - -#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 -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 "Stuurt mail aan de administratieve Ccs" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Stuurt mail aan de administratieve Ccs als een \"commentaar\"" - -#: etc/initialdata:82 etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Stuurt mail aan de eigenaar" - -#: lib/RT/Date.pm:445 -msgid "Sep." -msgstr "Sep." - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Toon" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Toon autorisaties" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Toon kolommen" - -#: html/Ticket/Elements/Tabs:213 -msgid "Show Results" -msgstr "Toon Resultaten" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Toon goedgekeurde verzoeken" - -#: html/Ticket/Create.html:315 -msgid "Show basics" -msgstr "Toon beginselen" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Toon afgewezen verzoeken" - -#: html/Ticket/Create.html:318 -msgid "Show details" -msgstr "Toon details" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Toon verzoeken die in behandeling zijn" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Toon verzoeken die wachten op andere goedkeuringen" - -#: NOT FOUND IN SOURCE -msgid "Show ticket private commentary" -msgstr "Toon ticket privé commentaar" - -#: NOT FOUND IN SOURCE -msgid "Show ticket summaries" -msgstr "Toon ticket samenvattingen" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ShowACL" -msgstr "ToonACL" - -#: lib/RT/System.pm:86 -msgid "ShowConfigTab" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "ShowOutgoingEmail" -msgstr "ToonUitgaandeEmail" - -#: lib/RT/Group_Overlay.pm:168 -msgid "ShowSavedSearches" -msgstr "ToonOpgeslagenZoekopdrachten" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowScrips" -msgstr "Toon scrips" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ShowTemplate" -msgstr "Toon sjabloon" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicket" -msgstr "Toon ticket" - -#: lib/RT/Queue_Overlay.pm:105 -msgid "ShowTicketComments" -msgstr "Toon ticket commentaar" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "Schrijf in als een ticket aanvrager of ticket of queue Cc" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Schrijf in als een ticket of queue AdminCc" - -#: html/Admin/Users/Modify.html:226 html/User/Prefs.html:168 -msgid "Signature" -msgstr "Ondertekening" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "Zoeken" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Enkel" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "Omvang" - -#: html/Elements/Header:84 -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 "Sommige browser laden alleen content als het afkomstig is uit hetzelfde domain als de RT server." - -#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 -msgid "Sort" -msgstr "Sorteren" - -#: NOT FOUND IN SOURCE -msgid "Sort key" -msgstr "Sorteer sleutel" - -#: NOT FOUND IN SOURCE -msgid "Sort results by" -msgstr "Sorteer resultaten op" - -#: NOT FOUND IN SOURCE -msgid "SortOrder" -msgstr "SorteerVolgorde" - -#: html/Admin/Elements/EditScrip:87 -msgid "Stage" -msgstr "Stadium" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "Is blijven steken" - -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "Start pagina" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Gestart" - -#: NOT FOUND IN SOURCE -msgid "Started date '%1' could not be parsed" -msgstr "Startum '%1' kon niet ontleed worden" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:207 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Begint" - -#: NOT FOUND IN SOURCE -msgid "Starts By" -msgstr "Begint op" - -#: NOT FOUND IN SOURCE -msgid "Starts date '%1' could not be parsed" -msgstr "Begindatum '%1' kon niet ontleed worden" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Provincie" - -#: html/Search/Elements/PickBasics:87 html/SelfService/Elements/MyRequests:50 html/SelfService/Update.html:57 html/Ticket/Create.html:65 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1143 lib/RT/Tickets_Overlay.pm:1638 -msgid "Status" -msgstr "Status" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Status veranderd van %1 naar %2" - -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "StatusVerandering" - -#: html/Ticket/Elements/Tabs:172 -msgid "Steal" -msgstr "Steel" - -#: lib/RT/Queue_Overlay.pm:118 -msgid "Steal tickets" -msgstr "Steel ticket" - -#: lib/RT/Queue_Overlay.pm:118 -msgid "StealTicket" -msgstr "SteelTicket" - -#: lib/RT/Transaction_Overlay.pm:665 -#. ($Old->Name) -msgid "Stolen from %1" -msgstr "Gestolen van %1" - -#: NOT FOUND IN SOURCE -msgid "Stolen from %1 " -msgstr "Gestolen van %1 " - -#: html/Search/Elements/EditFormat:81 -msgid "Style" -msgstr "Stijl" - -#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Elements/MyRequests:49 html/SelfService/Update.html:65 html/Ticket/Create.html:107 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:80 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1139 lib/RT/Tickets_Overlay.pm:1720 -msgid "Subject" -msgstr "Onderwerp" - -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:687 -#. ($self->Data) -msgid "Subject changed to %1" -msgstr "Onderwerp veranderd naar %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Uitvoeren" - -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "Registreer Workflow" - -msgid "ExtendedStatus" -msgstr "Uitgebreide status" - -msgid "QueueName" -msgstr "Naam van de queue" - -msgid "OwnerName" -msgstr "Naam van de eigenaar" - -msgid "CreatedRelative" -msgstr "" - -msgid "ToldRelative" -msgstr "" - -msgid "LastUpdatedRelative" -msgstr "" - -msgid "DueRelative" -msgstr "" - -msgid "ResolvedRelative" -msgstr "" - -msgid "LastUpdated" -msgstr "" - -msgid "StartedRelative" -msgstr "" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Gelukt" - -#: lib/RT/Date.pm:419 -msgid "Sun." -msgstr "Zo." - -#: lib/RT/System.pm:76 -msgid "SuperUser" -msgstr "Super gebruiker" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Systeem" - -#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Systeem configuratie" - -#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:585 lib/RT/Interface/Web.pm:900 lib/RT/Interface/Web.pm:929 -msgid "System Error" -msgstr "Systeem Fout" - -#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 -#. ($msg) -msgid "System Error: %1" -msgstr "" - -#: html/Admin/Tools/index.html:47 -msgid "System Tools" -msgstr "Systeem tools" - -#: lib/RT/ACE_Overlay.pm:634 -msgid "System error. Right not delegated." -msgstr "Systeem fout. Recht niet gedelegeerd." - -#: lib/RT/ACE_Overlay.pm:164 lib/RT/ACE_Overlay.pm:229 lib/RT/ACE_Overlay.pm:324 lib/RT/ACE_Overlay.pm:921 -msgid "System error. Right not granted." -msgstr "Systeem fout. Recht niet toegekend." - -#: NOT FOUND IN SOURCE -msgid "System error. Unable to grant rights." -msgstr "Systeem fout. Niet mogelijk om rechten toe te kennen" - -#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Systeem groepen" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "SysteemRolgroep voor intern gebruik" - -#: lib/RT/CurrentUser.pm:358 -msgid "TEST_STRING" -msgstr "TEST_STRING" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:168 -msgid "Take" -msgstr "Neem" - -#: lib/RT/Queue_Overlay.pm:116 -msgid "Take tickets" -msgstr "Neem ticket" - -#: lib/RT/Queue_Overlay.pm:116 -msgid "TakeTicket" -msgstr "NeemTicket" - -#: lib/RT/Transaction_Overlay.pm:650 -msgid "Taken" -msgstr "Genomen" - -#: NOT FOUND IN SOURCE -msgid "Task" -msgstr "Taak" - -#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Sjabloon" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Sjabloon verwijderd" - -#: lib/RT/Scrip_Overlay.pm:181 -msgid "Template not found" -msgstr "Sjabloon niet gevonden" - -#: NOT FOUND IN SOURCE -msgid "Template not found\\n" -msgstr "Sjabloon niet gevonden\\n" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Sjabloon ontleed" - -#: 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 "Sjablonen" - -#: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "Sjablonen voor %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Text" -msgstr "Tekst" - -#: lib/RT/CustomField_Overlay.pm:942 lib/RT/Record.pm:946 -msgid "That is already the current value" -msgstr "Dat is al de huidige waarde" - -#: lib/RT/CustomField_Overlay.pm:411 -msgid "That is not a value for this custom field" -msgstr "Dat is geen waarde voor dit custom field" - -#: lib/RT/Ticket_Overlay.pm:1965 -msgid "That is the same value" -msgstr "Dat is de zelfde waarde" - -#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 -msgid "That principal already has that right" -msgstr "Deze hoofdgebruiker heeft reeds dat recht" - -#: lib/RT/Queue_Overlay.pm:754 -#. ($args{'Type'}) -msgid "That principal is already a %1 for this queue" -msgstr "Deze hoofdgebruiker is reeds een %1 voor deze queue" - -#: lib/RT/Ticket_Overlay.pm:1406 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Deze hoofdgebruiker is reeds een %1 voor dit ticket" - -#: lib/RT/Queue_Overlay.pm:853 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Deze hoofdgebruiker is geen %1 voor deze queue" - -#: NOT FOUND IN SOURCE -msgid "That principal is not a %1 for this ticket" -msgstr "Dexe hoofdgebruiker is geen %1 voor dit ticket" - -#: lib/RT/Ticket_Overlay.pm:1961 -msgid "That queue does not exist" -msgstr "Die queue bestaat niet" - -#: lib/RT/Ticket_Overlay.pm:3178 -msgid "That ticket has unresolved dependencies" -msgstr "Dat ticket heeft onopgeloste afhankelijkheden" - -#: NOT FOUND IN SOURCE -msgid "That user already has that right" -msgstr "Die gebruiker heeft dat recht reeds" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:2982 -msgid "That user already owns that ticket" -msgstr "Die gebruiker is al eigenaar van dat ticket" - -#: lib/RT/Ticket_Overlay.pm:2954 -msgid "That user does not exist" -msgstr "Die gebruiker bestaat niet" - -#: lib/RT/User_Overlay.pm:390 -msgid "That user is already privileged" -msgstr "Die gebruiker is al gerechtigd" - -#: lib/RT/User_Overlay.pm:411 -msgid "That user is already unprivileged" -msgstr "Die gebruiker is reeds ontrechtigd" - -#: lib/RT/User_Overlay.pm:403 -msgid "That user is now privileged" -msgstr "Die gebruiker is nu gerechtigd" - -#: lib/RT/User_Overlay.pm:424 -msgid "That user is now unprivileged" -msgstr "Die gebruiker is nu ontrechtigd" - -#: lib/RT/Ticket_Overlay.pm:2975 -msgid "That user may not own tickets in that queue" -msgstr "Die gebruiker mag geen eigenaar zijn van tickets in die queue" - -#: lib/RT/Link_Overlay.pm:234 -msgid "That's not a numerical id" -msgstr "Dat is niet een numeriek ID" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:176 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "De Beginselen" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The CC of a ticket" -msgstr "De CC van een ticket" - -#: lib/RT/ACE_Overlay.pm:114 -msgid "The administrative CC of a ticket" -msgstr "De administratieve CC van een ticket" - -#: NOT FOUND IN SOURCE -msgid "The comment has been recorded" -msgstr "Het commentaar is bewaard" - -#: bin/rt-crontool:223 -msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:" -msgstr "Het volgende commando zal alle actieve tickets in de queue 'general' vinden en hun prioriteit op 99 zetten als ze meer dan 4 uur niet aangeraakt zijn:" - -#: NOT FOUND IN SOURCE -msgid "The following commands were not proccessed:\\n\\n" -msgstr "De volgende commando's zijn niet verwerkt:\\n\\n" - -#: lib/RT/Record.pm:949 -msgid "The new value has been set." -msgstr "De waarde is gezet." - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The owner of a ticket" -msgstr "De eigenaar van een ticket" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The requestor of a ticket" -msgstr "De aanvrager van een ticket" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Dit commentaar is gewoonlijk niet zichtbaar voor de gebruiker" - -#: lib/RT/CustomField_Overlay.pm:977 -msgid "This custom field does not apply to that object" -msgstr "Dit custom field is niet van toepassing op dat object" - -#: html/Admin/Tools/Configuration.html:50 -msgid "This feature is only available to system administrators" -msgstr "Dit onderdeel is alleen beschikbaar voor systeembeheerders" - -#: html/Ticket/Elements/PreviewScrips:93 -msgid "This message will be sent to..." -msgstr "Dit bericht zal verstuurd worden aan..." - -#: NOT FOUND IN SOURCE -msgid "This ticket %1 %2 (%3)\\n" -msgstr "Dit ticket %1 %2 (%3)\\n" - -#: bin/rt-crontool:214 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Dit gereedschap stelt de gebruiker in staat arbitraire perl modules te gebruiken vanuit RT" - -#: lib/RT/Transaction_Overlay.pm:288 -msgid "This transaction appears to have no content" -msgstr "Het lijkt erop alsof deze transactie geen inhoud heeft" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "De %1 tickets met hoogste prioriteit van deze gebruiker" - -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "De 25 hoogste prioriteit tickets van deze gebruiker" - -#: lib/RT/Date.pm:416 -msgid "Thu." -msgstr "Do." - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Ticket #%1 Jumbo actualisering: %2" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Ticket #%1: %2" - -#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741 -#. ($T::Tickets{$template_id}->Id) -#. ($T::Tickets{$template_id}->id) -#. ($ticket->Id) -msgid "Ticket %1" -msgstr "Ticket %1" - -#: lib/RT/Ticket_Overlay.pm:732 lib/RT/Ticket_Overlay.pm:752 -#. ($self->Id, $QueueObj->Name) -msgid "Ticket %1 created in queue '%2'" -msgstr "Ticket %1 aangemaakt in queue '%2'" - -#: NOT FOUND IN SOURCE -msgid "Ticket %1 loaded\\n" -msgstr "Toclet %1 geladen\\n" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Ticket %1: %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Ticket custom fields" - -#: html/Ticket/History.html:46 html/Ticket/History.html:49 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket History # %1 %2" -msgstr "Ticket Historie # %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket Id" -msgstr "Ticket Id" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Ticket Opgelost" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1205 -msgid "Ticket Transactions" -msgstr "Ticket Transacties" - -#: NOT FOUND IN SOURCE -msgid "Ticket attachment" -msgstr "Ticket attachment" - -#: lib/RT/Tickets_Overlay.pm:1907 -msgid "Ticket content" -msgstr "Ticket inhoud" - -#: lib/RT/Tickets_Overlay.pm:1956 -msgid "Ticket content type" -msgstr "Ticket inhoud type" - -#: lib/RT/Ticket_Overlay.pm:594 lib/RT/Ticket_Overlay.pm:608 lib/RT/Ticket_Overlay.pm:619 lib/RT/Ticket_Overlay.pm:740 -msgid "Ticket could not be created due to an internal error" -msgstr "Ticket kong niet aangemaakt worden vanwege een interne fout" - -#: NOT FOUND IN SOURCE -msgid "Ticket created" -msgstr "Ticket aangemaakt" - -#: NOT FOUND IN SOURCE -msgid "Ticket creation failed" -msgstr "Ticket aanmaken gefaald" - -#: NOT FOUND IN SOURCE -msgid "Ticket deleted" -msgstr "Ticket verwijderd" - -#: NOT FOUND IN SOURCE -msgid "Ticket id not found" -msgstr "Ticket id niet gevonden" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Ticket metagegevens" - -#: NOT FOUND IN SOURCE -msgid "Ticket not found" -msgstr "Ticket niet gevonden" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Ticket status gewijzigd" - -#: NOT FOUND IN SOURCE -msgid "Ticket watchers" -msgstr "Ticket toeschouwers" - -#: lib/RT/Search/FromSQL.pm:83 -#. (ref $self) -msgid "TicketSQL search module" -msgstr "" - -#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:52 lib/RT/CustomField_Overlay.pm:1204 -msgid "Tickets" -msgstr "Tickets" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 %2" -msgstr "Tickets %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 by %2" -msgstr "Tickets %1 door %2" - -#: html/Tools/Reports/CreatedByDates.html:41 -msgid "Tickets created after" -msgstr "" - -#: html/Tools/Reports/CreatedByDates.html:43 -msgid "Tickets created before" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Tickets from %1" -msgstr "Tickets van %1" - -#: html/Tools/Reports/ResolvedByDates.html:42 -msgid "Tickets resolved after" -msgstr "Tickets afgesloten na" - -#: html/Tools/Reports/ResolvedByDates.html:44 -msgid "Tickets resolved before" -msgstr "Tickets afgesloten voor" - -#: html/Approvals/Elements/ShowDependency:48 -msgid "Tickets which depend on this approval:" -msgstr "Tickets welke afhankelijk zijn van deze goedkeuring" - -#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:67 -msgid "Time Estimated" -msgstr "Geschatte Tijd" - -#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:195 html/Ticket/Elements/EditBasics:80 -msgid "Time Left" -msgstr "Resterende tijd" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:188 html/Ticket/Elements/EditBasics:73 -msgid "Time Worked" -msgstr "Gewerkte tijd" - -#: lib/RT/Tickets_Overlay.pm:1878 -msgid "Time left" -msgstr "Resterende tijd" - -#: html/Elements/Footer:52 -msgid "Time to display" -msgstr "Tijd om te tonen" - -#: lib/RT/Tickets_Overlay.pm:1853 -msgid "Time worked" -msgstr "Gewerkte tijd" - -#: NOT FOUND IN SOURCE -msgid "TimeLeft" -msgstr "Resterende tijd" - -#: lib/RT/Ticket_Overlay.pm:1144 -msgid "TimeWorked" -msgstr "Gewerkte tijd" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "Titel" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:" -msgstr "Om een verschil van deze uitvoering te genereren:" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:\\n" -msgstr "Om een verschil van deze uitvoering te genereren:\\n" - -#: html/Elements/Footer:63 -#. ('sales@bestpractical.com') -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "Voor vragen over support, training, bedrijfsspecifieke software-ontwikkeling of licentieovereenkomsten, gelieve contact op te nemen met %1." - -#: lib/RT/Ticket_Overlay.pm:1147 -msgid "Told" -msgstr "Verteld" - -#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49 -msgid "Tools" -msgstr "Tools" - -#: html/Search/Elements/Chart:73 -msgid "Total" -msgstr "Totaal" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transactie" - -#: lib/RT/Transaction_Overlay.pm:792 -#. ($self->Data) -msgid "Transaction %1 purged" -msgstr "Transactie %1 gezuiverd" - -#: lib/RT/Transaction_Overlay.pm:174 -msgid "Transaction Created" -msgstr "Transactie Gecreëerd" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Transactie custom fields" - -#: NOT FOUND IN SOURCE -msgid "Transaction->Create couldn't, as you didn't specify a ticket id" -msgstr "Transactie->Creëer kon niet, aangezien u geen ticket id gespecificeerd heeft" - -#: lib/RT/Transaction_Overlay.pm:125 -msgid "Transaction->Create couldn't, as you didn't specify an object type and id" -msgstr "Transactie->Cre‘r kon niet aangezien er geen objectttype en -id gespecificeerd is" - -#: lib/RT/Transaction_Overlay.pm:857 -msgid "Transactions are immutable" -msgstr "Transacties zijn onwijzigbaar" - -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "Tracht een recht te verwijderen: %1" - -#: lib/RT/Date.pm:414 -msgid "Tue." -msgstr "Di." - -#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1145 lib/RT/Tickets_Overlay.pm:1692 -msgid "Type" -msgstr "Type" - -#: lib/RT/ScripCondition_Overlay.pm:129 -msgid "Unimplemented" -msgstr "Niet geïmplementeerd" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Unix login" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "UnixGebruikersnaam" - -#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:862 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "Onbekende InhoudCodering %1" - -#: html/Search/Build.html:395 -msgid "Unknown field: $key" -msgstr "" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Ongelimiteerd" - -#: html/Search/Elements/SelectSearchesForObjects:63 -msgid "Unnamed search" -msgstr "Onbenoemde zoekopdracht" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Ongerechtigd" - -#: 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:646 -msgid "Untaken" -msgstr "Vrij" - -#: NOT FOUND IN SOURCE -msgid "Untitled search" -msgstr "Naamloze zoekopdracht" - -#: html/Elements/RT__Ticket/ColumnMap:300 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Ververs" - -#: NOT FOUND IN SOURCE -msgid "Update ID" -msgstr "Ververs 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 "Ververs Type" - -#: NOT FOUND IN SOURCE -msgid "Update all these tickets at once" -msgstr "Ververs al deze tickets in eens" - -#: NOT FOUND IN SOURCE -msgid "Update email" -msgstr "Ververs email" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Ververs meer dan één ticket" - -#: NOT FOUND IN SOURCE -msgid "Update name" -msgstr "Ververs naam" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:524 -msgid "Update not recorded." -msgstr "Verversing niet opgeslagen." - -#: NOT FOUND IN SOURCE -msgid "Update selected tickets" -msgstr "Ververs geselecteerde tickets" - -#: NOT FOUND IN SOURCE -msgid "Update signature" -msgstr "Ververs signatuur" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Ververs ticket" - -#: NOT FOUND IN SOURCE -msgid "Update ticket # %1" -msgstr "Ververs ticket # %1" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Ververs ticket #%1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Ververs ticket #%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:523 -msgid "Update type was neither correspondence nor comment." -msgstr "Verversingstype was noch correspondentie, noch commentaar" - -#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1282 lib/RT/Ticket_Overlay.pm:1148 -msgid "Updated" -msgstr "Ververst" - -#: 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 "Gebruik andere administratieve RT tools" - -#: NOT FOUND IN SOURCE -msgid "User %1 %2: %3\\n" -msgstr "Gebruiker %1 %2: %3\\n" - -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" -msgstr "Gebruiker %1 Wachtwoord: %2\\n" - -#: lib/RT/Ticket_Overlay.pm:497 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found" -msgstr "Gebruiker '%1' niet gevonden" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" -msgstr "Gebruiker '%1' niet gevonden\\n" - -#: etc/initialdata:132 etc/initialdata:206 -msgid "User Defined" -msgstr "Gebruiker Gedifiniëerd" - -#: html/Admin/Elements/EditScrip:98 -msgid "User Defined conditions and actions" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "User ID" -msgstr "GebruikersID" - -#: NOT FOUND IN SOURCE -msgid "User Id" -msgstr "Gebruiker Id" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Gebruikersrechten" - -#: lib/RT/Interface/Web.pm:1284 -#. ($CustomFieldObj->Name, $class, $Object->id) -msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" -msgstr "De gebruiker vroeg om een onbekende aanpassing van custom field %1 voor %2 object #%3" - -#: html/Admin/Users/Modify.html:290 -#. ($msg) -msgid "User could not be created: %1" -msgstr "Gebruiker kon niet aangemaakt worden: %1" - -#: lib/RT/User_Overlay.pm:331 -msgid "User created" -msgstr "Gebruiker aangemaakt" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Door gebruiker gedefiniëerde groepen" - -#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 -msgid "User loaded" -msgstr "Gebruiker opgehaald" - -#: NOT FOUND IN SOURCE -msgid "User notified" -msgstr "Gebruiker verwittigd" - -#: NOT FOUND IN SOURCE -msgid "User view" -msgstr "Gebruikers aanzicht" - -#: html/Admin/Groups/index.html:99 -msgid "User-defined groups" -msgstr "Door gebruiker gedefinieerde groepen" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Gebruikersnaam" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1206 -msgid "Users" -msgstr "Gebruikers" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Gebruikers die voldoen aan de zoek criteria" - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Geldige Zoekopdracht" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "Validatie" - -#: NOT FOUND IN SOURCE -msgid "ValueOfQueue" -msgstr "Waarde van queue" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Waarden" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Watch" -msgstr "Schouw toe" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "WatchAsAdminCc" -msgstr "SchouwToeAlsAdminCc" - -#: NOT FOUND IN SOURCE -msgid "Watcher loaded" -msgstr "Toeschouwer geladen" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Toeschouwers" - -#: NOT FOUND IN SOURCE -msgid "WebEncoding" -msgstr "WebCodering" - -#: lib/RT/Date.pm:415 -msgid "Wed." -msgstr "Wo." - -#: etc/initialdata:521 -msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" -msgstr "Wanneer een ticket goedgekeurd is door alle goedkeurders, voeg correspondentie toe aan het orginele ticket" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "Wanneer een ticket goedgekeurd is door een goedkeurder, voeg correspondentie toe aan het orginele ticket" - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "Wanneer een ticket is aangemaakt" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "Wanneer een goedkeuringsticket is aangemaakts, verwittig de Eigenaar en de AdminCc van het onderwerp dat op hun goedkeuring wacht" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "Wanneer iets gebeurt" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "Wanneer een ticket is opgelost" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "Wanneer de eigenaar van een ticket verandert" - -#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "Wanneer de queue van een ticket verandert" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "Wanneer de status van een ticket verandert" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "Wanneer een door de gebruiker gedifiniëerde voorwaarde gebeurt" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "Wanneer commentaar binnenkomt" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "Wanneer correspondentie binnenkomt" - -#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88 -msgid "Work" -msgstr "Werk" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "WorkPhone" -msgstr "WerkTelefoon" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Gewerkt" - -#: lib/RT/Ticket_Overlay.pm:3085 -msgid "You already own this ticket" -msgstr "U bent al eigenaar van dit ticket" - -#: html/autohandler:203 html/autohandler:211 -msgid "You are not an authorized user" -msgstr "U bent geen geauthorizeerde gebruiker" - -#: html/Prefs/Search.html:56 -msgid "You can also edit the predefined search itself" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2967 -msgid "You can only reassign tickets that you own or that are unowned" -msgstr "U kunt alleen tickets opnieuw toebedelen die van u zijn, of van niemand" - -#: NOT FOUND IN SOURCE -msgid "You don't have permission to view that ticket.\\n" -msgstr "U heeft geen toestemming om dat ticket te bekijken" - -#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 -#. ($num, $queue) -msgid "You found %1 tickets in queue %2" -msgstr "U vond %1 tickets in queue %2" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "U bent afgemeld bij RT" - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "U heeft geen toestemming om tickets aan te maken in die queue." - -#: lib/RT/Ticket_Overlay.pm:1974 -msgid "You may not create requests in that queue." -msgstr "U mag geen verzoeken aanmaken in die queue" - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "U mag zich weer aanmelden" - -#: NOT FOUND IN SOURCE -msgid "Your %1 requests" -msgstr "Uw %1 verzoeken" - -#: NOT FOUND IN SOURCE -msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" -msgstr "Uw RT beheerder heeft de mail-aliasses welke RT aanroepen verkeerd geconfigureerd" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Uw verzoek is goedgekeurd door %1. Er zijn wellicht nog andere goedkeuringen in behandeling." - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "Uw verzoek is goedgekeurd." - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "Uw verzoek was geweigerd." - -#: html/autohandler:240 -msgid "Your username or password is incorrect" -msgstr "Uw gebruikersnaam of wachtwoord zijn onjuist" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "Postcode" - -#: lib/RT/System.pm:88 -msgid "allow creation of saved searches" -msgstr "" - -#: lib/RT/System.pm:87 -msgid "allow loading of saved searches" -msgstr "" - -#: html/User/Elements/DelegateRights:80 -#. ($right->PrincipalObj->Object->SelfDescription) -msgid "as granted to %1" -msgstr "zoals gegeven aan %1" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "grafiek" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "gesloten" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 -msgid "contains" -msgstr "bevat" - -#: NOT FOUND IN SOURCE -msgid "content" -msgstr "inhoud" - -#: NOT FOUND IN SOURCE -msgid "content-type" -msgstr "inhoud-type" - -#: NOT FOUND IN SOURCE -msgid "correspondence (probably) not sent" -msgstr "correspondentie (waarschijnlijk) niet verstuurd" - -#: NOT FOUND IN SOURCE -msgid "correspondence sent" -msgstr "correspondentie verstuurd" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 -msgid "days" -msgstr "dagen" - -#: NOT FOUND IN SOURCE -msgid "dead" -msgstr "dood" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "verwijder" - -#: lib/RT/Queue_Overlay.pm:88 -msgid "deleted" -msgstr "verwijderd" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "voldoet niet aan" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "bevat niet" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "gelijk aan" - -#: html/Search/Build.html:481 -msgid "error: can't move down" -msgstr "" - -#: html/Search/Build.html:503 -msgid "error: can't move left" -msgstr "" - -#: html/Search/Build.html:462 -msgid "error: can't move up" -msgstr "" - -#: html/Search/Build.html:546 -msgid "error: nothing to delete" -msgstr "" - -#: html/Search/Build.html:467 html/Search/Build.html:486 html/Search/Build.html:508 html/Search/Build.html:537 -msgid "error: nothing to move" -msgstr "" - -#: html/Search/Build.html:564 -msgid "error: nothing to toggle" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "filename" -msgstr "bestandsnaam" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "groter dan" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr "groep '%1'" - -#: html/Search/Results.html:88 -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy')) -msgid "grouped by %1" -msgstr "opgedeeld in" - -#: lib/RT/Date.pm:338 -msgid "hours" -msgstr "uren" - -#: 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 "is" - -#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54 -msgid "isn't" -msgstr "is niet" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "minder dan" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "voldoet aan" - -#: lib/RT/Date.pm:334 -msgid "min" -msgstr "min" - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "minuten" - -#: NOT FOUND IN SOURCE -msgid "modifications\\n\\n" -msgstr "wijzigingen\\n\\n" - -#: lib/RT/Date.pm:350 -msgid "months" -msgstr "maanden" - -#: lib/RT/Queue_Overlay.pm:83 -msgid "new" -msgstr "nieuw" - -#: 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 "geen" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "niet gelijk aan" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:84 -msgid "open" -msgstr "open" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "persoonlijke groep '%1' voor gebruiker '%2'" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "queue %1 %2" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "rejected" -msgstr "geweigerd" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "resolved" -msgstr "opgelost" - -#: lib/RT/Date.pm:330 -msgid "sec" -msgstr "sec" - -#: lib/RT/System.pm:86 -msgid "show Configuration tab" -msgstr "" - -#: html/Search/Results.html:80 -msgid "spreadsheet" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "stalled" -msgstr "geparkeerd" - -#: html/Search/Results.html:89 -#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle')) -msgid "style: %1" -msgstr "" - -#: html/Prefs/MyRT.html:80 -msgid "summary rows" -msgstr "" - -#: lib/RT/Group_Overlay.pm:222 -#. ($self->Type) -msgid "system %1" -msgstr "systeem %1" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "systeem groep '%1'" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "het aanroepende component specificeerde niet waarom" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "ticket #%1 %2" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "onbeschreven groep %1" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "gebruiker %1" - -#: lib/RT/Date.pm:346 -msgid "weeks" -msgstr "weken" - -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "met sjabloon %1" - -#: lib/RT/Date.pm:354 -msgid "years" -msgstr "jaren" - diff --git a/rt/lib/RT/I18N/no.po b/rt/lib/RT/I18N/no.po deleted file mode 100644 index 74adef66e..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 which 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 which 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 which 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/pl.po b/rt/lib/RT/I18N/pl.po deleted file mode 100644 index 05a713d4f..000000000 --- a/rt/lib/RT/I18N/pl.po +++ /dev/null @@ -1,6715 +0,0 @@ -# Copyright (c) 2002 Jesse Vincent -# -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"POT-Creation-Date: 2007-01-18 11:36+0800\n" -"PO-Revision-Date: 2005-10-03 14:26-0400\n" -"Last-Translator: Piotr Śliwa \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 "Nr" - -#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51 -#. ($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 "" - -#: lib/RT/Record.pm:940 -#. ($label) -msgid "$prefix %1" -msgstr "" - -#: lib/RT/URI/fsck_com_rt.pm:256 -#. ($self->ObjectType, $self->Object->Id) -msgid "%1 #%2" -msgstr "%1 nr%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 "%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 zostały dodane" - -#: lib/RT/Date.pm:362 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "przed %1 %2" - -#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654 -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -msgid "%1 %2 changed to %3" -msgstr "%1 %2 zostało zamienione na %3" - -#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696 -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 deleted" -msgstr "%1 %2 zostało usunięte" - -#: NOT FOUND IN SOURCE -msgid "%1 %2 of group %3" -msgstr "%1 %2 z groupy %3" - -#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103 -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -msgid "%1 %2 with template %3" -msgstr "%1 %2 wg szablonu %3" - -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 tego zgłoszenia\\n" - -#: html/Ticket/Elements/ShowAttachments:72 -#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) -msgid "%1 (%2) by %3" -msgstr "%1 (%2) przez %3" - -#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66 -#. (loc($DefaultStatus)) -#. (loc($Ticket->Status())) -#. (loc($TicketObj->Status)) -#. ($TicketObj->OwnerObj->Name()) -msgid "%1 (Unchanged)" -msgstr "%1 (Niezmienione)" - -#: NOT FOUND IN SOURCE -msgid "%1 - %2 shown" -msgstr "wyświetlone %1 - %2" - -#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250 -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -msgid "%1 - An argument to pass to %2" -msgstr "%1 - warunek przejścia na %2" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - Status wyjściowy zaktualizowany na 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 - Określ moduł działań, którego chcesz użyć" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Określ moduł warunków, którego chcesz użyć" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Określ moduł wyszukiwania, którego chcesz użyć" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -msgstr "" - -#: html/Elements/Footer:56 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -msgid "%1 RT %2 Copyright 1996-%3 %4." -msgstr "%1 RT %2 Wszelkie prawa zastrzeżone 1996-%3 %4" - -#: lib/RT/ScripAction_Overlay.pm:150 -#. ($self->Id) -msgid "%1 ScripAction loaded" -msgstr "Skrypt %1 został załadowany" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "dodano %1 jako wartość dla %2" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on" -msgstr "do określenia aliasów dla %1 wymagany numer zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on " -msgstr "do określenia aliasów dla %1 wymagany numer zgłoszenia " - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "do określenia aliasów dla %1 wymagany numer zgłoszenia (od %2) %3" - -#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151 -#. ($args{'Base'}) -#. ($args{'Target'}) -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "Wydaje się, że %1 to obiekt lokalny, ale nie udało się wyszukać go w bazie danych" - -#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531 -#. ($self->BriefDescription , $self->CreatorObj->Name) -#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) -msgid "%1 by %2" -msgstr "%1 przez %2" - -#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800 -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -msgid "%1 changed from %2 to %3" -msgstr "%1 zmieniło się z %2 na %3" - -# Nie jestem pewien! -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "kopia %1" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "nie udało się ustawić %1 na %2" - -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1 nie udało się rozpocząć transakcji (%2)\\n" - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 nie udało się ustawić statusu na zamknięty. Baza danych RT może być niespójna" - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "%1 zgłoszeń o najwyższym priorytecie, których jestem właścicielem" - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I own..." -msgstr "%1 zgłoszeń o najwyższym priorytecie, których właścicielem jest użytkownik..." - -#: NOT FOUND IN SOURCE -msgid "%1 highest priority tickets I requested..." -msgstr "%1 zgłoszeń o najwyższym priorytecie zarejestrowanych przez użytkownika..." - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 jest narzędziem umożliwiającym obsługę zgłoszeń z zewnętrznej aplikacji do sporządzania wykazów, takiej jak cron." - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 nie jest już %2 dla tej kolejki" - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 nie jest już %2 dla tego zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a value for custom field %2" -msgstr "%1 nie jest już wartością pola %2" - -#: NOT FOUND IN SOURCE -msgid "%1 isn't a valid Queue id." -msgstr "%1 nie jest aktualnie obowiązującym Id kolejki" - -#: NOT FOUND IN SOURCE -msgid "%1 matches" -msgstr "%1 pasuje" - -#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49 -#. ($minutes) -msgid "%1 min" -msgstr "%1 min." - -#: NOT FOUND IN SOURCE -msgid "%1 most recently updated articles" -msgstr "%1 ostatnio zaktualizowanych artykułów" - -#: NOT FOUND IN SOURCE -msgid "%1 newest articles" -msgstr "%1 najnowszych artykułów" - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "%1 zgłoszeń bez właściciela" - -#: NOT FOUND IN SOURCE -msgid "%1 not shown" -msgstr "%1 nie zostało wyświetlone" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "%1 objets" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "%1 - uprawnienia" - -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "%1 udało się" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "%1 to nieznany typ Id wiadomości ($MessageId)" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "%1 to nieznany typ dla %2" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 zamknie wszystkie części zamykanego zgłoszenia grupowego." - -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "%1 zamknie bazę lokalną, jeśli jest powiązana z podłączonym zgłoszeniem (lub jest jego częścią)" - -#: lib/RT/CustomField_Overlay.pm:894 -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 "Zapisane zapytania %1" - -#: lib/RT/Transaction_Overlay.pm:481 -#. ($self) -msgid "%1: no attachment specified" -msgstr "%1: nie określono załącznika" - -#: 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' to nieprawidłowa wartość statusu" - -#: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "'%1' n'est pas une action connue. " - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete group member)" -msgstr "(Zaznacz pole, aby usunąć element z grupy)" - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete scrip)" -msgstr "(Zaznacz pole, aby usunąć skrypt)" - -#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76 -msgid "(Check box to delete)" -msgstr "(Zaznacz pole, aby usunąć)" - -#: NOT FOUND IN SOURCE -msgid "(Check boxes to delete)" -msgstr "(Zaznacz pola, aby usunąć)" - -#: html/Ticket/Elements/PreviewScrips:99 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(Zaznacz pola przy odbiorcach na liście, aby zablokować wysyłanie powiadomień)" - -#: html/Ticket/Elements/PreviewScrips:123 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "(Zaznacz pola przy odbiorcach na liście, aby uruchomić wysyłanie powiadomień)" - -#: html/Ticket/Create.html:218 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(Wprowadź numery lub adresy URL zgłoszeń, oddzielone spacjami)" - -#: NOT FOUND IN SOURCE -msgid "(Enter ticket ids or URLs, seperated with spaces)" -msgstr "(Wprowadź numery lub adresy URL zgłoszeń, oddzielone spacjami)" - -#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1)" -msgstr "(Jeśli pozostawisz puste, domyślnie zostanie ustawione na %1)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Brak pól definiowanych przez użytkownika)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Brak członków grupy)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Brak skryptów)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Brak szablonów)" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(Brak)" - -#: 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 "(Wysyła kopię zgłoszenia na listę adresów mailowych oddzielonych przecinkami, umieszczonych w polu BCC. Nie zmienia tego, kto będzie otrzymywał informacje o stanie zgłoszenia)" - -#: 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 "(Wysyła kopię zgłoszenia na listę adresów mailowych oddzielonych przecinkami, umieszczonych w polu BCC. Nie zmienia tego, kto będzie otrzymywał informacje o stanie zgłoszenia)" - -#: html/Ticket/Update.html:90 -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does 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 "(Wysyła kopię zgłoszenia na listę administracyjnych adresów mailowych oddzielonych przecinkami. Te osoby będą otrzymywać informacje o stanie zgłoszenia)" - -#: 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 "(Wysyła kopię zgłoszenia na listę adresów mailowych oddzielonych przecinkami. Nie zmienia tego, kto będzie otrzymywał informacje o stanie zgłoszenia)" - -#: 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 "(Wysyła kopię zgłoszenia na listę adresów mailowych oddzielonych przecinkami. Nie zmienia tego, kto będzie otrzymywał informacje o stanie zgłoszenia)" - -#: html/Ticket/Update.html:86 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does 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 "(Wysyła kopię zgłoszenia na listę adresów mailowych oddzielonych przecinkami. Te osoby będą otrzymywać informacje o stanie zgłoszenia)" - -#: 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 "(Skorzystaj z tych pól jeśli wybrano 'Definiowany przez użytkownika' w atrybutach warunku lub operacji)" - -#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53 -msgid "(Will not be sent email)" -msgstr "" - -#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 -msgid "(empty)" -msgstr "(pusta)" - -#: NOT FOUND IN SOURCE -msgid "(no Summary)" -msgstr "(brak streszczenia)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(brak listy użytkowników)" - -#: NOT FOUND IN SOURCE -msgid "(no name)" -msgstr "(brak nazwy)" - -#: NOT FOUND IN SOURCE -msgid "(no subject)" -msgstr "(brak tematu)" - -#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591 -msgid "(no value)" -msgstr "(brak wartości)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(aucune valeur)" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(tylko jedno zgłoszenie)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(oczekuje na zatwierdzenie)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "(oczekuje na inną Kolekcję)" - -#: NOT FOUND IN SOURCE -msgid "(pending other tickets)" -msgstr "(oczekuje na inne zgłoszenia)" - -#: NOT FOUND IN SOURCE -msgid "(requestor's group)" -msgstr "(groupe du demandeur)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(wymagana)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(nienazwany)" - -#: 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 "25 zgłoszeń o najwyższym priorytecie, których właścicielem jest użytkownik..." - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "25 zgłoszeń o najwyższym priorytecie zarejestrowanych przez użytkownika..." - -#: 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" - -#: etc/initialdata:218 -msgid "A blank template" -msgstr "Pusty szablon" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "" - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "Nie udało się odnaleźć ACE" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACE mogą być tylko utworzone lub usunięte." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Przerwanie operacji, aby uniknąć niezamierzonych modyfikacji zgłoszenia.\\n" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Użytkownika" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Kontrola dostępu" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Operacja" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "Operacja %1 nie została odnaleziona" - -#: NOT FOUND IN SOURCE -msgid "Action committed." -msgstr "Operacja została zatwierdzona" - -#: 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 "Operacja została przygotowana..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Dodaj" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Dodaj AdminCc" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Dodaj Cc" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Dodaj kryterium" - -#: html/Ticket/Create.html:147 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Dodaj więcej plików" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Dodaj zgłaszającego" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Dodaj wartość" - -#: NOT FOUND IN SOURCE -msgid "Add a new a global scrip" -msgstr "Dodaj nowy skrypt globalny" - -#: NOT FOUND IN SOURCE -msgid "Add a scrip to this queue" -msgstr "Dodaj skrypt dla tej kolejki" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Dodaj skrypt, który będzie dotyczył wszystkich kolejek" - -#: NOT FOUND IN SOURCE -msgid "Add additional criteria" -msgstr "Dodaj kolejne kryterium" - -#: html/Search/Build.html:109 html/Search/Build.html:94 -msgid "Add and Search" -msgstr "" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "Dodaj komentarze lub odpowiedzi do wybranych zgłoszeń" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Dodaj członków grupy" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Dodaj nowych obserwatorów" - -#: 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 "Dodaj następny status" - -#: lib/RT/Queue_Overlay.pm:763 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "Został dodany zarządzający %1 dla tej kolejki" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Został dodany zarządzający %1 dla tego zgłoszenia" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Adres 1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Adres 2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "Admin Cc" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "Administracja komentarzami" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "Administracja korespondencją" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Administracja kolejkami" - -#: NOT FOUND IN SOURCE -msgid "Admin users" -msgstr "Administracja użytkownikami" - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Globalna konfiguracja - administracja" - -#: NOT FOUND IN SOURCE -msgid "Admin/Groups" -msgstr "Grupy - administracja" - -#: NOT FOUND IN SOURCE -msgid "Admin/Queue/Basics" -msgstr "Administracja kolejkami . podstawowe informacje" - -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "AdminAllPersonalGroups" - -#: 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 "AdminComment" - -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" -msgstr "AdminCorrespondence" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "AdminPolamiUżytk" - -#: NOT FOUND IN SOURCE -msgid "AdminCustomFields" -msgstr "AdminCustomFields" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "AdminGroup" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "AdminGroupMembership" - -#: lib/RT/System.pm:80 -msgid "AdminOwnPersonalGroups" -msgstr "AdminOwnPersonalGroups" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "AdminQueue" -msgstr "AdminQueue" - -#: lib/RT/System.pm:81 -msgid "AdminUsers" -msgstr "AdminUsers" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Administracyjne Cc" - -#: NOT FOUND IN SOURCE -msgid "Admins" -msgstr "Administrateurs" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Zaawansowane" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "Wyszukiwanie zaawansowane" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search Criteria" -msgstr "Kryteria wyszukiwania zaawansowanego" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "po" - -#: NOT FOUND IN SOURCE -msgid "Age" -msgstr "Wiek" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Alias for" -msgstr "Alias pour" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "Wszystkie warunki poprawności spełnione" - -#: NOT FOUND IN SOURCE -msgid "All Classes" -msgstr "Wszystkie klasy" - -#: NOT FOUND IN SOURCE -msgid "All Custom Fields" -msgstr "Wszystkie pola definiowane przez użytkownika" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Wszystkie kolejki" - -#: NOT FOUND IN SOURCE -msgid "Always sends a message to the requestors independent of message sender" -msgstr "Zawsze wysyła wiadomość do zgłaszających niezależnie od nadawcy wiadomości" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "I/Lub" - -#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "Zastosuj do: " - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Zastosuj" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Zastosuj zmiany" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Potwierdzenia" - -#: 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 "Potwierdzenie #%1: %2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Potwierdzenie #%1: Uwagi nie zostały zapisane z powodu błędu systemu" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Potwierdzenie #%1: Uwagi zostały zapisane" - -#: NOT FOUND IN SOURCE -msgid "Approval Details" -msgstr "Szczegóły zatwierdzenia" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Zatwierdzone" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Odrzucone" - -#: NOT FOUND IN SOURCE -msgid "Approval diagram" -msgstr "Diagram potwierdzenia" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Zatwierdź" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Uwagi zatwierdzającego: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Kwi." - -#: NOT FOUND IN SOURCE -msgid "April" -msgstr "Kwiecień" - -#: NOT FOUND IN SOURCE -msgid "Are you sure you want to delete this article?" -msgstr "Czy jestes pewien, że chcesz usunąć ten artykuł?" - -#: NOT FOUND IN SOURCE -msgid "Article #%1 deleted" -msgstr "Artykuł #%1 został usunięty" - -#: NOT FOUND IN SOURCE -msgid "Article #%1: %2" -msgstr "Artykuł #%1: %2" - -#: NOT FOUND IN SOURCE -msgid "Article not found" -msgstr "Artykuł nie został odnaleziony" - -#: NOT FOUND IN SOURCE -msgid "Articles" -msgstr "Artykuły" - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Rosnąco" - -#: 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 "Załączniki" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Załącz plik" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Plik został załączony" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Nie udało się dodać załącznika '%1'" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Załącznik został utworzony" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Nazwa pliku załącznika" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Załączniki" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "Atrybut usunięty" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Sie." - -#: NOT FOUND IN SOURCE -msgid "August" -msgstr "Sierpień" - -#: NOT FOUND IN SOURCE -msgid "AuthSystem" -msgstr "AuthSystem" - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "Automatyczna odpowiedź" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Automatyczna odpowiedź wysyłana do zgłaszających" - -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "Automatyczna odpowiedź wysyłana do zgłaszających" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Available Columns" -msgstr "Dostępne kolumny" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "Niewłaściwy podpis PGP: %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "Niewłaściwy numer id załącznika. Nie udało się wyszukać załącznika '%1'\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad data in %1" -msgstr "Niewłaściwe dane w %1" - -#: NOT FOUND IN SOURCE -msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "Niewłaściwy numer transakcji dla załącznika. %1 należy zastąpić przez %2\\n" - -#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Podst. informacje" - -#: 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 "Pamiętaj, aby zapisać zmiany" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "przed" - -#: NOT FOUND IN SOURCE -msgid "Begin Approval" -msgstr "Rozpocznij zatwierdzanie" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Binary" -msgstr "Binaire" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Pusty" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bookmarkable URL for this search" -msgstr "Adres URL do zapamiętania dla tego wyszukiwania" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "URL do zapamiętania" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Krótkie nagłówki" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Hurtowa aktualizacja zgłoszeń" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Nie można zmienić użytkowników systemu" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Czy ten zarządzający widzi tę kolejkę" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Nie można wprowadzić wartości pola bez nazwy" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($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 "Nie można połączyć zgłoszenia z tym samym zgłoszeniem" - -#: NOT FOUND IN SOURCE -msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Niemożliwe połączenie w jedno zgłoszenie" - -#: html/Widgets/SavedSearch:63 -#. (loc($self->{SearchType})) -msgid "Can't save %1" -msgstr "" - -#: html/Search/Build.html:290 -msgid "Can't save this search" -msgstr "Niemożliwe jest zapisanie tego zapytania" - -#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "Niemożliwe określenie jednocześnie podstaw i celu" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Niemożliwe utworzenie użytkownika: %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 "Zmień hasło" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Zaznacz wszystko" - -#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "Zaznacz pole, aby usunąć" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Zaznacz pole, aby odebrać uprawnienie" - -#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Zgłoszenia podrzędne" - -#: 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 "Miasto" - -#: NOT FOUND IN SOURCE -msgid "Class" -msgstr "Klasa" - -#: NOT FOUND IN SOURCE -msgid "Class Name" -msgstr "Nazwa klasy" - -#: NOT FOUND IN SOURCE -msgid "Class is" -msgstr "Klasą jest" - -#: NOT FOUND IN SOURCE -msgid "Classes" -msgstr "Klasy" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Odznacz wszystko" - -#: html/Helpers/CalPopup.html:51 -msgid "Close window" -msgstr "" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Zamknięte" - -#: NOT FOUND IN SOURCE -msgid "Closed Tickets" -msgstr "Zamknięte zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Closed requests" -msgstr "Demandes closes" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Zamknięte zgłoszenia" - -#: 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 "Niezrozumiałe polecenie!\\n" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Komentuj" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Adres komentarza" - -#: NOT FOUND IN SOURCE -msgid "Comment not recorded" -msgstr "Komentarz nie został zapisany" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Komentarz do zgłoszeń" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "CommentOnTicket" - -#: NOT FOUND IN SOURCE -msgid "Comments" -msgstr "Komentarze" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Komentarze (które nie zostaną wysłane zgłaszającym)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Komentarze (które nie zostały wysłane zgłaszającym)" - -#: NOT FOUND IN SOURCE -msgid "Comments about %1" -msgstr "Komentarze dotyczące %1" - -#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Uwagi dotyczące użytkownika" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Komentarze zostały dodane" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "Potwierdzenie wysłane do zgłaszającego" - -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "Ograniczenia kompilacji" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Warunek" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "Warunek zgadza się z ..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Warunek nie został odnaleziony" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Konfiguracja" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Potwierdź" - -#: NOT FOUND IN SOURCE -msgid "ContactInfoSystem" -msgstr "ContactInfoSystem" - -#: NOT FOUND IN SOURCE -msgid "Contacted date '%1' could not be parsed" -msgstr "Nie udało się rozpoznać daty modyfikacji'%1'" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Zawartość" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "Typ zawartości" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Kopiuj" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Korespondencja" - -#: NOT FOUND IN SOURCE -msgid "Correspondence Address" -msgstr "Adres korespondencyjny" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Korespondencja została dodana" - -#: NOT FOUND IN SOURCE -msgid "Correspondence not recorded" -msgstr "Korespondencja nie została zapisana" - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. " -msgstr "Nie udało się wprowadzić nowej wartości pola dla zgłoszenia." - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "" - -#: 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 "Nie udało się zmienić właściciela." - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Nie udało się utworzyć pola definiowanego przez użytkownika" - -#: 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 "Nie udało się utworzyć grupy" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "Nie udało się utworzyć szablonu: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Nie udało się utworzyć zgłoszenia. Nie określono kolejki" - -#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496 -msgid "Could not create user" -msgstr "Nie udało się utworzyć użytkownika" - -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" -msgstr "Nie udało się wyszukać zgłoszenia o numerze %1" - -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." -msgstr "Nie udało się wyszukać grupy %1." - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "Nie udało się wyszukać ani utworzyć tego użytkownika" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "Nie udało się wyszukać tego zarządzającego" - -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." -msgstr "Nie udało się wyszukać użytkownika %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 "Nie udało się załadować grupy" - -#: 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 "Nie udało się przypisać tego zarządzającego jako %1 dla tej kolejki" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "Nie udało się przypisać tego zarządzającego jako %1 dla tego zgłoszenia" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Nie udało się usunąć tego zarządzającego jako %1 dla tej kolejki" - -#: NOT FOUND IN SOURCE -msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Nie udało się usunąć tego zarządzającego jako %1 dla tego zgłoszenia" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "Niemożliwe było zapisanie danych użytkownika" - -#: 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 "Nie udało się dodać nowego członka grupy" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "Nie udało się utworzyć transakcji: %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "Nie udało się ustalić, co zrobić na podstawie odpowiedzi z gpg\\n" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find group\\n" -msgstr "Nie udało się wyszukać grupy\\n" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "Nie udało się wyszukać wiersza" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Nie udało się wyszukać tego zarządzającego" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Nie udało się wyszukać tej wartości" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "Nie udało się wyszukać użytkownika\\n" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "Nie udało się załadować %1 z bazy użytkowników.\\n" - -#: html/Admin/CustomFields/UserRights.html:149 -#. ($id) -msgid "Couldn't load Class %1" -msgstr "Nie udało się załadować klasy %1" - -#: html/Admin/CustomFields/GroupRights.html:107 -#. ($id) -msgid "Couldn't load CustomField %1" -msgstr "Nie udało się załadować pola %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" -msgstr "Nie udało się załadować pliku konfiguracji RT '%1' %2" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "Nie udało się załadować skryptów" - -#: 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 "Nie udało się załadować grupy %1" - -#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238 -msgid "Couldn't load link" -msgstr "Nie udało się załadować połączenia" - -#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 -#. ($id) -msgid "Couldn't load object %1" -msgstr "Impossible de charger l'objet %1" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "Nie udało się załadować kolejki" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr " Nie udało się załadować kolejki %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "Nie udało się załadować skryptu" - -#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167 -#. ($id) -msgid "Couldn't load scrip #%1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load template" -msgstr "Nie udało się załadować szablonu" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load that user (%1)" -msgstr "Nie udało się załadować użytkownika (%1)" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "Nie udało się załadować zgłoszenia '%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 "Kraj" - -#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235 -msgid "Create" -msgstr "Utwórz" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Utwórz zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Create a Class" -msgstr "Utwórz klasę" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Utwórz pole definiowane przez użytkownika" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "Utwórz pole dla kolejki %1" - -#: NOT FOUND IN SOURCE -msgid "Create a CustomField which applies to all queues" -msgstr "Utwórz pole, które dotyczy wszystkich kolejek" - -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "Utwórz nowe pole definiowane przez użytkownika" - -#: NOT FOUND IN SOURCE -msgid "Create a new article" -msgstr "Utwórz nowy artykuł" - -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "Utwórz nowy skrypt globalny" - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Utwórz nową grupę" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Utwórz nową grupę prywatną" - -#: NOT FOUND IN SOURCE -msgid "Create a new queue" -msgstr "Utwórz nową kolejkę" - -#: NOT FOUND IN SOURCE -msgid "Create a new scrip" -msgstr "Utwórz nowy skrypt" - -#: NOT FOUND IN SOURCE -msgid "Create a new template" -msgstr "Utwórz nowy szablon" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Utwórz nowe zgłoszenie" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Utwórz nowego użytkownika" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Utwórz kolejkę" - -#: NOT FOUND IN SOURCE -msgid "Create a queue called" -msgstr "Utwórz kolejkę nazwaną" - -#: NOT FOUND IN SOURCE -msgid "Create a request" -msgstr "Utwórz zgłoszenie" - -#: html/Admin/Queues/Scrip.html:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Utwórz skrypt dla kolejki %1" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Utwórz szablon" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Utwórz zgłoszenie" - -#: NOT FOUND IN SOURCE -msgid "Create an article" -msgstr "Utwórz artykuł" - -#: NOT FOUND IN SOURCE -msgid "Create an article in class..." -msgstr "Utwórz artykuł w ramach klasy..." - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Utwórz nowe zgłoszenia na podstawie szablonu tego skryptu" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Utwórz zgłoszenie" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Utwórz zgłoszenia w tej kolejce" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Utwórz, usuń i zmodyfikuj pola def. przez użytkownika" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Utwórz, usuń i zmodyfikuj kolejki" - -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "Utwórz, usuń i zmodyfikuj członków którejś z prywatnych grup użytkownika" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr " Utwórz, usuń i zmodyfikuj członków prywatnych grup" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Utwórz, usuń i zmodyfikuj użytkowników" - -#: lib/RT/System.pm:87 -msgid "CreateSavedSearch" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "CreateTicket" -msgstr "CreateTicket" - -#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169 -msgid "Created" -msgstr "Zarejestrowane" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "Pole %1 zostało utworzone" - -#: NOT FOUND IN SOURCE -msgid "Created by" -msgstr "Utworzony przez" - -#: NOT FOUND IN SOURCE -msgid "Created during" -msgstr "Utworzony podczas" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Created template %1" -msgstr "Szablon %1 został utworzony" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Zgłaszający" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Aktualne powiązania" - -#: NOT FOUND IN SOURCE -msgid "Current Relationships" -msgstr "Aktualne powiązania" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Aktualne skrypty" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Aktualni członkowie" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Aktualne uprawnienia" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Current search criteria" -msgstr "Aktualne kryteria wyszukiwania" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Aktualni obserwatorzy" - -#: NOT FOUND IN SOURCE -msgid "Custom Field #%1" -msgstr "Pole def. przez użytkownika #%1" - -#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "Pola def. przez użytkownika" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Treść procedury czyszczenia definiowana przez użytkownika" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Treść procedury definiowana przez użytkownika" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Warunek definiowany przez użytkownika" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 %2 %3" -msgstr "Pole definiowane przez użytkownika %1 %2 %3" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "Pole %1 definiowane przez użytkownika ma wartość." - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "Brak wartości w polu %1 definiowanym przez użytkownika." - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Nie udało się wyszukać pola %1 definiowanego przez użytkownika" - -#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121 -#. ($cf) -#. ($obj->Name) -msgid "Custom field '%1'" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Custom field deleted" -msgstr "Pole definiowane przez użytkownika zostało usunięte" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Nie udało się wyszukać pola definiowanego przez użytkownika" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Nie udało się wyszukać wartości %1 dla pola %2" - -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "Wartość pola zmieniła się z %1 na %2" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "Nie można usunąć wartości pola" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "Nie udało się wyszukać wartości pola" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Wartość pola została usunięta" - -#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "Pole" - -#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75 -msgid "Customize" -msgstr "" - -#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65 -msgid "Dates" -msgstr "Daty" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Gru." - -#: NOT FOUND IN SOURCE -msgid "December" -msgstr "Grudzień" - -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" -msgstr "Domyślnie wybierany szablon odpowiedzi wysyłanej automatycznie" - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Domyślnie wybierany szablon odpowiedzi wysyłanej automatycznie" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Domyślna kolejka" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Domyślny zgłaszający" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Domyślnie wybierany szablon komentarza administratora" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Domyślnie wybierany szablon korespondencji administratora" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Domyślnie wybierany szablon korespondencji" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Domyślnie wybierany szablon transakcji" - -#: NOT FOUND IN SOURCE -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Domyślnie: %1/%2 zmieniane z \"%3\" na \"%4\"" - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Przekaż uprawnienia" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "Przekaż specyficzne uprawnienia, które zostały Ci przyznane" - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "DelegateRights" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Przekazywanie uprawnień" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "Usuń" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "Usuń szablon" - -#: NOT FOUND IN SOURCE -msgid "Delete article #%1" -msgstr "Usuń artykuł #%1" - -#: lib/RT/SavedSearch.pm:220 -#. ($msg) -msgid "Delete failed: %1" -msgstr "" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Usuń zaznaczone skrypty" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Usuń zgłoszenia" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "DeleteTicket" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object could break referential integrity" -msgstr "Usunięcie tego obiektu mogło spowodować brak spójności" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "Usunięcie tego obiektu spowoduje brak spójności" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Usunięcie tego obiektu naruszy spójność" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Odrzucić" - -#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "Zgłoszenia zależne" - -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "Zależności" - -#: lib/RT/Transaction_Overlay.pm:718 -#. ($value) -msgid "Dependency by %1 added" -msgstr "Zależność %1 dodana" - -#: lib/RT/Transaction_Overlay.pm:758 -#. ($value) -msgid "Dependency by %1 deleted" -msgstr "Zależność %1 usunięta" - -#: lib/RT/Transaction_Overlay.pm:715 -#. ($value) -msgid "Dependency on %1 added" -msgstr "Zależność od %1 dodana" - -#: lib/RT/Transaction_Overlay.pm:755 -#. ($value) -msgid "Dependency on %1 deleted" -msgstr "Zależność od %1 usunięta" - -#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46 -msgid "Depends on" -msgstr "Zależy od" - -#: NOT FOUND IN SOURCE -msgid "DependsOn" -msgstr "ZależyOd" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Malejąco" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Opis zgłoszenia" - -#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70 -msgid "Description" -msgstr "Opis" - -#: NOT FOUND IN SOURCE -msgid "Details" -msgstr "Szczegóły" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Wyświetl" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Wyświetl Listę Praw Dostępu" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Wybierz kolumny" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Wyświetl szablony skryptów dla tej kolejki" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Wyświetl skrypty dla tej kolejki" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Tryb wyświetlania" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Display ticket #%1" -msgstr "Wyświetl zgłoszenie #%1" - -#: html/Elements/Footer:61 -msgid "Distributed under version 2 of the GNU GPL." -msgstr "Rozpowszechniane na mocy wersji 2 licencji GNU GPL ." - -#: lib/RT/System.pm:75 -msgid "Do anything and everything" -msgstr "Zrób cokolwiek i wszystko" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Nie odświeżaj tej strony." - -#: NOT FOUND IN SOURCE -msgid "Don't show search results" -msgstr "Nie wyświetlaj wyników wyszukiwania" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Pobierz " - -#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Pobierz jako listę [dane każdego użytkownika/grupy w jednej linii, odzielone tabulatorem]" - -#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173 -msgid "Due" -msgstr "Termin realizacji" - -#: NOT FOUND IN SOURCE -msgid "Due date '%1' could not be parsed" -msgstr "Termin realizacji '%1' nie może być rozpoznany" - -#: NOT FOUND IN SOURCE -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "BŁĄD: Nie udało się załadować zgłoszenia: '%1': %2.\\n" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Edytuj" - -#: NOT FOUND IN SOURCE -msgid "Edit Conditions" -msgstr "Modifier les conditions" - -#: 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 "Edytuj pola dla kolejki %1" - -#: NOT FOUND IN SOURCE -msgid "Edit Custom Fields for Class %1" -msgstr "Edytuj pola dla klasy %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 "Edycja zdefiniowanych przez użytkownia pól dla zgłoszeń we wszystkich kolejkach" - -#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Edytuj powiązania" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Zmodyfikuj zapytanie" - -#: NOT FOUND IN SOURCE -msgid "Edit Relationships" -msgstr "Edytuj powiązania" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "" - -#: html/Admin/Queues/Templates.html:63 -#. ($QueueObj->Name) -msgid "Edit Templates for queue %1" -msgstr "Edytuj szablony kolejki %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Edit scrips" -msgstr "Edytuj skrypty" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Edytuj szablony systemowe" - -#: NOT FOUND IN SOURCE -msgid "Edit templates for %1" -msgstr "Edytuj szablony dla %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "EdytujZapisaneZapytania" - -#: NOT FOUND IN SOURCE -msgid "Editing Configuration for Class %1" -msgstr "Edytuj konfigurację klasy %1" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "Edytuj konfigurację kolejki %1" - -#: NOT FOUND IN SOURCE -msgid "Editing Configuration for user %1" -msgstr "Edytuj konfigurację użytkownika %1" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Edytuj pole %1" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Edytuj listę członków grupy %1" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Edytuj listę członków prywatnej grupy %1" - -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "Edytuj szablon %1" - -#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608 -msgid "Either base or target must be specified" -msgstr "Podstawy lub cel muszą być określone" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "e-mail" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "Używany adres e-mail " - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "adres e-mail" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "kodowanie e-maila" - -#: NOT FOUND IN SOURCE -msgid "Enabled (Unchecking this box disables this Class)" -msgstr "Udostępniona (nieoznaczenie tego pola spowoduje, że klasa będzie niedostępna)" - -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Udostępnione (nieoznaczenie tego pola spowoduje, że pole będzie niedostępne)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Udostępniona (nieoznaczenie tego pola spowoduje, że grupa będzie niedostępna)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Udostępniona (nieoznaczenie tego pola spowoduje, że kolejka będzie niedostępna)" - -#: NOT FOUND IN SOURCE -msgid "Enabled Classes" -msgstr "Dostępne klasy" - -#: NOT FOUND IN SOURCE -msgid "Enabled Custom Fields" -msgstr "Dostępne pola definiowane przez użytkownika" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Dostępne kolejki" - -#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138 -#. (loc_fuzzy($msg)) -msgid "Enabled status %1" -msgstr "Dostępny status %1" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -msgstr "Statut actif: %1" - -#: NOT FOUND IN SOURCE -msgid "Enter Articles or URIs to link Articles to. Seperate multiple entries with spaces." -msgstr "Aby powiązać artykuły, wprowadź artykuły lub URI oddzielone spacjami." - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Wprowadzanie wielu wartości" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Aby powiązać obiekty, wprowadź URI obiektów oddzielone spacjami." - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Wprowadzanie jednej wartości" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Aby powiązać kolejki, wprowadź URI kolejek oddzielone spacjamii." - -#: html/Elements/EditLinks:119 html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Aby powiązać zgłoszenia, wprowadź numery zgłoszeń lub URI oddzielone spacjami." - -#: NOT FOUND IN SOURCE -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "Aby powiązać zgłoszenia, wprowadź numery zgłoszeń lub URI oddzielone spacjami." - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Saisir %1 valeurs maximum" - -#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47 -msgid "Error" -msgstr "Błąd" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Błąd w określeniu parametrów kolejki->Dodaj Obserwatora" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Błąd w określeniu parametrów kolejki -> Usuń Obserwatora" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Błąd w określeniu parametrów kolejki -> Usuń Obserwatora" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Błąd w określeniu parametrów zgłoszenia -> Dodaj Obserwatora" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Ticket->DelWatcher" -msgstr " Błąd w określeniu parametrów zgłoszenia -> Usuń Obserwatora" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Błąd w określeniu parametrów Zgłoszenia-> Usuń Obserwatora" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "Eskaluj zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Estimate" -msgstr "Estimer" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Szacowane" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Wszyscy" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Przykład:" - -#: NOT FOUND IN SOURCE -msgid "ExternalAuthId" -msgstr "Zewnętrzne AuthId" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr "ExternalContactInfoId" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Informacje dodatkowe" - -#: NOT FOUND IN SOURCE -msgid "Extract article from ticket #%1" -msgstr "Wydziel artykuł ze zgłoszenia #%1" - -#: NOT FOUND IN SOURCE -msgid "Extract article from ticket #%1 into class %2" -msgstr "Wydziel artykuł ze zgłoszenia #%1 w klasie %2" - -#: lib/RT/SavedSearch.pm:177 -msgid "Failed to create search attribute" -msgstr "" - -#: lib/RT/User_Overlay.pm:376 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Nie udało się wyszukać członków grupy 'Uprawnieni'" - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Nie udało się wyszukać członków grupy 'Nieuprawnieni'" - -#: bin/rt-crontool:206 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "Nie udało się załadować modułu %1. (%2)" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Lut." - -#: NOT FOUND IN SOURCE -msgid "February" -msgstr "Luty" - -# Nie jestem pewien: jedno słowo! -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "Nazwa pliku" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Saisir dans plusieurs champs de type texte" - -#: 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 "Saisir dans un champ de type texte" - -#: 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 "Saisir dans %1 champs de type texte maximum" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Fin" -msgstr "Koniec" - -#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841 -msgid "Final Priority" -msgstr "Końcowy priorytet" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "Końcowy priorytet" - -#: NOT FOUND IN SOURCE -msgid "Find group whose" -msgstr "Wyszukaj grupę, której" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Wyszukaj grupy, których:" - -#: NOT FOUND IN SOURCE -msgid "Find new/open tickets" -msgstr "Wyszykaj nowe/otwarte zgłoszenia" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Wyszukaj użytkowników, których" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Wyszukaj zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "Zakończ zatwierdzanie" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Pierwsze" - -#: NOT FOUND IN SOURCE -msgid "First page" -msgstr "Pierwsza strona" - -#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 -msgid "Foo Bar Baz" -msgstr "Ble ble" - -#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 -msgid "Foo!" -msgstr "ble ble" - -#: html/Search/Bulk.html:83 -msgid "Force change" -msgstr "Wymuś zmianę" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "Wyszukano %1 zgłoszeń" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Wyszukany obiekt" - -#: NOT FOUND IN SOURCE -msgid "Freeform" -msgstr "FormulaireLibre" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "FreeformContactInfo" - -#: NOT FOUND IN SOURCE -msgid "FreeformMultiple" -msgstr "FreeformMultiple" - -#: NOT FOUND IN SOURCE -msgid "FreeformSingle" -msgstr "FreeformSingle" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Pt." - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Pełne nagłówki" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Pobierz szablon z pliku" - -#: NOT FOUND IN SOURCE -msgid "Getting the current user from a pgp sig\\n" -msgstr "Uzyskanie aktualnego użytkownika na podstawie podpisu pgp\\n" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "Nadany dla %1" - -#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 -msgid "Global" -msgstr "Globalna" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -msgstr "Skrypty globalne" - -#: 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 "Szablon globalny: %1" - -#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89 -msgid "Go" -msgstr "Pobierz" - -#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57 -msgid "Go!" -msgstr "Start!" - -#: NOT FOUND IN SOURCE -msgid "Good pgp sig from %1\\n" -msgstr "Poprawny podpis pgp dla %1\\n " - -#: NOT FOUND IN SOURCE -msgid "Goto page" -msgstr "Przejdź do strony" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Przejdź do zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Grand" -msgstr "Accorder" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Grupa" - -#: NOT FOUND IN SOURCE -msgid "Group %1 %2: %3" -msgstr "Grupa %1 %2: %3" - -#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Uprawnienia grupowe" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Grupa ma już członka" - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "Nie udało się utworzyć grupy: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Grupa została utworzona" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Nie ma takiego członka grupy" - -#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510 -msgid "Group not found" -msgstr "Nie udało się wyszukać grupy" - -#: NOT FOUND IN SOURCE -msgid "Group not found.\\n" -msgstr "Nie udało się wyszukać grupy.\\n" - -#: NOT FOUND IN SOURCE -msgid "Group not specified.\\n" -msgstr "Grupa nie została określona.\\n" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210 -msgid "Groups" -msgstr "Grupy" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Nie można przypisac grup jako członków tych grup" - -#: html/Admin/Groups/index.html:86 -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 "Witaj!" - -#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 -#. ($name) -msgid "Hello, %1" -msgstr "Witaj, %1" - -#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Historia" - -#: NOT FOUND IN SOURCE -msgid "History for article #%1" -msgstr "Historia artykułu #%1" - -#: html/Admin/Groups/History.html:62 -#. ($GroupObj->Name) -msgid "History of the group %1" -msgstr "Historique du groupe %1" - -#: html/Admin/Users/History.html:62 -#. ($UserObj->Name) -msgid "History of the user %1" -msgstr "Historique de l'utilisateur %1" - -#: NOT FOUND IN SOURCE -msgid "HomePhone" -msgstr "Tel. domowy" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Start" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "Posiadam %quant(%1,concrete mixer)." - -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." -msgstr "I have [quant,_1,concrete mixer]." - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766 -msgid "Id" -msgstr "Nr " - -#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 -msgid "Identity" -msgstr "Identyfikacja użytkownika" - -#: etc/initialdata:429 -msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "Jeśli potwierdzenie zostało odrzucone, odrzuć oryginał i usuń oczekujące potwierdzenia" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "Jeśli zgłaszający nie został określony, twórz zgłoszenia dla tego użytkownika." - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Jeśli kolejka nie została określona, twórz zgłoszenia w tej kolejce." - -#: bin/rt-crontool:267 -msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT." -msgstr "Jeśli ta aplikacja została zachwiana, obcy lokalny użytkownik mógł używać tej aplikacji, aby uzyskać do RT dostęp na prawach administratora" - -#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60 -msgid "If you've updated anything above, be sure to" -msgstr "Jeśli zmodyfikowałeś coś powyżej" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Niedopuszczalna wartość dla %1" - -#: NOT FOUND IN SOURCE -msgid "Image" -msgstr "Image" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Pole, które nie może być powielane" - -#: NOT FOUND IN SOURCE -msgid "Include disabled classes in listing." -msgstr "Uwzględnij na liście nieaktywne klasy" - -#: NOT FOUND IN SOURCE -msgid "Include disabled custom fields in listing." -msgstr "Uwzględnij na liście nieaktywne pola." - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Uwzględnij na liście nieaktywne grupy." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Uwzględnij na liście nieaktywne kolejki." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Uwzględnij w wyszukiwaniu nieaktywnych użytkowników." - -#: 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 "Początkowy priorytet" - -#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "Początkowy priorytet" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Błąd na wejściu" - -#: html/Elements/ValidateCustomFields:68 lib/RT/CustomField_Overlay.pm:1021 lib/RT/CustomField_Overlay.pm:1162 -#. ($self->FriendlyPattern) -#. ($CF->FriendlyPattern) -msgid "Input must match %1" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Błąd wewnętrzny" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Błąd wewnętrzny: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Nieprawidłowy typ grupy" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Nieprawidłowe uprawnienie" - -#: NOT FOUND IN SOURCE -msgid "Invalid Type" -msgstr "Type invalide" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Nieprawidłowe dane" - -#: NOT FOUND IN SOURCE -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Nieprawidłowy właściciel. Domyślnie 'nikt'" - -#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678 -#. ($msg) -msgid "Invalid pattern: %1" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244 -msgid "Invalid queue" -msgstr "Nieprawidłowa kolejka" - -#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290 -msgid "Invalid right" -msgstr "Nieprawidłowe uprawnienie" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "Nieprawidłowa wartość dla %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Nieprawidłowa wartość pola" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Nieprawidłowy status" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Bardzo ważne, aby nieuprawnieni użytkownicy nie posiadali uprawnień do uruchomienia tej aplikacji." - -#: bin/rt-crontool:269 -msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool." -msgstr "Sugeruje się, aby utworzyć nieuprawnionego użytkownika w odpowiedniej grupie o odpowiednim dostępie do RT, aby uruchomić tę aplikację" - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Wymaga kilku argumentów:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" -msgstr "Pozycje oczekujące na moje zatwierdzenie" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Sty." - -#: NOT FOUND IN SOURCE -msgid "January" -msgstr "Styczeń" - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Dołącz albo opuść tę grupę" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Lip." - -#: NOT FOUND IN SOURCE -msgid "July" -msgstr "Lipiec" - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Wszystko" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Cze." - -#: NOT FOUND IN SOURCE -msgid "June" -msgstr "Czerwiec" - -#: NOT FOUND IN SOURCE -msgid "Keyword" -msgstr "Słowo kluczowe" - -#: NOT FOUND IN SOURCE -msgid "Lang" -msgstr "Język" - -#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 -msgid "Language" -msgstr "Język" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Ostatnie" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Ostatnia modyfikacja" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Ostatnio modyfikowane" - -#: NOT FOUND IN SOURCE -msgid "Last Notified" -msgstr "Ostatnio powiadomiony" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Ostatnio zaktualizowane" - -#: NOT FOUND IN SOURCE -msgid "LastUpdated" -msgstr "OstAktualiz" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "OstAktPrzez" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Pozostały" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Udostępnij temu użytkownikowi RT" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Przydziel uprawnienia temu użytkownikowi" - -#: NOT FOUND IN SOURCE -msgid "Limiting owner to %1 %2" -msgstr "Ograniczenie właściciela do %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Limiting queue to %1 %2" -msgstr "Ograniczenie kolejki do %1 %2" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Połączenie już istnieje" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Nie udało się utworzyć połączenia" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Połączenie zostało utworzone (%1)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Połączenie zostało usunięte (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Połączenie nie zostało odnalezione" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Powiąż zgłoszenie #%1" - -#: NOT FOUND IN SOURCE -msgid "Link ticket %1" -msgstr "Lier au ticket %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 "Powiązania" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "Załaduj" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Załaduj zapisane zapytanie:" - -#: lib/RT/System.pm:86 -msgid "LoadSavedSearch" -msgstr "" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Załadowane moduły 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 "Lokalizacja" - -#: NOT FOUND IN SOURCE -msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "Ścieżka logowania %1 nie została odnaleziona lub nie mógła być zapisana.\\n Nie udało się uruchomić RT" - -#: html/Elements/Header:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "Zalogowano jako %1" - -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Zaloguj się" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Wyloguj się" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Wprowadź właściciela" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Wprowadź status" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Wprowadź termin realizacji" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Wprowadź datę zamknięcia" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Wprowadź datę rozpoczęcia realizacji" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Wprowadź datę rozpoczęcia realizacji" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Wprowadź datę wpływu" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Wprowadź priorytet" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Wprowadź kolejkę" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Wprowadź temat" - -#: 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 "Administracja polami zdefiniowanymi przez użytkownika " - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Administracja grupami i członkami grup" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Administracja właściwościami i konfiguracją, które dotyczą wszystkich kolejek" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Administracja kolejkami i specyficznymi właściwościami kolejek" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Administracja użytkownikami i hasłami" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Mar." - -#: NOT FOUND IN SOURCE -msgid "March" -msgstr "Marzec" - -#: NOT FOUND IN SOURCE -msgid "May" -msgstr "Maj" - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "Maj" - -#: lib/RT/Transaction_Overlay.pm:731 -#. ($value) -msgid "Member %1 added" -msgstr "Członek %1 dodany" - -#: lib/RT/Transaction_Overlay.pm:771 -#. ($value) -msgid "Member %1 deleted" -msgstr "Członek %1 usunięty" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Członek grupy został dodany" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Członek grupy został usunięty" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Członek grupy nie został usunięty" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Członek grupy" - -#: NOT FOUND IN SOURCE -msgid "MemberOf" -msgstr "CzłonekGrupy" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Członkowie grup" - -#: lib/RT/Transaction_Overlay.pm:728 -#. ($value) -msgid "Membership in %1 added" -msgstr "Członkowstwo w %1 dodane" - -#: lib/RT/Transaction_Overlay.pm:768 -#. ($value) -msgid "Membership in %1 deleted" -msgstr "Członkowstwo w %1 usunięte" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Affiliations" - -#: html/Admin/Users/Memberships.html:60 -#. ($UserObj->Name) -msgid "Memberships of the user %1" -msgstr "Affiliations de l'utilisateur %1" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Udało się połączyć" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Nie udało się połączyć. Nie udało się ustawić efektywnego Id" - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "" - -#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Połączyć w" - -#: lib/RT/Transaction_Overlay.pm:734 -#. ($value) -msgid "Merged into %1" -msgstr "Połączono z %1" - -#: html/Search/Bulk.html:143 html/Ticket/Update.html:118 -msgid "Message" -msgstr "Wiadomość" - -#: 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 "Wiadomość nie mogła zostać zapisana" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Wiadomość zapisana" - -#: html/Ticket/Elements/PreviewScrips:122 -msgid "Messages about this ticket will not be sent to..." -msgstr "Powiadomienie o tym zgłoszeniu nie zostanie wysłane do..." - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -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 "Brakujący klucz główny?: %1:" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Tel. komórkowy" - -#: NOT FOUND IN SOURCE -msgid "MobilePhone" -msgstr "Tel. komórkowy" - -#: NOT FOUND IN SOURCE -msgid "Modified" -msgstr "Zmieniony" - -#: NOT FOUND IN SOURCE -msgid "Modify" -msgstr "Zmodyfikuj" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Modyfikuj Listę Praw Dostępu" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "Modyfikuj pole %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 "Modyfikuj pola, które dotyczą wszystkich kolejek" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Zmodyfikuj uprawnienia grup" - -#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Modyfikuj Członków" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Zapisz uprawnienia" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Modify Scrip templates for this queue" -msgstr "Modyfikuj szablony skryptów dla tej kolejki" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Modyfikuj skrypty dla tej kolejki" - -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" -msgstr "Modyfikuj szablon %1" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Zmodyfikuj uprawnienia użytkowników" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "Modyfikuj pole dla kolejki %1" - -#: NOT FOUND IN SOURCE -msgid "Modify a CustomField which applies to all queues" -msgstr "Modyfikuj pole, które dotyczy wszystkich kolejek" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "Modyfikuj skrypt dla kolejki %1" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Modyfikuj skrypt, który dotyczy wszystkich kolejek" - -#: NOT FOUND IN SOURCE -msgid "Modify article #%1" -msgstr "Modyfikuj artykuł #%1" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "Modyfikuj daty dla #%1" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Modyfikuj daty dla zgłoszenia # %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 -msgid "Modify global custom fields" -msgstr "Modyfikuj globalne pola definiowane przez użytkownika" - -#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77 -msgid "Modify global group rights" -msgstr "Modyfikuj globalne uprawnienia grupowe" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Modyfikuj globalne uprawnienia grupowe" - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for groups" -msgstr "Modifier les droits globaux des groupes" - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for users" -msgstr "Modifier les droits globaux des utilisateurs" - -#: NOT FOUND IN SOURCE -msgid "Modify global scrips" -msgstr "Modyfikuj globalne skrypty" - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Modyfikuj globalne uprawnienia użytkowników" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Modyfikuj globalne uprawnienia użytkowników." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Modyfikuj grupowe dane pośrednie lub usuń grupę" - -#: html/Admin/CustomFields/GroupRights.html:164 -#. ($CustomFieldObj->Name) -msgid "Modify group rights for custom field %1" -msgstr "Modyfikuj uprawnienia grupowe dla pola %1" - -#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 -#. ($GroupObj->Name) -msgid "Modify group rights for group %1" -msgstr "Modyfikuj uprawnienia grupowe dla grupy %1" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "Modyfikuj uprawnienia grupowe dla kolejki %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Modyfikuj listę członków tej grupy" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Modyfikuj konto w RT" - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "Modyfikuj użytkowników powiązanych z kolejką %1" - -#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57 -#. ($Ticket->id) -#. ($Ticket->Id) -msgid "Modify people related to ticket #%1" -msgstr "Modyfikuj użytkowników powiązanych ze zgłoszeniem %1" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Modyfikuj skrypty dla kolejki %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63 -msgid "Modify scrips which apply to all queues" -msgstr "Modyfikuj skrypty, które dotyczą wszystkich kolejek" - -#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99 -#. (loc($TemplateObj->Name())) -#. ($TemplateObj->id) -msgid "Modify template %1" -msgstr "Edytuj szablon %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Modyfikuj szablony, które dotyczą wszystkich kolejek" - -#: 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 "Modyfikuj grupę %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Modyfikuj obserwatorów kolejki" - -#: html/Admin/Users/Modify.html:309 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "Modyfikuj użytkownika %1" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "Modyfikuj zgłoszenie %1" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "Modyfikuj zgłoszenie %1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Modyfikuj zgłoszenia" - -#: 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 "Modyfikuj uprawnienia użytkowników dla grupy %1" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Modyfikuj uprawnienia użytkowników dla kolejki %1" - -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "Modyfikuj obserwatorów kolejki %1" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ModifyACL" -msgstr "ModifyACL" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "" - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "ModifyOwnMembership" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyQueueWatchers" -msgstr "ModifyQueueWatchers" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ModifyScrips" -msgstr "ModifyScrips" - -#: lib/RT/System.pm:82 -msgid "ModifySelf" -msgstr "ModifySelf" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "ModifyTemplate" -msgstr "ModifyTemplate" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "ModifyTicket" -msgstr "ModifyTicket" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Pon." - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "Więcej o %1" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Przesuń w dół" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Przesuń w górę" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Wielokrotny" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "Należy określić atrybut 'Nazwa'" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "%1 moich zgłoszeń" - -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "Moje potwierdzenia" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Moje potwierdzenia" - -#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Moje zapytania" - -#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65 -msgid "Name" -msgstr "Nazwa" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Używana nazwa" - -#: NOT FOUND IN SOURCE -msgid "Name matches" -msgstr "Nazwa zgadza się z" - -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "Wymagane potwierdzenie od administratora systemu" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Nigdy" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Nowe" - -#: NOT FOUND IN SOURCE -msgid "New Article" -msgstr "Nowy artykuł" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Nowe powiązania" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Nowe hasło" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Nowe zgłoszenie oczekujące na zatwierdzenie" - -#: NOT FOUND IN SOURCE -msgid "New Query" -msgstr "Nowe zapytanie" - -#: NOT FOUND IN SOURCE -msgid "New Relationships" -msgstr "Nowe powiązania" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Nowe wyszukiwanie" - -#: NOT FOUND IN SOURCE -msgid "New class" -msgstr "Nowa klasa" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Nowe pole def. przez użytkownika" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Nowa grupa" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Nowe hasło" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Nowe hasło zostało wysłane" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Nowa kolejka" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "New request" -msgstr "Nouvelle demande" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Nowe uprawnienia" - -#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Nowy skrypt" - -#: NOT FOUND IN SOURCE -msgid "New search" -msgstr "Nowe wyszukiwanie" - -#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Nowy szablon" - -#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Nowe zgłoszenie" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "Nowe zgłoszenie nie istnieje" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Nowy użytkownik" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Nowy użytkownik został nazwany" - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Nowi obserwatorzy" - -#: NOT FOUND IN SOURCE -msgid "New window setting" -msgstr "Nowe ustawienia okna" - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Następne" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Następna strona" - -#: NOT FOUND IN SOURCE -msgid "Next page" -msgstr "Następna strona" - -#: NOT FOUND IN SOURCE -msgid "NickName" -msgstr "Pseudonim" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Pseudonim" - -#: NOT FOUND IN SOURCE -msgid "No" -msgstr "Nie" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "Nie zdefiniowano klasy" - -#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "Brak pola definiowanego przez użytkownika" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Nie zdefiniowano pola def. przez użytkownika" - -#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Nie zdefiniowano grupy" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "Brak zapytania" - -#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "Nie zdefiniowano kolejki" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Nie odnaleziono użytkownika RT. Proszę skontaktować się z administratorem RT.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Brak szablonu" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket " -msgstr "Nie określono zgłoszenia. Odrzucenie zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket modifications\\n\\n" -msgstr "Nie określono zgłoszenia. Odrzucenie modyfikacji zgłoszenia\\n\\n" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "Zawieszenie operacji" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "Nie określono kolumny" - -#: NOT FOUND IN SOURCE -msgid "No command found\\n" -msgstr "Nie udało się wyszukać polecenia\\n" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Nie wprowadzono komentarza dotyczącego tego użytkownika" - -#: NOT FOUND IN SOURCE -msgid "No correspondence attached" -msgstr "Nie załączono korespondencji" - -#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78 -#. (ref $self) -msgid "No description for %1" -msgstr "Brak opisu dla %1" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Nie określono grupy" - -#: 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 "Brak załączonej wiadomości" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "Nie ustawiono hasła" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Brak uprawnień do tworzenia kolejek" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "Brak uprawnień do tworzenia zgłoszeń w kolejce '%1'" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Brak uprawnień do tworzenia użytkowników" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Brak uprawnień do wyświetlenia tego zgłoszenia" - -#: 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 "Brak uprawnień do przeglądania aktualizacji zgłoszenia" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Nie określono zarządzającego" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Nie wybrano zarządzających." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Brak kolejek odpowiadających kryteriom wyszukiwania" - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Nie udało się wyszukać uprawnień" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Nie przyznano uprawnień." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Brak kryteriów wyszukiwania" - -#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Brak tematu" - -#: NOT FOUND IN SOURCE -msgid "No ticket id specified" -msgstr "Nie określono numeru zgłoszenia" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Nie określono typu transakcji" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Brak użytkowników odpowiadających kryteriom wyszukiwania" - -#: NOT FOUND IN SOURCE -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Brak aktualnego użytkownika RT. Proszę skontaktować się z administratorem RT.\\n" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "Nie wysłano wartości do zestawu!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Nikt" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Nieistniejące pole?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Not logged in" -msgstr "Nie udało się zalogować" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Nie udało się zalogować." - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Nie ustawiona" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Jeszcze nie zaimplementowane." - -#: NOT FOUND IN SOURCE -msgid "Not yet implemented...." -msgstr "Jeszcze nie zaimplementowane..." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Uwagi" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Powiadomienie nie może zostać wysłane" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "Wyślij powiadomienie do osób o uprawnieniach AdminCc" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "Wyślij powiadomienie do osób o uprawnieniach AdminCc jako komentarz" - -#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 -msgid "Notify Ccs" -msgstr "Wyślij powiadomienia do osób o uprawnieniach Cc" - -#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "Wyślij powiadomienia do osób o uprawnieniach Cc jako komentarz" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "Wyślij powiadomienie do innych odbiorców" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Wyślij powiadomienie do innych odbiorców jako komentarz" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "Wyślij powiadomienie do właściciela" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "Wyślij powiadomienie do właściciela jako komentarz" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "Powiadom Właściciela o odrzuceniu jego zgłoszenia" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "Powiadom Zgłaszającego o zatwierdzeniu jego zgłoszenia przez wszystkich zatwierdzających" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "Powiadom Zgłaszającego o zatwierdzeniu jego zgłoszenia przez niektórych zatwierdzających" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Wyślij powiadomienie do właścicieli i osób o uprawnieniach AdminCc o nowych pozycjach oczekujących na zatwierdzenie przez nich" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "Wyślij powiadomienie do zgłaszających" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "Wyślij powiadomienie do zgłaszających i osób o uprawnieniach Cc" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "Wyślij powiadomienie do zgłaszających i osób o uprawnieniach Cc jako komentarz" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Wyślij powiadomienie do zgłaszających oraz osób o uprawnieniach Cc i AdminCc" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Wyślij powiadomienie do zgłaszających oraz osób o uprawnieniach Cc i AdminCC jako komentarz" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Lis." - -#: NOT FOUND IN SOURCE -msgid "November" -msgstr "Listopad" - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "Nie udało się utworzyć obiektu" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Obiekt został utworzony" - -#: 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 "Le type d'objet ne correspond pas" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Paź." - -#: NOT FOUND IN SOURCE -msgid "October" -msgstr "Październik" - -#: html/Tools/Elements/Tabs:55 -msgid "Offline" -msgstr "Praca zdalna" - -#: html/Tools/Offline.html:49 -msgid "Offline edits" -msgstr "Zdalne modyfikacje" - -#: html/Tools/Offline.html:46 -msgid "Offline upload" -msgstr "Załaduj modyfikowane zdalnie" - -#: html/Elements/SelectDateRelation:56 -msgid "On" -msgstr "dnia" - -#: lib/RT/Transaction_Overlay.pm:326 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "w przypadku komentarza" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "w przypadku korespondencji" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "w przypadku rejestracji zgłoszeń" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "w przypadku zmiany właściciela" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "w przypadku zmiany priorytetu" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "w przypadku zmiany kolejki" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "w przypadku zamykania zgłoszeń" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "w przypadku zmiany statusu" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "w przypadku transakcji" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Wyświetl tylko potwierdzenia dotyczące zgłoszeń zarejestrowanych po %1" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "Wyświetl tylko potwierdzenia dotyczące zgłoszeń zarejestrowanych przed %1" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Otwarte" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "Otwórz zgłoszenia" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Otwórz" - -#: NOT FOUND IN SOURCE -msgid "Open requests" -msgstr "Ouvrir les demandes" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Otwórz zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in a new window" -msgstr "Otwórz zgłoszenia (z listy) w nowym oknie" - -#: NOT FOUND IN SOURCE -msgid "Open tickets (from listing) in another window" -msgstr "Otwórz zgłoszenia (z listy) w innym oknie" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Otwórz zgłoszenia, które są w trakcie ustalania (wymiany korespondencji)" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Uporządkuj wg" - -#: NOT FOUND IN SOURCE -msgid "Ordering and sorting" -msgstr "Porządkowanie i sortowanie" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Firma" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Zgłoszenie źródłowe: #%1" - -#: lib/RT/Transaction_Overlay.pm:622 -msgid "Outgoing email about a comment recorded" -msgstr "Zarejestrowano wychodzącą wiadomość o komentarzu" - -#: lib/RT/Transaction_Overlay.pm:626 -msgid "Outgoing email recorded" -msgstr "Zarejestrowano wiadomość wychodzącą" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Z upływem czasu priorytet wzrasta do" - -#: NOT FOUND IN SOURCE -msgid "Overview" -msgstr "Przegląd" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Moje zgłoszenia" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "OwnTicket" - -#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006 -msgid "Owner" -msgstr "Właściciel" - -#: NOT FOUND IN SOURCE -msgid "Owner changed from %1 to %2" -msgstr "Właściciel zmienił się z %1 na %2" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "Właściciel nie mógł być ustanowiony." - -#: lib/RT/Transaction_Overlay.pm:672 -#. ($Old->Name , $New->Name) -msgid "Owner forcibly changed from %1 to %2" -msgstr "Wymuszono zmianę właściciela z %1 na %2" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "Właścicielem" - -#: html/Elements/TicketList:78 -#. ($Page, int($TotalFound/$Rows)+$oddRows) -msgid "Page %1 of %2" -msgstr "Strona %1 z %2" - -#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96 -msgid "Pager" -msgstr "Pager" - -#: NOT FOUND IN SOURCE -msgid "PagerPhone" -msgstr "Nr pager'a" - -#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "Zgłoszenia nadrzędne" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Hasło" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Przypomnienie o haśle" - -#: 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 "Hasło jest zbyt krótkie" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Hasło: %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "Hasła są różne." - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "Hasła są różne. Twoje hasło nie zostało zmienione." - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Osoby" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Wykonaj operację zdefiniowaną przez użytkownika" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Konfiguracja PERL" - -#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774 -msgid "Permission Denied" -msgstr "Odmowa dostępu" - -#: 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 "Grupy prywatne" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Grupy prywatne" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Grupy prywatne:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Numery tel." - -#: NOT FOUND IN SOURCE -msgid "Placeholder" -msgstr "Placeholder" - -#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Właściwości" - -#: 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 "Właściwości" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "Informacja o przygotowaniu została wysłana do zgłaszającego" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Poprzednie" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "Poprzednia strona" - -#: NOT FOUND IN SOURCE -msgid "Previous page" -msgstr "Poprzednia strona" - -#: NOT FOUND IN SOURCE -msgid "Pri" -msgstr "Poprzedni" - -#: 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 "Nie udało się wyszukać zarządzającego %1." - -#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790 -msgid "Priority" -msgstr "Priorytet" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "Priorytet rozpoczyna się od" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Prywatne:" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Uprawnieni" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Uprawniony status: %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Uprawnieni użytkownicy" - -#: NOT FOUND IN SOURCE -msgid "Projects" -msgstr "Projets" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Grupa do użytku wewnętrznego" - -#: NOT FOUND IN SOURCE -msgid "Query" -msgstr "Zapytanie" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Kreator zapytań" - -#: 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 "Kolejka " - -#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65 -#. ($Queue) -#. ($id) -msgid "Queue %1 not found" -msgstr "Nie udało się wyszukać kolejki %1" - -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "Nie udało się wyszukać kolejki '%1 '\\n" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Nazwa kolejki" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "Skrypty kolejki" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "Kolejka już istnieje" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "Nie udało się utworzyć kolejki" - -#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "Nie udało się załadować kolejki" - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Kolejka została utworzona" - -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "Kolejka nie została określona." - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Nie udało się wyszukać kolejki" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Kolejki" - -#: 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 "Szybkie wyszukiwanie" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Szybkie tworzenie zgłoszeń" - -#: html/Search/Results.html:81 -msgid "RSS" -msgstr "RSS (XML)" - -#: 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 dla %2" - -#: NOT FOUND IN SOURCE -msgid "RT %1 from Best Practical Solutions, LLC." -msgstr "RT %1 wyprodukowany przez 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 "Administracja RT" - -#: NOT FOUND IN SOURCE -msgid "RT Authentication error." -msgstr "Błąd autoryzacji w RT" - -#: NOT FOUND IN SOURCE -msgid "RT Bounce: %1" -msgstr "Odbicie zgłoszenia przez RT: %1" - -#: NOT FOUND IN SOURCE -msgid "RT Configuration error" -msgstr "Błąd konfiguracji RT" - -#: NOT FOUND IN SOURCE -msgid "RT Critical error. Message not recorded!" -msgstr "Błąd krytyczny RT. Nie udało się zapisać wiadomości!" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "Błąd RT" - -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." -msgstr "RT otrzymał e-mail (%1) z RT" - -#: NOT FOUND IN SOURCE -msgid "RT Self Service" -msgstr "Samoobsługa RT" - -#: html/Admin/Tools/Configuration.html:73 -msgid "RT Variables" -msgstr "Zmienne RT" - -#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75 -msgid "RT at a glance" -msgstr "RT - przegląd podstawowych informacji" - -#: 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 "Nieudana autoryzacja w RT" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find requestor via its external database lookup" -msgstr "Nie udało się wyszukać zgłaszającego przez przejrzenie zewnętrznej bazy" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find the queue: %1" -msgstr "Nie udało się wyszukać kolejki: %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 "Nie udało się zatwierdzić tego podpisu PGP.\\n" - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr "RT dla %1" - -#: NOT FOUND IN SOURCE -msgid "RT for %1: %2" -msgstr "RT dla %1: %2" - -#: NOT FOUND IN SOURCE -msgid "RT has proccessed your commands" -msgstr "RT wykonał twoje polecenia" - -#: 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 © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Jest dystrybuowane jako Wersja 2 GNU General Public License." - -#: NOT FOUND IN SOURCE -msgid "RT thinks this message may be a bounce" -msgstr "Wg RT ta wiadomość może być informacją odbitą" - -#: html/Search/Simple.html:58 -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 będzie postępował z tą wiadomością tak, jakby była niepodpisana.\\n" - -#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119 -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 "Email w RT wymaga autoryzacji podpisu PGP. Albo nie podpisałeś wiadomości, albo Twój podpis nie może być zweryfikowany." - -#: NOT FOUND IN SOURCE -msgid "RTFM Error" -msgstr "Błąd RTFM" - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Imię i nazwisko" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "RealName" - -#: lib/RT/Transaction_Overlay.pm:725 -#. ($value) -msgid "Reference by %1 added" -msgstr "Powiązanie %1 dodane" - -#: lib/RT/Transaction_Overlay.pm:765 -#. ($value) -msgid "Reference by %1 deleted" -msgstr "Powiązanie %1 usunięte" - -#: lib/RT/Transaction_Overlay.pm:722 -#. ($value) -msgid "Reference to %1 added" -msgstr "Powiązanie z %1 dodane" - -#: lib/RT/Transaction_Overlay.pm:762 -#. ($value) -msgid "Reference to %1 deleted" -msgstr "Powiązanie z %1 usunięte" - -#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72 -msgid "Referred to by" -msgstr "Zgłoszenia powiązane" - -#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "Powiązane z" - -#: NOT FOUND IN SOURCE -msgid "RefersTo" -msgstr "PowiązaneZ" - -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "Popraw" - -#: NOT FOUND IN SOURCE -msgid "Refine search" -msgstr "Wprowadź szczegółowe kryteria wyszukiwania" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Odświeżaj tę stronę co %1 minut." - -#: NOT FOUND IN SOURCE -msgid "Relationships" -msgstr "Powiązania" - -#: 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 "Usuń AdminCc" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Usuń Cc" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Usuń zgłaszającego" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Odpowiedz" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Adres odpowiedzi" - -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Odpowiedz zgłaszającym" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Odpowiedz na zgłoszenia" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "ReplyToTicket" - -#: 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 "Zgłaszający" - -#: NOT FOUND IN SOURCE -msgid "Requestor email address" -msgstr "Adres e-mail zgłaszającego" - -#: NOT FOUND IN SOURCE -msgid "Requestor(s)" -msgstr "Zgłaszający" - -#: NOT FOUND IN SOURCE -msgid "RequestorAddresses" -msgstr "AdresZgłaszającego" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Zgłaszający" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "Zgłoszenia powinny być zrealizowane w ciągu" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "Wymagany atrybut '%1' nie został określony" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Zresetuj" - -#: 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 "Tel. domowy" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Zamknij" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "Zamknij zgłoszenie nr %1 (%2)" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Zamknięte" - -#: 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 "Odpowiedź dla zgłaszających" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Wyniki" - -#: NOT FOUND IN SOURCE -msgid "Results per page" -msgstr "Wyniki - liczba na stronę" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Wpisz ponownie hasło" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "Przywróć" - -#: NOT FOUND IN SOURCE -msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" -msgstr "Uprawnienie %1 nie zostało wyszukane dla %2 %3 w zakresie %4 (%5)\\n" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Uprawnienie zostało przekazane" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Uprawnienie zostało przyznane" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Uprawnienie zostało załadowane" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Uprawnienie nie może być odebrane" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Nie udało się wyszukać uprawnienia" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Nie udało się załadować uprawnienia" - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Uprawnienie zostało odebrane" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Uprawnienia" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "Nie udało się przydzielić uprawnień dla %1" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "Nie udało się odebrać uprawnień dla %1" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Role" - -#: NOT FOUND IN SOURCE -msgid "RootApproval" -msgstr "RootApproval" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Linii na stronie" - -#: lib/RT/Date.pm:422 -msgid "Sat." -msgstr "Sob." - -#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211 -msgid "Save" -msgstr "Zapisz" - -#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77 -msgid "Save Changes" -msgstr "Zapisz zmiany" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Zapisz" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Zapisz zmiany" - -#: lib/RT/SavedSearch.pm:173 -#. ($name) -msgid "Saved search %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Saved searches" -msgstr "Zapisane zapytania" - -#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84 -#. ($scrip->Id) -#. ($id) -msgid "Scrip #%1" -msgstr "Skrypt #%1" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Skrypt został utworzony" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Atrybuty skryptu" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Skrypt został usunięty" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Skrypty" - -#: NOT FOUND IN SOURCE -msgid "Scrips for %1\\n" -msgstr "Skrypty dla %1\\n" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Skrypty, które dotyczą wszystkich kolejek" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Wyszukaj" - -#: NOT FOUND IN SOURCE -msgid "Search Criteria" -msgstr "Kryteria wyszukiwania" - -#: 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 "" - -# nie jestem pewien! -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Wyszukaj oczekujące potwierdzenia" - -#: NOT FOUND IN SOURCE -msgid "Search for articles" -msgstr "Wyszukaj artykuły" - -#: 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 "Zabezpieczenie:" - -#: 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 "Zobacz dosłowne wiadomości wychodzące i ich odbiorców" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket private commentary" -msgstr "Zobacz prywatne komentarze do zgłoszenia" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "See ticket summaries" -msgstr "Zobacz podsumowania zgłoszeń" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "DostDoPólUżytk" - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "SeeQueue" -msgstr "SeeQueue" - -#: NOT FOUND IN SOURCE -msgid "Select" -msgstr "Selectionner" - -#: NOT FOUND IN SOURCE -msgid "Select a Class" -msgstr "Wybierz klasę" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Wybierz pole definiowane przez użytkownika" - -#: NOT FOUND IN SOURCE -msgid "Select a Custom Fields" -msgstr "Wybierz pole definiowane przez użytkownika" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Wybierz grupę" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Wybierz kolejkę" - -#: 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 "Wybierz użytkownika" - -#: NOT FOUND IN SOURCE -msgid "Select class" -msgstr "Wybierz klasę" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Wybierz pole" - -#: 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 "Wybór pól zdefiniowanych przez użytkownika dla zgłoszeń we wszystkich kolejkach" - -#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Wybierz grupę" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Wybór wielu wartości" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Wybór jednej wartości" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Wybierz kolejkę" - -#: 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 "Wybierz skrypt" - -#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Wybierz szablon" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Choisir un maximum de %1 valeurs " - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Wybierz użytkownika" - -#: NOT FOUND IN SOURCE -msgid "SelectMultiple" -msgstr "Wybór wielu wartości" - -#: NOT FOUND IN SOURCE -msgid "SelectSingle" -msgstr "Wybór jednej wartości" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Zaznaczone pola" - -#: 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 "Samoobsługa" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Wyślij e-mail do wszystkich obserwatorów" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Wyślij e-mail do wszystkich obserwatorów jako \"komentarz\"" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Wyślij e-mail do zgłaszających i osób o uprawnieniach Cc" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Wyślij e-mail do zgłaszających i osób o uprawnieniach Cc jako komentarz" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Wysyła wiadomość do zgłaszających" - -#: etc/initialdata:125 etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Wysyła e-mail do osób wymienionych w Cc i Bcc " - -#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 -msgid "Sends mail to the Ccs" -msgstr "Wysyła e-mail do użytkowników o uprawnieniach CC" - -#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 -msgid "Sends mail to the Ccs as a comment" -msgstr "Wysyła e-mail jako komentarz do użytkowników o uprawnieniach CC" - -#: etc/initialdata:102 -msgid "Sends mail to the administrative Ccs" -msgstr "Wysyła e-mail do osób wymienionych w administracyjnym Cc" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Wysyła e-mail do osób wymienionych w administracyjnym Cc jako komentarz" - -#: etc/initialdata:82 etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Wysyła e-mail do właściciela" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Wrz." - -#: NOT FOUND IN SOURCE -msgid "Seperate multiple URLs with spaces" -msgstr "Oddziel spacjami adresy URL" - -#: NOT FOUND IN SOURCE -msgid "September" -msgstr "Wrzesień" - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Pokaż" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Pokazuj potwierdzenia" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Wyświetlane kolumny" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Wyświetl wyniki" - -#: NOT FOUND IN SOURCE -msgid "Show advanced search options..." -msgstr "Wyświetl zaawansowane opcje wyszukiwania..." - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Wyświetl zatwierdzone zgłoszenia" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Wyświetl podstawowe informacje" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Wyświetl odrzucone zgłoszenia" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Wyświetl szczegóły" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Wyświetl zgłoszenia oczekujące na zatwierdzenie" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Wyświetl zgłoszenia oczekujące na pozostałe zatwierdzenia" - -#: NOT FOUND IN SOURCE -msgid "Show ticket private commentary" -msgstr "Wyświetl prywatny komentarz do zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Show ticket summaries" -msgstr "Wyświetl streszczenia zgłoszeń" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "ShowACL" -msgstr "ShowACL" - -#: lib/RT/System.pm:85 -msgid "ShowConfigTab" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "ShowOutgoingEmail" -msgstr "PodglądPocztyWychodz" - -#: lib/RT/Group_Overlay.pm:168 -msgid "ShowSavedSearches" -msgstr "PodglądZapytańZapis" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "ShowScrips" -msgstr "ShowScrips" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "ShowTemplate" -msgstr "ShowTemplate" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowTicket" -msgstr "ShowTicket" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicketComments" -msgstr "ShowTicketComments" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "Podpisz jako zgłaszający lub osoba o uprawnieniach Cc dla zgłoszenia lub kolejki" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Podpisz jako osoba o uprawnieniach AdminCc dla zgłoszenia lub kolejki" - -#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168 -msgid "Signature" -msgstr "Podpis" - -#: NOT FOUND IN SOURCE -msgid "Signed in as %1" -msgstr "Wpisany jako %1" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Pojedynczy" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Pomiń menu" - -#: 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 "Sortuj" - -#: NOT FOUND IN SOURCE -msgid "Sort Order" -msgstr "Kryterium sortowania" - -#: NOT FOUND IN SOURCE -msgid "Sort key" -msgstr "Klucz sortowania" - -#: NOT FOUND IN SOURCE -msgid "Sort results by" -msgstr "Sortuj wyniki wg" - -#: NOT FOUND IN SOURCE -msgid "SortOrder" -msgstr "SortOrder" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "Etap" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "Zamrożone" - -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "Strona powitalna" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Realizacja rozpoczęta" - -#: NOT FOUND IN SOURCE -msgid "Started date '%1' could not be parsed" -msgstr "Data rozpoczęcia realizacji '%1' nie może być rozpoznana" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Początek realizacji" - -#: NOT FOUND IN SOURCE -msgid "Starts By" -msgstr "Początek realizacji od" - -#: NOT FOUND IN SOURCE -msgid "Starts date '%1' could not be parsed" -msgstr "Data rozpoczęcia realizacji '%1' nie może być rozpoznana" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Województwo" - -#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651 -msgid "Status" -msgstr "Status " - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "Zmiana statusu" - -#: NOT FOUND IN SOURCE -msgid "Status changed from %1 to %2" -msgstr "Status zmieniony z %1 na %2" - -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "Zmiana statusu" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Przejmij" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Przejmij zgłoszenia" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "PrzejecieZgloszen" - -#: lib/RT/Transaction_Overlay.pm:678 -#. ($Old->Name) -msgid "Stolen from %1" -msgstr "Przejęte od %1" - -#: NOT FOUND IN SOURCE -msgid "Stolen from %1 " -msgstr "Przejęte od %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 "Temat" - -#: 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 "Temat został zmieniony na %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Zastosuj" - -#: NOT FOUND IN SOURCE -msgid "Submit Query" -msgstr "Wykonaj zapytanie" - -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "Wprowadź obieg (Workflow)" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Powiodło się" - -#: NOT FOUND IN SOURCE -msgid "Summary" -msgstr "Streszczenie" - -#: NOT FOUND IN SOURCE -msgid "Summary matches" -msgstr "Streszczenie zgadza się z" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Nie." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "SuperUser" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "System" - -#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Konfiguracja systemu" - -#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989 -msgid "System Error" -msgstr "Błąd systemowy" - -#: 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 "Narzędzia systemowe" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Błąd systemowy. Uprawnienie nie zostało przekazane" - -#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920 -msgid "System error. Right not granted." -msgstr "Błąd systemowy. Uprawnienie nie zostało przydzielone" - -#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Grupy systemowe" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "Grupa ról systemowych do użytku wewnętrznego" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "TEST_STRING" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Przyjmij" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Take tickets" -msgstr "Przyjmij zgłoszenia" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "PrzyjęcieZgłoszeń" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Przyjęty" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Szablon" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Szablon #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Szablon został usunięty" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Nie udało się wyszukać szablonu" - -#: NOT FOUND IN SOURCE -msgid "Template not found\\n" -msgstr "Nie udało się wyszukać szablonu\\n" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Szablon nie został rozpoznany" - -#: 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 "Szablony" - -#: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "Szablony dla %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Text" -msgstr "Texte" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "To już jest aktualna wartość" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "To nie jest wartość tego pola" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "To jest ta sama wartość" - -#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "Ten użytkownik/ grupa już dysponują tym prawem" - -#: lib/RT/Queue_Overlay.pm:753 -#. ($args{'Type'}) -msgid "That principal is already a %1 for this queue" -msgstr "Ten zarządzający jest już %1 dla tej kolejki" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Ten zarządzający jest już %1 dla tego zgłoszenia" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Ten zarządzający nie jest %1 dla tej kolejki" - -#: NOT FOUND IN SOURCE -msgid "That principal is not a %1 for this ticket" -msgstr "Ten zarządzający nie jest %1 dla tego zgłoszenia" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Ta kolejka nie istnieje" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "To zgłoszenie ma niewykonane zgłoszenia zależne" - -#: NOT FOUND IN SOURCE -msgid "That user already has that right" -msgstr "Ten użytkownik już posiada to uprawnienie" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Ten użytkownik już jest właścicielem tego zgłoszenia" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Taki użytkownik nie istnieje" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Ten użytkownik już posiada to uprawnienie" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Ten użytkownik nie jest uprawniony" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Ten użytkownik jest już uprawniony" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Ten użytkownik jest teraz nieuprawniony" - -#: NOT FOUND IN SOURCE -msgid "That user is now unprivilegedileged" -msgstr "Cet utilisateur a perdu ses droits" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "Ten użytkownik może nie posiadać zgłoszeń w tej kolejce" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "To nie jest id typu liczbowego" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Podstawowe informacje" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "CC zgłoszenia" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The administrative CC of a ticket" -msgstr "Administracyjne CC zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "The comment has been recorded" -msgstr "Komentarz został zapisany" - -#: 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 "Następujące polecenie wyszuka wszystkie aktywne zgłoszenia w kolejce głównej i ustawi ich priorytet na 99, jeśli nie zostały zmodyfikowane w ciągu ostatnich 4 godzin:" - -#: NOT FOUND IN SOURCE -msgid "The following commands were not proccessed:\\n\\n" -msgstr "Następujące polecenia nie zostały wykonane:\\n\\n" - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "Ustawiono nową wartość." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "Właściciel zgłoszenia" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "Zgłaszający" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Te komentarze nie są generalnie widoczne dla użytkownika" - -#: lib/RT/CustomField_Overlay.pm:978 -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 "Ta funkcja jest dostępna tylko dla administratora systemu" - -#: html/Ticket/Elements/PreviewScrips:96 -msgid "This message will be sent to..." -msgstr "Ta wiadomość zostanie wysłana do..." - -#: NOT FOUND IN SOURCE -msgid "This ticket %1 %2 (%3)\\n" -msgstr "To zgłoszenie %1 %2 (%3)\\n" - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Ta aplikacja pozwala użytkownikowi na przypadkowe uruchomienie tzw. perl modułów z RT" - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Nie określono zawartości tej transakcji" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "%1 zgłoszeń tego użytkownika o najwyższym priorytecie" - -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "25 zgłoszeń tego użytkownika o najwyższym priorytecie" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Czw." - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "Zgłoszenie nr %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 Jumbo update: %2" -msgstr "Ticket n°%1 Jumbo update: %2" - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Pełna aktualizacja: %2 zgłoszenia nr %1" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Zgłoszenie nr %1 %2" - -#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741 -#. ($T::Tickets{$template_id}->Id) -#. ($T::Tickets{$template_id}->id) -#. ($ticket->Id) -msgid "Ticket %1" -msgstr "Zgłoszenie %1" - -#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775 -#. ($self->Id, $QueueObj->Name) -msgid "Ticket %1 created in queue '%2'" -msgstr "Zgłoszenie %1 zostało utworzone w kolejce '%2'" - -#: NOT FOUND IN SOURCE -msgid "Ticket %1 loaded\\n" -msgstr "Zgłoszenie %1 zostało załadowane\\n" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Zgłoszenie %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 "Historia zgłoszenia nr %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket Id" -msgstr "Nr zgłoszenia" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Zgłoszenie zamknięte" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Ticket attachment" -msgstr "Załącznik do zgłoszenia, którego" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Zawartość zgłoszenia" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Typ zawartości zgłoszenia" - -#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763 -msgid "Ticket could not be created due to an internal error" -msgstr "Nie udało się utworzyć zgłoszenia z powodu wewnętrznego błędu" - -#: NOT FOUND IN SOURCE -msgid "Ticket created" -msgstr "Zgłoszenie zostało utworzone" - -#: NOT FOUND IN SOURCE -msgid "Ticket creation failed" -msgstr "Nie udało się utworzyć zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Ticket deleted" -msgstr "Zgłoszenie zostało usunięte" - -#: NOT FOUND IN SOURCE -msgid "Ticket id not found" -msgstr "Nie udało się wyszukać numeru zgłoszenia" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Meta-dane zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Ticket not found" -msgstr "Nie udało się wyszukać zgłoszenia" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Zmienił się status zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Ticket watchers" -msgstr "Obserwatorzy zgłoszenia" - -#: 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 "Zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 %2" -msgstr "Zgłoszenia %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Tickets %1 by %2" -msgstr "Zgłoszenia %1 do %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 "Zgłoszenia od %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 "Zgłoszenia, które zależą od tego zatwierdzenia:" - -#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72 -msgid "Time Estimated" -msgstr "Szacowany czas" - -#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85 -msgid "Time Left" -msgstr "Pozostały czas" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Czas realizacji" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Pozostały czas" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Wyświetlany czas" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Czas realizacji" - -#: NOT FOUND IN SOURCE -msgid "TimeLeft" -msgstr "PozostałyCzas" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "Czas realizacji" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:" -msgstr "Aby wygenerować różnice tego zatwierdzenia:" - -#: NOT FOUND IN SOURCE -msgid "To generate a diff of this commit:\\n" -msgstr "Aby wygenerować różnice tego zatwierdzenia:\\n" - -#: html/Elements/Footer:62 -#. ('sales@bestpractical.com') -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "Więcej o wsparciu, szkoleniach, rozwoju i licencjonowaniu dostępne jest w %1." - -#: lib/RT/Ticket_Overlay.pm:1170 -msgid "Told" -msgstr "Wpłynęło" - -#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49 -msgid "Tools" -msgstr "Narzędzia" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transakcja" - -#: lib/RT/Transaction_Overlay.pm:805 -#. ($self->Data) -msgid "Transaction %1 purged" -msgstr "Transakcja %1 została wyczyszczona" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Transakcja została utworzona" - -#: 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 "Transakcja-> Nie udało się utworzyć, ponieważ nie określono numeru zgłoszenia" - -#: 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 "Transakcje nie są możliwe do powielenia" - -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "Próba usunięcia uprawnienia: %1" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Wto." - -#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Typ" - -#: NOT FOUND IN SOURCE -msgid "Unable to load article" -msgstr "Nie udało się załadować artykułu" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "Niezaimplementowane" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr " Unix login" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "Nazwa użytkownika typu 'unix'" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "Nieznany Typ Zawartości %1" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Nieograniczona" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Zapytanie bezimienne" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Nieuprawnieni" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Niezaznaczone Pola" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "Niepobrany" - -#: NOT FOUND IN SOURCE -msgid "Untitled search" -msgstr "Recherche sans titre" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Zaktualizuj" - -#: NOT FOUND IN SOURCE -msgid "Update All" -msgstr "Zaktualizuj wszystko" - -#: NOT FOUND IN SOURCE -msgid "Update ID" -msgstr "Zaktualizuj ID" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Zaktualizuj zgłoszenie" - -#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Zaktualizuj typ" - -#: NOT FOUND IN SOURCE -msgid "Update all these tickets at once" -msgstr "Zaktualizuj wszystkie te zgłoszenia jednocześnie" - -#: NOT FOUND IN SOURCE -msgid "Update email" -msgstr "Zaktualizuj e-mail" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Zaktualizuj wiele zgłoszeń jednocześnie" - -#: NOT FOUND IN SOURCE -msgid "Update name" -msgstr "Zaktualizuj nazwę" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Aktualizacja nie została zapisana." - -#: NOT FOUND IN SOURCE -msgid "Update selected tickets" -msgstr "Zaktualizuj wybrane zgłoszenia" - -#: NOT FOUND IN SOURCE -msgid "Update signature" -msgstr "Zaktualizuj podpis" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Zaktualizuj zgłoszenie" - -#: NOT FOUND IN SOURCE -msgid "Update ticket # %1" -msgstr "Zaktualizuj zgłoszenie nr %1" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Zaktualizuj zgłoszenie nr %1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Zaktualizuj zgłoszenie nr %1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr "Aktualizacja nie dotyczyła korespondencji ani komentarza." - -#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Zaktualizowane" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Zapisz" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Uploader plusieurs fichiers" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Uploader plusieurs images" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Uploader un fichier" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Uploader une image" - -#: lib/RT/CustomField_Overlay.pm:86 -msgid "Upload up to %1 files" -msgstr "Uploader un maximum de %1 fichiers" - -#: lib/RT/CustomField_Overlay.pm:81 -msgid "Upload up to %1 images" -msgstr "Uploader un maximum de %1 images" - -#: html/Tools/Offline.html:93 -msgid "Upload your changes" -msgstr "Zapisz swoje zmiany" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Use the dropdown menus to select which transactions you want to extract into a new RTFM article" -msgstr "Użyj rozwijalnych list, aby wybrać transakcje, z których chcesz utworzyć nowy artykuł RTFM" - -#: NOT FOUND IN SOURCE -msgid "User %1 %2: %3\\n" -msgstr "Użytkownik %1 %2: %3 \\n" - -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" -msgstr "Hasło użytkownika %1: %2\\n" - -#: lib/RT/Ticket_Overlay.pm:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "Nie można znaleźć użytkownika %1." - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found" -msgstr "Nie udało się wyszukać użytkownika '%1'" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" -msgstr "Nie udało się wyszukać użytkownika '%1'\\n" - -#: etc/initialdata:132 etc/initialdata:206 -msgid "User Defined" -msgstr "Definiowany przez użytkownika" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "Warunki i operacje zdefiniowane przez użytkownika" - -#: NOT FOUND IN SOURCE -msgid "User ID" -msgstr "Id" - -#: NOT FOUND IN SOURCE -msgid "User Id" -msgstr "Id" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Uprawnienia użytkowników" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "Nie udało się utworzyć użytkownika: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Użytkownik został utworzony" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Grupy def. przez użytkownika" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Użytkownik załadowany" - -#: NOT FOUND IN SOURCE -msgid "User notified" -msgstr "Użytkownik został powiadomiony" - -#: NOT FOUND IN SOURCE -msgid "User view" -msgstr "Widok użytkownika" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Grupy zdefiniowane przez użytkownika" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Nazwa" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208 -msgid "Users" -msgstr "Użytkownicy" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Użytkownicy odpowiadający kryteriom wyszukiwania" - -#: bin/rt-crontool:134 -#. ($transaction->id) -msgid "Using transaction #%1..." -msgstr "" - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Sprawdź zapytanie" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "ValueOfQueue" -msgstr "Wartość kolejki" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Wartości" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "Obserwuj" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "WatchAsAdminCc" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Obserwatorzy" - -#: NOT FOUND IN SOURCE -msgid "WebEncoding" -msgstr "Web-kodowanie" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Śro." - -#: 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 "Po zatwierdzeniu zgłoszenia przez wszystkich zatwierdzających, dodaj korespondencję do oryginalnego zgłoszenia" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "Po zatwierdzeniu zgłoszenia przez któregokolwiek z zatwierdzających, dodaj korespondencję do oryginalnego zgłoszenia" - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "Po utworzeniu zgłoszenia" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "Po utworzeniu zgłoszenia podlegającego zatwierdzeniu, powiadom właściciela i osoby o uprawnieniach AdminCc o zadaniu oczekującym zatwierdzenie przez nich" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "Jeśli cokolwiek się wydarzy" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "Zawsze gdy zgłoszenie będzie zamykane" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "Zawsze gdy zmieni się właściciel zgłoszenia" - -#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "Zawsze gdy zmieni się priorytet zgłoszenia" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "Zawsze gdy zmieni się kolejka zgłoszenia" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "Zawsze gdy zmieni się status zgłoszenia" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "Zawsze gdy wystąpi warunek definiowany przez użytkownika" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "Zawsze gdy wystąpią komentarze" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "Zawsze gdy wpłynie korespondencja" - -#: NOT FOUND IN SOURCE -msgid "Which are referred to by " -msgstr "Które są zgłoszeniami powiązanymi" - -#: NOT FOUND IN SOURCE -msgid "Which refer to" -msgstr "Które dotyczą" - -#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88 -msgid "Work" -msgstr "Praca" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "Praca zdalna" - -#: NOT FOUND IN SOURCE -msgid "WorkPhone" -msgstr "Tel. do pracy" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Czas pracy" - -#: NOT FOUND IN SOURCE -msgid "XXX CHANGEME You are not an authorized user" -msgstr "XXX CHANGEME Nie jesteś użytkownikiem z uprawnieniami" - -#: NOT FOUND IN SOURCE -msgid "Yes" -msgstr "Tak" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Jesteś już właścicielem tego zgłoszenia" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Nie jesteś autoryzowanym użytkownikiem" - -#: 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 "Możesz ponownie przydzielić tylko te zgłoszenia, których jesteś właścicielem lub te, które nie mają właściciela" - -#: lib/RT/Ticket_Overlay.pm:3021 -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 "Nie masz uprawnień do przeglądania tego zgłoszenia.\\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 "Wyszukałeś zgłoszenia %1 w kolejce %2" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Zostałeś wylogowany z RT" - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "Nie masz uprawnień do rejestrowania zgłoszeń w tej kolejce." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "Nie możesz rejestrować zgłoszeń w tej kolejce." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Proszę zalogować się ponownie" - -#: NOT FOUND IN SOURCE -msgid "Your %1 requests" -msgstr "Twoje zgłoszenia %1" - -#: NOT FOUND IN SOURCE -msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" -msgstr "Administrator RT niewłaściwie skonfigurował aliasy maila, które wywołują RT" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Twoje zgłoszenie zostało zatwierdzone przez %1. Może nadal oczekiwać na inne zatwierdzenia." - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "Twoje zgłoszenie zostało zatwierdzone." - -#: NOT FOUND IN SOURCE -msgid "Your request was rejected" -msgstr "Twoje zgłoszenie zostało odrzucone" - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "Twoje zgłoszenie zostało odrzucone" - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "Nazwa użytkownika lub hasło jest nieprawidłowe" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "Kod pocztowy" - -#: NOT FOUND IN SOURCE -msgid "[no subject]" -msgstr "[Pas de sujet]" - -#: 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 "and is not" -msgstr "i nie jest" - -#: NOT FOUND IN SOURCE -msgid "and not" -msgstr "i nie" - -#: html/User/Elements/DelegateRights:80 -#. ($right->PrincipalObj->Object->SelfDescription) -msgid "as granted to %1" -msgstr "tak jak przydzielone dla %1" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "zamknięte" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 -msgid "contains" -msgstr "zawiera" - -#: NOT FOUND IN SOURCE -msgid "content" -msgstr "zawartość" - -#: NOT FOUND IN SOURCE -msgid "content-type" -msgstr "typ zawartości" - -#: NOT FOUND IN SOURCE -msgid "correspondence (probably) not sent" -msgstr "korespondencja (prawdopodobnie) nie została wysłana" - -#: NOT FOUND IN SOURCE -msgid "correspondence sent" -msgstr "korespondencja została wysłana" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "dniami" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "usuń" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "usunięte" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "nie zgadza się z" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "nie zawiera" - -#: NOT FOUND IN SOURCE -msgid "email address" -msgstr "adresse email" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "równy" - -#: 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 "faux" - -#: NOT FOUND IN SOURCE -msgid "filename" -msgstr "nazwa pliku" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "większy od" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr "grupy '%1'" - -#: html/Search/Results.html:88 -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -msgid "grouped by %1" -msgstr "" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "godz." - -#: html/Search/Elements/PickBasics:48 -msgid "id" -msgstr "Numer" - -#: NOT FOUND IN SOURCE -msgid "in class %1" -msgstr "w ramach klasy %1" - -#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53 -msgid "is" -msgstr "jest" - -#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54 -msgid "isn't" -msgstr "nie jest" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "mniejszy od" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "zgadza się z" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "min." - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "minuty" - -#: NOT FOUND IN SOURCE -msgid "modifications\\n\\n" -msgstr "modyfikacje\\n\\n" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "miesiącami" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "nowe" - -#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "bez nazwy" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "brak wartości" - -#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "żaden" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "różny od" - -#: NOT FOUND IN SOURCE -msgid "notlike" -msgstr "necontientpas" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "otwarte" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "prywatna grupa '%1' użytkownika '%2'" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "kolejka %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "odrzucone" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "zamknięte" - -#: 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 "Arkusz kalk." - -#: lib/RT/Queue_Overlay.pm:84 -msgid "stalled" -msgstr "zamrożone" - -#: html/Search/Results.html:89 -#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle')) -msgid "style: %1" -msgstr "" - -#: html/Prefs/MyRT.html:93 -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 "grupy systemowej '%1'" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "przywoływany komponent nie określił powodu" - -#: NOT FOUND IN SOURCE -msgid "ticket #%1" -msgstr "ticket n°%1" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "zgłoszenie #%1 %2" - -#: NOT FOUND IN SOURCE -msgid "till" -msgstr "do" - -#: NOT FOUND IN SOURCE -msgid "true" -msgstr "vrai" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "nieopisana grupa %1" - -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "nieopisana grupa %1" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "użytkownika %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "tygodniami" - -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "wg szablonu %1" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "rokiem/latami" - diff --git a/rt/lib/RT/I18N/pt_br.po b/rt/lib/RT/I18N/pt_br.po deleted file mode 100644 index 269095376..000000000 --- a/rt/lib/RT/I18N/pt_br.po +++ /dev/null @@ -1,6531 +0,0 @@ -# $Id: pt_br.po,v 1.1.1.8 2008-03-02 04:10:34 ivan Exp $ -msgid "" -msgstr "" -"Project-Id-Version: RT 3.5.x\n" -"POT-Creation-Date: 2002-05-02 11:36+0800\n" -"PO-Revision-Date: 2005-10-03 13:51-0400\n" -"Last-Translator: Gustavo Chaves \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 "#" - -#: 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 "" - -#: lib/RT/Record.pm:940 -#. ($label) -msgid "$prefix %1" -msgstr "" - -#: 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 %2 %3 %4:%5:%6 %7" - -#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690 -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 added" -msgstr "%1 %2 adicionado" - -#: lib/RT/Date.pm:362 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "%1 %2 atrás" - -#: 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 alterado para %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 removido" - -#: NOT FOUND IN SOURCE -msgid "%1 %2 of group %3" -msgstr "%1 %2 do grupo %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 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: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 apresentados" - -#: 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 - Um argumento para passar para %2" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - Mostra atualizações de estado no 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 - Especifica o módulo de ação que você quer usar" - -#: bin/rt-crontool:241 -#. ("--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:234 -#. ("--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: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 "ScripAction %1 carregado" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "%1 usado 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: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 parece ser um objeto local, mas não pode ser encontrado no banco de dados" - -#: 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 por %2" - -#: lib/RT/Transaction_Overlay.pm:788 lib/RT/Transaction_Overlay.pm:797 lib/RT/Transaction_Overlay.pm:800 -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -msgid "%1 changed from %2 to %3" -msgstr "%1 alterado de %2 para %3" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1 não pôde ser alterado para %2" - -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1 não pôde iniciar uma transação (%2)\\n" - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 não pôde alterar estado para resolvido. O banco de dados do RT pode estar inconsistente." - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "" - -#: 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:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 é uma ferramenta para modificar tíquetes a partir de uma ferramenta de agenda externa, como o cron." - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 não é mais um %2 para esta fila." - -#: NOT FOUND IN SOURCE -msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 não é mais um %2 para este 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: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 não mostrado" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "" - -#: html/User/Elements/DelegateRights:97 -#. (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:63 -#. (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." - -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "%1 colocará como pendente uma BASE [local] se for dependente [ou membro] de uma requisição ligada." - -#: 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: nenhum arquivo anexo especificado" - -#: 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' é um valor inválido para o 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 "(Assinale para remover o membro do grupo)" - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete scrip)" -msgstr "(Assinale para remover o 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 "(Assinale para remover)" - -#: NOT FOUND IN SOURCE -msgid "(Check boxes to delete)" -msgstr "(Assinale para remover)" - -#: 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 "(Se deixado em branco, será entendido como %)" - -#: NOT FOUND IN SOURCE -msgid "(No Value)" -msgstr "(Sem Valor)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Nenhum campo personalizado)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Sem membros)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Sem scrips)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Nenhum esquema)" - -#: 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 "(Envia uma cópia-cega (Bcc) desta atualização para uma lista de endereços de email separados por vírgula. Não altera quem vai receber atualizações futuras.)" - -#: 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 "(Envia uma cópia-cega (Bcc) desta atualização para uma lista de endereços eletrônicos separados por vírgulas. Não altera o destinatário de atualizações futuras.)" - -#: 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 "(Envia uma cópia-cega (Bcc) desta atualização para uma lista de endereços eletrônicos separados por vírgulas. Não altera o destinatário de atualizações futuras.)" - -#: 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 "(Envia uma cópia-cega (Bcc) desta atualização para uma lista de endereços eletrônicos separados por vírgulas. Não altera o destinatário de atualizações futuras.)" - -#: 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 "(Envia uma cópia desta atualização para uma lista de endereços eletrônicos separados por vírgulas. Não altera o destinatário de atualizações futuras.)" - -#: 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 "(Envia uma cópia desta atualização para uma lista de endereços eletrônicos separados por vírgulas. Estas pessoas receberão as atualizações futuras.)" - -#: 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 "(vazio)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(nenhum nome listado)" - -#: NOT FOUND IN SOURCE -msgid "(no subject)" -msgstr "(Sem assunto)" - -#: 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 "(sem valor)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(somente um tíquete)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(aguardando aprovação)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "" - -#: 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:71 -msgid "(required)" -msgstr "(requerido)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(sem título)" - -#: 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 "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: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" - -#: etc/initialdata:218 -msgid "A blank template" -msgstr "Um modelo vazio" - -#: 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 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:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE não encontrado" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACEs só podem ser criados e removidos." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "" - -#: 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:53 -msgid "About me" -msgstr "Sobre mim" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Controle de acesso" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Ação" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "Ação %1 não encontrada" - -#: NOT FOUND IN SOURCE -msgid "Action committed." -msgstr "Ação confirmada." - -#: 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 "Ação preparada..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Adicionar AdminCc" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Adicionar 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 "Adicionar Mais Arquivos" - -#: NOT FOUND IN SOURCE -msgid "Add Next State" -msgstr "Adicionar Próximo Estado" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Adicionar Requisitante" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Add a Scrip to this queue" -msgstr "Adicionar um Scrip nesta 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:83 -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: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 "Adicionar comentários ou respostas aos tíquetes selecionados" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Adicionar membros" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Adicionar novos observadores" - -#: 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 "Principal adicionado como um %1 para esta fila" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Principal adicionado como um %1 para este tíquete" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Endereço 1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Endereço 2" - -#: html/Ticket/Create.html:98 -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:46 html/Admin/Queues/index.html:49 -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:47 html/Admin/Global/index.html:49 -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:60 lib/RT/ACE_Overlay.pm:113 -msgid "AdminCc" -msgstr "AdminCc" - -#: NOT FOUND IN SOURCE -msgid "AdminComment" -msgstr "AdminComment" - -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" -msgstr "AdminCorrespondence" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "AdminCustomFields" -msgstr "AdminCustomFields" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "AdminGroup" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "AdminGroupMembership" - -#: lib/RT/System.pm:80 -msgid "AdminOwnPersonalGroups" -msgstr "AdminOwnPersonalGroups" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "AdminQueue" -msgstr "AdminQueue" - -#: lib/RT/System.pm:81 -msgid "AdminUsers" -msgstr "AdminUsers" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Cc Administrativo" - -#: NOT FOUND IN SOURCE -msgid "Admins" -msgstr "Administradores" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "Busca avançada" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "Depois" - -#: NOT FOUND IN SOURCE -msgid "Age" -msgstr "Idade" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Alias for" -msgstr "Alias para" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "All Custom Fields" -msgstr "Todos os Campos Personalizados" - -#: html/Admin/Queues/index.html:75 -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: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 "Aprovação" - -#: 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 "Aprovação #%1: %2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Aprovação #%1: Notas não registradas devido a um erro de sistema" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Aprovação #%1: Notas registradas" - -#: NOT FOUND IN SOURCE -msgid "Approval Details" -msgstr "Detalhes da Aprovação" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Approval diagram" -msgstr "Diagrama da aprovação" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Aprove" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Notas do aprovador: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Abr." - -#: NOT FOUND IN SOURCE -msgid "April" -msgstr "Abril" - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Ascendente" - -#: 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 "Anexar" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Anexar arquivo" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Arquivo anexado" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Arquivo anexo '%1' não pôde ser carregado" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Arquivo anexo criado" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Nome do arquivo anexo" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Arquivos anexos" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "" - -#: lib/RT/Date.pm:448 -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 "Autoreply" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Autoreply para Requisitantes" - -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "AutoreplyToRequestors" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "" - -#: 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 pude 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: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 "Básicos" - -#: 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 "Não se esqueça de salvar suas alterações" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "Antes" - -#: NOT FOUND IN SOURCE -msgid "Begin Approval" -msgstr "Incício da Aprovação" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Vazio" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bookmarkable URL for this search" -msgstr "URL para guardar esta busca em seus marcadores" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Cabeçalhos resumidos" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bulk ticket update" -msgstr "Atualização de tíquetes em lote" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Não posso modificar os usuários do sistema" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Este principal pode ver esta fila" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Não posso adicionar um valor de campo personalizado sem um nome" - -#: 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 "Não posso ligar 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 posso unir a um tíquete já unido. Você nunca deve obter este erro" - -#: 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 "Não especifique origem e destino simultaneamente" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Não posso criar o usuário: %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 "Mudar a senha" - -#: 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 "Assinale para remover" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Assinalar para revogar o direito de acesso" - -#: 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 "Filhos" - -#: 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 "Cidade" - -#: 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 "Fechado" - -#: NOT FOUND IN SOURCE -msgid "Closed requests" -msgstr "Requisições fechadas" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Code" -msgstr "Código" - -#: 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 "Comando não entendido!\\n" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Comentário" - -#: html/Admin/Queues/Modify.html:79 -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:111 -msgid "Comment on tickets" -msgstr "Comente sobre os tíquetes" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "CommentOnTicket" - -#: NOT FOUND IN SOURCE -msgid "Comments" -msgstr "Comentários" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Comentários (não enviados aos requisitantes)" - -#: html/Search/Bulk.html:128 -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:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Comentários sobre este usuário" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Comentários adicionados" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "Compilar restrições" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Condição" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "Condição satisfeita..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Condição não encontrada" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Configuração" - -#: html/SelfService/Prefs.html:54 -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:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "Conteúdo" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Coould not create group" -msgstr "Não pude criar o grupo" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "" - -#: 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:630 -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 pude 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 pude adicionar novo valor de campo personalizado para o tíquete. %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 "Não pude alterar o proprietário. " - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Não pude criar CampoPersonalizado" - -#: 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 "Não pude criar o grupo" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "Não pude criar o modelo: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Não pude criar o tíquete. Fila não selecionada" - -#: 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 "Não pude criar o usuário" - -#: NOT FOUND IN SOURCE -msgid "Could not create watcher for requestor" -msgstr "Não pude criar um observador para o requisitante" - -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" -msgstr "Não pude encontrar um tíquete com identificador %1" - -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." -msgstr "Não pude encontrar o grupo %1." - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "Não pude encontrar ou criar o usuário" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "Não pude encontrar este principal" - -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." -msgstr "Não pude encontrar o usuário %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 "Não pude carregar o grupo" - -#: 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 "Não pude fazer este principal um %1 para esta fila" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "Não pude fazer este principal um %1 para este tíquete" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Não pude remover este principal como um %1 para esta fila" - -#: NOT FOUND IN SOURCE -msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Não pude remover este principal como um %1 para este tíquete" - -#: 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 "Não pude adicionar o membro no grupo" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "Não pude 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:953 -msgid "Couldn't find row" -msgstr "Não pude encontrar o registro" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Não encontrei este principal" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Não encontrei este valor" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find that watcher" -msgstr "Não pude encontrar este observador" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "Não pude encontrar o usuário\\n" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "Não pude carregar %1 do banco de dados de usuários.\\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 "Não pude carregar os KeywordSelects." - -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" -msgstr "Não pude carregar o arquivo de configuração do RT '%1' %2" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "Não pude carregar os Scrips." - -#: 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 "Não pude carregar o grupo %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 "Não pude carregar a ligação" - -#: 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 "Não pude carregar a fila" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "Não pude carregar a fila %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "Não pude carregar o scrip" - -#: 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 "Não pude carregar o modelo" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load that user (%1)" -msgstr "Não pude carregar este usuário (%1)" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "Não pude carregar o tíquete '%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 "País" - -#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235 -msgid "Create" -msgstr "Criar" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Criar Tíquetes" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Criar um CampoPersonalizado" - -#: html/Admin/Queues/CustomField.html:69 -#. ($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 which 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:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Criar um novo grupo" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -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:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Criar um novo tíquete" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Criar um novo usuário" - -#: html/Admin/Queues/Modify.html:125 -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:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "Criar um scrip para a fila %1" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Criar um modelo" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "" - -#: 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 esquema deste scrip" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Criar um tíquete" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Criar tíquetes nesta fila" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Criar, remover e modificar campos personalizados" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Criar, remover e modificar filas" - -#: 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:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Criar, remover e modificar os membros de grupos pessoais" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Criar, remover e modificar usuários" - -#: lib/RT/System.pm:87 -msgid "CreateSavedSearch" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "CreateTicket" -msgstr "CreateTicket" - -#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1169 -msgid "Created" -msgstr "Criado" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "CampoPersonalizado %1 criado" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Created template %1" -msgstr "Modelo %1 criado" - -#: 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 "Relações atuais" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Scrips correntes" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Membros atuais" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Direitos de acesso atuais" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Current search criteria" -msgstr "Critério de busca atual" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Observadores atuais" - -#: NOT FOUND IN SOURCE -msgid "Custom Field #%1" -msgstr "Campo Personalizado #%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 "Campos Personalizados" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Código de finalização da ação customizada" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Código de preparação da ação customizada" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Condição customizada" - -#: NOT FOUND IN SOURCE -msgid "Custom field %1 %2 %3" -msgstr "Campo personalizado %1 %2 %3" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "O campo personalizado %1 tem um valor." - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "O campo personalizado %1 não tem valor." - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Campo personalizado %1 não encontrado" - -#: 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 "Campo personalizado removido" - -#: NOT FOUND IN SOURCE -msgid "Custom field not found" -msgstr "Campo personalizado não encontrado" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "O valor de campo %1 não pôde ser encontrado para o campo personalizado %2" - -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "O valor do campo personalizado foi alterado de %1 para %2" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "O valor do campo personalizado não pôde ser removido" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "O valor de campo personalizado não pôde ser encontrado" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Valor do campo personalizado removido" - -#: 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 "Erro de dado" - -#: 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 "Datas" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Dez." - -#: NOT FOUND IN SOURCE -msgid "December" -msgstr "Dezembro" - -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" -msgstr "Esquema Padrão de Autoresposta" - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Esquema padrão de Autoresposta" - -#: 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 "Esquema padrão de comentário administrativo" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Esquema padrão de correspondência administrativa" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Esquema padrão de correspondência" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Esquema 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:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Delegar direitos de acesso" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "Delegar direitos específicos que foram outorgados a você." - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "DelegateRights" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Delegação" - -#: 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 "Remover" - -#: 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 "Remover tíquetes" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "DeleteTicket" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "" - -#: 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:394 -msgid "Deleting this object would break referential integrity" -msgstr "Ao remover este objeto você quebra a integridade referencial" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Ao remover este objeto você 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:73 -msgid "Deny" -msgstr "Negue" - -#: 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 "Dependem deste tíquete" - -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "Dependências: \\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 "Depende de" - -#: NOT FOUND IN SOURCE -msgid "DependsOn" -msgstr "DependsOn" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Descendente" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Descreva o problema abaixo" - -#: 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 "Descrição" - -#: NOT FOUND IN SOURCE -msgid "Details" -msgstr "Detalhes" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Apresentação" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Mostrar Lista de Controle de Acesso" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Mostras os esquemas de Scrip para esta fila" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Mostrar os Scrips para esta fila" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Modo de apresentação" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Display ticket #%1" -msgstr "Apresentar o tíquete #%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 "Fazer qualquer coisa" - -#: html/Elements/Refresh:51 -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:82 -msgid "Download" -msgstr "Baixar" - -#: 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 "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 pude carregar o tíquete '%1': %2.\\n" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Editar" - -#: NOT FOUND IN SOURCE -msgid "Edit Conditions" -msgstr "Editar Condições" - -#: 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 "Editar Campos Personalizados para %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 "Editar Relacionamentos" - -#: 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 "Editar Esquemas para a fila %1" - -#: NOT FOUND IN SOURCE -msgid "Edit keywords" -msgstr "Editar palavras chave" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Edit scrips" -msgstr "Editar scrips" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -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:167 -msgid "EditSavedSearches" -msgstr "" - -#: html/Admin/Queues/Modify.html:140 -#. ($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:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Editando o campo %1" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "Editando os membros do grupo %1" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Editando os membros do grupo pessoal %1" - -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "Editando o modelo %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 "Você deve especificar a origem ou o destinatário" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "Email" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "O endereço de email já está em uso" - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "Correio Eletrônico" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "Codificação de Email" - -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Habilitado (Deselecionando este ítem desabilita este campo personalizado)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Habilitado (Deselecionando este ítem desabilita este grupo)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Habilitado (desassinalando desabilita esta fila)" - -#: NOT FOUND IN SOURCE -msgid "Enabled Custom Fields" -msgstr "Campos Personalizados Habilitados" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Filas Habilitadas" - -#: 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 "Estado %1 habilitado" - -#: 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 "Entre com múltiplos valores" - -#: 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 "Entre com um valor" - -#: 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 "Entre com identificadores de tíquete ou URIs que levam ao tíquete. Separe entradas múltiplas com espaços." - -#: 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 "Erro" - -#: NOT FOUND IN SOURCE -msgid "Error adding watcher" -msgstr "Erro ao adicionar um observador" - -#: lib/RT/Queue_Overlay.pm:672 -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:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:1372 -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: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 "Todos" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Exemplo:" - -#: NOT FOUND IN SOURCE -msgid "ExternalAuthId" -msgstr "ExternalAuthId" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr "ExternalContactInfoId" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Informação adicional" - -#: 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 "Não pude encontrar o pseudogrupo de usuários 'Privileged'." - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Não pude encontrar o pseudogrupo de usuários 'Unprivileged'" - -#: bin/rt-crontool:206 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "Falhou ao carregar o módulo %1. (%2)" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Fev." - -#: NOT FOUND IN SOURCE -msgid "February" -msgstr "Fevereiro" - -#: 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 "Fin" - -#: 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 "Prioridade Final" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "FinalPriority" - -#: NOT FOUND IN SOURCE -msgid "Find group whose" -msgstr "Encontrar o grupo cujo" - -#: 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 "Encontrar tíquetes novos/abertos" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Encontrar pessoas que" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Encontrar tíquetes" - -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "Terminar Aprovação" - -#: html/Ticket/Elements/Tabs:81 -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: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 "Force alteração" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "Encontrado %quant(%1,tíquete)" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Objeto Encontrado" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "FreeformContactInfo" - -#: NOT FOUND IN SOURCE -msgid "FreeformMultiple" -msgstr "FreeformMultiple" - -#: NOT FOUND IN SOURCE -msgid "FreeformSingle" -msgstr "FreeformSingle" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Sex." - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Cabeçalhos completos" - -#: 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 "Obtendo o usuário corrente a partir de uma assinatura pgp\\n" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "Dado a %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 "Seleções de Palavras Chave Globais" - -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -msgstr "Scrips Globais" - -#: 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 "Esquema global: %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 "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:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Ir para o tíquete" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Grupo" - -#: NOT FOUND IN SOURCE -msgid "Group %1 %2: %3" -msgstr "Grupo %1 %2: %3" - -#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Direitos de Acesso do Grupo" - -#: lib/RT/Group_Overlay.pm:983 -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:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "O grupo não pôde ser criado: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Grupo criado" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "O grupo não contém este membro" - -#: 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 "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: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 "Grupos" - -#: lib/RT/Group_Overlay.pm:989 -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: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 "Olá!" - -#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 -#. ($name) -msgid "Hello, %1" -msgstr "Olá, %1" - -#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Histórico" - -#: 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 "Telefone Residencial" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Homepage" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "" - -#: lib/RT/Base.pm:119 -#. (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: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 "Identificador" - -#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 -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 é rejeitada, rejeite a original e remova as aprovações pendentes" - -#: 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 "Se esta ferramenta fosse setgid, um usuário local mal-intencionado poderia usá-la para obter acesso administrativo ao 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 "Se você alterou qualquer coisa acima, não se esqueça de" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Valor ilegal para %1" - -#: lib/RT/Record.pm:950 -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:65 -msgid "Include disabled groups in listing." -msgstr "" - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Incluir filas desabilitadas na listagem." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Incluir usuários desabilitados na busca." - -#: 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 "Prioridade Inicial" - -#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "InitialPriority" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Erro de entrada" - -#: 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 notado" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Erro Interno" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "Erro Interno: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Tipo Inválido de Grupo" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Direito Inválido" - -#: NOT FOUND IN SOURCE -msgid "Invalid Type" -msgstr "Tipo Inválido" - -#: lib/RT/Record.pm:952 -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: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 "Fila inválida" - -#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290 -msgid "Invalid right" -msgstr "Direito de acesso inválido" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "Valor inválido para %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Valor inválido para o campo personalizado" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Valor inválido para o estado" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "É extremamente importante que usuários não privilegiados não possam executar esta ferramenta." - -#: 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 "Sugere-se que você crie um usuário UNIX não privilegiado com o grupo e acesso RT corretos para executar esta ferramenta." - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Requer vários argumentos:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" -msgstr "Itens requerendo minha aprovação" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Jan." - -#: NOT FOUND IN SOURCE -msgid "January" -msgstr "Janeiro" - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Entre ou deixe este grupo" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Jul." - -#: NOT FOUND IN SOURCE -msgid "July" -msgstr "Julho" - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Jumbo" - -#: lib/RT/Date.pm:446 -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: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 "Último" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Último Contato" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Contactado em" - -#: NOT FOUND IN SOURCE -msgid "Last Notified" -msgstr "Notificado em" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Atualizado em" - -#: NOT FOUND IN SOURCE -msgid "LastUpdated" -msgstr "LastUpdated" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Resta" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Deixar este usuário acessar RT" - -#: html/Admin/Users/Modify.html:113 -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:68 -msgid "Link" -msgstr "" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "A ligação já existe" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "A ligação não pôde ser criada" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Ligação criada (%1)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Ligação removida (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Ligação não encontrada" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Ligar o tíquete #%1" - -#: NOT FOUND IN SOURCE -msgid "Link ticket %1" -msgstr "Ligar o tíquete %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 "Ligações" - -#: 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 "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:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "Assinado como %1" - -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Entrar" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Sair" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Definir como proprietário" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Definir o estado" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Definir o prazo final" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Definir a data de resolução" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Definir a data de iniciado" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Definir a data início" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Definir a data de última alteração" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Definir a prioridade" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Definir a fila" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Definir o assunto" - -#: 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 "Administrar grupos e seus membros" - -#: html/Admin/index.html:85 -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:74 -msgid "Manage queues and queue-specific properties" -msgstr "Administrar filas e suas propriedades específicas" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Administrar usuários e senhas" - -#: lib/RT/Date.pm:443 -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: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 "Membro adicionado" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Membro removido" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Membro não removido" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Membro de" - -#: NOT FOUND IN SOURCE -msgid "MemberOf" -msgstr "MemberOf" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Membros" - -#: 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 "União bem sucedida" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "União falhou. Não pude definir o 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 "Unir a" - -#: 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 "Mensagem" - -#: 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 "Faltando uma chave primária?: %1" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Móvel" - -#: NOT FOUND IN SOURCE -msgid "MobilePhone" -msgstr "Celular" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Modificar Lista de Controle de Acesso" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "Modificar o campo personalizado %1" - -#: 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 "Modificar Campos Personalizados que se aplicam a todas as filas" - -#: 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 "Modificar esquemas de Scrip para esta fila" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Modificar Scrips para esta 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: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 "Modificar um Campo Personalizado para a fila %1" - -#: NOT FOUND IN SOURCE -msgid "Modify a CustomField which applies to all queues" -msgstr "Modificar um Campo Personalizado que se aplica a todas as filas" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "Modificar um scrip para a fila %1" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Modificar um scrip aplicável a todas as filas" - -#: 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 "Modificar datas para # %1" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "Modificar as datas para #%1" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Modificar as datas para o tíquete # %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 "Modificar direitos de acesso globais de grupo" - -#: html/Admin/Global/GroupRights.html:54 -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:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Modificar direitos de acesso globais de usuário" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Modificar direitos de acesso globais de usuário." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Modificar metadados do grupo ou removê-lo" - -#: 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 "Modificar os direitos de acesso do grupo %1" - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($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:165 -msgid "Modify membership roster for this group" -msgstr "Modificar lista de membros deste grupo" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Modificar sua própria conta RT" - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "Modificar as pessoas relacionadas à fila %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 "Modificar as pessoas relacionadas ao tíquete #%1" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "Modificar os scrips da fila %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 "Modificar scrips aplicáveis a todas as filas" - -#: 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 "Modificar o modelo %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Modificar esquemas que se aplicam a todas as filas" - -#: 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 "Modificar o grupo %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Modificar os observadores da fila" - -#: html/Admin/Users/Modify.html:309 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "Modificar o usuário %1" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "Modificar o tíquete # %1" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "Modificar o tíquete #%1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Modificar tíquetes" - -#: 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 "Modificar os direitos de acesso de usuário para o grupo %1" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "Modificar os direitos de acesso de usuário para a fila %1" - -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "Modificar os observadores para a fila '%1'" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ModifyACL" -msgstr "ModifyACL" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "" - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "ModifyOwnMembership" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyQueueWatchers" -msgstr "ModifyQueueWatchers" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ModifyScrips" -msgstr "ModifyScrips" - -#: lib/RT/System.pm:82 -msgid "ModifySelf" -msgstr "ModifySelf" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "ModifyTemplate" -msgstr "ModifyTemplate" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "ModifyTicket" -msgstr "ModifyTicket" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Seg." - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "Mais sobre %1" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Descer" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Subir" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Múltiplo" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "O atributo 'Name' deve ser especificado" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "Minhas Aprovações" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Minhas aprovações" - -#: 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 "Nome" - -#: lib/RT/User_Overlay.pm:233 -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:73 -msgid "Never" -msgstr "Nunca" - -#: NOT FOUND IN SOURCE -msgid "New" -msgstr "Novo" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Novos Relacionamentos" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Nova Senha" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Nova Aprovação Pendente" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Nova busca" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Novo campo personalizado" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Novo grupo" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Nova senha" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Notificação de nova senha enviada" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Nova fila" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "New request" -msgstr "Nova requisição" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Novos direitos de acesso" - -#: 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 "Novo scrip" - -#: NOT FOUND IN SOURCE -msgid "New search" -msgstr "Nova busca" - -#: 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 "Novo esquema" - -#: 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 "O novo tíquete não existe" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Novo usuário" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Novo usuário chamado" - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Novos observadores" - -#: NOT FOUND IN SOURCE -msgid "New window setting" -msgstr "Abrir nova janela" - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Próximo" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "" - -#: 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:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Apelido" - -#: 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 "Não há Campo Personalizado" - -#: 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 "Não há Grupo definido" - -#: 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 "Não há Fila definida" - -#: bin/rt-crontool:73 -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:100 html/Admin/Queues/Template.html:97 -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:77 -msgid "No action" -msgstr "Não há ação" - -#: lib/RT/Record.pm:949 -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:68 -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: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 "Não há descrição para %1" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Não há grupo especificado" - -#: 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 "Não há senha especificada" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Não há permissão para criar filas" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($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:186 -msgid "No permission to create users" -msgstr "Sem permissão para criar usuários" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Sem permissão para mostrar o tíquete" - -#: 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 "sem permissão para ver modificar o tíquete" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Não há principal especificado" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Não há principal selecionado." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Não há fila satisfazendo o critério de busca." - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Nenhum direito encontrado" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Nenhum direito outorgado." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Não há busca a realizar" - -#: 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 "Não há identificador de tíquete especificado" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -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 email especificado" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Nenhum usuário satisfazendo o critério de busca foi encontrado." - -#: NOT FOUND IN SOURCE -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Nenhum usuário RT válido foi encontrado. O tratador de CVS do RT está desabilitado. Por favor, consulte o administrador do RT.\\n" - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "Nenhum valor enviado a _Set!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Ninguém" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Campo inexistente?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Not logged in" -msgstr "Não logado" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Não entrou." - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Não definido" - -#: html/NoAuth/Reminder.html:48 -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:81 -msgid "Notes" -msgstr "Notas" - -#: lib/RT/User_Overlay.pm:819 -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 "" - -#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "" - -#: 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 "" - -#: 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 "Notificar Proprietários e AdminCcs sobre novos itens pendendo 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:451 -msgid "Nov." -msgstr "Nov." - -#: NOT FOUND IN SOURCE -msgid "November" -msgstr "Novembro" - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "Objeto não pôde ser criado" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Objeto criado" - -#: 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 "Out." - -#: NOT FOUND IN SOURCE -msgid "October" -msgstr "Outubro" - -#: 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 "Em" - -#: lib/RT/Transaction_Overlay.pm:326 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Sobre Comentário" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "Sobre Correspondência" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Sobre Criação" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Sobre Mudança de Propriedade" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Sobre Mudança de Fila" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Sobre Resolução" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Sobre Mudança de Estado" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Sobre Transação" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -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:68 -#. ("") -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:75 -msgid "Only show custom fields for:" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Open" -msgstr "Aberto" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Abrir" - -#: NOT FOUND IN SOURCE -msgid "Open requests" -msgstr "Requisições abertas" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "" - -#: 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:70 -msgid "Options" -msgstr "" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Ordering and sorting" -msgstr "Requisitando e ordenando" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Organização" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Tíquete originador: #%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 "Após a data, a prioridade tende a" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Próprios tíquetes" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "OwnTicket" - -#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006 -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: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 "Proprietário alterado à força de %1 para %2" - -#: NOT FOUND IN SOURCE -msgid "Owner is" -msgstr "O proprietário é" - -#: 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 "Pager" - -#: NOT FOUND IN SOURCE -msgid "PagerPhone" -msgstr "Telefone do Pager" - -#: NOT FOUND IN SOURCE -msgid "Parent" -msgstr "Pai" - -#: 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 "Pais" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Senha" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Lembrete de Senha" - -#: 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 "Senha muito curta" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Senha: %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 "" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -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: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 "Permissão Negada" - -#: 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 "Grupoas Pessoais" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Grupos pessoais" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Grupos pessoais:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Telefones" - -#: 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 "Preferências" - -#: 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 "Prefs" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Anterior" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Previous page" -msgstr "Página anterior" - -#: 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 "Principal %1 não encontrado." - -#: 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 "Prioridade" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "A prioridade inicia em" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Privilegiado" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Estado privilegiado: %1" - -#: html/Admin/Users/index.html:102 -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: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 "Fila" - -#: 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 "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:64 -msgid "Queue Name" -msgstr "Nome da Fila" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "Scrips da Fila" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "A fila já existe" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "A fila não pôde ser criada" - -#: html/Ticket/Create.html:244 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:384 lib/RT/StyleGuide.pod:809 -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:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Fila não encontrada" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Filas" - -#: 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 "" - -#: 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 para %2" - -#: NOT FOUND IN SOURCE -msgid "RT %1 from Best Practical Solutions, LLC." -msgstr "RT %1 por Best Practical Solutions, LLC." - -#: 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:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "Adiministraçã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 "Ricocheteio 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:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "Erro no RT" - -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." -msgstr "O RT recebeu email (%1) dele próprio." - -#: NOT FOUND IN SOURCE -msgid "RT Recieved mail (%1) from itself." -msgstr "O RT recebeu email (%1) de si próprio." - -#: NOT FOUND IN SOURCE -msgid "RT Self Service / Closed Tickets" -msgstr "Auto-serviço do RT / Tíquetes Fechados" - -#: 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 por alto" - -#: 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 "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:100 -msgid "RT couldn't store your session." -msgstr "" - -#: 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:49 html/Elements/PageLayout:172 -#. ($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 is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under Version 2 of the GNU General Public License." -msgstr "RT tem © Direitos Reservados 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Ele é distribuído sob a Versão 2 da Licença Pública Geral GNU (GPL)." - -#: 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 tem © Direitos Reservados 1996-%1 por Jesse Vincent <jesse@bestpractical.com>. Ele é distribuído sob a Versão 2 da Licença Pública Geral GNU (GPL)." - -#: 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: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 "O RT vai processar esta mensagem como se não fosse assinada.\\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 "" - -#: 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 "O modo de comandos por email do RT requer autenticação PGP. Ou você não assinou sua mensagem ou sua assinatura não pôde ser verificada." - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Nome real" - -#: NOT FOUND IN SOURCE -msgid "RealName" -msgstr "Nome real" - -#: 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 "Referenciado por" - -#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "Faz referência a" - -#: NOT FOUND IN SOURCE -msgid "RefersTo" -msgstr "RefersTo" - -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "Refinar" - -#: NOT FOUND IN SOURCE -msgid "Refine search" -msgstr "Refinar a Busca" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Recarregar esta página a cada %1 minutos." - -#: 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 "Remover AdminCc" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Remover Cc" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Remover Requisitante" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Responder" - -#: 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 "Responder aos tíquetes" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "ReplyToTicket" - -#: 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 "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:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Requisitantes" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "A requisições vencem em" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Restaurar" - -#: 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 "Residência" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Resolver" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "Resolver tíquete #%1 (%2)" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Resolvido" - -#: 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 "Resposta aos requisitantes" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Resultados" - -#: NOT FOUND IN SOURCE -msgid "Results per page" -msgstr "Resultados por página" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Confirmar a Senha" - -#: 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 "Direito de acesso %1 não encontrado para %2 %3 referente a %4 (%5)\\n" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Direito de Acesso Delegado" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Direito de Acesso Outorgado" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Direito de Acesso Carregado" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Direito de acesso não pôde ser revogado" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Direito de acesso não encontrado" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Direito de acesso não carregado." - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Direito de acesso revogado" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Direitos de Acesso" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($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:156 lib/RT/Interface/Web.pm:990 -#. ($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:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Papéis" - -#: NOT FOUND IN SOURCE -msgid "RootApproval" -msgstr "RootApproval" - -#: 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 "Sáb." - -#: 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 "Salvar as Alterações" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Salvar as alterações" - -#: 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 Criado" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Scrip removido" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Scrips" - -#: NOT FOUND IN SOURCE -msgid "Scrips for %1\\n" -msgstr "Scrips para %1\\n" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Scrips aplicáveis a todas as filas" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Buscar" - -#: NOT FOUND IN SOURCE -msgid "Search Criteria" -msgstr "Critérios de Busca" - -#: 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 "Buscar por aprovações" - -#: 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 "Segurança:" - -#: 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 "SeeQueue" - -#: 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 "Selecionar um grupo" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Selecionar uma fila" - -#: 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 "Selecionar um usuário" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Selecionar um campo personalizado" - -#: 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 "Selecionar um grupo" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Selecionar múltiplos valores" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Selecionar um valor" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Selecionar uma fila" - -#: 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 "Selecionar um 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 "Selecionar um esquema" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "" - -#: html/Admin/Elements/UserTabs:78 -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: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 "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 "" - -#: 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 "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:449 -msgid "Sep." -msgstr "Set." - -#: NOT FOUND IN SOURCE -msgid "September" -msgstr "Setembro" - -#: 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 "Mostrar os Resultados" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Mostrar requisições aprovadas" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Mostrar o sumário" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Mostrar requisições negadas" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Mostrar os detalhes" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Mostrar requisições pendentes" - -#: html/Approvals/Elements/PendingMyApproval:66 -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:93 -msgid "ShowACL" -msgstr "ShowACL" - -#: 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 "ShowScrips" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "ShowTemplate" -msgstr "ShowTemplate" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowTicket" -msgstr "ShowTicket" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicketComments" -msgstr "ShowTicketComments" - -#: lib/RT/Queue_Overlay.pm:107 -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:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Cadastrar como um AdminCC de tíquete ou fila" - -#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168 -msgid "Signature" -msgstr "Assinatura" - -#: NOT FOUND IN SOURCE -msgid "Signed in as %1" -msgstr "Assinado como %1" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Único" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Saltar Menu" - -#: 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 "" - -#: 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:78 -msgid "Stage" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "Pendente" - -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "Página inicial" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -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:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -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:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Estado" - -#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651 -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 alterado de %1 para %2" - -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "StatusChange" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Roubar" - -#: 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 "Roubado de %1" - -#: NOT FOUND IN SOURCE -msgid "Stolen from %1 " -msgstr "Roubado de %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 "Assunto" - -#: 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 "Assunto modou para %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Enviar" - -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "Enviar Workflow" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Deu certo" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Dom." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "SuperUser" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Sistema" - -#: 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 "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: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 "Erro do sistema. Direito de acesso não delegado." - -#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920 -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 posso outorgar direitos de acesso." - -#: 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 "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:357 -msgid "TEST_STRING" -msgstr "TEST_STRING" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Tomar" - -#: 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 "Tomado" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Modelo" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Esquema #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Esquema removido" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:180 -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:343 -msgid "Template parsed" -msgstr "Modelo processado" - -#: 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 "Modelos" - -#: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "Modelos de %1\\n" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Este já é o valor atual" - -#: lib/RT/CustomField_Overlay.pm:412 -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:1994 -msgid "That is the same value" -msgstr "Este é o mesmo valor" - -#: 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 "Este principal já é um %1 para esta fila" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Este principal já é um %1 para este tíquete" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Este principal não é um %1 para esta fila" - -#: NOT FOUND IN SOURCE -msgid "That principal is not a %1 for this ticket" -msgstr "Este principal não é um %1 para este tíquete" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Esta fila não existe" - -#: lib/RT/Ticket_Overlay.pm:3233 -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:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Este usuário já possui este tíquete" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Este usuário não existe" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Este usuário já tem privilégios" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Este usuário já não tem privilégios" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Este usuário agora tem privilégios" - -#: lib/RT/User_Overlay.pm:423 -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:3031 -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:233 -msgid "That's not a numerical id" -msgstr "Este não é um identificador numérico" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Sumário" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "O CC de um tíquete" - -#: lib/RT/ACE_Overlay.pm:113 -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: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 "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 em 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:948 -msgid "The new value has been set." -msgstr "O novo valor foi atribuído." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "O proprietário de um tíquete" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "O requisitante de um tíquete" - -#: html/Admin/Elements/EditUserComments:47 -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: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 "Este tíquete %1 %2 (%3)\\n" - -#: bin/rt-crontool:266 -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:301 -msgid "This transaction appears to have no content" -msgstr "Parece que esta transação não tem conteúdo" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($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:420 -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:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Tíquete #%1 Atualização jumbo: %2" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Tíquete #%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 "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:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Tíquete %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 "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: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 "Arquivo anexo do tíquete" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Conteúdo do tíquete" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Tipo do conteúdo do tíquete" - -#: 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 "O tíquete não pôde ser criado devido a um erro interno" - -#: 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:55 -msgid "Ticket metadata" -msgstr "" - -#: 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: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 "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: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 "Tíquetes de %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 "Tíquetes dependentes desta aprovação:" - -#: 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 "Tempo Restante" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Tempo Trabalhado" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Tempo restante" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Tempo de apresentação" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Tempo trabalhado" - -#: NOT FOUND IN SOURCE -msgid "TimeLeft" -msgstr "TimeLeft" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "TimeWorked" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "" - -#: 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: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 "Última atualização" - -#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49 -msgid "Tools" -msgstr "" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transação" - -#: lib/RT/Transaction_Overlay.pm:805 -#. ($self->Data) -msgid "Transaction %1 purged" -msgstr "Transação %1 removida" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Transação Criada" - -#: 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 não pôde, já que você não especificou um id de tíquete" - -#: 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 "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:418 -msgid "Tue." -msgstr "Ter." - -#: 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 "Tipo" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "Não implementado" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Usuário Unix" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "Usuário Unix" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "Codificação de conteúdo desconhecida %1" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Ilimitado" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Não privilegiado" - -#: 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 "Não tomado" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Atualizar" - -#: NOT FOUND IN SOURCE -msgid "Update ID" -msgstr "Identificador de atualização" - -#: 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 "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 email" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Update name" -msgstr "Atualizar nome" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -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:84 -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:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Atualizar o tíquete #%1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Atualizar tíquete #%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -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:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Atualizado" - -#: 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 "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:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "" - -#: 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:93 -msgid "User Defined conditions and actions" -msgstr "" - -#: 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: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 "Direitos de Acesso de Usuário" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "O usuário não pôde ser criado: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Usuário criado" - -#: 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 "Grupos definidos pelo usuário" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "" - -#: 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:103 -msgid "User-defined groups" -msgstr "" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Nome de usuário" - -#: 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 "Usuários" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Usuários que satisfazem o critério de busca" - -#: 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 "Valor da fila" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Valores" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "Observar" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "WatchAsAdminCc" - -#: NOT FOUND IN SOURCE -msgid "Watcher loaded" -msgstr "Observador carregado" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Observadores" - -#: NOT FOUND IN SOURCE -msgid "WebEncoding" -msgstr "Codificação de Web" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Qua." - -#: 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 "Quando um tíquete for aprovado por todos os aprovadores, adicione 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 um tíquete for aprovado por qualquer aprovador, adicione 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 item aguardando sua aprovação" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "Quando acontecer qualquer coisa" - -#: 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 "" - -#: 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:188 html/User/Prefs.html:88 -msgid "Work" -msgstr "Trabalho" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "WorkPhone" -msgstr "Telefone de trabalho" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Trabalhado" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Você já é proprietário deste tíquete" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Você não é um usuário autorizado" - -#: 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 "Você só pode reatribuir seus próprios tíquetes ou aqueles que não têm dono" - -#: 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 "Você não tem permissão para ver este tíquete.\\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 "Você encontrou %1 tíquetes na fila %2" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Você foi desconectado do RT." - -#: html/SelfService/Display.html:133 -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:2003 -msgid "You may not create requests in that queue." -msgstr "Você não pode criar requisições nesta fila." - -#: html/NoAuth/Logout.html:56 -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:251 -msgid "Your username or password is incorrect" -msgstr "Nome de usuário ou senha incorretos" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "CEP" - -#: NOT FOUND IN SOURCE -msgid "[no subject]" -msgstr "[sem assunto]" - -#: 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 "como outorgado a %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 "contém" - -#: NOT FOUND IN SOURCE -msgid "content" -msgstr "content" - -#: NOT FOUND IN SOURCE -msgid "content-type" -msgstr "content-type" - -#: 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:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "dias" - -#: NOT FOUND IN SOURCE -msgid "dead" -msgstr "morto" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "remover" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "removido" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "não satisfaz" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "não contém" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "igual a" - -#: 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 "falso" - -#: NOT FOUND IN SOURCE -msgid "filename" -msgstr "filename" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "maior que" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr "grupo '%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 "horas" - -#: html/Search/Elements/PickBasics:48 -msgid "id" -msgstr "identificador" - -#: 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 "não é" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "menor que" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "satisfaz" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "min" - -#: NOT FOUND IN SOURCE -msgid "minutes" -msgstr "minutos" - -#: NOT FOUND IN SOURCE -msgid "modifications\\n\\n" -msgstr "modificações\\n\\n" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "meses" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "novo" - -#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "sem valor" - -#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "nenhum" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "diferente de" - -#: NOT FOUND IN SOURCE -msgid "notlike" -msgstr "diferente" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "aberto" - -#: lib/RT/Group_Overlay.pm:219 -#. ($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:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "fila %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "rejeitado" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "resolvido" - -#: lib/RT/Date.pm:334 -msgid "sec" -msgstr "seg" - -#: 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 "pendente" - -#: 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 "sistema %1" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "grupo do sistema '%1'" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "o componente chamador não especificou por que" - -#: lib/RT/Group_Overlay.pm:230 -#. ($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:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "grupo %1 não descrito" - -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "grupo sem descrição %1" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "usuário %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "semanas" - -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "com modelo %1" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "anos" - diff --git a/rt/lib/RT/I18N/ru.po b/rt/lib/RT/I18N/ru.po deleted file mode 100644 index 14f5c3b52..000000000 --- a/rt/lib/RT/I18N/ru.po +++ /dev/null @@ -1,6737 +0,0 @@ -# translation of Request Tracker en.po to Russian -# -# -# Andrew Kornilov , 2004, 2005, 2006. -msgid "" -msgstr "" -"Project-Id-Version: RT 3.6.x\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: (null)\n" -"PO-Revision-Date: 2006-12-19 13:54+0200\n" -"Last-Translator: Andrew Kornilov \n" -"Language-Team: rt-devel \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.11.4\n" - -#: 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 "№" - -#: 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 "" - -#: html/Elements/ShowSearch:105 -msgid "$1" -msgstr "" - -#: lib/RT/Record.pm:940 -#. ($label) -msgid "$prefix %1" -msgstr "" - -#: lib/RT/URI/fsck_com_rt.pm:256 -#. ($self->ObjectType, $self->Object->Id) -msgid "%1 #%2" -msgstr "" - -#: lib/RT/Date.pm:365 -#. ($s, $time_unit) -msgid "%1 %2" -msgstr "" - -#: lib/RT/Date.pm:401 -#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) -msgid "%1 %2 %3 %4:%5:%6 %7" -msgstr "%1 %2 %3 %4:%5:%6 %7" - -#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690 -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 added" -msgstr "%1 %2 добавлен" - -#: 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 "%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 "" - -#: 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 "" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -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 СкриплетНаДействие загружен" - -#: 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 псевдонимы требуют идентификатор заявки для продолжения работы над (от %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 является локальным объектом, но не найден в базе данных" - -#: 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 удалена" - -#: NOT FOUND IN SOURCE -msgid "%1 grouped by %2" -msgstr "%1 сгруппированные по %2" - -#: 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 заявок с наивысшими приоритетами, созданных вами..." - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "" - -#: lib/RT/Queue_Overlay.pm:863 -#. ($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 неверный идентификатор очереди." - -#: NOT FOUND IN SOURCE -msgid "%1 matches" -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 объектов" - -#: 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 "%1 тип не известен для $MessageId" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "%1 тип не известен для %2" - -#: NOT FOUND IN SOURCE -msgid "%1 was created without a CurrentUser\\n" -msgstr "%1 была создана без ТекущегоПользователя\\n" - -#: lib/RT/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 "%1к" - -#: 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' является неверным значением статуса" - -#: 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 "(Введите идентификаторы или ссылки на заявки, разделенные пробелами)" - -#: NOT FOUND IN SOURCE -msgid "(Enter ticket ids or URLs, seperated with spaces)" -msgstr "(Введите идентификаторы или ссылки на заявки, разделенные пробелами)" - -#: NOT FOUND IN SOURCE -msgid "(If left blank, will default to %1" -msgstr "(Если не заполнено, то по умолчанию равно %1" - -#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -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 "(Нет шаблонов)" - -#: 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 "(Корреспонденция не будет отправлена)" - -#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 -msgid "(empty)" -msgstr "(пусто)" - -#: NOT FOUND IN SOURCE -msgid "(no Summary)" -msgstr "(нет сводной информации)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(имена не указаны)" - -#: NOT FOUND IN SOURCE -msgid "(no name)" -msgstr "(нет имени)" - -#: NOT FOUND IN SOURCE -msgid "(no subject)" -msgstr "(нет темы)" - -#: 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 "(гггг/мм/дд)" - -#: 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 "25 ваших заявок с наивысшими приоритетами..." - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "25 заявок с наивысшими приоритетами, созданные ваши..." - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "<% $Ticket->Status%>" - -#: html/Elements/SelectTicketTypes:48 -msgid "<% $_ %>" -msgstr "" - -#: 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 " %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 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ы можно только создавать и удалять" - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "И" - -#: NOT FOUND IN SOURCE -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Прекращаем работу во избежание нежелательного изменения заявки.\\n" - -#: html/User/Elements/Tabs:53 -msgid "About me" -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 "Действие подготовлено..." - -#: 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 "Добавить критерий" - -#: 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 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 "Добавить значения" - -# Manual merge by Andrew Kornilov -#: 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 для этой заявки" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Адрес1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Адрес2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "Административная Копия" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "Административный Комментарий" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -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 "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 "АдминистрироватьГруппу" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -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 "АдминистрироватьПользователей" - -#: 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 "Псевдоним для" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -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 "Always sends a message to the requestors independent of message sender" -msgstr "Всегода отправлять сообщения авторам заявок независимо от отправителя сообщения" - -#: 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 "Подтверждения" - -#: 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 "Детали подтверждения" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Подтверждение получено" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Подтверждение отклонено" - -#: NOT FOUND IN SOURCE -msgid "Approval diagram" -msgstr "Диаграмма подтверждений" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Подтвердить" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Примечания подтвердившего: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Апр." - -#: NOT FOUND IN SOURCE -msgid "April" -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 "Атрибут удален" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Авг." - -#: NOT FOUND IN SOURCE -msgid "August" -msgstr "Август" - -#: NOT FOUND IN SOURCE -msgid "AuthSystem" -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 "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 "Основное" - -#: 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 "Начать подтверждение" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Binary" -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 "Множественное изменение заявки" - -#: 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 "Невозможно указывать одновременно и источник и адрес назначения" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Невозможно создать пользователя: %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 "Копия" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -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 "Потомки" - -#: 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 "Город" - -#: 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 "Закрытые заявки" - -#: NOT FOUND IN SOURCE -msgid "Closed requests" -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 "Комментарии добавлены" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -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 "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 "Копия" - -#: 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" - -#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -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 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 "Невозможно создать транзакцию: %1" - -#: 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 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 "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't resolve base '%1' into a URI." -msgstr "Невозможно преобразовать базу '%1' в URI." - -#: NOT FOUND IN SOURCE -msgid "Couldn't resolve target '%1' into a URI." -msgstr "Невозможно преобразовать цель '%1' в URI." - -#: 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 "Создать" - -#: etc/initialdata:135 -msgid "Create Tickets" -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 which applies to all queues" -msgstr "Создать дополнительное поле для всех очередей" - -#: 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 "Создать нового пользователя" - -#: 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 failed: %1 / %2 / %3 " -msgstr "Ошибка создания: %1 / %2 / %3 " - -#: NOT FOUND IN SOURCE -msgid "Create failed: %1/%2/%3" -msgstr "Ошибка создания: %1/%2/%3" - -#: 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" - -#: NOT FOUND IN SOURCE -msgid "Created by" -msgstr "Создано пользователем" - -#: NOT FOUND IN SOURCE -msgid "Created during" -msgstr "Создано во время" - -#: 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 "Создано заявок за период, с группировкой по статусу" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Автор заявки" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Текущие связи" - -#: NOT FOUND IN SOURCE -msgid "Current Relationships" -msgstr "Текущие взаимосвязи" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -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" - -#: 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 "Невозможно найти значение %1 дополнительного поля %2" - -#: 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 "Ошибка данных" - -#: 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 "Даты" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Дек." - -#: NOT FOUND IN SOURCE -msgid "December" -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 "Автор заявки по умолчанию" - -#: 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" - -#: 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 "ДелегироватьПрава" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Делегирование прав" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204 -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 "Отказать" - -#: 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 "Details" -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 "Распространяется по версии 2 GNU GPL." - -#: 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 "Не показывать результаты поиска" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Загрузить" - -#: NOT FOUND IN SOURCE -msgid "Download all the tickets as a tab delimited file" -msgstr "Загрузить все заявки как файл со значениями, разделенными табуляцией" - -#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 -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 "Дан срок" - -#: 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 "Редактирование дополнительных полей всех пользователей" - -#: 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 "Редактировать запрос" - -#: NOT FOUND IN SOURCE -msgid "Edit Relationships" -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 "Редактировать шаблоны для очереди %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 templates 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" - -#: 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 "Email" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "Email адрес уже занят" - -#: NOT FOUND IN SOURCE -msgid "EmailAddress" -msgstr "EmailAddress" - -#: NOT FOUND IN SOURCE -msgid "EmailEncoding" -msgstr "EmailEncoding" - -#: 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 "Используемые дополнительные поля" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Используемые очереди" - -#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138 -#. (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" - -#: 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 "Введите объекты или ссылки на объекты. Значения разделяются пробелами." - -#: 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 "Введите очереди или ссылки на очереди. Значения разделяются пробелами." - -#: html/Elements/EditLinks:119 html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Введите заявки или ссылки на заявки. Значения разделяются пробелами." - -#: NOT FOUND IN SOURCE -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "Введите заявки или ссылки на заявки. Значения разделяются пробелами." - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Введите до %1 значений" - -#: 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 "Ошибка в параметрах Queue->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Ошибка в параметрах Queue->DelWatcher" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Ошибка в параметрах Queue->DeleteWatcher" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Ошибка в параметрах Ticket->AddWatcher" - -#: NOT FOUND IN SOURCE -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "Ошибка в параметрах Ticket->DelWatcher" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Ошибка в параметрах Ticket->DeleteWatcher" - -#: 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 "ExternalAuthId" -msgstr "ExternalAuthId" - -#: NOT FOUND IN SOURCE -msgid "ExternalContactInfoId" -msgstr "ExternalContactInfoId" - -#: 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" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Фев." - -#: NOT FOUND IN SOURCE -msgid "February" -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 "Заполнить несколько полей wikitext" - -#: 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 "Заполнить одно поле wikitext" - -#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118 -msgid "Fill in this field with a URL." -msgstr "Введите в этом поле URL." - -#: 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 полей wikitext" - -#: NOT FOUND IN SOURCE -msgid "Fin" -msgstr "Конец" - -#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841 -msgid "Final Priority" -msgstr "Конечный приоритет" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -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 "Найти пользователей, у которых" - -#: 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 "Первая страница" - -#: 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 "Изменить принудительно" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Форматировать" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "Найдено %quant(%1,ticket)" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Найден объект" - -#: NOT FOUND IN SOURCE -msgid "FreeformContactInfo" -msgstr "FreeformContactInfo" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Птн." - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -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 "Общие" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "Общие дополнительные поля" - -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -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" - -#: 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 "Правильная pgp подпись от %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Goto page" -msgstr "Перейти на страницу" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -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" - -#: 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 "Права группы" - -#: 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 "Группа создана" - -#: 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" - -#: 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 "Группы, в которых состоит этот пользователь" - -#: 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" - -#: 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 "В начало" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "Часов" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "Имеется %quant(%1,concrete mixer)." - -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." -msgstr "Имеется [quant,_1,concrete mixer]." - -#: 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 "Заявка" - -#: 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 "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 "Незавершенный запрос" - -#: 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" - -#: 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 "Недопустимое значение статуса" - -#: 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 "Предполагается, что для запуска этой программы вы должны создать непривилегированную учетную запись пользователя Unix с корректными установками групп и доступом к RT." - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Это требует несколько параметров:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "Наклонный" - -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" -msgstr "Заявки, ожидающие вашего подтверждения" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Янв." - -#: NOT FOUND IN SOURCE -msgid "January" -msgstr "Январь" - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Присоединиться или покинуть эту группу" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Июл." - -#: NOT FOUND IN SOURCE -msgid "July" -msgstr "Июль" - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Все данные" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Июн." - -#: NOT FOUND IN SOURCE -msgid "June" -msgstr "Июнь" - -#: NOT FOUND IN SOURCE -msgid "Keyword" -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 "Последний контакт" - -#: NOT FOUND IN SOURCE -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 "Разрешить доступ к RT" - -#: 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 "Ссылка" - -#: 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 "Связи" - -#: 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 не может продолжить работу." - -#: 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 "Выйти" - -#: 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 "Сделать эту группу видимой для пользователя" - -#: 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 "Управление пользователями и паролями" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Мар." - -#: NOT FOUND IN SOURCE -msgid "March" -msgstr "Март" - -#: NOT FOUND IN SOURCE -msgid "May" -msgstr "Май" - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "Май" - -#: 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 "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 "Ошибка объединения. Невозможно установить идентификатор заявки." - -#: 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 "Невозможно записать сообщение" - -#: NOT FOUND IN SOURCE -msgid "Message recipients" -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 "Пропущен первичный ключ?: %1" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Мобильный" - -#: NOT FOUND IN SOURCE -msgid "MobilePhone" -msgstr "Мобильный телефон" - -#: NOT FOUND IN SOURCE -msgid "Modified" -msgstr "Изменено" - -#: NOT FOUND IN SOURCE -msgid "Modify" -msgstr "Изменить" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Изменить список контроля доступа" - -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "Изменить дополнительное поле %1" - -#: html/Admin/Elements/ObjectCustomFields:96 -#. (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 "Изменить права пользователя" - -#: 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 which 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 which 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 "Изменить собственную учетную запись RT" - -#: 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'" - -#: 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 "ИзменятьЗаявку" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Пнд." - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "Информация о %1" - -#: NOT FOUND IN SOURCE -msgid "Move" -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 "Вы должны указать Имя" - -#: 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 "Ваши сегодняшние заявки" - -#: 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 "Name matches" -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 Relationships" -msgstr "Новые связи" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -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 "Новые настройки окна" - -#: 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 "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" - -#: 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 "Команда не найдена\\n" - -#: 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 "Пользователи не выбраны." - -#: 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 "Пользователь или адрес email не указан" - -#: 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. Обработчик 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 "Несуществующее поле?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "Не установлено" - -#: 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 "Примечания" - -#: 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 "Уведомлять Авторов заявки, Копии и АдминистративныеКопии как Комментарии" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Ноя." - -#: NOT FOUND IN SOURCE -msgid "November" -msgstr "Ноябрь" - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "ИЛИ" - -#: 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 "Несовпадение типа объекта" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Окт." - -#: NOT FOUND IN SOURCE -msgid "October" -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 писал:" - -#: 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 "Открыть" - -#: NOT FOUND IN SOURCE -msgid "Open requests" -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 "Открыть заявки при корреспонденции" - -#: 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 "Организация" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Заявка-первоисточник: #%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 "Со временем поднять приоритет до" - -#: 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 "Ответственный" - -#: 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 "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 "Предки" - -#: 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 "Пароли не совпадают. Ваш пароль не был изменен" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -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 "Нет доступа" - -#: 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 "Личные группы" - -#: 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 "Личные группы:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Номера телефонов" - -#: NOT FOUND IN SOURCE -msgid "Placeholder" -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 "Настройки %1 пользователя %2 ." - -#: 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 "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 "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" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Наименование очереди" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -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 "Очереди, для которых вы являетесь Административной Копией" - -#: 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 "" - -#: 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 для %2" - -#: NOT FOUND IN SOURCE -msgid "RT %1 from Best Practical Solutions, LLC." -msgstr "RT %1 от 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" - -#: 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" - -#: 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 "Обзор RT для пользователя %1" - -#: 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 "RT для %1" - -#: NOT FOUND IN SOURCE -msgid "RT for %1: %2" -msgstr "RT для %1: %2" - -#: NOT FOUND IN SOURCE -msgid "RT has proccessed your commands" -msgstr "RT выполнил ваши команды" - -#: NOT FOUND IN SOURCE -msgid "RT is © 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 Версии 2." - -#: NOT FOUND IN SOURCE -msgid "RT is © Copyright 1996-%1 Jesse Vincent . It is distributed under Version 2 of the GNU General Public License." -msgstr "Все права на RT защищены и охраняются законом. © 1996-%1 Jesse Vincent <jesse@bestpractical.com>. ПО распространяется под Стандартной Общественной Лицензией GNU Версии 2." - -#: 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 защищены и охраняются законом. © 1996-%1 Jesse Vincent <jesse@bestpractical.com>. ПО распространяется под Стандартной Общественной Лицензией GNU Версии 2." - -#: 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 email требует использования подписи .PGP. Вы либо не подписали сообщение, либо ваша подпись не может быть проверена." - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Полное имя" - -#: NOT FOUND IN SOURCE -msgid "RealName" -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 "Очистить запрос" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Обновлять эту страницу каждые %1 минут." - -#: NOT FOUND IN SOURCE -msgid "Relationships" -msgstr "Связи" - -#: 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" - -#: 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 "ОтвечатьНаЗаявку" - -#: 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 "Email автора заявки" - -#: 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 "Домашний" - -#: 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 "Ответ авторам заявки" - -#: 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 "Право %1 не найдено для %2 %3 в рамках %4 (%5)\\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" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Псевдо-группы" - -#: 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 "Суб." - -#: 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" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Скриплет создан" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -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 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 "Поиск заявок. Введите номер идентификатора, имя очереди, имя ответственного, email-адрес автора заявки. Всё остальное, что вы введёте, RT будет искать в тексте и вложениях заявок." - -#: 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:слово." - -#: bin/rt-crontool:265 -msgid "Security:" -msgstr "Безопасность:" - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "Смотрите также:" - -#: NOT FOUND IN SOURCE -msgid "See also: %1" -msgstr "Смотрите также: %1" - -#: 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 "Выбрать" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Выберите дополнительное поле" - -#: NOT FOUND IN SOURCE -msgid "Select a Custom Fields" -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 "Выберите очередь для вашей новой заявки" - -#: 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 "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 "Выбранные объекты" - -#: 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 "Отправлять почту Ответственному" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Сен." - -#: NOT FOUND IN SOURCE -msgid "Seperate multiple URLs with spaces" -msgstr "Разделяйте несколько ссылок пробелами" - -#: NOT FOUND IN SOURCE -msgid "September" -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 "Показать результаты" - -#: NOT FOUND IN SOURCE -msgid "Show advanced search options..." -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 Order" -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 "Порядок сортировки" - -#: NOT FOUND IN SOURCE -msgid "Squelched message recipients" -msgstr "Скрытые получатели сообщения" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "Стадия" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "Приостановленных" - -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "Начальная страница" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -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 "Стиль" - -#: 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 Query" -msgstr "Отправить запрос" - -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "Отправить последовательность действий" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Успешно" - -#: NOT FOUND IN SOURCE -msgid "Summary" -msgstr "Сводная информация" - -#: NOT FOUND IN SOURCE -msgid "Summary matches" -msgstr "Всего совпадений" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Вск." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "Администратор" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Системные" - -#: 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 "Системная ошибка" - -#: 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" - -#: 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 "Системные группы" - -#: 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" - -#: 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" - -#: 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 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 "Нижеследующая команда найдет все активные заявки в очереди 'Основная' и установит им приоритет 99, если в них не было активности более 4-х часов:" - -#: 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 "Эти комментарии не показываются обыкновенному пользователю" - -#: 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 "Этот инструмент позволяет пользователю запускать некоторые модули Perl из 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 важнейших заявок пользователя..." - -#: 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 "Дополнительные поля заявки" - -#: 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 "Заявка #" - -#: 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 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" - -#: 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 "Время в работе" - -#: 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." - -#: 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 "Транзакция->Создать невозможно, так как вы не указали тип объекта и идентификатор" - -#: lib/RT/Transaction_Overlay.pm:870 -msgid "Transactions are immutable" -msgstr "Неизменяемые транзакции" - -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "Пытаемся удалить право: %1" - -#: 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 "Логин UNIX" - -#: NOT FOUND IN SOURCE -msgid "UnixUsername" -msgstr "Имя пользователя UNIX" - -#: 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 "Неизвестное поле: $key" - -#: 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 "Безымянный запрос" - -#: 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 "Изменить e-mail" - -#: 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 %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 "Логин" - -#: NOT FOUND IN SOURCE -msgid "User Id" -msgstr "Логин" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Права пользователя" - -#: NOT FOUND IN SOURCE -msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" -msgstr "Пользователь запросил изменение неизвестного типа для дополнительного поля %1 для объекта %2 #%3" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "Невозможно создать пользователя: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Пользователь создан" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -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 view" -msgstr "Пользовательские настройки" - -#: 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 "Имя пользователя" - -#: 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 "Значения" - -#: 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 "WebEncoding" - -#: 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 "Каждый раз при приходе корреспонденции" - -#: NOT FOUND IN SOURCE -msgid "Which are referred to by " -msgstr "Которая связана пользователем" - -#: NOT FOUND IN SOURCE -msgid "Which refer to" -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 "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 "Найдено %1 заявок в очереди %2" - -#: 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 "Вы не должны создавать запросы в этой очереди." - -#: 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 неправильно настроил почтовые алиасы" - -#: 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 "Ваш запрос отклонен" - -#: 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 "[нет темы]" - -#: 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 "and is not" -msgstr "и не является" - -#: NOT FOUND IN SOURCE -msgid "and not" -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 "корреспонденция отправлена" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "дней" - -#: NOT FOUND IN SOURCE -msgid "delete" -msgstr "удалить" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "удалена" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "не совпадает" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "не содержит" - -#: NOT FOUND IN SOURCE -msgid "email address" -msgstr "адрес email" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -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 "идентификатор" - -#: 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 "меньше чем" - -#: 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 "notlike" -msgstr "неравно" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "открыта" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "личная группа '%1' для пользователя '%2'" - -#: 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 "решена" - -#: 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 "true" -msgstr "истина" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "группа без описания: %1" - -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "группа без описания: %1" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "пользователь %1" - -#: 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 "лет" - diff --git a/rt/lib/RT/I18N/sv.po b/rt/lib/RT/I18N/sv.po deleted file mode 100644 index 25312a0fe..000000000 --- a/rt/lib/RT/I18N/sv.po +++ /dev/null @@ -1,5840 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: \n" -"PO-Revision-Date: 2007-03-16 12:57+0100\n" -"Last-Translator: Heidi Senderovitz\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf8\n" -"Content-Transfer-Encoding: 8bit\n" - -#. ($self->{CurrentSearch}{Object}->Description) -#: html/Widgets/SavedSearch:70 -msgid " %1 deleted." -msgstr " %1 raderad." - -#. ($self->{CurrentSearch}{Description}, $args->{Description}) -#: html/Widgets/SavedSearch:47 -msgid " %1 renamed to %2." -msgstr " %1 omdöpt till %2." - -#. ($args->{Description}) -#: html/Widgets/SavedSearch:60 -msgid " %1 saved." -msgstr " %1 sparad." - -#. ($TicketObj->Id, $TicketObj->Subject) -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#. ($ticket->Id, $ticket->Subject) -#. ($Ticket->id, $Ticket->Subject) -#: html/Approvals/Elements/Approve:48 -#: html/Approvals/Elements/ShowDependency:71 -#: html/SelfService/Display.html:46 -#: html/Ticket/Display.html:47 -#: html/Ticket/Display.html:51 -msgid "#%1: %2" -msgstr "#%1: %2" - -#: html/Elements/ShowSearch:104 -msgid "$1" -msgstr "$1" - -#. ($label) -#: lib/RT/Record.pm:940 -msgid "$prefix %1" -msgstr "$prefix %1" - -#. ($self->ObjectType, $self->Object->Id) -#: lib/RT/URI/fsck_com_rt.pm:256 -msgid "%1 #%2" -msgstr "%1 #%2" - -#. ($s, $time_unit) -#: lib/RT/Date.pm:365 -msgid "%1 %2" -msgstr "%1 %2" - -#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) -#: lib/RT/Date.pm:401 -msgid "%1 %2 %3 %4:%5:%6 %7" -msgstr "%1 %2 %3 %4:%5:%6 %7" - -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -#: lib/RT/Record.pm:1685 -#: lib/RT/Transaction_Overlay.pm:647 -#: lib/RT/Transaction_Overlay.pm:690 -msgid "%1 %2 added" -msgstr "%1 %2 tillagt" - -#. ($s, $time_unit) -#: lib/RT/Date.pm:362 -msgid "%1 %2 ago" -msgstr "%1 %2 sedan" - -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -#: lib/RT/Record.pm:1692 -#: lib/RT/Transaction_Overlay.pm:654 -msgid "%1 %2 changed to %3" -msgstr "%1 %2 ändrat till %3" - -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -#: lib/RT/Record.pm:1689 -#: lib/RT/Transaction_Overlay.pm:650 -#: lib/RT/Transaction_Overlay.pm:696 -msgid "%1 %2 deleted" -msgstr "%1 %2 raderad" - -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -#: html/Admin/Elements/EditScrips:65 -#: html/Admin/Elements/ListGlobalScrips:63 -#: html/Ticket/Elements/PreviewScrips:103 -msgid "%1 %2 with template %3" -msgstr "%1 %2 med mall %3" - -#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) -#: html/Ticket/Elements/ShowAttachments:72 -msgid "%1 (%2) by %3" -msgstr "%1 (%2) av %3" - -#. (loc($Ticket->Status())) -#. (loc($TicketObj->Status)) -#. ($TicketObj->OwnerObj->Name()) -#. (loc($DefaultStatus)) -#: html/SelfService/Update.html:60 -#: html/Ticket/Elements/EditBasics:108 -#: html/Ticket/Update.html:61 -#: html/Ticket/Update.html:63 -#: html/Tools/MyDay.html:66 -msgid "%1 (Unchanged)" -msgstr "%1 (Oändrad)" - -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -#: bin/rt-crontool:237 -#: bin/rt-crontool:244 -#: bin/rt-crontool:250 -msgid "%1 - An argument to pass to %2" -msgstr "%1 - En parameter att skicka till %2" - -#. ("--verbose") -#: bin/rt-crontool:262 -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - Skicka statusuppdateringar till STDOUT" - -#. ("--template-id") -#: bin/rt-crontool:253 -msgid "%1 - Specify id of the template you want to use" -msgstr "%1 - Specificera ID pÃ¥ mall du vill använda" - -#. ("--transaction") -#: bin/rt-crontool:256 -msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction" -msgstr "%1 - Specificera om du vill använda 'första' eller 'sista' transaktionen" - -#. ("--action") -#: bin/rt-crontool:247 -msgid "%1 - Specify the action module you want to use" -msgstr "%1 - Specificera den handling du vill använda" - -#. ("--condition") -#: bin/rt-crontool:241 -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Specificera den villkorsmodul du vill använda" - -#. ("--search") -#: bin/rt-crontool:234 -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Specificera den sökmodul du vill använda" - -#. ("--transaction-type") -#: bin/rt-crontool:259 -msgid "%1 - Specify the type of a transaction you want to use" -msgstr "%1 - Specificera den typ av transaktion du vill använda" - -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -#: html/Elements/Footer:56 -msgid "%1 RT %2 Copyright 1996-%3 %4." -msgstr "%1 RT %2 Copyright 1996-%3 %4." - -#. ($self->Id) -#: lib/RT/ScripAction_Overlay.pm:150 -msgid "%1 ScripAction loaded" -msgstr "%1 ScripAktion inläst" - -#. ($args{'Value'}, $cf->Name) -#: lib/RT/Record.pm:1722 -msgid "%1 added as a value for %2" -msgstr "%1 tillagt som värde för %2" - -#. ($args{'Base'}) -#. ($args{'Target'}) -#: lib/RT/Link_Overlay.pm:144 -#: lib/RT/Link_Overlay.pm:151 -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "%1 tycks vara ett lokalt objekt men gÃ¥r inte att hitta i databasen" - -#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) -#. ($self->BriefDescription , $self->CreatorObj->Name) -#: html/Ticket/Elements/ShowDates:73 -#: lib/RT/Transaction_Overlay.pm:531 -msgid "%1 by %2" -msgstr "%1 av %2" - -#. ($self->Field , $q1->Name , $q2->Name) -#. ($self->Field, $t2->AsString, $t1->AsString) -#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") -#: lib/RT/Transaction_Overlay.pm:788 -#: lib/RT/Transaction_Overlay.pm:797 -#: lib/RT/Transaction_Overlay.pm:800 -msgid "%1 changed from %2 to %3" -msgstr "%1 ändrat frÃ¥n %2 till %3" - -#. ($Description) -#: html/Search/Build.html:213 -msgid "%1 copy" -msgstr "%1 kopiera" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1 kunde inte sättas som %2." - -#. ($self) -#: lib/RT/Ticket_Overlay.pm:2787 -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 kunde inte markeras som löst. RT:s databas kan vara oförenlig." - -#. ($obj_type) -#: lib/RT/Transaction_Overlay.pm:571 -msgid "%1 created" -msgstr "%1 skapad" - -#. ($obj_type) -#: lib/RT/Transaction_Overlay.pm:576 -msgid "%1 deleted" -msgstr "%1 raderad" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "%1 högsta prioriterade ärenden som tillhör mig" - -#. ($0) -#: bin/rt-crontool:229 -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 är ett verktyg som reagerar pÃ¥ ärenden frÃ¥n ett externt planeringsverktyg, sÃ¥ som cron." - -#. ($principal->Object->Name, $args{'Type'}) -#: lib/RT/Queue_Overlay.pm:863 -msgid "%1 is no longer a %2 for this queue." -msgstr "%1 är inte längre en %2 för denna kö." - -#. ($minutes) -#: html/Ticket/Elements/ShowTime:47 -#: html/Ticket/Elements/ShowTime:49 -msgid "%1 min" -msgstr "%1 min." - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "%1 nyaste ärenden som inte tillhör nÃ¥gon" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "%1 objekt" - -#. (loc($ObjectType =~ /^RT::(.*)$/)) -#: html/User/Elements/DelegateRights:97 -msgid "%1 rights" -msgstr "%1 rättigheter" - -#. (ref $self) -#: lib/RT/Action/ResolveMembers.pm:63 -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 kommer att lösa alla medlemmar av ett löst gruppärende." - -#: lib/RT/CustomField_Overlay.pm:894 -msgid "%1's %2 objects" -msgstr "%1:s %2 objekt" - -#: lib/RT/CustomField_Overlay.pm:895 -msgid "%1's %2's %3 objects" -msgstr "%1:s %2:s %3 objekt" - -#. ($Object->Name) -#. ($object->Name) -#: html/Search/Elements/SearchPrivacy:52 -#: html/Search/Elements/SelectSearchObject:55 -#: html/Search/Elements/SelectSearchesForObjects:57 -msgid "%1's saved searches" -msgstr "%1:s sparade sökningar" - -#. ($self) -#: lib/RT/Transaction_Overlay.pm:481 -msgid "%1: no attachment specified" -msgstr "%1: inga bifogade filer angivna" - -#. ($size) -#: html/Ticket/Elements/ShowTransactionAttachments:78 -msgid "%1b" -msgstr "%1b" - -#. (int( $size / 102.4 ) / 10) -#: html/Ticket/Elements/ShowTransactionAttachments:75 -msgid "%1k" -msgstr "%1k" - -#. (sprintf("%.1f",$minutes / 60)) -#: html/Ticket/Elements/ShowTime:49 -msgid "%quant(%1,hour)" -msgstr "%quant(%1,timme)" - -#. ($args{'Status'}) -#: lib/RT/Ticket_Overlay.pm:1142 -msgid "'%1' is an invalid value for status" -msgstr "'%1' är ogiltigt statusvärde" - -#: html/Admin/Elements/EditCustomFieldValues:50 -#: html/Admin/Elements/EditQueueWatchers:50 -#: html/Admin/Elements/EditScrips:56 -#: html/Admin/Elements/EditTemplates:57 -#: html/Admin/Groups/Members.html:73 -#: html/Elements/EditLinks:54 -#: html/Ticket/Elements/EditPeople:67 -#: html/User/Groups/Members.html:76 -msgid "(Check box to delete)" -msgstr "(Markera box för radering)" - -#: html/Ticket/Elements/PreviewScrips:99 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(Markera boxar för bortväljande av meddelande till registrerade mottagare)" - -#: html/Ticket/Elements/PreviewScrips:123 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "(Markera boxar för tillval av meddelande till registrerade mottagare)" - -#: html/Ticket/Create.html:218 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(Mata in ärende-ID:n eller URL, separerade med mellanrum)" - -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -#: html/Admin/Queues/Modify.html:75 -#: html/Admin/Queues/Modify.html:81 -msgid "(If left blank, will default to %1)" -msgstr "(Lämnas det tomt kommer default att vara %1)" - -#: html/Admin/Elements/EditCustomFields:74 -#: html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Inga extrafält)" - -#: html/Admin/Groups/Members.html:71 -#: html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Inga medlemmar)" - -#: html/Admin/Elements/EditScrips:53 -#: html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Inga scrips)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Inga mallar)" - -#: html/Admin/Elements/PickCustomFields:47 -#: html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(Inga)" - -#: 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 "(Skickar en hemlig kopia av denna uppdatering till en kommaseparerad lista med e-postadresser. Ändrar inte pÃ¥ vem som fÃ¥r framtida uppdateringar.)" - -#: 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 "(Skickar en kopia av denna uppdatering till en kommaseparerad lista med administrativa e-postadresser. Dessa kommer att fÃ¥ framtida uppdateringar.)" - -#: 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 "(Skickar en kopia av denna uppdatering till en kommaseparerad lista med e-postadresser. Ändrar inte pÃ¥ vem som fÃ¥r framtida uppdateringar.)" - -#: 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 "(Skickar en kopia av denna uppdatering till en kommaseparerad lista med e-postadresser. Dessa kommer att fÃ¥ framtida uppdateringar.)" - -#: html/Admin/Elements/EditScrip:96 -msgid "(Use these fields when you choose 'User Defined' for a condition or action)" -msgstr "(Använd dessa fält när du väljer 'Användardefinierat' för villkor eller handling)" - -#: html/Ticket/Elements/EditWatchers:60 -#: html/Ticket/Elements/ShowUserEntry:53 -msgid "(Will not be sent email)" -msgstr "(Kommer inte att skickas som e-post)" - -#: html/Admin/Groups/index.html:57 -#: html/User/Groups/index.html:54 -msgid "(empty)" -msgstr "(tom)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(inga namn registrerade)" - -#: html/Admin/Elements/SelectRights:72 -#: html/Elements/EditCustomFieldSelect:69 -#: html/Elements/SelectCustomFieldValue:51 -#: html/Elements/ShowCustomFields:54 -#: html/Search/Chart:56 -#: html/Search/Elements/Chart:76 -#: lib/RT/Transaction_Overlay.pm:591 -msgid "(no value)" -msgstr "(inget värde)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(inga värden)" - -#: html/Elements/EditLinks:132 -#: html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(endast ett ärende)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(inväntar godkännande)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "(inväntar annan Samling)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(obligatorisk)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(ej namngiven)" - -#: html/Ticket/Elements/Reminders:133 -msgid "(yyyy/mm/dd)" -msgstr "(yyyy/mm/dd)" - -#: html/Elements/EditCustomFieldSelect:57 -msgid "-" -msgstr "-" - -#: bin/rt-crontool:95 -msgid "--transaction argument could be only 'first' or 'last'" -msgstr "--transaktionsparameter kan bara vara 'först' eller 'sist'" - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "<% $Ärende->Status%>" - -#: html/Elements/SelectTicketTypes:48 -msgid "<% $_ %>" -msgstr "<% $_ %>" - -#: html/Search/Elements/SelectLinks:48 -msgid "<%$_%>" -msgstr "<%$_%>" - -#: html/Search/Elements/DisplayOptions:73 -msgid "<%$field%>" -msgstr "<%$fält%>" - -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -#: html/Elements/CreateTicket:47 -msgid " %1" -msgstr " %1" - -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -#: docs/design_docs/string-extraction-guide.txt:54 -#: lib/RT/StyleGuide.pod:787 -msgid " %1" -msgstr " %1" - -#: etc/initialdata:218 -msgid "A blank template" -msgstr "En tom mall" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "Det har inte satts nÃ¥got lösenord, sÃ¥ användare kan inte logga in." - -#: lib/RT/ACE_Overlay.pm:174 -#: lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE ej funnen" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACE kan endast skapas och raderas." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "OCH" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Om mig" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "TillgÃ¥ngskontroll" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Handling" - -#. ($args{'ScripAction'}) -#: lib/RT/Scrip_Overlay.pm:172 -msgid "Action %1 not found" -msgstr "Handling %1 ej funnen" - -#: bin/rt-crontool:171 -msgid "Action committed.\\n" -msgstr "Handling genomförd.\\n" - -#: lib/RT/Scrip_Overlay.pm:168 -msgid "Action is mandatory argument" -msgstr "Handling är obligatoriskt argument" - -#: bin/rt-crontool:167 -msgid "Action prepared..." -msgstr "Handling förberedd..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Lägg till" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Lägg till Admin.kopia" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Lägg till kopia" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Lägg till kolumner" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Lägg till kriterium" - -#: html/Ticket/Create.html:147 -#: html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Lägg till fler filer" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Lägg till rekvirent" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Lägg till värde" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Lägg till ett scrip som kommer att fungera för alla köer" - -#: html/Search/Build.html:109 -#: html/Search/Build.html:94 -msgid "Add and Search" -msgstr "Lägg till och sök" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "Lägg till kommentarer eller svar pÃ¥ utvalda ärenden" - -#: html/Admin/Groups/Members.html:63 -#: html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Lägg till medlemmar" - -#: html/Admin/Queues/People.html:87 -#: html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Lägg till nya observatörer" - -#: html/Search/Build.html:85 -msgid "Add these terms to your search" -msgstr "Lägg till dessa termer till din sökning" - -#: html/Search/Bulk.html:158 -msgid "Add values" -msgstr "Lägg till värden" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "Add, delete and modify custom field values for objects" -msgstr "Lägg till, radera och modifiera extrafältvärden för objekt" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:763 -msgid "Added principal as a %1 for this queue" -msgstr "Tillagd principal som en %1 för denna kö" - -#. ($self->loc($args{'Type'})) -#: lib/RT/Ticket_Overlay.pm:1455 -msgid "Added principal as a %1 for this ticket" -msgstr "Tillagd principal som en %1 för detta ärende" - -#: html/Admin/Users/Modify.html:146 -#: html/User/Prefs.html:133 -msgid "Address1" -msgstr "Adress1" - -#: html/Admin/Users/Modify.html:151 -#: html/User/Prefs.html:137 -msgid "Address2" -msgstr "Adress2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "Admin.kopia" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "Admin.kommentar" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "Admin.korrespondens" - -#: html/Admin/Queues/index.html:46 -#: html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Admin.köer" - -#: html/Admin/Global/index.html:47 -#: html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Admin/Global konfiguration" - -#: etc/initialdata:56 -#: html/Ticket/Elements/ShowPeople:60 -#: lib/RT/ACE_Overlay.pm:113 -msgid "AdminCc" -msgstr "Admin.kopia" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "AdminExtrafält" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "AdminGrupp" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -msgstr "AdminGruppMedlemskap" - -#: lib/RT/System.pm:80 -msgid "AdminOwnPersonalGroups" -msgstr "AdminEgnaPersonligaGrupper" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "AdminQueue" -msgstr "AdminKö" - -#: lib/RT/System.pm:81 -msgid "AdminUsers" -msgstr "AdminAnvändare" - -#: html/Admin/Queues/People.html:69 -#: html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Administrativ kopia" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Avancerad" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "Efter" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "Aggregator" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "Alla godkännanden har accepterats" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Alla köer" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "Och/eller" - -#: html/Admin/CustomFields/Modify.html:73 -#: html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "Gäller för" - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Utför" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Utför dina ändringar" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Godkännande" - -#. ($ticket->id, $msg) -#. ($Ticket->Id, $Ticket->Subject) -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#: html/Approvals/Display.html:65 -#: html/Approvals/Elements/ShowDependency:63 -#: html/Approvals/index.html:86 -msgid "Approval #%1: %2" -msgstr "Godkännande #%1: %2" - -#. ($ticket->Id) -#: html/Approvals/index.html:75 -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Godkännande #%1: Anteckningar ej registrerade pÃ¥ grund av systemfel" - -#. ($ticket->Id) -#: html/Approvals/index.html:73 -msgid "Approval #%1: Notes recorded" -msgstr "Godkännande #%1: Anteckningar har registrerats" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Godkännande har accepterats" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Godkännande avvisat" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Godkänn" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Godkännares anteckningar: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Apr." - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "Stigande" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Stigande" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Assign and remove custom fields" -msgstr "Lägg till och radera extrafält" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "AssignCustomFields" -msgstr "LäggtillExtraFält" - -#: html/Search/Bulk.html:142 -#: html/SelfService/Update.html:87 -#: html/Ticket/ModifyAll.html:115 -#: html/Ticket/Update.html:116 -msgid "Attach" -msgstr "Bifoga" - -#: html/SelfService/Create.html:92 -#: html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Bifoga fil" - -#: html/SelfService/Update.html:75 -#: html/Ticket/Create.html:131 -#: html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Bifogad fil" - -#. ($Attachment) -#: html/Ticket/ShowEmailRecord.html:52 -#: html/Ticket/ShowEmailRecord.html:56 -#: html/Ticket/ShowEmailRecord.html:59 -msgid "Attachment '%1' could not be loaded" -msgstr "Bifogad fil '%1' kunde inte läsas in" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Bifogad fil skapad" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Bifogat filnamn" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Bifogade filer" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "Attribut raderat" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Aug." - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "Autosvar" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Autosvar till rekvirenter" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "Tillgänglig" - -#: html/Admin/Elements/CustomFieldTabs:65 -#: html/Admin/Elements/GroupTabs:60 -#: html/Admin/Elements/QueueTabs:60 -#: html/Admin/Elements/UserTabs:58 -#: html/Ticket/Elements/Tabs:113 -#: html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Grunddata" - -#: html/Ticket/Update.html:88 -msgid "Bcc" -msgstr "Hemlig kopia" - -#: 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 "Se till att spara dina ändringar" - -#: html/Elements/SelectDateRelation:55 -#: lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "Före" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "Best Practical Solutions, LLC företagslogo" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Tom" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "Fetstil" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "Länk som kan sparas som bokmärke" - -#: html/Ticket/Elements/ShowHistory:64 -#: html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Korta headers" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "Massärende-uppdatering" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Kan inte modifiera systemanvändare" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Kan denna principal se denna kö" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Kan inte lägga till ett extrafältvärde utan ett namn" - -#. ($Class) -#: html/Admin/CustomFields/Objects.html:86 -msgid "Can't find a collection class for '%1'" -msgstr "Kan inte hitta en samlingskategori för '%1'" - -#: html/Search/Build.html:286 -msgid "Can't find a saved search to work with" -msgstr "Kan inte hitta en sparad sökning att arbeta med" - -#: lib/RT/Link_Overlay.pm:159 -msgid "Can't link a ticket to itself" -msgstr "Kan inte länka ett ärende till sig själv" - -#. (loc($self->{SearchType})) -#: html/Widgets/SavedSearch:63 -msgid "Can't save %1" -msgstr "kan inte spara %1" - -#: html/Search/Build.html:290 -msgid "Can't save this search" -msgstr "Kan inte spara den här sökningen" - -#: lib/RT/Record.pm:1282 -#: lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "Kan inte specificera bÃ¥de bas och mÃ¥l" - -#. ($msg) -#: html/autohandler:204 -msgid "Cannot create user: %1" -msgstr "Kan inte skapa användare: %1" - -#: html/Admin/Elements/AddCustomFieldValue:62 -#: html/Admin/Elements/EditCustomFieldValues:58 -msgid "Category" -msgstr "Kategori" - -#: etc/initialdata:50 -#: html/Admin/Queues/People.html:65 -#: html/SelfService/Create.html:71 -#: html/Ticket/Create.html:88 -#: html/Ticket/Elements/EditPeople:72 -#: html/Ticket/Elements/ShowPeople:56 -#: html/Ticket/Update.html:83 -#: lib/RT/ACE_Overlay.pm:112 -msgid "Cc" -msgstr "Kopia" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -msgstr "Ändra lösenord" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Markera alla" - -#: html/SelfService/Update.html:78 -#: html/Ticket/Create.html:134 -#: html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "Markera box för radering" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Markera box för indragande av rättigheter" - -#: html/Elements/EditLinks:148 -#: html/Elements/EditLinks:85 -#: html/Elements/ShowLinks:78 -#: html/Ticket/Create.html:223 -#: html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Barn" - -#: html/NoAuth/js/util.js:201 -msgid "Choose a date" -msgstr "Välj ett datum" - -#: html/Admin/Users/Modify.html:156 -#: html/User/Prefs.html:141 -msgid "City" -msgstr "Ort" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Välj bort alla" - -#: html/Helpers/CalPopup.html:51 -msgid "Close window" -msgstr "Stäng fönster" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Stängt" - -#: html/SelfService/Closed.html:46 -#: html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Stängda ärenden" - -#: lib/RT/CustomField_Overlay.pm:89 -msgid "Combobox: Select or enter multiple values" -msgstr "Combobox: Välj eller mata in flera värden" - -#: lib/RT/CustomField_Overlay.pm:90 -msgid "Combobox: Select or enter one value" -msgstr "Combobox: Välj eller mata in ett värde" - -#: lib/RT/CustomField_Overlay.pm:91 -msgid "Combobox: Select or enter up to %1 values" -msgstr "Combobox: Välj eller mata in upp till %1 värden" - -#: html/Ticket/Elements/ShowTransaction:190 -#: html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Kommentar" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Kommentar adress" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Kommentar pÃ¥ ärenden" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "KommentarPåÄrende" - -#: html/Ticket/ModifyAll.html:91 -#: html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Kommentarer (Ej skickade till rekvirent)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Kommentarer (ej skickade till rekvirent)" - -#: html/Admin/Users/Modify.html:225 -#: html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Kommentarer om denna användare" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Kommentarer tillagda" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "Commit tömt" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Villkor" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "Villkor är obligatorisk parameter" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "Villkor matchar..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Villkor hittades ej" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Konfiguration" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Bekräfta" - -#: html/Admin/Elements/ModifyTemplate:65 -#: html/Elements/SelectAttachmentField:48 -#: html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "InnehÃ¥ll" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "InnehÃ¥llstyp" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Kopia" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Korrespondens" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Korrespondens tillagd" - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "GÃ¥r ej att lägga till nytt extrafältvärde. " - -#. (, $value_msg) -#: lib/RT/Record.pm:1660 -msgid "Could not add new custom field value. %1 " -msgstr "GÃ¥r ej att lägga till nytt extrafältvärde. %1 " - -#: lib/RT/Ticket_Overlay.pm:3048 -#: lib/RT/Ticket_Overlay.pm:3056 -#: lib/RT/Ticket_Overlay.pm:3073 -msgid "Could not change owner. " -msgstr "GÃ¥r ej att byta ägare. " - -#. ($msg) -#: html/Admin/CustomFields/Modify.html:161 -msgid "Could not create CustomField" -msgstr "GÃ¥r ej att skapa ExtraFält" - -#. ($msg) -#: html/Admin/Elements/EditCustomField:113 -msgid "Could not create CustomField: %1" -msgstr "GÃ¥r ej att skapa ExtraFält: %1" - -#: html/User/Groups/Modify.html:98 -#: lib/RT/Group_Overlay.pm:494 -#: lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "GÃ¥r ej att skapa grupp" - -#. ($msg) -#: html/Admin/Global/Template.html:96 -#: html/Admin/Queues/Template.html:93 -msgid "Could not create template: %1" -msgstr "GÃ¥r ej att skapa mall: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 -#: lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "GÃ¥r ej att skapa ärende. Kö ej satt" - -#: lib/RT/User_Overlay.pm:255 -#: lib/RT/User_Overlay.pm:269 -#: lib/RT/User_Overlay.pm:278 -#: lib/RT/User_Overlay.pm:287 -#: lib/RT/User_Overlay.pm:296 -#: lib/RT/User_Overlay.pm:310 -#: lib/RT/User_Overlay.pm:320 -#: lib/RT/User_Overlay.pm:496 -msgid "Could not create user" -msgstr "GÃ¥r ej att skapa användare" - -#: lib/RT/Queue_Overlay.pm:741 -#: lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "GÃ¥r ej att hitta eller skapa denna användare" - -#: lib/RT/Queue_Overlay.pm:802 -#: lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "GÃ¥r ej att hitta denna principal" - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "GÃ¥r ej att läsa in ExtraFält %1" - -#: html/Admin/Groups/Members.html:112 -#: html/User/Groups/Members.html:111 -#: html/User/Groups/Modify.html:103 -msgid "Could not load group" -msgstr "GÃ¥r ej att läsa in grupp" - -#. ($privacy) -#: lib/RT/SavedSearch.pm:119 -msgid "Could not load object for %1" -msgstr "GÃ¥r ej att läsa in objekt för %1" - -#: lib/RT/SavedSearch.pm:197 -msgid "Could not load search attribute" -msgstr "GÃ¥r ej att läsa in sökattribut" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:761 -msgid "Could not make that principal a %1 for this queue" -msgstr "GÃ¥r ej att göra denna principal %1 för denna kö" - -#. ($self->loc($args{'Type'})) -#: lib/RT/Ticket_Overlay.pm:1444 -msgid "Could not make that principal a %1 for this ticket" -msgstr "GÃ¥r ej att göra denna principal %1 för detta ärende" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:860 -msgid "Could not remove that principal as a %1 for this queue" -msgstr "GÃ¥r ej att flytta denna principal som %1 för denna kö" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "GÃ¥r ej att sätta in användarinfo" - -#: lib/RT/Transaction_Overlay.pm:159 -msgid "Couldn't add attachment" -msgstr "GÃ¥r ej att sätta in bifogad fil" - -#: lib/RT/Group_Overlay.pm:1003 -msgid "Couldn't add member to group" -msgstr "GÃ¥r ej att lägga till medlem till grupp" - -#. ($Msg) -#: lib/RT/Record.pm:1719 -#: lib/RT/Record.pm:1771 -msgid "Couldn't create a transaction: %1" -msgstr "GÃ¥r ej att skapa transaktion: %1" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "GÃ¥r ej att hitta rad" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "GÃ¥r ej att hitta denna principal" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "GÃ¥r ej att hitta detta värde" - -#. ($self->Id) -#: lib/RT/CurrentUser.pm:145 -msgid "Couldn't load %1 from the users database.\\n" -msgstr "GÃ¥r ej att läsa in %1 frÃ¥n användarens databas.\\n" - -#. ($id) -#: html/Admin/CustomFields/UserRights.html:149 -msgid "Couldn't load Class %1" -msgstr "GÃ¥r ej att läsa in klass %1" - -#. ($id) -#: html/Admin/CustomFields/GroupRights.html:107 -msgid "Couldn't load CustomField %1" -msgstr "GÃ¥r ej att läsa in ExtraFält %1" - -#. ($self->Id) -#: lib/RT/Ticket_Overlay.pm:2016 -msgid "Couldn't load copy of ticket #%1." -msgstr "GÃ¥r ej att läsa in kopia av ärende #%1." - -#. ($id) -#: html/Admin/Groups/GroupRights.html:109 -#: html/Admin/Groups/UserRights.html:96 -msgid "Couldn't load group %1" -msgstr "GÃ¥r ej att läsa in grupp %1" - -#: lib/RT/Link_Overlay.pm:202 -#: lib/RT/Link_Overlay.pm:211 -#: lib/RT/Link_Overlay.pm:238 -msgid "Couldn't load link" -msgstr "GÃ¥r ej att läsa in länk" - -#. ($id) -#: html/Admin/Elements/ObjectCustomFields:83 -#: html/Admin/Queues/CustomFields.html:59 -#: html/Admin/Users/CustomFields.html:59 -msgid "Couldn't load object %1" -msgstr "GÃ¥r ej att läsa in objekt %1" - -#. ($id) -#: html/Admin/Queues/People.html:142 -msgid "Couldn't load queue" -msgstr "GÃ¥r ej att läsa in kö" - -#. ($id) -#: html/Admin/Queues/GroupRights.html:122 -#: html/Admin/Queues/UserRights.html:93 -msgid "Couldn't load queue %1" -msgstr "GÃ¥r ej att läsa in kö %1" - -#. ($id) -#: html/Admin/Elements/EditScrip:126 -#: html/Admin/Elements/EditScrip:167 -msgid "Couldn't load scrip #%1" -msgstr "GÃ¥r ej att läsa in scrip #%1" - -#. ($id) -#: html/SelfService/Display.html:158 -#: lib/RT/Action/CreateTickets.pm:680 -msgid "Couldn't load ticket '%1'" -msgstr "GÃ¥r ej att läsa in ärende '%1'" - -#. ($args{'URI'}) -#: lib/RT/Ticket_Overlay.pm:2643 -msgid "Couldn't resolve '%1' into a URI." -msgstr "Kunde inte omvandla '%1' till en URI." - -#: html/Admin/Users/Modify.html:173 -#: html/User/Prefs.html:153 -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 "Skapa" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Skapa Ärenden" - -#: html/Admin/CustomFields/Modify.html:150 -#: html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Skapa ett ExtraFält" - -#. ($QueueObj->Name()) -#: html/Admin/Queues/CustomField.html:69 -msgid "Create a CustomField for queue %1" -msgstr "Skapa ett ExtraFält för kö %1" - -#: html/Admin/Groups/Modify.html:125 -#: html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Skapa en ny grupp" - -#: html/User/Groups/Modify.html:113 -#: html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Skapa en ny personlig grupp" - -#: html/Ticket/Create.html:47 -#: html/Ticket/Create.html:51 -#: html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "Skapa ett nytt ärende" - -#: html/Admin/Users/Modify.html:252 -#: html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Skapa en ny användare" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Skapa en kö" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Scrip.html:89 -msgid "Create a scrip for queue %1" -msgstr "Skapa en scrip för kö %1" - -#: html/Admin/Global/Template.html:90 -#: html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Skapa en mall" - -#: html/SelfService/Create.html:46 -#: html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Skapa ett ärende" - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Skapa nya ärenden baserade pÃ¥ denna scrips mall" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Skapa ärende" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Skapa ärenden i denna kö" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Skapa, radera och modifiera extrafält" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Skapa, radera och modifiera köer" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Skapa, radera och modifiera medlemmar av personliga grupper" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Skapa, radera och modifiera användare" - -#: lib/RT/System.pm:87 -msgid "CreateSavedSearch" -msgstr "SkapaSparadSök" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "CreateTicket" -msgstr "SkapaÄrende" - -#: html/Elements/SelectDateType:47 -#: html/Ticket/Elements/ShowDates:48 -#: lib/RT/Ticket_Overlay.pm:1169 -msgid "Created" -msgstr "Skapat" - -#. ($CustomFieldObj->Name()) -#: html/Admin/CustomFields/Modify.html:163 -#: html/Admin/Elements/EditCustomField:117 -msgid "Created CustomField %1" -msgstr "Skapat ExtraFält %1" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "Skapad i en datumintervall" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "Skapade ärenden under period, grupperade efter status" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Skapare" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Nuvarande relationer" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Nuvarande scrips" - -#: html/Admin/Groups/Members.html:60 -#: html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Nuvarande medlemmar" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Nuvarande rättigheter" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "Nuvarande sökning" - -#: html/Admin/Queues/People.html:62 -#: html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Nuvarande observatörer" - -#: html/Admin/Elements/SystemTabs:61 -#: html/Admin/Elements/Tabs:62 -#: html/Admin/Global/index.html:71 -#: html/Admin/Users/Modify.html:205 -#: html/Admin/index.html:77 -#: html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "Extrafält" - -#. ($lookup) -#: html/Admin/CustomFields/index.html:60 -msgid "Custom Fields for %1" -msgstr "Extrafält för %1" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Specialanpassad handling utrensningskod" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Specialanpassad handling förberedelsekod" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Specialanpassat villkor" - -#. ($CF->Name) -#: lib/RT/Tickets_Overlay.pm:2424 -msgid "Custom field %1 has a value." -msgstr "Extrafält %1 har ett värde." - -#. ($CF->Name) -#: lib/RT/Tickets_Overlay.pm:2420 -msgid "Custom field %1 has no value." -msgstr "Extrafält %1 har inget värde." - -#. ($args{'Field'}) -#: lib/RT/Record.pm:1592 -#: lib/RT/Record.pm:1754 -msgid "Custom field %1 not found" -msgstr "Extrafält %1 ej funnet" - -#. ($cf) -#. ($obj->Name) -#: lib/RT/Report/Tickets.pm:118 -#: lib/RT/Report/Tickets.pm:121 -msgid "Custom field '%1'" -msgstr "Extrafält '%1'" - -#. ($args{'Content'}, $self->Name) -#: lib/RT/CustomField_Overlay.pm:1157 -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Extrafältvärde %1 gÃ¥r ej att hitta för extrafält %2" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "Extrafältvärde gÃ¥r ej att radera" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "Extrafält gÃ¥r ej att hitta" - -#: lib/RT/CustomField_Overlay.pm:1171 -#: lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Extrafältvärde raderat" - -#: html/Elements/SelectGroups:51 -#: html/Elements/SelectUsers:51 -#: lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "ExtraFält" - -#: html/Prefs/MyRT.html:78 -#: html/Prefs/Quicksearch.html:70 -#: html/Prefs/Search.html:75 -msgid "Customize" -msgstr "Anpassa" - -#: html/SelfService/Display.html:61 -#: html/Ticket/Create.html:203 -#: html/Ticket/Elements/ShowSummary:83 -#: html/Ticket/Elements/Tabs:116 -#: html/Ticket/ModifyAll.html:65 -msgid "Dates" -msgstr "Datum" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Dec." - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Default Autosvarmall" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Default Kö" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Default rekvirent" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Default admin. kommentarmall" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Default admin. korrespondensmall" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Default korrespondensmall" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Default transaktionsmall" - -#: html/User/Delegation.html:46 -#: html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "ÖverlÃ¥t rättigheter" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "ÖverlÃ¥t specifika rättigheter som har tilldelats dig." - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "ÖverlÃ¥tRättigheter" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "ÖverlÃ¥telse" - -#: html/Admin/Elements/EditScrips:75 -#: html/Search/Elements/EditFormat:103 -#: html/Search/Elements/EditQuery:57 -#: html/Search/Elements/EditSearches:63 -#: html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "Radera" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "Radera Mall" - -#. ($msg) -#: lib/RT/SavedSearch.pm:220 -msgid "Delete failed: %1" -msgstr "Radering misslyckades: %1" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Radera utvalda scrips" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Radera ärenden" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "Radera värden" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "RaderaÄrende" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "Radera sökning" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "Radering av detta objekt bryter referentiell integritet" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Radering av detta objekt strider mot referentiell integritet" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Avvisa" - -#: html/Elements/EditLinks:140 -#: html/Elements/EditLinks:66 -#: html/Elements/ShowLinks:58 -#: html/Ticket/Create.html:221 -#: html/Ticket/Elements/BulkLinks:56 -#: html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "Avhängighet av till" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:718 -msgid "Dependency by %1 added" -msgstr "Avhängighet till %1 tillagd" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:758 -msgid "Dependency by %1 deleted" -msgstr "Avhängighet till %1 raderad" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:715 -msgid "Dependency on %1 added" -msgstr "Avhängighet av %1 tillagd" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:755 -msgid "Dependency on %1 deleted" -msgstr "Avhängighet av %1 raderad" - -#: html/Elements/EditLinks:136 -#: html/Elements/EditLinks:57 -#: html/Elements/SelectLinkType:48 -#: html/Elements/ShowLinks:48 -#: html/Ticket/Create.html:220 -#: html/Ticket/Elements/BulkLinks:52 -#: html/Ticket/Elements/ShowDependencies:46 -msgid "Depends on" -msgstr "Avhängig av" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr "Fallande" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Fallande" - -#: html/SelfService/Create.html:100 -#: html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Beskriv problemet nedan" - -#: html/Admin/CustomFields/Modify.html:61 -#: html/Admin/Elements/AddCustomFieldValue:57 -#: html/Admin/Elements/EditCustomField:60 -#: html/Admin/Elements/EditCustomFieldValues:56 -#: html/Admin/Elements/EditScrip:55 -#: html/Admin/Elements/ModifyTemplate:57 -#: html/Admin/Groups/Modify.html:71 -#: html/Admin/Queues/Modify.html:69 -#: html/Search/Elements/EditSearches:56 -#: html/User/Groups/Modify.html:70 -msgid "Description" -msgstr "Beskrivning" - -#: html/Search/Elements/EditFormat:71 -#: html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Visa" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Visa TillgÃ¥ngskontrollista" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Visa kolumner" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Visa scrip-mallar för denna kö" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Visa scrips för denna kö" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Visa modus" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "Visa sparade sökningar för denna grupp" - -#: html/Elements/Footer:61 -msgid "Distributed under version 2 of the GNU GPL." -msgstr "Distribuerade under version 2 of the GNU GPL." - -#: lib/RT/System.pm:75 -msgid "Do anything and everything" -msgstr "Gör nÃ¥got och allt" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Återinläs inte denna sida." - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Ladda ner" - -#: html/Admin/Groups/index.html:61 -#: html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Ladda ner som tab-uppdelad fil" - -#: html/Elements/SelectDateType:53 -#: html/Ticket/Create.html:209 -#: html/Ticket/Elements/EditDates:66 -#: html/Ticket/Elements/Reminders:133 -#: html/Ticket/Elements/ShowDates:64 -#: lib/RT/Ticket_Overlay.pm:1173 -msgid "Due" -msgstr "Förfallo" - -#: html/Elements/Quicksearch:48 -#: html/Elements/ShowSearch:49 -#: html/index.html:107 -msgid "Edit" -msgstr "Redigera" - -#: html/Search/Bulk.html:149 -msgid "Edit Custom Fields" -msgstr "Redigera extrafält" - -#. ($Object->Name) -#: html/Admin/Elements/ObjectCustomFields:92 -#: html/Admin/Queues/CustomFields.html:64 -#: html/Admin/Users/CustomFields.html:64 -msgid "Edit Custom Fields for %1" -msgstr "Redigera extrafält för %1" - -#: html/Admin/Global/CustomFields/Groups.html:54 -msgid "Edit Custom Fields for all groups" -msgstr "Redigera extrafält för alla grupper" - -#: html/Admin/Global/CustomFields/Users.html:54 -msgid "Edit Custom Fields for all users" -msgstr "Redigera extrafält för alla användare" - -#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 -#: html/Admin/Global/CustomFields/Queue-Transactions.html:54 -msgid "Edit Custom Fields for tickets in all queues" -msgstr "Redigera extrafält för ärenden i alla köer" - -#: html/Search/Bulk.html:188 -#: html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Redigera länkar" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Redigera söksträng" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "Redigera sökning" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Templates.html:63 -msgid "Edit Templates for queue %1" -msgstr "Redigera mallar för kö %1" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "Redigera sparade sökningar för denna grupp" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 -#: html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Redigera systemmallar" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "RedigeraSparadeSökningar" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Modify.html:140 -msgid "Editing Configuration for queue %1" -msgstr "Redigera konfiguration för kö %1" - -#. ($CustomFieldObj->Name()) -#: html/Admin/CustomFields/Modify.html:167 -#: html/Admin/Elements/EditCustomField:120 -msgid "Editing CustomField %1" -msgstr "Redigera extrafält %1" - -#. ($Group->Name) -#: html/Admin/Groups/Members.html:53 -msgid "Editing membership for group %1" -msgstr "Redigera medlemskap för grupp %1" - -#. ($Group->Name) -#: html/User/Groups/Members.html:150 -msgid "Editing membership for personal group %1" -msgstr "Redigera medlemskap för personlig grupp %1" - -#: lib/RT/Record.pm:1295 -#: lib/RT/Record.pm:1372 -#: lib/RT/Ticket_Overlay.pm:2518 -#: lib/RT/Ticket_Overlay.pm:2608 -msgid "Either base or target must be specified" -msgstr "Antingen bas eller mÃ¥l mÃ¥ste specificeras" - -#: html/Admin/Users/Modify.html:74 -#: html/Ticket/Elements/AddWatchers:77 -#: html/User/Prefs.html:65 -msgid "Email" -msgstr "E-post" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "E-postadress används" - -#: html/Admin/CustomFields/Modify.html:98 -#: html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Aktiverad (Bortval av denna box deaktiverar detta extrafält)" - -#: html/Admin/Groups/Modify.html:84 -#: html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Aktiverad (Bortval av denna box deaktiverar denna grupp)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Aktiverad (Bortval av denna box deaktiverar denna kö)" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Aktiverade köer" - -#. (loc_fuzzy($msg)) -#: html/Admin/Elements/EditCustomField:136 -#: html/Admin/Groups/Modify.html:150 -#: html/Admin/Users/Modify.html:350 -#: html/User/Groups/Modify.html:138 -msgid "Enabled status %1" -msgstr "Aktiverad status %1" - -#. (loc_fuzzy($msg)) -#: html/Admin/CustomFields/Modify.html:185 -#: html/Admin/Queues/Modify.html:162 -msgid "Enabled status: %1" -msgstr "Aktiverad status: %1" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Mata in flera värden" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Mata in objekt eller URI att koppla objekt till. Separera flera inmatningar med mellanrum." - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Mata in ett värde" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Mata in köer eller URI att koppla köer till. Separera flera inmatningar med mellanrum." - -#: html/Elements/EditLinks:119 -#: html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Mata in ärenden eller URI att koppla ärenden till. Separera flera inmatningar med mellanrum." - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "Mata in upp till %1 värde" - -#: html/Elements/Login:76 -#: html/SelfService/Error.html:46 -#: html/SelfService/Error.html:47 -msgid "Error" -msgstr "Fel" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Fel i parametrar till Kö->LäggtillObservatör" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Fel i parametrar till Kö->RaderaObservatör" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Fel i parametrar till Ärende->LäggtillObservatör" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Fel i parametrar till Ärende->RaderaObservatör" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "Eskalera ärenden" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Uppskattning" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Alla" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Exempel:" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Extra info" - -#: lib/RT/SavedSearch.pm:177 -msgid "Failed to create search attribute" -msgstr "Misslyckades med att skapa sökattribut" - -#: lib/RT/User_Overlay.pm:376 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Misslyckades med att hitta 'Privilegierad'-användares pseudogrupp." - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Misslyckades med att hitta 'Icke-privilegierad'-användares pseudogrupp" - -#. ($modname, $@) -#: bin/rt-crontool:206 -msgid "Failed to load module %1. (%2)" -msgstr "Misslyckades med att läsa in modul %1. (%2)" - -#. ($privacy) -#: lib/RT/SavedSearch.pm:152 -msgid "Failed to load object for %1" -msgstr "Misslyckades med att läsa in objekt för %1" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Feb." - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "Filnamn" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Fyll i flera textomrÃ¥den" - -#: lib/RT/CustomField_Overlay.pm:74 -msgid "Fill in multiple wikitext areas" -msgstr "Fyll i flera wikitextomrÃ¥den" - -#: lib/RT/CustomField_Overlay.pm:70 -msgid "Fill in one text area" -msgstr "Fyll i ett textomrÃ¥de" - -#: lib/RT/CustomField_Overlay.pm:75 -msgid "Fill in one wikitext area" -msgstr "Fyll i ett wikitextomrÃ¥de" - -#: html/Admin/CustomFields/Modify.html:107 -#: html/Admin/CustomFields/Modify.html:118 -msgid "Fill in this field with a URL." -msgstr "Fyll i detta fält med en URL." - -#: lib/RT/CustomField_Overlay.pm:71 -msgid "Fill in up to %1 text areas" -msgstr "Fyll i upp till %1 textomrÃ¥den" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "Fyll i upp till %1 wikitextomrÃ¥den" - -#: html/Search/Elements/PickBasics:149 -#: html/Ticket/Create.html:182 -#: html/Ticket/Elements/EditBasics:97 -#: lib/RT/Tickets_Overlay.pm:1841 -msgid "Final Priority" -msgstr "Slutlig Prioritet" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "SlutligPrioritet" - -#: html/Admin/Groups/index.html:72 -#: html/Admin/Queues/People.html:82 -#: html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Hitta grupper vars" - -#: html/Admin/Queues/People.html:78 -#: html/Admin/Users/index.html:70 -#: html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Hitta personer vars" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Hitta ärenden" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Första" - -#: 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 "Genomtvinga ändring" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Format" - -#. ($ticketcount) -#: html/Search/Results.html:145 -msgid "Found %quant(%1,ticket)" -msgstr "Hittade %quant(%1,ärende)" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Hittade Objekt" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Fre." - -#: html/Ticket/Elements/ShowHistory:66 -#: html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Fullständiga headers" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Hämta mall frÃ¥n fil" - -#. ($New->Name) -#: lib/RT/Transaction_Overlay.pm:684 -msgid "Given to %1" -msgstr "Har givits till %1" - -#: html/Admin/Elements/Tabs:65 -#: html/Admin/index.html:82 -msgid "Global" -msgstr "Global" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "Globala extrafält" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "Global extrafältkonfiguration" - -#. ($pane) -#: html/Admin/Global/MyRT.html:48 -msgid "Global portlet %1 saved." -msgstr "Global portlet %1 sparad." - -#. (loc($Template->Name)) -#: html/Admin/Elements/SelectTemplate:59 -msgid "Global template: %1" -msgstr "Global mall: %1" - -#: html/Admin/CustomFields/index.html:80 -#: html/Search/Results.html:90 -#: html/Tools/Offline.html:89 -msgid "Go" -msgstr "Starta" - -#: html/Admin/Groups/index.html:67 -#: html/Admin/Groups/index.html:73 -#: html/Admin/Queues/People.html:80 -#: html/Admin/Queues/People.html:84 -#: html/Admin/Queues/index.html:66 -#: html/Admin/Users/index.html:73 -#: html/Elements/RefreshHomepage:48 -#: html/Search/Results.html:74 -#: html/Ticket/Elements/EditPeople:53 -#: html/Ticket/Elements/EditPeople:57 -msgid "Go!" -msgstr "Starta!" - -#: html/Elements/GotoTicket:46 -#: html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "GÃ¥ till ärende" - -#: html/Ticket/Elements/AddWatchers:67 -#: html/Ticket/Elements/ShowGroupMembers:55 -#: html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Grupp" - -#: html/Admin/Elements/CustomFieldTabs:68 -#: html/Admin/Elements/GroupTabs:66 -#: html/Admin/Elements/QueueTabs:82 -#: html/Admin/Elements/SystemTabs:65 -#: html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Grupprättigheter" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Grupp har redan medlem" - -#. ($create_msg) -#: html/Admin/Groups/Modify.html:109 -msgid "Group could not be created: %1" -msgstr "Grupp kan inte skapas: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Grupp har skapats" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Grupp har ingen sÃ¥dan medlem" - -#: lib/RT/Group_Overlay.pm:963 -#: lib/RT/Queue_Overlay.pm:748 -#: lib/RT/Queue_Overlay.pm:808 -#: lib/RT/Ticket_Overlay.pm:1430 -#: lib/RT/Ticket_Overlay.pm:1510 -msgid "Group not found" -msgstr "Grupp ej funnen" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 -#: html/Admin/Elements/SelectNewGroupMembers:57 -#: html/Admin/Elements/Tabs:56 -#: html/Admin/Global/CustomFields/index.html:69 -#: html/Admin/Groups/Members.html:86 -#: html/Admin/Queues/People.html:104 -#: html/Admin/Users/Memberships.html:53 -#: html/Admin/index.html:67 -#: html/User/Groups/Members.html:88 -#: lib/RT/CustomField_Overlay.pm:1210 -msgid "Groups" -msgstr "Grupper" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Grupper kan inte vara medlemmar av sina medlemmar" - -#: html/Admin/Groups/index.html:86 -msgid "Groups matching search criteria" -msgstr "Grupper som matchar sökkriterium" - -#: html/Ticket/Elements/ShowRequestor:77 -msgid "Groups this user belongs to" -msgstr "Grupper som denna användare tillhör" - -#: lib/RT/Interface/CLI.pm:94 -msgid "Hello!" -msgstr "Hej!" - -#. ($name) -#: docs/design_docs/string-extraction-guide.txt:40 -#: lib/RT/StyleGuide.pod:773 -msgid "Hello, %1" -msgstr "Hej, %1" - -#: html/Admin/Elements/GroupTabs:70 -#: html/Admin/Elements/UserTabs:64 -#: html/Ticket/Elements/ShowHistory:53 -#: html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Historik" - -#. ($GroupObj->Name) -#: html/Admin/Groups/History.html:62 -msgid "History of the group %1" -msgstr "Historik för gruppen %1" - -#. ($UserObj->Name) -#: html/Admin/Users/History.html:62 -msgid "History of the user %1" -msgstr "Historik för användaren %1" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Hemadress" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "Timmar" - -#. (6) -#: lib/RT/Base.pm:119 -msgid "I have %quant(%1,concrete mixer)." -msgstr "Jag har %quant(%1,concrete mixer)." - -#: html/Search/Build.html:460 -#: lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "Jag är vilse" - -#: 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 "Om ett godkännande avvisas, avvisa det ursprungliga och radera väntande godkännanden" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "Om ingen rekvirent har specificerats, skapa ärenden med denna rekvirent." - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Om ingen kö har specificerats, skapa ärenden i denna kö." - -#: bin/rt-crontool:267 -msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT." -msgstr "Om detta verktyg var setgid, kunde en fientlig användare använda detta verktyg för att fÃ¥ administrativ tillgÃ¥ng till RT." - -#: html/Admin/Queues/People.html:126 -#: html/Ticket/Modify.html:60 -#: html/Ticket/ModifyAll.html:128 -#: html/Ticket/ModifyPeople.html:60 -msgid "If you've updated anything above, be sure to" -msgstr "Om du har uppdaterat nÃ¥gonting av ovanstÃ¥ende, se till att" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "Ogiltigt värde för %1" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Oföränderligt fält" - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Ta med deaktiverade grupper pÃ¥ lista." - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Ta med deaktiverade köer pÃ¥ lista." - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Ta med deaktiverade användare pÃ¥ lista." - -#: html/Admin/CustomFields/Modify.html:113 -msgid "Include page" -msgstr "Inkludera sida" - -#: html/Search/Build.html:486 -#: lib/RT/Report/Tickets.pm:441 -msgid "Incomplete Query" -msgstr "Ofullständig sökning" - -#: html/Search/Build.html:483 -#: lib/RT/Report/Tickets.pm:438 -msgid "Incomplete query" -msgstr "Ofullständig sökning" - -#: html/Search/Elements/PickBasics:148 -#: lib/RT/Tickets_Overlay.pm:1816 -msgid "Initial Priority" -msgstr "Initiell prioritet" - -#: lib/RT/Ticket_Overlay.pm:1163 -#: lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "InitiellPrioritet" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Inläsningsfel" - -#. ($CF->FriendlyPattern) -#. ($self->FriendlyPattern) -#: html/Elements/ValidateCustomFields:68 -#: lib/RT/CustomField_Overlay.pm:1021 -#: lib/RT/CustomField_Overlay.pm:1162 -msgid "Input must match %1" -msgstr "Inläsning mÃ¥ste matcha %1" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "Internt fel" - -#. ($id->{error_message}) -#: lib/RT/Record.pm:308 -msgid "Internal Error: %1" -msgstr "Internt fel: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr "Ogiltig grupptyp" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Ogiltig rättighet" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Ogiltig data" - -#. ($msg) -#: lib/RT/CustomField_Overlay.pm:207 -#: lib/RT/CustomField_Overlay.pm:678 -msgid "Invalid pattern: %1" -msgstr "Ogiltigt mönster: %1" - -#: lib/RT/Scrip_Overlay.pm:157 -#: lib/RT/Template_Overlay.pm:244 -msgid "Invalid queue" -msgstr "Ogiltig kö" - -#: lib/RT/ACE_Overlay.pm:264 -#: lib/RT/ACE_Overlay.pm:273 -#: lib/RT/ACE_Overlay.pm:279 -#: lib/RT/ACE_Overlay.pm:290 -msgid "Invalid right" -msgstr "Ogiltig rättighet" - -#. ($key) -#: lib/RT/Record.pm:283 -msgid "Invalid value for %1" -msgstr "Ogiltigt värde för %1" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Ogiltigt värde för extrafält" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Ogiltigt värde för status" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Det är oerhört viktigt att icke-privilegierade användare inte fÃ¥r lov att använda detta verktyg." - -#: bin/rt-crontool:269 -msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool." -msgstr "Det rekommenderas att du skapar en icke-privilegierad unix-användare med korrekt gruppmedlemskap och RT för att använda detta verktyg." - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Det krävs Ã¥tskilliga parametrar:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "Kursiv" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Jan." - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "GÃ¥ med i eller lämna denna grupp" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Juli" - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "Jumbo" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Juni" - -#: html/Admin/Users/Modify.html:94 -#: html/User/Prefs.html:76 -msgid "Language" -msgstr "SprÃ¥k" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "Stor" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Senaste" - -#: html/Ticket/Elements/EditDates:59 -#: html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Senaste kontakt" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Senast kontaktad" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Senast uppdaterad" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "SenastUppdateradAv" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Tillbaka" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "LÃ¥t denna användare fÃ¥ tillgÃ¥ng till RT" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "LÃ¥t denna användare fÃ¥ rättigheter" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "Länk" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Länk finns redan" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Länk kan inte skapas" - -#. ($TransString) -#: lib/RT/Record.pm:1326 -msgid "Link created (%1)" -msgstr "Länk har skapats (%1)" - -#. ($TransString) -#: lib/RT/Record.pm:1387 -msgid "Link deleted (%1)" -msgstr "Länk har raderats (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Länk ej funnen" - -#. ($Ticket->Id) -#: html/Ticket/ModifyLinks.html:46 -#: html/Ticket/ModifyLinks.html:50 -msgid "Link ticket #%1" -msgstr "Koppla ärende #%1" - -#: html/Admin/CustomFields/Modify.html:102 -msgid "Link values to" -msgstr "Koppla värden till" - -#: lib/RT/Ticket_Overlay.pm:700 -msgid "Linking. Permission denied" -msgstr "Koppling. TillgÃ¥ng nekas" - -#: html/Ticket/Create.html:216 -#: html/Ticket/Elements/ShowSummary:89 -#: html/Ticket/Elements/Tabs:120 -#: html/Ticket/ModifyAll.html:78 -msgid "Links" -msgstr "Länkar" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "Läs in" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Läs in sparad sökning:" - -#: lib/RT/System.pm:86 -msgid "LoadSavedSearch" -msgstr "LäsinSparadSökning" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Inlästa Perl-moduler" - -#. ($self->Name) -#: lib/RT/SavedSearch.pm:111 -msgid "Loaded search %1" -msgstr "Inläst sökning %1" - -#: html/Admin/Users/Modify.html:138 -#: html/User/Prefs.html:126 -msgid "Location" -msgstr "Plats" - -#. ("".$session{'CurrentUser'}->Name."") -#: html/Elements/Header:91 -msgid "Logged in as %1" -msgstr "Inloggad som %1" - -#: docs/design_docs/string-extraction-guide.txt:71 -#: html/Elements/Login:100 -#: html/Elements/Login:68 -#: html/Elements/Login:84 -#: lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Logga in" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Logga ut" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "Uppslagstyp matchar ej" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Sätt ägare" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Sätt status" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Sätt förfallodatum" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Sätt lösningsdatum" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Sätt startdatum" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Sätt datum startar" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Sätt datum uppgivet" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Sätt prioritet" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Sätt kö" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Sätt ämne" - -#: lib/RT/Group_Overlay.pm:169 -msgid "Make this group visible to user" -msgstr "Gör denna grupp synlig för användare" - -#: html/Admin/index.html:78 -msgid "Manage custom fields and custom field values" -msgstr "Administrera extrafält och extrafältvärde" - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Administrera grupper och gruppmedlemskap" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Administrera egenskaper och konfiguration som gäller för alla köer" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Administrera köer och kö-specifika egenskaper" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Administrera användare och lösenord" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Mars" - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "Maj" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:731 -msgid "Member %1 added" -msgstr "Medlem %1 tillagd" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:771 -msgid "Member %1 deleted" -msgstr "Medlem %1 raderad" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Medlem tillagd" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Medlem raderad" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Medlem ej raderad" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Medlem av" - -#: html/Admin/Elements/GroupTabs:63 -#: html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Medlemmar" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:728 -msgid "Membership in %1 added" -msgstr "Medlemskap i %1 tillagt" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:768 -msgid "Membership in %1 deleted" -msgstr "Medlemskap i %1 raderat" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Medlemskap" - -#. ($UserObj->Name) -#: html/Admin/Users/Memberships.html:60 -msgid "Memberships of the user %1" -msgstr "Medlemskap för användaren %1" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Sammanslagning lyckades" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Sammanslagning misslyckades. Kunde inte sätta EffectiveId" - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "Sammanslagning misslyckades. Kunde inte sätta status" - -#: html/Elements/EditLinks:131 -#: html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "SlÃ¥ samman med" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:734 -msgid "Merged into %1" -msgstr "Sammanslagen med %1" - -#: html/Search/Bulk.html:143 -#: html/Ticket/Update.html:118 -msgid "Message" -msgstr "Meddelande" - -#: html/Ticket/Elements/ShowTransactionAttachments:164 -msgid "Message body not shown because it is too large or is not plain text." -msgstr "Meddelande visades inte eftersom det är för omfÃ¥ngsrikt eller bestÃ¥r av annat än vanlig text." - -#: lib/RT/Ticket_Overlay.pm:2451 -msgid "Message could not be recorded" -msgstr "Meddelande sparades inte" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Meddelande sparat" - -#: html/Ticket/Elements/PreviewScrips:122 -msgid "Messages about this ticket will not be sent to..." -msgstr "Meddelande om detta ärende kommer inte att skickas till..." - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -msgstr "Minuter" - -#: html/Search/Build.html:490 -#: lib/RT/Report/Tickets.pm:445 -msgid "Mismatched parentheses" -msgstr "Icke-matchande paranteser" - -#: lib/RT/Record.pm:954 -msgid "Missing a primary key?: %1" -msgstr "Saknas en primärnyckel?: %1" - -#: html/Admin/Users/Modify.html:193 -#: html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Mobil" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Modifiera TillgÃ¥ngskontrollista" - -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -#: html/Admin/Elements/ObjectCustomFields:96 -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "Modifiera extrafält som gäller för %1 för alla %2" - -#. (loc(lc($Types))) -#: html/Admin/Elements/ObjectCustomFields:98 -msgid "Modify Custom Fields which apply to all %1" -msgstr "Modifiera extrafält som gäller för alla %1" - -#: html/Admin/Global/GroupRights.html:106 -#: html/Admin/Groups/GroupRights.html:94 -#: html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Modifiera grupprättigheter" - -#: html/Admin/Groups/Members.html:105 -#: html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Modifiera medlemmar" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Modifiera rättigheter" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Modify Scrip templates for this queue" -msgstr "Modifiera scrip-mallar för denna kö" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Modifiera scrips för denna kö" - -#: html/Admin/Global/UserRights.html:75 -#: html/Admin/Groups/UserRights.html:76 -#: html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Modifiera användarrättigheter" - -#. ($QueueObj->Name()) -#: html/Admin/Queues/CustomField.html:66 -msgid "Modify a CustomField for queue %1" -msgstr "Modifiera ett extrafält för kö %1" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Scrip.html:82 -msgid "Modify a scrip for queue %1" -msgstr "Modifiera ett scrip för kö %1" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Modifiera ett scrip som gäller för alla köer" - -#. ($CF->Name) -#: html/Admin/CustomFields/Objects.html:90 -msgid "Modify associated objects for %1" -msgstr "Modifiera objekt associerade med %1" - -#. ($TicketObj->Id) -#: html/Ticket/ModifyDates.html:46 -#: html/Ticket/ModifyDates.html:50 -msgid "Modify dates for #%1" -msgstr "Modifiera datum för #%1" - -#. ($TicketObj->Id) -#: html/Ticket/ModifyDates.html:57 -msgid "Modify dates for ticket # %1" -msgstr "Modifiera datum för ärende # %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 -#: html/Admin/Global/index.html:72 -msgid "Modify global custom fields" -msgstr "Modifiera globala extrafält" - -#: html/Admin/Elements/GlobalCustomFieldTabs:70 -#: html/Admin/Global/GroupRights.html:46 -#: html/Admin/Global/GroupRights.html:49 -#: html/Admin/Global/index.html:77 -msgid "Modify global group rights" -msgstr "Modifiera globala grupprättigheter" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Modifiera globala grupprättigheter." - -#: html/Admin/Global/UserRights.html:46 -#: html/Admin/Global/UserRights.html:49 -#: html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Modifiera globala användarrättigheter" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Modifiera globala användarrättigheter." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Modifiera gruppmetadata eller radera grupp" - -#. ($CustomFieldObj->Name) -#: html/Admin/CustomFields/GroupRights.html:164 -msgid "Modify group rights for custom field %1" -msgstr "Modifiera grupprättigheter för extrafält %1" - -#. ($GroupObj->Name) -#: html/Admin/Groups/GroupRights.html:46 -#: html/Admin/Groups/GroupRights.html:50 -#: html/Admin/Groups/GroupRights.html:56 -msgid "Modify group rights for group %1" -msgstr "Modifiera grupprättigheter för grupp %1" - -#. ($QueueObj->Name) -#: html/Admin/Queues/GroupRights.html:46 -#: html/Admin/Queues/GroupRights.html:50 -msgid "Modify group rights for queue %1" -msgstr "Modifiera grupprättigheter för kö %1" - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Modifiera medlemskapslista för denna grupp" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Modifiera ens eget RT-konto" - -#. ($QueueObj->Name) -#: html/Admin/Queues/People.html:46 -#: html/Admin/Queues/People.html:50 -msgid "Modify people related to queue %1" -msgstr "Modifiera personer relaterade till kö %1" - -#. ($Ticket->id) -#. ($Ticket->Id) -#: html/Ticket/ModifyPeople.html:46 -#: html/Ticket/ModifyPeople.html:50 -#: html/Ticket/ModifyPeople.html:57 -msgid "Modify people related to ticket #%1" -msgstr "Modifiera personer relaterade till ärende #%1" - -#. ($QueueObj->Name) -#: html/Admin/Queues/Scrips.html:67 -msgid "Modify scrips for queue %1" -msgstr "Modifiera scrips för kö %1" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 -#: html/Admin/Global/Scrips.html:65 -#: html/Admin/Global/index.html:63 -msgid "Modify scrips which apply to all queues" -msgstr "Modifiera scrips som gäller för alla köer" - -#. (loc($TemplateObj->Name())) -#. ($TemplateObj->id) -#: html/Admin/Global/Template.html:102 -#: html/Admin/Global/Template.html:46 -#: html/Admin/Global/Template.html:51 -#: html/Admin/Queues/Template.html:99 -msgid "Modify template %1" -msgstr "Modifiera mall %1" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Modifiera mallar som gäller för alla köer" - -#: html/Admin/Global/index.html:85 -msgid "Modify the default \"RT at a glance\" view" -msgstr "Modifiera default \"RT snabbtitt\" -visningen" - -#. ($Group->Name) -#: html/Admin/Groups/Modify.html:119 -#: html/User/Groups/Modify.html:107 -msgid "Modify the group %1" -msgstr "Modifiera gruppen %1" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Modifiera kö-observatörerna" - -#. ($UserObj->Name) -#: html/Admin/Users/Modify.html:309 -msgid "Modify the user %1" -msgstr "Modifiera användaren %1" - -#. ($Ticket->Id) -#: html/Ticket/ModifyAll.html:58 -msgid "Modify ticket # %1" -msgstr "Modifiera ärende # %1" - -#. ($TicketObj->Id) -#: html/Ticket/Modify.html:46 -#: html/Ticket/Modify.html:49 -#: html/Ticket/Modify.html:55 -msgid "Modify ticket #%1" -msgstr "Modifiera ärende #%1" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Modifiera ärende" - -#. ($CustomFieldObj->Name) -#: html/Admin/CustomFields/UserRights.html:157 -msgid "Modify user rights for custom field %1" -msgstr "Modifiera användarrättigheter för extrafält %1" - -#. ($GroupObj->Name) -#: html/Admin/Groups/UserRights.html:46 -#: html/Admin/Groups/UserRights.html:50 -#: html/Admin/Groups/UserRights.html:56 -msgid "Modify user rights for group %1" -msgstr "Modifiera användarrättigheter för grupp %1" - -#. ($QueueObj->Name) -#: html/Admin/Queues/UserRights.html:46 -#: html/Admin/Queues/UserRights.html:50 -msgid "Modify user rights for queue %1" -msgstr "Modifiera användarrättigheter för kö %1" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "ModifyACL" -msgstr "ModifieraACL" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "ModifyCustomField" -msgstr "ModifieraExtraFält" - -#: lib/RT/Group_Overlay.pm:166 -msgid "ModifyOwnMembership" -msgstr "ModifieraEgetMedlemskap" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "ModifyQueueWatchers" -msgstr "ModifieraKöObservatörer" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "ModifyScrips" -msgstr "ModifieraScrips" - -#: lib/RT/System.pm:82 -msgid "ModifySelf" -msgstr "ModifieraSjälv" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "ModifyTemplate" -msgstr "ModifieraMall" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "ModifyTicket" -msgstr "ModifieraÄrende" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "MÃ¥n." - -#. ($name) -#: html/Ticket/Elements/ShowRequestor:61 -msgid "More about %1" -msgstr "Mer om %1" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Flytta ner" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Flytta upp" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Flera" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "'Namn'-attribut mÃ¥ste specificeras" - -#. ($friendly_status) -#: html/SelfService/Elements/MyRequests:57 -msgid "My %1 tickets" -msgstr "Mina %1 ärenden" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "Min dag" - -#: html/Approvals/index.html:46 -#: html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Mina godkännanden" - -#: html/Search/Elements/SearchPrivacy:50 -#: html/Search/Elements/SelectSearchObject:53 -#: html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Mina sparade sökningar" - -#: html/Admin/CustomFields/Modify.html:58 -#: html/Admin/Elements/AddCustomFieldValue:53 -#: html/Admin/Elements/EditCustomField:55 -#: html/Admin/Elements/EditCustomFieldValues:55 -#: html/Admin/Elements/ModifyTemplate:49 -#: html/Admin/Groups/Modify.html:65 -#: html/Search/Bulk.html:157 -#: html/User/Groups/Modify.html:65 -msgid "Name" -msgstr "Namn" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Namn som används" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Aldrig" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Nya länkar" - -#: html/Admin/Users/Modify.html:119 -#: html/User/Prefs.html:109 -msgid "New Password" -msgstr "Nytt lösenord" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Nytt väntande godkännande" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Ny sökning" - -#: html/Admin/Elements/CustomFieldTabs:93 -#: html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Nytt extrafält" - -#: html/Admin/Elements/GroupTabs:77 -#: html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Ny grupp" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Nytt lösenord" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Nytt lösenordmeddelande skickat" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Ny kö" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "Ny pÃ¥minnelse:" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Nya rättigheter" - -#: html/Admin/Global/Scrip.html:63 -#: html/Admin/Global/Scrips.html:60 -#: html/Admin/Queues/Scrip.html:71 -#: html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Nytt scrip" - -#: html/Admin/Global/Template.html:81 -#: html/Admin/Global/Templates.html:60 -#: html/Admin/Queues/Template.html:79 -#: html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Ny mall" - -#: html/SelfService/Elements/Tabs:84 -#: html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Nytt ärende" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "Nytt ärende finns ej" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Ny användare" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Ny användare anropad" - -#: html/Admin/Queues/People.html:76 -#: html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Nya observatörer" - -#: html/Helpers/CalPopup.html:58 -#: html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Nästa" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Nästa sida" - -#: html/Admin/Users/Modify.html:84 -#: html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Smeknamn" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "Ingen klass definierad" - -#: html/Admin/CustomFields/Modify.html:166 -#: html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "Inget extrafält" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Inget extrafält definierat" - -#: html/Admin/Groups/GroupRights.html:105 -#: html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Ingen grupp definierad" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "Ingen söksträng" - -#: html/Admin/Queues/GroupRights.html:118 -#: html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "Ingen kö definierad" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Ingen RT-användare funnen. Var god kontakta din RT administratör.\\n" - -#: html/Admin/Global/Template.html:100 -#: html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Ingen mall" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "Ingen handling" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "Ingen kolumn specificerad" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Ingen kommentar inmatad om denna användare" - -#. (ref $self) -#: lib/RT/Action/Generic.pm:185 -#: lib/RT/Condition/Generic.pm:197 -#: lib/RT/Search/ActiveTicketsInQueue.pm:77 -#: lib/RT/Search/Generic.pm:134 -#: lib/RT/Search/Googleish.pm:78 -msgid "No description for %1" -msgstr "Ingen beskrivning för %1" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Ingen grupp specificerad" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "Det hittades inga grupper som matchar sökkriterierna." - -#: lib/RT/Ticket_Overlay.pm:2393 -msgid "No message attached" -msgstr "Inget bifogat meddelande" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "Inget lösenord satt" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Ingen tillÃ¥telse att skapa köer" - -#. ($QueueObj->Name) -#: lib/RT/Ticket_Overlay.pm:420 -msgid "No permission to create tickets in the queue '%1'" -msgstr "Ingen tillÃ¥telse att skapa ärenden i kö '%1'" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Ingen tillÃ¥telse att skapa användare" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Ingen tillÃ¥telse att visa det ärendet" - -#: lib/RT/SavedSearch.pm:156 -msgid "No permission to save system-wide searches" -msgstr "Ingen tillÃ¥telse att spara systemomfattande sökningar" - -#: html/SelfService/Update.html:117 -msgid "No permission to view update ticket" -msgstr "Ingen tillÃ¥telse att visa uppdatera ärende" - -#: lib/RT/Queue_Overlay.pm:795 -#: lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Ingen principal specificerad" - -#: html/Admin/Queues/People.html:175 -#: html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Inga principaler valda." - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Det hittades inga köer som matchar sökkriterium." - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Inga rättigheter funna" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Inga rättigheter tilldelade." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "Ingen sökning inmatad" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "Ingen sökning att arbeta med." - -#: html/Elements/RT__Ticket/ColumnMap:137 -#: html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Inget ämne" - -#: lib/RT/Transaction_Overlay.pm:528 -#: lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Ingen transaktionstyp specificerad" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Det hittades inga användare som matchar sökkriterium." - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "Det skickades inget värde till _Set!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Ingen" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Icke-existerande fält?" - -#: html/Search/Chart:71 -#: html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "Ej inställd" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Ej inloggad." - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Ej inställd" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Har ännu inte implementerats." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Anteckningar" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Meddelande kunde inte skickas" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "Meddela Admin.kopia-mottagare" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "Meddela Admin.kopia-mottagare som kommentar" - -#: etc/initialdata:93 -#: etc/upgrade/3.1.17/content:6 -msgid "Notify Ccs" -msgstr "Meddela kopia-mottagare" - -#: etc/initialdata:89 -#: etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "Meddela kopia-mottagare som kommentar" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "Meddela andra mottagare" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Meddela andra mottagare som kommentar" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "Meddela ägare" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "Meddela ägare som kommentar" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "Meddela ägare om dess avvisade ärende" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "Meddela ägare om dess ärende har godkänts av alla godkännare" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "Meddela ägare om dess ärende har godkänts av nÃ¥gon godkännare" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Meddela ägare och Admin.kopia-mottagare om nya ämnen väntar pÃ¥ deras godkännande" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "Meddela rekvirenter" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "Meddela rekvirenter och kopia-mottagare" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "Meddela rekvirenter och kopia-mottagare som kommentar" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Meddela rekvirenter, kopia-mottagare och Admin.kopia-mottagare" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Meddela rekvirenter, kopia-mottagare och Admin.kopia-mottagare som kommentar" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Nov." - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "ELLER" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "Objekt kan ej skapas" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "Objekt kan ej raderas" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Objekt har skapats" - -#: lib/RT/Record.pm:120 -msgid "Object deleted" -msgstr "Objekt har raderats" - -#. ($LookupType) -#. ($ObjectType) -#: html/Admin/CustomFields/Objects.html:72 -#: html/Admin/Elements/ObjectCustomFields:63 -msgid "Object of type %1 cannot take custom fields" -msgstr "Objekt av typen %1 kan inte hantera extrafält" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "ObjekttypmissförhÃ¥llande" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Okt." - -#: html/Tools/Elements/Tabs:55 -msgid "Offline" -msgstr "Offline" - -#: html/Tools/Offline.html:49 -msgid "Offline edits" -msgstr "Offline-redigeringar" - -#: html/Tools/Offline.html:46 -msgid "Offline upload" -msgstr "Offline upload" - -#: html/Elements/SelectDateRelation:56 -msgid "On" -msgstr "Vid" - -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -#: lib/RT/Transaction_Overlay.pm:326 -msgid "On %1, %2 wrote:" -msgstr "Vid %1, skrev %2:" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Vid kommentar" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "Vid korrespondens" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Vid skapande" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Vid ägarbyte" - -#: etc/initialdata:177 -#: etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "Vid prioritetsändring" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Vid köbyte" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Vid lösning" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Vid statusändring" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Vid transaktion" - -#. ("") -#: html/Approvals/Elements/PendingMyApproval:70 -msgid "Only show approvals for requests created after %1" -msgstr "Visa endast godkännanden för förfrÃ¥gningar som skapats efter %1" - -#. ("") -#: html/Approvals/Elements/PendingMyApproval:68 -msgid "Only show approvals for requests created before %1" -msgstr "Visa endast godkännanden för förfrÃ¥gningar som skapats före %1" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "Visa endast extrafält för:" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "Öppna ärenden" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Öppna den" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Öppna ärenden" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Öppna ärenden vid korrespondens" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "Alternativ" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Sortera efter" - -#: html/Admin/Users/Modify.html:141 -#: html/User/Prefs.html:129 -msgid "Organization" -msgstr "Organisation" - -#. ($approving->Id, $approving->Subject) -#: html/Approvals/Elements/Approve:53 -msgid "Originating ticket: #%1" -msgstr "Ursprungligt ärende: #%1" - -#: lib/RT/Transaction_Overlay.pm:622 -msgid "Outgoing email about a comment recorded" -msgstr "UtgÃ¥ende e-postmeddelande om en kommentar har sparats" - -#: lib/RT/Transaction_Overlay.pm:626 -msgid "Outgoing email recorded" -msgstr "UtgÃ¥ende e-postmeddelande har sparats" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Tiden överskriden, prioritet rör sig mot" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Egna ärenden" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "EgetÄrende" - -#: etc/initialdata:38 -#: html/Elements/QuickCreate:56 -#: html/Search/Elements/PickBasics:101 -#: html/Ticket/Create.html:72 -#: html/Ticket/Elements/EditBasics:61 -#: html/Ticket/Elements/EditPeople:64 -#: html/Ticket/Elements/EditPeople:65 -#: html/Ticket/Elements/Reminders:129 -#: html/Ticket/Elements/ShowPeople:48 -#: html/Ticket/Update.html:62 -#: lib/RT/ACE_Overlay.pm:110 -#: lib/RT/Tickets_Overlay.pm:2006 -msgid "Owner" -msgstr "Ägare" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "Ägare kan inte sättas." - -#. ($Old->Name , $New->Name) -#: lib/RT/Transaction_Overlay.pm:672 -msgid "Owner forcibly changed from %1 to %2" -msgstr "Ägare har godtyckligt ändrats frÃ¥n %1 till %2" - -#. ($Page, int($TotalFound/$Rows)+$oddRows) -#: html/Elements/TicketList:78 -msgid "Page %1 of %2" -msgstr "Sida %1 av %2" - -#: html/Admin/Users/Modify.html:198 -#: html/User/Prefs.html:96 -msgid "Pager" -msgstr "Personsökare" - -#: html/Elements/EditLinks:144 -#: html/Elements/EditLinks:76 -#: html/Elements/ShowLinks:68 -#: html/Ticket/Create.html:222 -#: html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "Föräldrar" - -#: html/Elements/Login:95 -#: html/User/Prefs.html:105 -msgid "Password" -msgstr "Lösenord" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "LösenordpÃ¥minnelse" - -#: lib/RT/Transaction_Overlay.pm:781 -#: lib/RT/User_Overlay.pm:1045 -msgid "Password changed" -msgstr "Lösenord ändrat" - -#. ($RT::MinimumPasswordLength) -#: lib/RT/User_Overlay.pm:1037 -#: lib/RT/User_Overlay.pm:214 -msgid "Password needs to be at least %1 characters long" -msgstr "Lösenord mÃ¥ste vara minst %1 tecken lÃ¥ngt" - -#: lib/RT/User_Overlay.pm:1044 -msgid "Password set" -msgstr "Lösenord har satts" - -#. (loc_fuzzy($msg)) -#: html/User/Prefs.html:240 -msgid "Password: %1" -msgstr "Lösenord: %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "Lösenord: TillgÃ¥ng nekas" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "Lösenord stämmer inte överens." - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "Lösenord stämmer inte överens. Ditt lösenord har inte ändrats" - -#: html/Ticket/Elements/ShowSummary:62 -#: html/Ticket/Elements/Tabs:119 -#: html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Personer" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Genomför en användardefinierad handling" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Perl-konfiguration" - -#: lib/RT/ACE_Overlay.pm:251 -#: lib/RT/ACE_Overlay.pm:257 -#: lib/RT/ACE_Overlay.pm:580 -#: lib/RT/ACE_Overlay.pm:590 -#: lib/RT/ACE_Overlay.pm:600 -#: lib/RT/ACE_Overlay.pm:665 -#: lib/RT/Attribute_Overlay.pm:158 -#: lib/RT/Attribute_Overlay.pm:164 -#: lib/RT/Attribute_Overlay.pm:405 -#: lib/RT/Attribute_Overlay.pm:414 -#: lib/RT/Attribute_Overlay.pm:427 -#: lib/RT/CurrentUser.pm:116 -#: lib/RT/CurrentUser.pm:125 -#: lib/RT/CustomField_Overlay.pm:1017 -#: lib/RT/CustomField_Overlay.pm:1138 -#: lib/RT/CustomField_Overlay.pm:1281 -#: lib/RT/CustomField_Overlay.pm:172 -#: lib/RT/CustomField_Overlay.pm:189 -#: lib/RT/CustomField_Overlay.pm:200 -#: lib/RT/CustomField_Overlay.pm:374 -#: lib/RT/CustomField_Overlay.pm:403 -#: lib/RT/CustomField_Overlay.pm:763 -#: lib/RT/CustomField_Overlay.pm:936 -#: lib/RT/CustomField_Overlay.pm:971 -#: lib/RT/Group_Overlay.pm:1117 -#: lib/RT/Group_Overlay.pm:1121 -#: lib/RT/Group_Overlay.pm:1130 -#: lib/RT/Group_Overlay.pm:1240 -#: lib/RT/Group_Overlay.pm:1244 -#: lib/RT/Group_Overlay.pm:1250 -#: lib/RT/Group_Overlay.pm:445 -#: lib/RT/Group_Overlay.pm:542 -#: lib/RT/Group_Overlay.pm:620 -#: lib/RT/Group_Overlay.pm:628 -#: lib/RT/Group_Overlay.pm:726 -#: lib/RT/Group_Overlay.pm:730 -#: lib/RT/Group_Overlay.pm:736 -#: lib/RT/Group_Overlay.pm:922 -#: lib/RT/Group_Overlay.pm:926 -#: lib/RT/Group_Overlay.pm:939 -#: lib/RT/Queue_Overlay.pm:1054 -#: lib/RT/Queue_Overlay.pm:140 -#: lib/RT/Queue_Overlay.pm:158 -#: lib/RT/Queue_Overlay.pm:657 -#: lib/RT/Queue_Overlay.pm:667 -#: lib/RT/Queue_Overlay.pm:681 -#: lib/RT/Queue_Overlay.pm:819 -#: lib/RT/Queue_Overlay.pm:828 -#: lib/RT/Queue_Overlay.pm:841 -#: lib/RT/Scrip_Overlay.pm:149 -#: lib/RT/Scrip_Overlay.pm:160 -#: lib/RT/Scrip_Overlay.pm:224 -#: lib/RT/Scrip_Overlay.pm:538 -#: lib/RT/Template_Overlay.pm:108 -#: lib/RT/Template_Overlay.pm:277 -#: lib/RT/Ticket_Overlay.pm:1357 -#: lib/RT/Ticket_Overlay.pm:1367 -#: lib/RT/Ticket_Overlay.pm:1381 -#: lib/RT/Ticket_Overlay.pm:1522 -#: lib/RT/Ticket_Overlay.pm:1532 -#: lib/RT/Ticket_Overlay.pm:1546 -#: lib/RT/Ticket_Overlay.pm:1663 -#: lib/RT/Ticket_Overlay.pm:1983 -#: lib/RT/Ticket_Overlay.pm:2126 -#: lib/RT/Ticket_Overlay.pm:2296 -#: lib/RT/Ticket_Overlay.pm:2346 -#: lib/RT/Ticket_Overlay.pm:2525 -#: lib/RT/Ticket_Overlay.pm:2538 -#: lib/RT/Ticket_Overlay.pm:2614 -#: lib/RT/Ticket_Overlay.pm:2627 -#: lib/RT/Ticket_Overlay.pm:2748 -#: lib/RT/Ticket_Overlay.pm:2762 -#: lib/RT/Ticket_Overlay.pm:2990 -#: lib/RT/Ticket_Overlay.pm:3000 -#: lib/RT/Ticket_Overlay.pm:3005 -#: lib/RT/Ticket_Overlay.pm:3224 -#: lib/RT/Ticket_Overlay.pm:3228 -#: lib/RT/Ticket_Overlay.pm:3371 -#: lib/RT/Ticket_Overlay.pm:3497 -#: lib/RT/Transaction_Overlay.pm:516 -#: lib/RT/Transaction_Overlay.pm:523 -#: lib/RT/Transaction_Overlay.pm:551 -#: lib/RT/Transaction_Overlay.pm:558 -#: lib/RT/User_Overlay.pm:1176 -#: lib/RT/User_Overlay.pm:1856 -#: lib/RT/User_Overlay.pm:369 -#: lib/RT/User_Overlay.pm:735 -#: lib/RT/User_Overlay.pm:774 -msgid "Permission Denied" -msgstr "TillgÃ¥ng nekas" - -#: lib/RT/Template_Overlay.pm:238 -#: lib/RT/Template_Overlay.pm:247 -msgid "Permission denied" -msgstr "TillgÃ¥ng nekas" - -#: lib/RT/Template_Overlay.pm:372 -msgid "Permissions denied" -msgstr "TillgÃ¥ng nekas" - -#: html/User/Elements/Tabs:56 -msgid "Personal Groups" -msgstr "Personliga grupper" - -#: html/User/Groups/index.html:51 -#: html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Personliga grupper" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Personliga grupper:" - -#: html/Admin/Users/Modify.html:180 -#: html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Telefonnummer" - -#: html/Elements/Header:93 -#: html/Elements/Tabs:91 -#: html/SelfService/Elements/Tabs:95 -#: html/SelfService/Prefs.html:46 -#: html/User/Prefs.html:46 -#: html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Preferenser" - -#. ($pane, $UserObj->Name) -#: html/Admin/Users/MyRT.html:75 -msgid "Preferences %1 for user %2 ." -msgstr "Preferenser %1 för användare %2 ." - -#. ($pane) -#: html/Prefs/MyRT.html:141 -msgid "Preferences saved for %1." -msgstr "Preferenser har sparats för %1." - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "Förbered tömning" - -#: html/Helpers/CalPopup.html:56 -#: html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Föreg." - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "FöregÃ¥ende sida" - -#. ($args{'PrincipalId'}) -#: lib/RT/ACE_Overlay.pm:157 -#: lib/RT/ACE_Overlay.pm:239 -#: lib/RT/ACE_Overlay.pm:569 -msgid "Principal %1 not found." -msgstr "Principal %1 ej funnen." - -#: html/Search/Elements/PickBasics:147 -#: html/Ticket/Create.html:181 -#: html/Ticket/Elements/EditBasics:92 -#: html/Ticket/Elements/ShowBasics:72 -#: lib/RT/Tickets_Overlay.pm:1790 -msgid "Priority" -msgstr "Prioritet" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "Prioritet börjar vid" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Privat:" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Privilegierad" - -#. (loc_fuzzy($msg)) -#: html/Admin/Users/Modify.html:342 -#: html/User/Prefs.html:231 -msgid "Privileged status: %1" -msgstr "Privilegierad status: %1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Privilegierade användare" - -#: etc/initialdata:23 -#: etc/initialdata:29 -#: etc/initialdata:35 -#: etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "Pseudogrupp för internt bruk" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Söksträngsbyggare" - -#: html/Search/Elements/Chart:101 -msgid "Query:" -msgstr "Söksträng:" - -#: html/Elements/QueueSummary:48 -#: html/Elements/QuickCreate:54 -#: html/Search/Elements/PickBasics:71 -#: html/SelfService/Create.html:54 -#: html/Ticket/Create.html:62 -#: html/Ticket/Elements/EditBasics:57 -#: html/Ticket/Elements/ShowBasics:76 -#: html/Tools/Reports/CreatedByDates.html:85 -#: html/Tools/Reports/ResolvedByDates.html:86 -#: html/Tools/Reports/ResolvedByOwner.html:66 -#: html/User/Elements/DelegateRights:101 -#: lib/RT/Tickets_Overlay.pm:1617 -msgid "Queue" -msgstr "Kö" - -#. ($id) -#. ($Queue) -#: html/Admin/Queues/CustomField.html:63 -#: html/Admin/Queues/Scrip.html:61 -#: html/Admin/Queues/Scrips.html:69 -#: html/Admin/Queues/Templates.html:65 -msgid "Queue %1 not found" -msgstr "Kö %1 ej funnen" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Könamn" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "Kö finns redan" - -#: lib/RT/Queue_Overlay.pm:374 -#: lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "Kö kan ej skapas" - -#: html/Ticket/Create.html:244 -#: lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "Kö kan ej inläsas." - -#: docs/design_docs/string-extraction-guide.txt:83 -#: lib/RT/Queue_Overlay.pm:384 -#: lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Kö har skapats" - -#: html/SelfService/Display.html:126 -#: lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Kö ej funnen" - -#: html/Admin/Elements/Tabs:59 -#: html/Admin/index.html:72 -msgid "Queues" -msgstr "Köer" - -#: html/Elements/MyAdminQueues:46 -msgid "Queues I administer" -msgstr "Köer som jag administrerar" - -#: html/Elements/MySupportQueues:46 -msgid "Queues I'm an AdminCc for" -msgstr "Köer som jag är en Admin.kopia-mottagare för" - -#: html/Elements/Quicksearch:47 -#: html/Prefs/Elements/Tabs:58 -#: html/Prefs/Quicksearch.html:70 -msgid "Quick search" -msgstr "Snabbsökning" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Snabbt ärendeskapande" - -#: html/Search/Results.html:81 -msgid "RSS" -msgstr "RSS" - -#. ($RT::VERSION, $RT::rtname) -#: docs/design_docs/string-extraction-guide.txt:70 -#: lib/RT/StyleGuide.pod:796 -msgid "RT %1 for %2" -msgstr "RT %1 för %2" - -#: html/Admin/index.html:46 -#: html/Admin/index.html:47 -msgid "RT Administration" -msgstr "RT-administration" - -#: html/Elements/Error:63 -#: html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "RT-fel" - -#: html/Admin/Tools/Configuration.html:73 -msgid "RT Variables" -msgstr "RT-variabler" - -#: html/Admin/Elements/SystemTabs:71 -#: html/Admin/Elements/UserTabs:67 -#: html/Admin/Global/MyRT.html:1 -#: html/Admin/Global/MyRT.html:12 -#: html/Admin/Global/MyRT.html:4 -#: html/Admin/Global/index.html:84 -#: html/Admin/Users/MyRT.html:21 -#: html/Prefs/MyRT.html:66 -#: html/Prefs/MyRT.html:78 -#: html/User/Elements/Tabs:65 -#: html/index.html:1 -#: html/index.html:75 -msgid "RT at a glance" -msgstr "RT-snabbtitt" - -#. ($UserObj->Name) -#: html/Admin/Users/MyRT.html:30 -msgid "RT at a glance for the user %1" -msgstr "RT-snabbtitt för användaren %1" - -#: html/Admin/CustomFields/Modify.html:117 -msgid "RT can include content from another web service when showing this custom field." -msgstr "RT kan innehÃ¥lla innehÃ¥ll frÃ¥n annan webbtjänst när detta extrafält visas." - -#: html/Admin/CustomFields/Modify.html:106 -msgid "RT can make this custom field's values into hyperlinks to another service." -msgstr "RT kan göra alternativen för detta extrafält till hyperlänkar till annan tjänst." - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "RT har inte utrymme för din session." - -#. ($RT::rtname) -#: html/Elements/Logo:49 -#: html/Elements/PageLayout:172 -msgid "RT for %1" -msgstr "RT för %1" - -#: html/Search/Simple.html:60 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "RT kommer att söka efter allt annat som du matar in i ärendeämnen." - -#: html/Admin/CustomFields/Modify.html:108 -#: html/Admin/CustomFields/Modify.html:119 -msgid "RT will replace __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "RT kommer att ersätta __id__ och __ExtraFält__ med register-ID och extrafältvärde respektive" - -#: html/Admin/Users/Modify.html:79 -#: html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Fullständigt namn" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:725 -msgid "Reference by %1 added" -msgstr "Referens frÃ¥n %1 tillagd" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:765 -msgid "Reference by %1 deleted" -msgstr "Referens frÃ¥n %1 raderad" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:722 -msgid "Reference to %1 added" -msgstr "Referens till %1 tillagd" - -#. ($value) -#: lib/RT/Transaction_Overlay.pm:762 -msgid "Reference to %1 deleted" -msgstr "Referens till %1 raderad" - -#: html/Elements/EditLinks:103 -#: html/Elements/EditLinks:156 -#: html/Elements/ShowLinks:92 -#: html/Ticket/Create.html:225 -#: html/Ticket/Elements/BulkLinks:72 -msgid "Referred to by" -msgstr "Refererad till av" - -#: html/Elements/EditLinks:152 -#: html/Elements/EditLinks:94 -#: html/Elements/SelectLinkType:49 -#: html/Elements/ShowLinks:82 -#: html/Ticket/Create.html:224 -#: html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "Refererar till" - -#. ($value/60) -#: html/Elements/Refresh:57 -msgid "Refresh this page every %1 minutes." -msgstr "Återinläs denna sida var %1 minut." - -#. ($ticket->Subject) -#: lib/RT/Transaction_Overlay.pm:811 -msgid "Reminder '%1' added" -msgstr "PÃ¥minnelse '%1' tillagd" - -#. ($ticket->Subject) -#: lib/RT/Transaction_Overlay.pm:824 -msgid "Reminder '%1' completed" -msgstr "PÃ¥minnelse '%1' genomförd" - -#. ($ticket->Subject) -#: lib/RT/Transaction_Overlay.pm:817 -msgid "Reminder '%1' reopened" -msgstr "PÃ¥minnelse '%1' öppnad igen" - -#. ($Ticket->Id) -#: html/Ticket/Reminders.html:46 -msgid "Reminder ticket #%1" -msgstr "PÃ¥minnelse ärende #%1" - -#: html/Elements/MyReminders:48 -#: html/Ticket/Elements/ShowSummary:75 -#: html/Ticket/Elements/Tabs:122 -#: html/Ticket/Reminders.html:52 -msgid "Reminders" -msgstr "PÃ¥minnelser" - -#. ($Ticket->Id) -#: html/Ticket/Reminders.html:50 -msgid "Reminders for ticket #%1" -msgstr "PÃ¥minnelse för ärende #%1" - -#: html/Search/Bulk.html:94 -msgid "Remove AdminCc" -msgstr "Ta bort Admin.kopia" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Ta bort kopia" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Ta bort rekvirent" - -#: html/Ticket/Elements/ShowTransaction:179 -#: html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Svar" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Svarsadress" - -#: html/Search/Bulk.html:129 -#: html/Ticket/ModifyAll.html:94 -#: html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Svar till rekvirenter" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Svar pÃ¥ ärenden" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "SvarTillÄrende" - -#: html/Tools/Elements/Tabs:59 -#: html/Tools/Reports/index.html:46 -#: html/Tools/Reports/index.html:47 -msgid "Reports" -msgstr "Rapporter" - -#: etc/initialdata:44 -#: lib/RT/ACE_Overlay.pm:111 -msgid "Requestor" -msgstr "Rekvirent" - -#: html/SelfService/Create.html:63 -#: html/Ticket/Create.html:80 -#: html/Ticket/Elements/EditPeople:69 -#: html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Rekvirenter" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "FörfrÃ¥gningar borde förfalla" - -#. ('Object') -#: lib/RT/Attribute_Overlay.pm:146 -msgid "Required parameter '%1' not specified" -msgstr "Nödvändig parameter '%1' ej specificerad" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Reset" - -#: html/Admin/Users/MyRT.html:15 -#: html/Prefs/MyRT.html:60 -msgid "Reset to default" -msgstr "Reset till default" - -#: html/Admin/Users/Modify.html:183 -#: html/User/Prefs.html:84 -msgid "Residence" -msgstr "Hemma" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Lös" - -#. ($TicketObj->id, $TicketObj->Subject) -#: html/Ticket/Update.html:156 -msgid "Resolve ticket #%1 (%2)" -msgstr "Lös ärende #%1 (%2)" - -#: etc/initialdata:323 -#: html/Elements/SelectDateType:49 -#: lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Löst" - -#: html/Tools/Reports/Elements/Tabs:55 -msgid "Resolved by owner" -msgstr "Löst av ägare" - -#: html/Tools/Reports/Elements/Tabs:59 -msgid "Resolved in date range" -msgstr "Löst i datumordning" - -#: html/Tools/Reports/ResolvedByDates.html:52 -msgid "Resolved tickets in period, grouped by owner" -msgstr "Lösta ärenden under period, grupperade efter ägare" - -#: html/Tools/Reports/ResolvedByOwner.html:50 -msgid "Resolved tickets, grouped by owner" -msgstr "Lösta ärenden, grupperade efter ägare" - -#: html/Elements/ListActions:46 -#: html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Resultat" - -#: html/Admin/Users/Modify.html:126 -#: html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Skriv in lösenord igen" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "GÃ¥ tillbaka" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Rättighet överlämnad" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Rättighet tilldelad" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Rättighet inläst" - -#: lib/RT/ACE_Overlay.pm:695 -#: lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Rättighet kan inte Ã¥terkallas" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Rättighet ej funnen" - -#: lib/RT/ACE_Overlay.pm:560 -#: lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Rättighet ej inläst." - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Rättighet Ã¥terkallad" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Rättigheter" - -#. ($object_type) -#: html/Admin/CustomFields/GroupRights.html:129 -#: lib/RT/Interface/Web.pm:961 -msgid "Rights could not be granted for %1" -msgstr "Rättigheter kan inte tilldelas %1" - -#. ($object_type) -#: html/Admin/CustomFields/GroupRights.html:156 -#: lib/RT/Interface/Web.pm:990 -msgid "Rights could not be revoked for %1" -msgstr "Rättigheter kan inte Ã¥terkallas för %1" - -#: html/Admin/Global/GroupRights.html:72 -#: html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Roller" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "Rader per box" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Rader per sida" - -#: 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/Search/Elements/EditSearches:70 -#: html/Widgets/SelectionBox:211 -msgid "Save" -msgstr "Spara" - -#: html/Admin/Global/Template.html:67 -#: html/Admin/Groups/Modify.html:88 -#: html/Admin/Queues/Modify.html:111 -#: html/Admin/Queues/People.html:126 -#: html/Admin/Users/Modify.html:239 -#: html/Prefs/Quicksearch.html:64 -#: html/Prefs/SearchOptions.html:63 -#: html/SelfService/Prefs.html:58 -#: html/Ticket/Modify.html:60 -#: html/Ticket/ModifyAll.html:127 -#: html/Ticket/ModifyDates.html:60 -#: html/Ticket/ModifyLinks.html:61 -#: html/Ticket/ModifyPeople.html:60 -#: html/User/Groups/Modify.html:77 -msgid "Save Changes" -msgstr "Spara ändringar" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Spara preferenser" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Spara ändringar" - -#. ($name) -#: lib/RT/SavedSearch.pm:173 -msgid "Saved search %1" -msgstr "Spara sökning %1" - -#. ($id) -#. ($scrip->Id) -#: html/Admin/Elements/ListGlobalScrips:60 -#: html/Admin/Global/Scrip.html:77 -#: html/Admin/Queues/Scrip.html:84 -msgid "Scrip #%1" -msgstr "Scrip #%1" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Scrip har skapats" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Scrip-fält" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Scrip har raderats" - -#: html/Admin/Elements/QueueTabs:67 -#: html/Admin/Elements/SystemTabs:54 -#: html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Scrips" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Scrips som gäller alla köer" - -#: html/Elements/SimpleSearch:48 -#: html/Search/Simple.html:65 -msgid "Search" -msgstr "Sökning" - -#: html/Prefs/SearchOptions.html:47 -#: html/Prefs/SearchOptions.html:50 -msgid "Search Preferences" -msgstr "Sökpreferenser" - -#: lib/RT/SavedSearch.pm:115 -msgid "Search attribute load failure" -msgstr "Sökattributinläsningsfel" - -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Sök efter godkännanden" - -#: html/Search/Simple.html:69 -msgid "Search for tickets" -msgstr "Sök efter ärenden" - -#: NOT FOUND IN SOURCE -msgid "Search for tickets. Enter id numbers, queues by name" -msgstr "Sök efter ärenden. Skriv id nummer, köer med namn" - -#: html/Search/Simple.html:57 -msgid "Search for tickets. Enter id numbers, queues by name" -msgstr "" - -#: html/User/Elements/Tabs:62 -msgid "Search options" -msgstr "Sökalternativ" - -#. ($PrimaryGroupBy) -#: html/Search/Chart.html:56 -msgid "Search results grouped by %1" -msgstr "Sökresultat grupperade efter %1" - -#. ($msg) -#: lib/RT/SavedSearch.pm:203 -msgid "Search update: %1" -msgstr "Sökuppdatering: %1" - -#: html/Search/Simple.html:59 -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 "Att söka igenom all text i alla ärenden kan ta lÃ¥ng tid, men om du mÃ¥ste göra det kan du söka efter vilket ord som helst i hela ärendehistoriken genom att skriva fulltext:word." - -#: bin/rt-crontool:265 -msgid "Security:" -msgstr "Säkerhet:" - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "Se även:" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Se extrafält" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "See exact outgoing email messages and their recipeients" -msgstr "Se exakt utgÃ¥ende e-postmeddelanden och deras mottagare" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket private commentary" -msgstr "Se privata kommentarer för ärende" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "See ticket summaries" -msgstr "Se sammanfattningar av ärenden" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "SeExtraFält" - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "SeGrupp" - -#: 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 "Välj ett extrafält" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Välj en grupp" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Välj en kö" - -#: html/SelfService/CreateTicketInQueue.html:48 -msgid "Select a queue for your new ticket" -msgstr "Välj en kö för ditt nya ärende" - -#: html/Admin/Users/index.html:46 -#: html/Admin/Users/index.html:49 -#: html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Välj en användare" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Välj ett extrafält" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Välj extrafält för alla användargrupper" - -#: html/Admin/Global/CustomFields/index.html:65 -msgid "Select custom fields for all users" -msgstr "Välj extrafält för alla användare" - -#: html/Admin/Global/CustomFields/index.html:76 -msgid "Select custom fields for tickets in all queues" -msgstr "Välj extrafält för ärenden i alla köer" - -#: html/Admin/Global/CustomFields/index.html:83 -msgid "Select custom fields for transactions on tickets in all queues" -msgstr "Välj extrafält för transaktioner pÃ¥ alla ärenden i alla köer" - -#: html/Admin/Elements/GroupTabs:75 -#: html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Välj grupp" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Välj flera värden" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Välj ett värde" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Välj kö" - -#: html/Prefs/Quicksearch.html:53 -msgid "Select queues to be displayed on the \"RT at a glance\" page" -msgstr "Välj kö som skall visas pÃ¥ \"RT-snabbtitt\" -sidan" - -#: html/Admin/Global/Scrip.html:59 -#: html/Admin/Global/Scrips.html:57 -#: html/Admin/Queues/Scrip.html:67 -#: html/Admin/Queues/Scrips.html:73 -msgid "Select scrip" -msgstr "Välj scrip" - -#: html/Admin/Global/Template.html:78 -#: html/Admin/Global/Templates.html:57 -#: html/Admin/Queues/Template.html:76 -#: html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Välj mall" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "Välj upp till %1 värden" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Välj användare" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Valda extrafält" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "Valda objekt" - -#: html/Widgets/SelectionBox:209 -msgid "Selections modified. Please save your changes" -msgstr "Urval modifierat. Var god spara dina ändringar" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Skicka e-post till alla observatörer" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Skicka e-post till alla observatörer som en \"kommentar\"" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Skicka e-post till rekvirenter och kopia-mottagare" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Skicka e-post till rekvirenter och kopia-mottagare som en kommentar" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Skicka ett meddelande till rekvirenterna" - -#: etc/initialdata:125 -#: etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Skicka e-post till explicita kopia-mottagare och hemlig kopia-mottagare" - -#: etc/initialdata:94 -#: etc/upgrade/3.1.17/content:7 -msgid "Sends mail to the Ccs" -msgstr "Skicka e-post till kopia-mottagarna" - -#: etc/initialdata:90 -#: etc/upgrade/3.1.17/content:3 -msgid "Sends mail to the Ccs as a comment" -msgstr "Skicka e-post till kopia-mottagarna som en kommentar" - -#: etc/initialdata:102 -msgid "Sends mail to the administrative Ccs" -msgstr "Skicka e-post till de administrativa kopia-mottagarna" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Skicka e-post till de administrativa kopia-mottagarna som en kommentar" - -#: etc/initialdata:82 -#: etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Skicka e-post till ägaren" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Sep." - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Visa" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Visa godkännanden" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Visa kolumner" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Visa resultat" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Visa godkända förfrÃ¥gningar" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Visa grunddata" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Visa avvisade förfrÃ¥gningar" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Visa detaljer" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Visa väntande förfrÃ¥gningar" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Visa förfrÃ¥gningar som väntar pÃ¥ andra godkännanden" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "ShowACL" -msgstr "VisaACL" - -#: lib/RT/System.pm:85 -msgid "ShowConfigTab" -msgstr "VisaKonfigurationTab" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "ShowOutgoingEmail" -msgstr "VisaUtgÃ¥endeE-post" - -#: lib/RT/Group_Overlay.pm:168 -msgid "ShowSavedSearches" -msgstr "VisaSparadeSökningar" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "ShowScrips" -msgstr "VisaScrips" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "ShowTemplate" -msgstr "VisaMall" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "ShowTicket" -msgstr "VisaÄrende" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "ShowTicketComments" -msgstr "VisaÄrendeKommentarer" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "Registrera som ärenderekvirent eller ärende eller kö-kopia" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Registrera som ärende eller kö-Admin.kopia" - -#: html/Admin/Users/Modify.html:230 -#: html/User/Prefs.html:168 -msgid "Signature" -msgstr "Signatur" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "Enkel sökning" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "En enda" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "Storlek" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Hoppa över meny" - -#: html/Search/Elements/EditFormat:78 -msgid "Small" -msgstr "Liten" - -#: html/Admin/CustomFields/Modify.html:120 -msgid "Some browsers may only load content from the same domain as your RT server." -msgstr "Vissa webbläsare läser kanske bara in innehÃ¥ll frÃ¥n samma domän som din RT-server." - -#: html/Admin/Elements/AddCustomFieldValue:49 -#: html/Admin/Elements/EditCustomFieldValues:54 -msgid "Sort" -msgstr "Sortera" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "Steg" - -#: html/Elements/SelectDateType:48 -#: html/Ticket/Elements/EditDates:53 -#: html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "PÃ¥börjad" - -#: html/Elements/SelectDateType:52 -#: html/Ticket/Create.html:208 -#: html/Ticket/Elements/EditDates:48 -#: html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Börjar" - -#: html/Admin/Users/Modify.html:162 -#: html/User/Prefs.html:145 -msgid "State" -msgstr "Läge" - -#: html/Search/Elements/PickBasics:87 -#: html/SelfService/Update.html:57 -#: html/Ticket/Create.html:66 -#: html/Ticket/Elements/EditBasics:53 -#: html/Ticket/Elements/ShowBasics:52 -#: html/Ticket/Update.html:59 -#: lib/RT/Ticket_Overlay.pm:1166 -#: lib/RT/Tickets_Overlay.pm:1651 -msgid "Status" -msgstr "Status" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "Statusändring" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Stjäl" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Stjäl ärenden" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "StjälÄrende" - -#. ($Old->Name) -#: lib/RT/Transaction_Overlay.pm:678 -msgid "Stolen from %1" -msgstr "Stulen frÃ¥n %1" - -#: NOT FOUND IN SOURCE -msgid "Stolen from %1 " -msgstr "Stulen frÃ¥n %1 " - -#: html/Search/Elements/EditFormat:81 -msgid "Style" -msgstr "Stil" - -#: html/Elements/QuickCreate:52 -#: html/Elements/SelectAttachmentField:47 -#: html/Search/Bulk.html:132 -#: html/SelfService/Create.html:79 -#: html/SelfService/Update.html:65 -#: html/Ticket/Create.html:108 -#: html/Ticket/Elements/EditBasics:48 -#: html/Ticket/Elements/Reminders:125 -#: html/Ticket/ModifyAll.html:100 -#: html/Ticket/Update.html:82 -#: lib/RT/Ticket_Overlay.pm:1162 -#: lib/RT/Tickets_Overlay.pm:1733 -msgid "Subject" -msgstr "Ämne" - -#. ($self->Data) -#: docs/design_docs/string-extraction-guide.txt:89 -#: lib/RT/StyleGuide.pod:815 -#: lib/RT/Transaction_Overlay.pm:700 -msgid "Subject changed to %1" -msgstr "Ämne ändrat till %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Skicka" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Genomförd" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Sön." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "SuperAnvändare" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "System" - -#: html/Admin/Elements/ToolTabs:54 -#: html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Systemkonfiguration" - -#: html/Admin/CustomFields/GroupRights.html:128 -#: html/Admin/CustomFields/GroupRights.html:155 -#: html/Admin/CustomFields/UserRights.html:128 -#: html/Admin/CustomFields/UserRights.html:98 -#: html/Admin/Elements/SelectRights:106 -#: lib/RT/ACE_Overlay.pm:584 -#: lib/RT/Interface/Web.pm:960 -#: lib/RT/Interface/Web.pm:989 -msgid "System Error" -msgstr "Systemfel" - -#. ($msg) -#: lib/RT/Transaction_Overlay.pm:224 -#: lib/RT/Transaction_Overlay.pm:230 -msgid "System Error: %1" -msgstr "Systemfel: %1" - -#: html/Admin/Tools/index.html:47 -msgid "System Tools" -msgstr "Systemverktyg" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Systemfel. Rättighet inte överlÃ¥ten." - -#: lib/RT/ACE_Overlay.pm:163 -#: lib/RT/ACE_Overlay.pm:228 -#: lib/RT/ACE_Overlay.pm:323 -#: lib/RT/ACE_Overlay.pm:920 -msgid "System error. Right not granted." -msgstr "Systemfel. Rättighet inte tilldelad." - -#: html/Admin/CustomFields/GroupRights.html:58 -#: html/Admin/Global/GroupRights.html:56 -#: html/Admin/Groups/GroupRights.html:58 -#: html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Systemgrupper" - -#: etc/initialdata:41 -#: etc/initialdata:47 -#: etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "SystemRollgrupp för internt bruk" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "TEST_STRING" - -#: 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 "Ta ärenden" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "TaÄrende" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Taget" - -#: html/Admin/Elements/EditScrip:71 -#: html/Tools/Offline.html:78 -msgid "Template" -msgstr "Mall" - -#. ($TemplateObj->Id()) -#: html/Admin/Global/Template.html:112 -#: html/Admin/Queues/Template.html:113 -msgid "Template #%1" -msgstr "Mall #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Mall har raderats" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "Mall är obligatorisk parameter" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Mall ej funnen" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Mall har parsats" - -#: lib/RT/Template_Overlay.pm:391 -msgid "Template parsing error" -msgstr "Mallparsfel" - -#: html/Admin/Elements/QueueTabs:70 -#: html/Admin/Elements/SystemTabs:57 -#: html/Admin/Global/index.html:66 -msgid "Templates" -msgstr "Mallar" - -#: lib/RT/CustomField_Overlay.pm:943 -#: lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Det är redan det nuvarande värdet" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "Det är inte ett värde för detta extrafält" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Det är samma värde" - -#: lib/RT/ACE_Overlay.pm:305 -#: lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "Principalen har redan den rättigheten" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:753 -msgid "That principal is already a %1 for this queue" -msgstr "Principalen är redan en %1 för denna kö" - -#. ($self->loc($args{'Type'})) -#: lib/RT/Ticket_Overlay.pm:1435 -msgid "That principal is already a %1 for this ticket" -msgstr "Principalen är redan en %1 för detta ärende" - -#. ($args{'Type'}) -#: lib/RT/Queue_Overlay.pm:852 -msgid "That principal is not a %1 for this queue" -msgstr "Principalen är inte en %1 för denna kö" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Kön finns ej" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "Ärendet har olösta avhängigheter" - -#: lib/RT/Action/CreateTickets.pm:710 -#: lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Ärendet tillhör redan den användaren" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Användaren finns ej" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Användaren är redan privilegierad" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Användaren är redan icke-privilegierad" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Användaren är nu privilegierad" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Användaren är nu icke-privilegierad" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "Användaren äger kanske inte ärenden i den kön" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "Det är inte nÃ¥got numeriskt ID" - -#: html/SelfService/Display.html:53 -#: html/Ticket/Create.html:177 -#: html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Grunddata" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "Kopia för ett ärende" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The administrative CC of a ticket" -msgstr "Adminstrativ kopia för ett ärende" - -#: 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 "Följande kommando kommer att ta fram alla aktiva ärenden i kön 'general' och sätta deras prioritet som 99 om de inte rörts pÃ¥ 4 timmar:" - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "Det nya värdet har satts." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "Ägaren till ett nytt ärende" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "Rekvirenten till ett ärende" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Dessa kommentarer är vanligtvis inte synliga för användaren" - -#: lib/RT/CustomField_Overlay.pm:978 -msgid "This custom field does not apply to that object" -msgstr "Detta extrafält gäller inte för det objektet" - -#: html/Admin/Tools/Configuration.html:50 -msgid "This feature is only available to system administrators" -msgstr "Denna delen är endast tillgänglig för systemadministratörer" - -#: html/Ticket/Elements/PreviewScrips:96 -msgid "This message will be sent to..." -msgstr "Meddelandet kommer att skickas till..." - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Detta verktyg ger användaren möjlighet att köra godtyckliga perl-moduler inifrÃ¥n RT." - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Denna transaktion tycks inte ha nÃ¥got innehÃ¥ll" - -#. ($rows) -#: html/Ticket/Elements/ShowRequestor:70 -msgid "This user's %1 highest priority tickets" -msgstr "Denna användares %1 högst prioriterade ärenden" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Tor." - -#. ($Ticket->Id, $Ticket->Subject) -#: html/Ticket/ModifyAll.html:46 -#: html/Ticket/ModifyAll.html:50 -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Ärende #%1 Jumbo uppdatering: %2" - -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#: html/Approvals/Elements/ShowDependency:67 -msgid "Ticket #%1: %2" -msgstr "Ärende #%1: %2" - -#. ($T::Tickets{$template_id}->Id) -#. ($T::Tickets{$template_id}->id) -#. ($ticket->Id) -#: lib/RT/Action/CreateTickets.pm:1350 -#: lib/RT/Action/CreateTickets.pm:1359 -#: lib/RT/Action/CreateTickets.pm:605 -#: lib/RT/Action/CreateTickets.pm:729 -#: lib/RT/Action/CreateTickets.pm:741 -msgid "Ticket %1" -msgstr "Ärende %1" - -#. ($self->Id, $QueueObj->Name) -#: lib/RT/Ticket_Overlay.pm:755 -#: lib/RT/Ticket_Overlay.pm:775 -msgid "Ticket %1 created in queue '%2'" -msgstr "Ärende %1 har skapats i kö '%2'" - -#. ($Ticket->Id, $_) -#: html/Search/Bulk.html:377 -msgid "Ticket %1: %2" -msgstr "Ärende %1: %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Ärende extrafält" - -#. ($Ticket->Id, $Ticket->Subject) -#: html/Ticket/History.html:46 -#: html/Ticket/History.html:49 -msgid "Ticket History # %1 %2" -msgstr "Ärendehistorik # %1 %2" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Ärende löst" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 -#: html/Admin/Global/CustomFields/index.html:81 -#: lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "Ärendetransaktioner" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "ÄrendeinnehÃ¥ll" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "ÄrendeinnehÃ¥llstyp" - -#: lib/RT/Ticket_Overlay.pm:603 -#: lib/RT/Ticket_Overlay.pm:617 -#: lib/RT/Ticket_Overlay.pm:628 -#: lib/RT/Ticket_Overlay.pm:763 -msgid "Ticket could not be created due to an internal error" -msgstr "Ärende kan inte skapas pÃ¥ grund av ett internt fel" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Ärende metadata" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Ärendestatus ändrad" - -#. (ref $self) -#: lib/RT/Search/FromSQL.pm:82 -msgid "TicketSQL search module" -msgstr "ÄrendeSQL sökmodul" - -#: html/Admin/Elements/GlobalCustomFieldTabs:64 -#: html/Admin/Global/CustomFields/index.html:75 -#: html/Elements/Tabs:71 -#: html/Search/Elements/Chart:109 -#: lib/RT/CustomField_Overlay.pm:1206 -msgid "Tickets" -msgstr "Ärenden" - -#: html/Tools/Reports/CreatedByDates.html:86 -msgid "Tickets created after" -msgstr "Ärenden har skapats efter" - -#: html/Tools/Reports/CreatedByDates.html:88 -msgid "Tickets created before" -msgstr "Ärenden har skapats före" - -#: html/Tools/Reports/ResolvedByDates.html:87 -msgid "Tickets resolved after" -msgstr "Ärenden lösta efter" - -#: html/Tools/Reports/ResolvedByDates.html:89 -msgid "Tickets resolved before" -msgstr "Ärenden lösta före" - -#: html/Approvals/Elements/ShowDependency:48 -msgid "Tickets which depend on this approval:" -msgstr "Ärenden som är beroende av detta godkännande:" - -#: html/Search/Elements/PickBasics:134 -#: html/Ticket/Create.html:183 -#: html/Ticket/Elements/EditBasics:72 -msgid "Time Estimated" -msgstr "Uppskattad tid" - -#: html/Search/Elements/PickBasics:135 -#: html/Ticket/Create.html:196 -#: html/Ticket/Elements/EditBasics:85 -msgid "Time Left" -msgstr "Resterande tid" - -#: html/Search/Elements/PickBasics:133 -#: html/Ticket/Create.html:189 -#: html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Använd tid" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Resterande tid" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Tid för visning" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Använd tid" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "AnvändTid" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "Titel" - -#. ('sales@bestpractical.com') -#: html/Elements/Footer:62 -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "FörfrÃ¥gan om support, utbildning, kundutveckling eller licensiering, var god kontakta %1." - -#: lib/RT/Ticket_Overlay.pm:1170 -msgid "Told" -msgstr "Uppgivet" - -#: html/Admin/Elements/Tabs:68 -#: html/Admin/index.html:88 -#: html/Elements/Tabs:74 -#: html/Tools/index.html:46 -#: html/Tools/index.html:49 -msgid "Tools" -msgstr "Verktyg" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "Totalt" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Transaktion" - -#. ($self->Data) -#: lib/RT/Transaction_Overlay.pm:805 -msgid "Transaction %1 purged" -msgstr "Transaktion %1 har tömts" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Transaktion har skapats" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Transaktion extrafält" - -#: lib/RT/Transaction_Overlay.pm:128 -msgid "Transaction->Create couldn't, as you didn't specify an object type and id" -msgstr "Transaktion->Skapa gick inte eftersom du inte specificerade en objekttyp och ID" - -#: lib/RT/Transaction_Overlay.pm:870 -msgid "Transactions are immutable" -msgstr "Transaktioner är oföränderliga" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Tis." - -#: html/Admin/CustomFields/Modify.html:66 -#: html/Admin/Elements/EditCustomField:65 -#: html/Ticket/Elements/AddWatchers:54 -#: html/Ticket/Elements/AddWatchers:65 -#: html/Ticket/Elements/AddWatchers:75 -#: lib/RT/Ticket_Overlay.pm:1168 -#: lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Typ" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "Ej implementerad" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Unix-inloggning" - -#. ($ContentEncoding) -#. ($self->ContentEncoding) -#: lib/RT/Attachment_Overlay.pm:289 -#: lib/RT/Record.pm:861 -msgid "Unknown ContentEncoding %1" -msgstr "Okänd InnehÃ¥llsKodning %1" - -#: html/Search/Build.html:455 -#: lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "Okänt fält: $nyckel" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Obegränsat" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Ej namngiven sökning" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Icke-privilegierad" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Ej valda extrafält" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "Ej valda objekt" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "Ej tagen" - -#: html/Admin/Elements/EditScrip:128 -#: html/Elements/RT__Ticket/ColumnMap:302 -#: html/Search/Bulk.html:193 -#: html/Search/Bulk.html:75 -msgid "Update" -msgstr "Uppdatera" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Uppdatera ärende" - -#: html/Search/Bulk.html:126 -#: html/Ticket/ModifyAll.html:87 -#: html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Uppdatera typ" - -#: html/Search/Bulk.html:200 -#: html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Uppdatera flera ärenden" - -#: lib/RT/Action/CreateTickets.pm:750 -#: lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Uppdatera icke-inlästa." - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Uppdatera ärende" - -#. ($Ticket->id) -#: html/SelfService/Update.html:112 -#: html/SelfService/Update.html:47 -msgid "Update ticket #%1" -msgstr "Uppdatera ärende #%1" - -#. ($TicketObj->id, $TicketObj->Subject) -#: html/Ticket/Update.html:158 -msgid "Update ticket #%1 (%2)" -msgstr "Uppdatera ärende #%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 -#: lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr "Uppdateringstyp är varken korrespondens eller kommentar." - -#: html/Elements/SelectDateType:54 -#: html/Ticket/Elements/ShowDates:72 -#: lib/RT/CustomField_Overlay.pm:1284 -#: lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Uppdaterad" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Överför" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Överför flera filer" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Överför flera bilder" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Överför en fil" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Överför en bild" - -#: lib/RT/CustomField_Overlay.pm:86 -msgid "Upload up to %1 files" -msgstr "Överför upp till %1 filer" - -#: lib/RT/CustomField_Overlay.pm:81 -msgid "Upload up to %1 images" -msgstr "Överför upp till %1 bilder" - -#: html/Tools/Offline.html:93 -msgid "Upload your changes" -msgstr "Överför dina ändringar" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "Använd annat RT-administrativt verktyg" - -#. ($args{'Owner'}) -#: lib/RT/Ticket_Overlay.pm:506 -msgid "User '%1' could not be found." -msgstr "Det gick inte att hitta användare '%1'." - -#: etc/initialdata:132 -#: etc/initialdata:206 -msgid "User Defined" -msgstr "Användardefinierad" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "Användardefinierade villkor och handlingar" - -#: html/Admin/Elements/CustomFieldTabs:72 -#: html/Admin/Elements/GroupTabs:68 -#: html/Admin/Elements/QueueTabs:85 -#: html/Admin/Elements/SystemTabs:68 -#: html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Användarrättigheter" - -#. ($msg) -#: html/Admin/Users/Modify.html:301 -msgid "User could not be created: %1" -msgstr "Det gick inte att skapa användare: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Användare har skapats" - -#: html/Admin/CustomFields/GroupRights.html:74 -#: html/Admin/Global/GroupRights.html:88 -#: html/Admin/Groups/GroupRights.html:75 -#: html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Användardefinierade grupper" - -#: lib/RT/User_Overlay.pm:592 -#: lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Användare har lästs in" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Användardefinierade grupper" - -#: html/Admin/Users/Modify.html:69 -#: html/Elements/Login:90 -#: html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Användarnamn" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 -#: html/Admin/Elements/SelectNewGroupMembers:47 -#: html/Admin/Elements/Tabs:53 -#: html/Admin/Global/CustomFields/index.html:64 -#: html/Admin/Groups/Members.html:76 -#: html/Admin/Queues/People.html:89 -#: html/Admin/index.html:62 -#: html/User/Groups/Members.html:79 -#: lib/RT/CustomField_Overlay.pm:1208 -msgid "Users" -msgstr "Användare" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Användare som matchar kriterier" - -#. ($transaction->id) -#: bin/rt-crontool:134 -msgid "Using transaction #%1..." -msgstr "Använder transaktion #%1..." - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Giltig söksträng" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "Bekräftelse" - -#: html/Admin/CustomFields/Modify.html:130 -#: html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Värden" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "Observera" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "ObserveraSomAdmin.kopia" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Observatörer" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Ons." - -#: html/Tools/MyDay.html:75 -msgid "What I did today" -msgstr "Vad jag gjorde i dag" - -#: etc/initialdata:521 -msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" -msgstr "När ett ärende har godkänts av alla godkännare, lägg till korrespondens till originalärendet" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "När ett ärende har godkänts av nÃ¥gon godkännare, lägg till korrespondens till originalärendet" - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "När ett ärende har skapats" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "När ett godkännandeärende skapas, meddela ägaren och Admin.kopia-mottagare om delen som väntar pÃ¥ deras godkännande" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "När nÃ¥got händer" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "När ett ärende har lösts" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "När ett ärendes ägare byts ut" - -#: etc/initialdata:178 -#: etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "När ett ärendes prioritet ändras" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "När ett ärendes kö ändras" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "När ett ärendes status ändras" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "När det förekommer ett användardefinierat villkor" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "När det kommer in kommentarer" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "När det kommer in korrespondens" - -#: html/Admin/Users/Modify.html:188 -#: html/User/Prefs.html:88 -msgid "Work" -msgstr "Arbete" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "Arbeta offline" - -#: html/Ticket/Elements/ShowBasics:63 -#: html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Arbetat" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Det här ärendet tillhör redan dig" - -#: html/autohandler:214 -#: html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Du är inte en auktoriserad användare" - -#: html/Prefs/Search.html:56 -msgid "You can also edit the predefined search itself" -msgstr "Du kan även redigera själva den fördefinierade sökningen" - -#: lib/RT/Ticket_Overlay.pm:3025 -msgid "You can only reassign tickets that you own or that are unowned" -msgstr "Du kan endast dela ut ärenden som tillhör dig eller som inte tillhör nÃ¥gon" - -#: lib/RT/Ticket_Overlay.pm:3021 -msgid "You can only take tickets that are unowned" -msgstr "Du kan endast ta ärenden som inte tillhör nÃ¥gon" - -#. ($num, $queue) -#: docs/design_docs/string-extraction-guide.txt:47 -#: lib/RT/StyleGuide.pod:780 -msgid "You found %1 tickets in queue %2" -msgstr "Du fann %1 ärenden i kö %2" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "Du har loggat av frÃ¥n RT." - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "Du har inte tillÃ¥telse att skapa ärenden i den kön." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "Du fÃ¥r inte skapa förfrÃ¥gningar i den kön." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Du är välkommen att logga in igen" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Din förfrÃ¥gan har godkänts av %1. Andra godkännanden inväntas kanske fortfarande." - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "Din förfrÃ¥gan har godkänts." - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "Din förfrÃ¥gan avvisades." - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "Ditt användarnamn eller lösenord är inte korrekt" - -#: html/Admin/Users/Modify.html:168 -#: html/User/Prefs.html:149 -msgid "Zip" -msgstr "Zip" - -#: lib/RT/System.pm:87 -msgid "allow creation of saved searches" -msgstr "tillÃ¥t skapande av sparade sökningar" - -#: lib/RT/System.pm:86 -msgid "allow loading of saved searches" -msgstr "tillÃ¥t inläsning av sparade sökningar" - -#. ($right->PrincipalObj->Object->SelfDescription) -#: html/User/Elements/DelegateRights:80 -msgid "as granted to %1" -msgstr "som givet till %1" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "diagram" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "stängd" - -#: html/Elements/SelectCustomFieldOperator:59 -#: html/Elements/SelectMatch:55 -msgid "contains" -msgstr "innehÃ¥ller" - -#: html/Admin/Queues/Modify.html:98 -#: lib/RT/Date.pm:346 -msgid "days" -msgstr "dagar" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "raderad" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "matchar inte" - -#: html/Elements/SelectCustomFieldOperator:59 -#: html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "innehÃ¥ller inte" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "lika med" - -#: html/Search/Build.html:547 -msgid "error: can't move down" -msgstr "fel: kan inte flytta ner" - -#: html/Search/Build.html:569 -msgid "error: can't move left" -msgstr "fel: kan inte flytta till vänster" - -#: html/Search/Build.html:528 -msgid "error: can't move up" -msgstr "fel: kan inte flytta upp" - -#: html/Search/Build.html:612 -msgid "error: nothing to delete" -msgstr "fel: inget att radera" - -#: html/Search/Build.html:533 -#: html/Search/Build.html:552 -#: html/Search/Build.html:574 -#: html/Search/Build.html:603 -msgid "error: nothing to move" -msgstr "fel: inget att flytta" - -#: html/Search/Build.html:630 -msgid "error: nothing to toggle" -msgstr "fel: inget att växla" - -#: html/Elements/SelectCustomFieldOperator:59 -#: html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "större än" - -#. ($self->Name) -#: lib/RT/Group_Overlay.pm:214 -msgid "group '%1'" -msgstr "grupp '%1'" - -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -#: html/Search/Results.html:88 -msgid "grouped by %1" -msgstr "grupperad efter %1" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "timmar" - -#: 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 "är" - -#: html/Elements/SelectBoolean:57 -#: html/Elements/SelectCustomFieldOperator:59 -#: html/Elements/SelectMatch:58 -#: html/Search/Elements/PickBasics:163 -#: html/Search/Elements/PickBasics:75 -#: html/Search/Elements/PickBasics:91 -#: html/Search/Elements/PickCFs:54 -msgid "isn't" -msgstr "är inte" - -#: html/Elements/SelectCustomFieldOperator:59 -#: html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "mindre än" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "matchar" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "min." - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "mÃ¥nader" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "ny" - -#: html/Admin/Elements/PickCustomFields:64 -#: html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "inget namn" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "inget värde" - -#: html/Admin/Elements/EditQueueWatchers:48 -#: html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "inget" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "inte lika med" - -#: lib/RT/Queue_Local.pm:2 -msgid "offer" -msgstr "" - -#: html/SelfService/Elements/MyRequests:82 -#: lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "öppen" - -#. ($self->Name, $user->Name) -#: lib/RT/Group_Overlay.pm:219 -msgid "personal group '%1' for user '%2'" -msgstr "personlig grupp '%1' för användare '%2'" - -#. ($queue->Name, $self->Type) -#: lib/RT/Group_Overlay.pm:227 -msgid "queue %1 %2" -msgstr "kö %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "avvisad" - -#: 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 "visa konfigurationstab" - -#: html/Search/Results.html:80 -msgid "spreadsheet" -msgstr "kalkylblad" - -#: lib/RT/Queue_Overlay.pm:84 -msgid "stalled" -msgstr "i väntläge" - -#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle')) -#: html/Search/Results.html:89 -msgid "style: %1" -msgstr "stil: %1" - -#: html/Prefs/MyRT.html:93 -msgid "summary rows" -msgstr "summeringsrader" - -#. ($self->Type) -#: lib/RT/Group_Overlay.pm:222 -msgid "system %1" -msgstr "system %1" - -#. ($self->Type) -#: lib/RT/Group_Overlay.pm:233 -msgid "system group '%1'" -msgstr "systemgrupp '%1'" - -#: html/Elements/Error:64 -#: html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "den anropade komponenten specificerade inte varför" - -#. ($self->Instance, $self->Type) -#: lib/RT/Group_Overlay.pm:230 -msgid "ticket #%1 %2" -msgstr "ärende #%1 %2" - -#. ($self->Id) -#: lib/RT/Group_Overlay.pm:236 -msgid "undescribed group %1" -msgstr "icke-beskriven grupp %1" - -#. ($user->Object->Name) -#: lib/RT/Group_Overlay.pm:211 -msgid "user %1" -msgstr "användare %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "veckor" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "Ã¥r" - diff --git a/rt/lib/RT/I18N/tr.po b/rt/lib/RT/I18N/tr.po deleted file mode 100644 index 58c6b7943..000000000 --- a/rt/lib/RT/I18N/tr.po +++ /dev/null @@ -1,5079 +0,0 @@ -# Turkish localization catalog for Request Tracker (RT) -# First Author: Burak Gürsoy , Jun 2007 -msgid "" -msgstr "" -"Project-Id-Version: RT 3.6.x\n" -"POT-Creation-Date: 2007-15-06 22:30+0200\n" -"PO-Revision-Date: 2007-15-06 22:30+0200\n" -"Last-Translator: Burak Gürsoy \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 silindi." - -#: html/Widgets/SavedSearch:47 -#. ($self->{CurrentSearch}{Description}, $args->{Description}) -msgid " %1 renamed to %2." -msgstr " %1 değeri %2 olarak yeniden adlandırıldı." - -#: html/Widgets/SavedSearch:60 -#. ($args->{Description}) -msgid " %1 saved." -msgstr " %1 kaydedildi." - -#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51 -#. ($Ticket->id, $Ticket->Subject) -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -#. ($ticket->Id, $ticket->Subject) -#. ($TicketObj->Id, $TicketObj->Subject) -msgid "#%1: %2" -msgstr "" - -#: html/Elements/ShowSearch:105 -msgid "$1" -msgstr "" - -#: lib/RT/Record.pm:940 -#. ($label) -msgid "$prefix %1" -msgstr "" - -#: lib/RT/URI/fsck_com_rt.pm:256 -#. ($self->ObjectType, $self->Object->Id) -msgid "%1 #%2" -msgstr "" - -#: lib/RT/Date.pm:365 -#. ($s, $time_unit) -msgid "%1 %2" -msgstr "" - -#: lib/RT/Date.pm:401 -#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) -msgid "%1 %2 %3 %4:%5:%6 %7" -msgstr "%3 %2 %7 %1, %4:%5:%6" - -#: lib/RT/Record.pm:1685 lib/RT/Transaction_Overlay.pm:647 lib/RT/Transaction_Overlay.pm:690 -#. ($cf->Name, $new_value->Content) -#. ($field, $self->NewValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 added" -msgstr "%1 %2 eklendi" - -#: lib/RT/Date.pm:362 -#. ($s, $time_unit) -msgid "%1 %2 ago" -msgstr "%1 %2 önce" - -#: lib/RT/Record.pm:1692 lib/RT/Transaction_Overlay.pm:654 -#. ($cf->Name, $old_content, $new_value->Content) -#. ($field, $self->OldValue, $self->NewValue) -msgid "%1 %2 changed to %3" -msgstr "%1: %2 değeri %3 olarak değiştirildi" - -#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:650 lib/RT/Transaction_Overlay.pm:696 -#. ($cf->Name, $old_value->Content) -#. ($field, $self->OldValue) -#. ($self->Field, $principal->Object->Name) -msgid "%1 %2 deleted" -msgstr "%1 %2 silindi" - -#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:63 html/Ticket/Elements/PreviewScrips:103 -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -msgid "%1 %2 with template %3" -msgstr "%1 %2 ile şablon %3" - -#: html/Ticket/Elements/ShowAttachments:72 -#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) -msgid "%1 (%2) by %3" -msgstr "%1 (%2) oluşturan: %3" - -#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:108 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:66 -#. (loc($DefaultStatus)) -#. (loc($Ticket->Status())) -#. (loc($TicketObj->Status)) -#. ($TicketObj->OwnerObj->Name()) -msgid "%1 (Unchanged)" -msgstr "%1 (Değişmemiş)" - -#: bin/rt-crontool:237 bin/rt-crontool:244 bin/rt-crontool:250 -#. ("--search-argument", "--search") -#. ("--condition-argument", "--condition") -#. ("--action-argument", "--action") -msgid "%1 - An argument to pass to %2" -msgstr "%1 - %2 komutuna geçilecek bir argüman" - -#: bin/rt-crontool:262 -#. ("--verbose") -msgid "%1 - Output status updates to STDOUT" -msgstr "%1 - STDOUT' a gönderilen çıktı durumu güncellemeleri" - -#: bin/rt-crontool:253 -#. ("--template-id") -msgid "%1 - Specify id of the template you want to use" -msgstr "%1 - Kullanmak istediğiniz şablonun adını belirtin" - -#: bin/rt-crontool:256 -#. ("--transaction") -msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction" -msgstr "%1 - 'first' veya 'last' hareketlerinden hangisini kullanacağınızı belirtin" - -#: bin/rt-crontool:247 -#. ("--action") -msgid "%1 - Specify the action module you want to use" -msgstr "%1 - Kullanmak istediğiniz eylem modülünü belirtin" - -#: bin/rt-crontool:241 -#. ("--condition") -msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Kullanmak istediğiniz durum modülünü belirtin" - -#: bin/rt-crontool:234 -#. ("--search") -msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Kullanmak istediğiniz arama modülünü belirtin" - -#: bin/rt-crontool:259 -#. ("--transaction-type") -msgid "%1 - Specify the type of a transaction you want to use" -msgstr "%1 - Kullanmak istediğiniz hareket türünü belirtin" - -#: html/Elements/Footer:56 -#. ('»|«', $RT::VERSION, '2006', 'Best Practical Solutions, LLC',) -msgid "%1 RT %2 Copyright 1996-%3 %4." -msgstr "%1 RT sürüm %2 Telif Hakkı: 1996-%3 %4." - -#: lib/RT/ScripAction_Overlay.pm:150 -#. ($self->Id) -msgid "%1 ScripAction loaded" -msgstr "ScriptAction %1 yüklendi" - -#: lib/RT/Record.pm:1722 -#. ($args{'Value'}, $cf->Name) -msgid "%1 added as a value for %2" -msgstr "%1, %2 için bir değer olarak eklendi" - -#: lib/RT/Link_Overlay.pm:144 lib/RT/Link_Overlay.pm:151 -#. ($args{'Base'}) -#. ($args{'Target'}) -msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "%1 yerel bir nesne olarak gözüküyor, fakat veritabanında mevcut değil" - -#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:531 -#. ($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 değerinden %3 değerine değişti" - -#: html/Search/Build.html:213 -#. ($Description) -msgid "%1 copy" -msgstr "%1 kopya" - -#: lib/RT/Record.pm:944 -msgid "%1 could not be set to %2." -msgstr "%1, %2 olarak atanamıyor" - -#: lib/RT/Ticket_Overlay.pm:2787 -#. ($self) -msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1, durumunu çözülmüş olarak değiştiremiyor. RT' nin veritabanı tutarsız olabilir" - -#: lib/RT/Transaction_Overlay.pm:571 -#. ($obj_type) -msgid "%1 created" -msgstr "%1 oluşturuldu" - -#: lib/RT/Transaction_Overlay.pm:576 -#. ($obj_type) -msgid "%1 deleted" -msgstr "%1 silindi" - -#: etc/initialdata:593 -msgid "%1 highest priority tickets I own" -msgstr "Sahibi olduğum yüksek öneme sahip %1 bilet" - -#: bin/rt-crontool:229 -#. ($0) -msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1, biletlere dışarıdan müdahale edebilen bir araçtır (cron gibi)" - -#: lib/RT/Queue_Overlay.pm:863 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this queue." -msgstr "%1, artık bu kuyruk için %2 değil." - -#: html/Ticket/Elements/ShowTime:47 html/Ticket/Elements/ShowTime:49 -#. ($minutes) -msgid "%1 min" -msgstr "%1 dakika" - -#: etc/initialdata:601 -msgid "%1 newest unowned tickets" -msgstr "Sahibi olmayan en yeni %1 bilet" - -#: lib/RT/CustomField_Overlay.pm:893 -msgid "%1 objects" -msgstr "%1 nesne" - -#: html/User/Elements/DelegateRights:97 -#. (loc($ObjectType =~ /^RT::(.*)$/)) -msgid "%1 rights" -msgstr "%1 hak" - -#: lib/RT/Action/ResolveMembers.pm:63 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1, çözülmüş bir grup biletinin tüm üyelerini çözecektir" - - -#: lib/RT/CustomField_Overlay.pm:894 -msgid "%1's %2 objects" -msgstr "%1 için %2 nesne" - -#: lib/RT/CustomField_Overlay.pm:895 -msgid "%1's %2's %3 objects" -msgstr "%1 ve %2 için %3 nesne" - -#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:57 -#. ($object->Name) -#. ($Object->Name) -msgid "%1's saved searches" -msgstr "%1 için kaydedilmiş aramalar" - -#: lib/RT/Transaction_Overlay.pm:481 -#. ($self) -msgid "%1: no attachment specified" -msgstr "%1: herhangi bir eklenti belirtilmedi" - -#: html/Ticket/Elements/ShowTransactionAttachments:78 -#. ($size) -msgid "%1b" -msgstr "" - -#: html/Ticket/Elements/ShowTransactionAttachments:75 -#. (int( $size / 102.4 ) / 10) -msgid "%1k" -msgstr "" - -#: 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', durum için geçersiz bir değer" - -#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76 -msgid "(Check box to delete)" -msgstr "(Silmek için kutucuğu işaretleyin)" - -#: html/Ticket/Elements/PreviewScrips:99 -msgid "(Check boxes to disable notifications to the listed recipients)" -msgstr "(Listelenen alıcılara uyarı gitmesini iptal etmek için kutucukları işaretleyin)" - -#: html/Ticket/Elements/PreviewScrips:123 -msgid "(Check boxes to enable notifications to the listed recipients)" -msgstr "Listelenen alıcılara uyarı gitmesi için kutucukları işaretleyin)" - -#: html/Ticket/Create.html:218 -msgid "(Enter ticket ids or URLs, separated with spaces)" -msgstr "(Boşluklarla ayrılmış olarak, bilet numaralarını veya URL' lerini girin)" - -#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1)" -msgstr "(Boş bırakılırsa, varsayılan olarak %1 değerini alacaktır)" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 -msgid "(No custom fields)" -msgstr "(Özel alan yok)" - -#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 -msgid "(No members)" -msgstr "(Üye yok)" - -#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:48 -msgid "(No scrips)" -msgstr "(Senet yok)" - -#: html/Admin/Elements/EditTemplates:52 -msgid "(No templates)" -msgstr "(Şablon yok)" - -#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 -msgid "(None)" -msgstr "(Hiçbiri)" - -#: 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 "(Bu güncellemeyi, virgülle ayrılmış eposta listesine, görünmez karbon kopya olarak gönderir. Ä°leriki güncellemeleri kimin alıp almayacağını değiştirmez.)" - -#: 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 "(Bu güncellemeyi, virgülle ayrılmış eposta listesine, karbon kopya olarak gönderir. Listedeki kişiler ileriki güncellemeleri alacaktır.)" - -#: 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 "(Bu güncellemeyi, virgülle ayrılmış eposta listesine, karbon kopya olarak gönderir. Ä°leriki güncellemeleri kimin alıp almayacağını değiştirmez.)" - -#: 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 "(Bu güncellemeyi, virgülle ayrılmış eposta listesine, karbon kopya olarak gönderir. Listedeki kişiler ileriki güncellemeleri alacaktır.)" - -#: html/Admin/Elements/EditScrip:96 -msgid "(Use these fields when you choose 'User Defined' for a condition or action)" -msgstr "(Bir durum veya eylem için 'Kullanıcı Tanımlı' yı seçtiğinizde, bu alanları kullanın)" - -#: html/Ticket/Elements/EditWatchers:60 html/Ticket/Elements/ShowUserEntry:53 -msgid "(Will not be sent email)" -msgstr "(Eposta gönderilmeyecek)" - -#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 -msgid "(empty)" -msgstr "(boş)" - -#: html/Admin/Users/index.html:60 -msgid "(no name listed)" -msgstr "(herhangi bir ad listelenmedi)" - -#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:69 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:54 html/Search/Chart:56 html/Search/Elements/Chart:76 lib/RT/Transaction_Overlay.pm:591 -msgid "(no value)" -msgstr "(değer yok)" - -#: html/Admin/Elements/EditCustomFieldValues:47 -msgid "(no values)" -msgstr "(değer yok)" - -#: html/Elements/EditLinks:132 html/Ticket/Elements/BulkLinks:49 -msgid "(only one ticket)" -msgstr "(sadece bir bilet)" - -#: html/Elements/RT__Ticket/ColumnMap:149 -msgid "(pending approval)" -msgstr "(onaylanmayı bekliyor)" - -#: html/Elements/RT__Ticket/ColumnMap:152 -msgid "(pending other Collection)" -msgstr "(diğer bir Koleksiyonu bekliyor)" - -#: html/Admin/Users/Modify.html:71 -msgid "(required)" -msgstr "(gerekli)" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "(untitled)" -msgstr "(başlıksız)" - -#: html/Ticket/Elements/Reminders:133 -msgid "(yyyy/mm/dd)" -msgstr "(yyyy/aa/gg)" - -#: html/Elements/EditCustomFieldSelect:57 -msgid "-" -msgstr "" - -#: bin/rt-crontool:95 -msgid "--transaction argument could be only 'first' or 'last'" -msgstr "--transaction argümanı sadece 'first' veya 'last' olabilir" - -#: html/Ticket/Elements/ShowBasics:53 -msgid "<% $Ticket->Status%>" -msgstr "" - -#: html/Elements/SelectTicketTypes:48 -msgid "<% $_ %>" -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 " %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 "Boş bir şablon" - -#: html/Admin/Users/Modify.html:371 -msgid "A password was not set, so user won't be able to login." -msgstr "Bir parola atanmamış, dolayısıyla, kullanıcı giriş yapamayacak" - -#: lib/RT/ACE_Overlay.pm:174 lib/RT/Principal_Overlay.pm:219 -msgid "ACE not found" -msgstr "ACE bulunamadı" - -#: lib/RT/ACE_Overlay.pm:853 -msgid "ACEs can only be created and deleted." -msgstr "ACE' ler sadece oluşturulabilir ve silinebilirler." - -#: html/Search/Elements/SelectAndOr:46 -msgid "AND" -msgstr "VE" - -#: html/User/Elements/Tabs:53 -msgid "About me" -msgstr "Hakkımda" - -#: html/Admin/Users/Modify.html:106 -msgid "Access control" -msgstr "Erişim denetimi" - -#: html/Admin/Elements/EditScrip:65 -msgid "Action" -msgstr "Eylem" - -#: lib/RT/Scrip_Overlay.pm:172 -#. ($args{'ScripAction'}) -msgid "Action %1 not found" -msgstr "%1 eylemi bulunamadı" - -#: bin/rt-crontool:171 -msgid "Action committed.\\n" -msgstr "Eylem yapıldı" - -#: lib/RT/Scrip_Overlay.pm:168 -msgid "Action is mandatory argument" -msgstr "Eylem, zorunlu bir argüman" - -#: bin/rt-crontool:167 -msgid "Action prepared..." -msgstr "Eylem hazırlanıyor..." - -#: html/Search/Build.html:85 -msgid "Add" -msgstr "Ekle" - -#: html/Search/Bulk.html:92 -msgid "Add AdminCc" -msgstr "Yöneticiye karbon kopya ekle" - -#: html/Search/Bulk.html:88 -msgid "Add Cc" -msgstr "Karbon kopya ekle" - -#: html/Search/Elements/EditFormat:49 -msgid "Add Columns" -msgstr "Sütun ekle" - -#: html/Search/Elements/PickCriteria:46 -msgid "Add Criteria" -msgstr "Kıstas ekle" - -#: html/Ticket/Create.html:147 html/Ticket/Update.html:116 -msgid "Add More Files" -msgstr "Daha fazla dosya ekle" - -#: html/Search/Bulk.html:84 -msgid "Add Requestor" -msgstr "Ä°stekçi ekle" - -#: html/Admin/Elements/AddCustomFieldValue:46 -msgid "Add Value" -msgstr "Değer ekle" - -#: html/Admin/Global/Scrip.html:83 -msgid "Add a scrip which will apply to all queues" -msgstr "Bütün kuyruklara etki edecek bir senet ekle" - -#: html/Search/Build.html:109 html/Search/Build.html:94 -msgid "Add and Search" -msgstr "Ekle ve Ara" - -#: html/Search/Bulk.html:124 -msgid "Add comments or replies to selected tickets" -msgstr "Seçilen senetlere yorum veya cevap ekle" - -#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 -msgid "Add members" -msgstr "Üye ekle" - -#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 -msgid "Add new watchers" -msgstr "Yeni gözcüler ekle" - -#: html/Search/Build.html:85 -msgid "Add these terms to your search" -msgstr "Aramanıza bu terimleri ekleyin" - -#: html/Search/Bulk.html:158 -msgid "Add values" -msgstr "Değer ekle" - -#: lib/RT/CustomField_Overlay.pm:108 -msgid "Add, delete and modify custom field values for objects" -msgstr "Nesneler için, kişiselleştirilmiş alanları ekleyin, silin ve değiştirin" - -#: lib/RT/Queue_Overlay.pm:763 -#. ($args{'Type'}) -msgid "Added principal as a %1 for this queue" -msgstr "Bu kuyruk için, asıl, %1 olarak eklendi" - -#: lib/RT/Ticket_Overlay.pm:1455 -#. ($self->loc($args{'Type'})) -msgid "Added principal as a %1 for this ticket" -msgstr "Bu bilet için, asıl, %1 olarak eklendi" - -#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 -msgid "Address1" -msgstr "Adres1" - -#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 -msgid "Address2" -msgstr "Adres2" - -#: html/Ticket/Create.html:98 -msgid "Admin Cc" -msgstr "Yönetici Karbon Kopya" - -#: etc/initialdata:295 -msgid "Admin Comment" -msgstr "Yönetici Yorumu" - -#: etc/initialdata:274 -msgid "Admin Correspondence" -msgstr "Yönetici Yazışması" - -#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 -msgid "Admin queues" -msgstr "Yönetici kuyrukları" - - -#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 -msgid "Admin/Global configuration" -msgstr "Yönetici/Küresel ayarlar" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:113 -msgid "AdminCc" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "AdminCustomField" -msgstr "" - -#: lib/RT/Group_Overlay.pm:163 -msgid "AdminGroup" -msgstr "" - -#: lib/RT/Group_Overlay.pm:165 -msgid "AdminGroupMembership" -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 "" - -#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 -msgid "Administrative Cc" -msgstr "Yönetimsel karbon kopya" - -#: html/Ticket/Elements/Tabs:216 -msgid "Advanced" -msgstr "Gelişmiş" - -#: html/Elements/SelectDateRelation:57 -msgid "After" -msgstr "Sonra" - -#: html/Search/Elements/PickCriteria:52 -msgid "Aggregator" -msgstr "Toplayıcı" - -#: etc/initialdata:363 -msgid "All Approvals Passed" -msgstr "Bütün Onaylar Geçti" - -#: html/Admin/Queues/index.html:75 -msgid "All Queues" -msgstr "Bütün Kuyruklar" - -#: html/Search/Elements/EditQuery:56 -msgid "And/Or" -msgstr "Ve/Veya" - -#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 -msgid "Applies to" -msgstr "Etki edeceği bölümler: " - -#: html/Search/Edit.html:64 -msgid "Apply" -msgstr "Uygula" - -#: html/Search/Edit.html:64 -msgid "Apply your changes" -msgstr "Değişikliklerinizi uygulayın" - -#: html/Elements/Tabs:77 -msgid "Approval" -msgstr "Onaylama" - -#: 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 "Onaylama #%1: %2" - -#: html/Approvals/index.html:75 -#. ($ticket->Id) -msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Onaylama #%1: Bir sistem hatası nedeniyle, notlar kaydedilemedi" - -#: html/Approvals/index.html:73 -#. ($ticket->Id) -msgid "Approval #%1: Notes recorded" -msgstr "Onaylama #%1: Notlar kaydedildi" - -#: etc/initialdata:351 -msgid "Approval Passed" -msgstr "Onay Geçti" - -#: etc/initialdata:374 -msgid "Approval Rejected" -msgstr "Onay Reddedildi" - -#: html/Approvals/Elements/Approve:69 -msgid "Approve" -msgstr "Onayla" - -#: etc/initialdata:504 -msgid "Approver's notes: %1" -msgstr "Onaylayanın notları: %1" - -#: lib/RT/Date.pm:444 -msgid "Apr." -msgstr "Nis." - -#: html/Search/Elements/DisplayOptions:81 -msgid "Asc" -msgstr "Art" - -#: html/Elements/SelectSortOrder:56 -msgid "Ascending" -msgstr "Artan" - -#: lib/RT/Queue_Overlay.pm:96 -msgid "Assign and remove custom fields" -msgstr "Kişisel alanları ata ve kaldır" - -#: 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 "Ekle" - -#: html/SelfService/Create.html:92 html/Ticket/Create.html:143 -msgid "Attach file" -msgstr "Dosya ekle" - -#: html/SelfService/Update.html:75 html/Ticket/Create.html:131 html/Ticket/Update.html:94 -msgid "Attached file" -msgstr "Eklenmiş dosya" - -#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 -#. ($Attachment) -msgid "Attachment '%1' could not be loaded" -msgstr "Eklenti '%1' yüklenemiyor" - -#: lib/RT/Transaction_Overlay.pm:489 -msgid "Attachment created" -msgstr "Eklenti oluşturuldu" - -#: lib/RT/Tickets_Overlay.pm:1945 -msgid "Attachment filename" -msgstr "Eklenti dosya adı" - -#: html/Ticket/Elements/ShowAttachments:47 -msgid "Attachments" -msgstr "Eklentiler" - -#: lib/RT/Attributes_Overlay.pm:171 -msgid "Attribute Deleted" -msgstr "Öznitelik Silindi" - -#: lib/RT/Date.pm:448 -msgid "Aug." -msgstr "Ağu." - -#: etc/initialdata:221 -msgid "Autoreply" -msgstr "Otomatik cevap" - -#: etc/initialdata:72 -msgid "Autoreply To Requestors" -msgstr "Ä°stekçileri Otomatik Cevapla" - -#: html/Widgets/SelectionBox:185 -msgid "Available" -msgstr "Hazır" - -#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59 -msgid "Basics" -msgstr "Temeller" - -#: html/Ticket/Update.html:88 -msgid "Bcc" -msgstr "Gizli karbon kopya" - -#: 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 "Değişikliklerinizi kaydettiğinizden emin olun" - -#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:361 -msgid "Before" -msgstr "Önce" - -#: html/Elements/Logo:47 -msgid "Best Practical Solutions, LLC corporate logo" -msgstr "Best Practical Solutions, LLC şirket logosu" - -#: etc/initialdata:217 -msgid "Blank" -msgstr "Boş" - -#: html/Search/Elements/EditFormat:84 -msgid "Bold" -msgstr "Kalın" - -#: html/Search/Results.html:79 -msgid "Bookmarkable link" -msgstr "Yer imi olarak eklenebilir bağlantı" - -#: html/Ticket/Elements/ShowHistory:64 html/Ticket/Elements/ShowHistory:69 -msgid "Brief headers" -msgstr "Kısa başlıklar" - -#: html/Ticket/Elements/Tabs:227 -msgid "Bulk Update" -msgstr "Toplu Güncelleme" - -#: lib/RT/User_Overlay.pm:1853 -msgid "Can not modify system users" -msgstr "Sistem kullanıcıları değiştirilemez" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "Can this principal see this queue" -msgstr "Bu yetkili, bu kuyruğu gördü mü" - -#: lib/RT/CustomField_Overlay.pm:379 -msgid "Can't add a custom field value without a name" -msgstr "Bir ad olmadan, kişisel alan değeri eklenemez" - -#: html/Admin/CustomFields/Objects.html:86 -#. ($Class) -msgid "Can't find a collection class for '%1'" -msgstr "'%1' için bir koleksiyon sınıfı bulunamadı" - -#: html/Search/Build.html:286 -msgid "Can't find a saved search to work with" -msgstr "Üzerinde çalışılabilecek bir kaydedilmiş arama bulunamadı" - -#: lib/RT/Link_Overlay.pm:159 -msgid "Can't link a ticket to itself" -msgstr "Bir bileti kendisine bağlayamazsınız" - -#: html/Widgets/SavedSearch:63 -#. (loc($self->{SearchType})) -msgid "Can't save %1" -msgstr "%1 kaydedilemedi" - -#: html/Search/Build.html:290 -msgid "Can't save this search" -msgstr "Bu arama kaydedilemiyor" - -#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1358 -msgid "Can't specifiy both base and target" -msgstr "Taban ve hedefin ikisini birden belirtemezsiniz" - -#: html/autohandler:204 -#. ($msg) -msgid "Cannot create user: %1" -msgstr "Kullanıcı oluşturulamadı: %1" - -#: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58 -msgid "Category" -msgstr "Kategori" - -#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:88 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:83 lib/RT/ACE_Overlay.pm:112 -msgid "Cc" -msgstr "Karbon kopya" - -#: html/SelfService/Prefs.html:52 -msgid "Change password" -msgstr "Parolayı değiştir" - -#: html/Elements/Submit:78 -msgid "Check All" -msgstr "Hepsini işaretle" - -#: html/SelfService/Update.html:78 html/Ticket/Create.html:134 html/Ticket/Update.html:97 -msgid "Check box to delete" -msgstr "Silmek için kutucuğu işaretleyin" - -#: html/Admin/Elements/SelectRights:55 -msgid "Check box to revoke right" -msgstr "Hak vermek için kutucuğu işaretleyin" - -#: html/Elements/EditLinks:148 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:223 html/Ticket/Elements/BulkLinks:64 -msgid "Children" -msgstr "Çocuklar" - -#: html/NoAuth/js/util.js:201 -msgid "Choose a date" -msgstr "Bir tarih seçin" - -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 -msgid "City" -msgstr "Şehir" - -#: html/Elements/Submit:80 -msgid "Clear All" -msgstr "Hepsini Temizle" - -#: html/Helpers/CalPopup.html:51 -msgid "Close window" -msgstr "Pencereyi Kapat" - -#: html/Ticket/Elements/ShowDates:68 -msgid "Closed" -msgstr "Kapatıldı" - -#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:78 -msgid "Closed tickets" -msgstr "Kapatılmış biletler" - -#: lib/RT/CustomField_Overlay.pm:89 -msgid "Combobox: Select or enter multiple values" -msgstr "Seçim kutusu: Birden fazla değeri seçin veya girin" - -#: lib/RT/CustomField_Overlay.pm:90 -msgid "Combobox: Select or enter one value" -msgstr "Seçim kutusu: Bir tek değeri seçin veya girin" - -#: lib/RT/CustomField_Overlay.pm:91 -msgid "Combobox: Select or enter up to %1 values" -msgstr "Seçim kutusu: 1-%1 arası değer seçin veya girin" - -#: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:185 -msgid "Comment" -msgstr "Yorum" - -#: html/Admin/Queues/Modify.html:79 -msgid "Comment Address" -msgstr "Yorum Adresi" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "Comment on tickets" -msgstr "Biletler üzerine yorum yap" - -#: lib/RT/Queue_Overlay.pm:111 -msgid "CommentOnTicket" -msgstr "" - -#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:75 -msgid "Comments (Not sent to requestors)" -msgstr "Yorumlar (istekçilere gönderilmedi)" - -#: html/Search/Bulk.html:128 -msgid "Comments (not sent to requestors)" -msgstr "Yorumlar (istekçilere gönderilmedi)" - -#: html/Admin/Users/Modify.html:225 html/Ticket/Elements/ShowRequestor:67 -msgid "Comments about this user" -msgstr "Bu kullanıcı hakkındaki yorumlar" - -#: lib/RT/Transaction_Overlay.pm:634 -msgid "Comments added" -msgstr "Yorumlar eklendi" - -#: lib/RT/Action/Generic.pm:175 -msgid "Commit Stubbed" -msgstr "Saplanmışları Ada" - -#: html/Admin/Elements/EditScrip:59 -msgid "Condition" -msgstr "Durum" - -#: lib/RT/Scrip_Overlay.pm:184 -msgid "Condition is mandatory argument" -msgstr "Durum, zorunlu bir argüman" - -#: bin/rt-crontool:151 -msgid "Condition matches..." -msgstr "Durum eşleşiyor..." - -#: lib/RT/Scrip_Overlay.pm:188 -msgid "Condition not found" -msgstr "Durum bulunamadı" - -#: html/Elements/Tabs:84 -msgid "Configuration" -msgstr "Ayarlar" - -#: html/SelfService/Prefs.html:54 -msgid "Confirm" -msgstr "Onayla" - -#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 -msgid "Content" -msgstr "İçerik" - -#: html/Elements/SelectAttachmentField:49 -msgid "Content-Type" -msgstr "" - -#: html/Search/Elements/EditSearches:65 -msgid "Copy" -msgstr "Kopya" - -#: etc/initialdata:286 -msgid "Correspondence" -msgstr "Uygunluk" - -#: lib/RT/Transaction_Overlay.pm:630 -msgid "Correspondence added" -msgstr "Uygunluk eklendi" - -#: lib/RT/Record.pm:1707 -msgid "Could not add new custom field value. " -msgstr "Yeni özel bölüm eklenemiyor. " - -#: lib/RT/Record.pm:1660 -#. (, $value_msg) -msgid "Could not add new custom field value. %1 " -msgstr "Yeni özel bölüm eklenemiyor. %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 "Sahip değiştirilemiyor." - -#: html/Admin/CustomFields/Modify.html:161 -#. ($msg) -msgid "Could not create CustomField" -msgstr "Özel bölüm oluşturulamıyor" - -#: html/Admin/Elements/EditCustomField:113 -#. ($msg) -msgid "Could not create CustomField: %1" -msgstr "Özel bölüm oluşturulamıyor: %1" - -#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 -msgid "Could not create group" -msgstr "Grup oluşturulamıyor" - -#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 -#. ($msg) -msgid "Could not create template: %1" -msgstr "Şablon oluşturulamıyor: %1" - -#: lib/RT/Ticket_Overlay.pm:1075 lib/RT/Ticket_Overlay.pm:407 -msgid "Could not create ticket. Queue not set" -msgstr "Bilet oluşturulamıyor. Kuyruk atanmadı" - -#: lib/RT/User_Overlay.pm:255 lib/RT/User_Overlay.pm:269 lib/RT/User_Overlay.pm:278 lib/RT/User_Overlay.pm:287 lib/RT/User_Overlay.pm:296 lib/RT/User_Overlay.pm:310 lib/RT/User_Overlay.pm:320 lib/RT/User_Overlay.pm:496 -msgid "Could not create user" -msgstr "Kullanıcı oluşturulamıyor" - -#: lib/RT/Queue_Overlay.pm:741 lib/RT/Ticket_Overlay.pm:1423 -msgid "Could not find or create that user" -msgstr "Bu kullanıcı bulunamıyor veya oluşturulamıyor" - -#: lib/RT/Queue_Overlay.pm:802 lib/RT/Ticket_Overlay.pm:1504 -msgid "Could not find that principal" -msgstr "Bu yetkili bulunamıyor" - -#: html/Admin/CustomFields/Objects.html:69 -msgid "Could not load CustomField %1" -msgstr "Özel bölüm yüklenemiyor %1" - -#: html/Admin/Groups/Members.html:112 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 -msgid "Could not load group" -msgstr "Grup yüklenemiyor" - -#: lib/RT/SavedSearch.pm:119 -#. ($privacy) -msgid "Could not load object for %1" -msgstr "%1 için nesne yüklenemiyor" - -#: lib/RT/SavedSearch.pm:197 -msgid "Could not load search attribute" -msgstr "Arama özniteliği yüklenemiyor" - -#: lib/RT/Queue_Overlay.pm:761 -#. ($args{'Type'}) -msgid "Could not make that principal a %1 for this queue" -msgstr "Bu yetkili, bu kuyruk için bir %1 yapılamıyor" - -#: lib/RT/Ticket_Overlay.pm:1444 -#. ($self->loc($args{'Type'})) -msgid "Could not make that principal a %1 for this ticket" -msgstr "Bu yetkili, bu bilet için bir %1 yapılamıyor" - -#: lib/RT/Queue_Overlay.pm:860 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this queue" -msgstr "Bu yetkili, bu kuyruktan %1 olarak ayrılamıyor" - -#: lib/RT/User_Overlay.pm:191 -msgid "Could not set user info" -msgstr "Kullanıcı bilgisi atanamıyor" - -#: lib/RT/Transaction_Overlay.pm:159 -msgid "Couldn't add attachment" -msgstr "Eklenti eklenemiyor" - -#: lib/RT/Group_Overlay.pm:1003 -msgid "Couldn't add member to group" -msgstr "Kullanıcı gruba eklenemiyor" - -#: lib/RT/Record.pm:1719 lib/RT/Record.pm:1771 -#. ($Msg) -msgid "Couldn't create a transaction: %1" -msgstr "Bir hareket oluşturulamıyor: %1" - -#: lib/RT/Record.pm:953 -msgid "Couldn't find row" -msgstr "Satır bulunamadı" - -#: lib/RT/Group_Overlay.pm:977 -msgid "Couldn't find that principal" -msgstr "Bu yetkili bulunamadı" - -#: lib/RT/CustomField_Overlay.pm:409 -msgid "Couldn't find that value" -msgstr "Bu değer bulunamadı" - -#: lib/RT/CurrentUser.pm:145 -#. ($self->Id) -msgid "Couldn't load %1 from the users database.\\n" -msgstr "%1 değeri, kullanıcı veritabanından yüklenemedi.\\n" - -#: html/Admin/CustomFields/UserRights.html:149 -#. ($id) -msgid "Couldn't load Class %1" -msgstr "%1 sınıfı yüklenemedi" - -#: html/Admin/CustomFields/GroupRights.html:107 -#. ($id) -msgid "Couldn't load CustomField %1" -msgstr "Özel bölüm %1 yüklenemedi" - -#: lib/RT/Ticket_Overlay.pm:2016 -#. ($self->Id) -msgid "Couldn't load copy of ticket #%1." -msgstr "#%1 numaralı biletin kopyası yüklenemedi" - -#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 -#. ($id) -msgid "Couldn't load group %1" -msgstr "%1 grubu yüklenemedi" - -#: lib/RT/Link_Overlay.pm:202 lib/RT/Link_Overlay.pm:211 lib/RT/Link_Overlay.pm:238 -msgid "Couldn't load link" -msgstr "Bağlantı yüklenemedi" - -#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 -#. ($id) -msgid "Couldn't load object %1" -msgstr "%1 nesnesi yüklenemedi" - -#: html/Admin/Queues/People.html:142 -#. ($id) -msgid "Couldn't load queue" -msgstr "Kuyruk yüklenemedi" - -#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 -#. ($id) -msgid "Couldn't load queue %1" -msgstr "%1 kuyruğu yüklenemedi" - -#: html/Admin/Elements/EditScrip:126 html/Admin/Elements/EditScrip:167 -#. ($id) -msgid "Couldn't load scrip #%1" -msgstr "Senet #%1 yüklenemedi" - -#: html/SelfService/Display.html:158 lib/RT/Action/CreateTickets.pm:680 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "'%1' bileti yüklenemedi" - -#: lib/RT/Ticket_Overlay.pm:2643 -#. ($args{'URI'}) -msgid "Couldn't resolve '%1' into a URI." -msgstr "'%1' değeri bir URI olarak çözülemiyor" - -#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 -msgid "Country" -msgstr "Ülke" - -#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:133 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:65 html/Ticket/Create.html:168 html/Ticket/Create.html:235 -msgid "Create" -msgstr "Oluştur" - -#: etc/initialdata:135 -msgid "Create Tickets" -msgstr "Bilet Oluştur" - -#: html/Admin/CustomFields/Modify.html:150 html/Admin/Elements/EditCustomField:96 -msgid "Create a CustomField" -msgstr "Özel Bölüm Oluştur" - -#: html/Admin/Queues/CustomField.html:69 -#. ($QueueObj->Name()) -msgid "Create a CustomField for queue %1" -msgstr "%1 kuyruğu için özel bir bölüm oluştur" - - -#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 -msgid "Create a new group" -msgstr "Yeni bir grup oluştur" - -#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 -msgid "Create a new personal group" -msgstr "Yeni bir kişisel grup oluştur" - -#: html/Ticket/Create.html:47 html/Ticket/Create.html:51 html/Ticket/Create.html:60 -msgid "Create a new ticket" -msgstr "YEni bir bilet oluştur" - -#: html/Admin/Users/Modify.html:252 html/Admin/Users/Modify.html:314 -msgid "Create a new user" -msgstr "Yeni bir kullanıcı oluştur" - -#: html/Admin/Queues/Modify.html:125 -msgid "Create a queue" -msgstr "Yeni bir kuyruk oluştur" - -#: html/Admin/Queues/Scrip.html:89 -#. ($QueueObj->Name) -msgid "Create a scrip for queue %1" -msgstr "%1 kuyruğu için yeni bir senet oluştur" - -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 -msgid "Create a template" -msgstr "Bir şablon oluştur" - -#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 -msgid "Create a ticket" -msgstr "Yeni bir bilet oluştur" - -#: etc/initialdata:137 -msgid "Create new tickets based on this scrip's template" -msgstr "Bu senedin şablonunu temel alarak yeni biletler oluştur" - -#: html/SelfService/Create.html:105 -msgid "Create ticket" -msgstr "Yeni bilet oluştur" - -#: lib/RT/Queue_Overlay.pm:109 -msgid "Create tickets in this queue" -msgstr "Bu kuyrukta yeni biletler oluştur" - -#: lib/RT/CustomField_Overlay.pm:106 -msgid "Create, delete and modify custom fields" -msgstr "Özel bölümleri oluştur, sil ve değiştir" - -#: lib/RT/Queue_Overlay.pm:92 -msgid "Create, delete and modify queues" -msgstr "Kuyrukları oluştur, sil ve değiştir" - -#: lib/RT/System.pm:80 -msgid "Create, delete and modify the members of personal groups" -msgstr "Kişisel grup üyelerini oluştur, sil ve değiştir" - -#: lib/RT/System.pm:81 -msgid "Create, delete and modify users" -msgstr "Kullanıcıları oluştur, sil ve değiştir" - -#: 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 "Oluşturuldu" - -#: html/Admin/CustomFields/Modify.html:163 html/Admin/Elements/EditCustomField:117 -#. ($CustomFieldObj->Name()) -msgid "Created CustomField %1" -msgstr "Özel bölüm %1 oluşturuldu" - -#: html/Tools/Reports/Elements/Tabs:63 -msgid "Created in a date range" -msgstr "Bir zaman aralığı içinde oluşturuldu" - -#: html/Tools/Reports/CreatedByDates.html:52 -msgid "Created tickets in period, grouped by status" -msgstr "Bir devir içinde biletle oluşturuldu ve duruma göre sıralandı" - -#: html/Search/Elements/PickBasics:102 -msgid "Creator" -msgstr "Oluşturan" - -#: html/Elements/EditLinks:49 -msgid "Current Links" -msgstr "Geçerli bağlantılar" - -#: html/Admin/Elements/EditScrips:51 -msgid "Current Scrips" -msgstr "Geçerli senetler" - -#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 -msgid "Current members" -msgstr "Geçerli üyeler" - -#: html/Admin/Elements/SelectRights:51 -msgid "Current rights" -msgstr "Geçerli haklar" - -#: html/Search/Elements/EditQuery:47 -msgid "Current search" -msgstr "Geçerli arama" - -#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 -msgid "Current watchers" -msgstr "Geçerli izleyiciler" - -#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:205 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:56 -msgid "Custom Fields" -msgstr "Özel bölümler" - -#: html/Admin/CustomFields/index.html:60 -#. ($lookup) -msgid "Custom Fields for %1" -msgstr "%1 için özel bölümler" - -#: html/Admin/Elements/EditScrip:107 -msgid "Custom action cleanup code" -msgstr "Özel hareket temizleme kodu" - -#: html/Admin/Elements/EditScrip:103 -msgid "Custom action preparation code" -msgstr "Özel hareket hazırlama kodu" - -#: html/Admin/Elements/EditScrip:99 -msgid "Custom condition" -msgstr "Özel durum" - -#: lib/RT/Tickets_Overlay.pm:2424 -#. ($CF->Name) -msgid "Custom field %1 has a value." -msgstr "Özel bölüm %1, bir değere sahip" - -#: lib/RT/Tickets_Overlay.pm:2420 -#. ($CF->Name) -msgid "Custom field %1 has no value." -msgstr "Özel bölüm %1, bir değere sahip değil" - -#: lib/RT/Record.pm:1592 lib/RT/Record.pm:1754 -#. ($args{'Field'}) -msgid "Custom field %1 not found" -msgstr "Özel bölüm %1, bulunamadı" - -#: lib/RT/Report/Tickets.pm:118 lib/RT/Report/Tickets.pm:121 -#. ($cf) -#. ($obj->Name) -msgid "Custom field '%1'" -msgstr "Özel bölüm '%1'" - -#: lib/RT/CustomField_Overlay.pm:1157 -#. ($args{'Content'}, $self->Name) -msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Özel bölüm %2 için, özel bölüm değeri %1 bulunamıyor" - -#: lib/RT/CustomField_Overlay.pm:419 -msgid "Custom field value could not be deleted" -msgstr "Özel bölüm değeri silinemiyor" - -#: lib/RT/CustomField_Overlay.pm:1169 -msgid "Custom field value could not be found" -msgstr "Özel bölüm değeri bulunamıyor" - -#: lib/RT/CustomField_Overlay.pm:1171 lib/RT/CustomField_Overlay.pm:417 -msgid "Custom field value deleted" -msgstr "Özel bölüm değeri silindi" - -#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:638 -msgid "CustomField" -msgstr "Özel Bölüm" - -#: html/Prefs/MyRT.html:78 html/Prefs/Quicksearch.html:70 html/Prefs/Search.html:75 -msgid "Customize" -msgstr "Özelleştir" - -#: html/SelfService/Display.html:61 html/Ticket/Create.html:203 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65 -msgid "Dates" -msgstr "Tarihler" - -#: lib/RT/Date.pm:452 -msgid "Dec." -msgstr "Ara." - -#: etc/initialdata:222 -msgid "Default Autoresponse template" -msgstr "Varsayılan OtoCevap şablonu" - -#: html/Tools/Offline.html:61 -msgid "Default Queue" -msgstr "Varsayılan Kuyruk" - -#: html/Tools/Offline.html:70 -msgid "Default Requestor" -msgstr "Varsayılan Ä°stekçi" - -#: etc/initialdata:296 -msgid "Default admin comment template" -msgstr "Varsayılan yönetici yorum şablonu" - -#: etc/initialdata:275 -msgid "Default admin correspondence template" -msgstr "Varsayılan yönetici cevap şablonu" - -#: etc/initialdata:287 -msgid "Default correspondence template" -msgstr "Varsayılan cevap şablonu" - -#: etc/initialdata:253 -msgid "Default transaction template" -msgstr "Varsayılan hareket şablonu" - -#: html/User/Delegation.html:46 html/User/Delegation.html:49 -msgid "Delegate rights" -msgstr "Yetkileri devret" - -#: lib/RT/System.pm:84 -msgid "Delegate specific rights which have been granted to you." -msgstr "Size verilen belirli yetkileri devredin" - -#: lib/RT/System.pm:84 -msgid "DelegateRights" -msgstr "HaklarıDevret" - -#: html/User/Elements/Tabs:59 -msgid "Delegation" -msgstr "Devretmek" - -#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 html/Widgets/SelectionBox:204 -msgid "Delete" -msgstr "Sil" - -#: html/Admin/Elements/EditTemplates:79 -msgid "Delete Template" -msgstr "" - -#: lib/RT/SavedSearch.pm:220 -#. ($msg) -msgid "Delete failed: %1" -msgstr "Silme işlemi başarısız: %1" - -#: html/Admin/Elements/EditScrips:74 -msgid "Delete selected scrips" -msgstr "Seçilen senetleri sil" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "Delete tickets" -msgstr "Biletleri sil" - -#: html/Search/Bulk.html:159 -msgid "Delete values" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:114 -msgid "DeleteTicket" -msgstr "BiletSil" - -#: lib/RT/SavedSearch.pm:218 -msgid "Deleted search" -msgstr "Arama sil" - -#: lib/RT/Queue_Overlay.pm:394 -msgid "Deleting this object would break referential integrity" -msgstr "Bu nesneyi silmek, tercihli bütünlüğü bozacaktır" - -#: lib/RT/User_Overlay.pm:512 -msgid "Deleting this object would violate referential integrity" -msgstr "Bu nesneyi silmek, tercihli bütünlüğü ihlal edecektir" - -#: html/Approvals/Elements/Approve:73 -msgid "Deny" -msgstr "Reddet" - -#: html/Elements/EditLinks:140 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:221 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53 -msgid "Depended on by" -msgstr "Şunun tarafından bağımlılığa sahip: " - -#: lib/RT/Transaction_Overlay.pm:718 -#. ($value) -msgid "Dependency by %1 added" -msgstr "%1 ile bağımlılık eklendi" - -#: lib/RT/Transaction_Overlay.pm:758 -#. ($value) -msgid "Dependency by %1 deleted" -msgstr "%1 ile bağımlılık silindi" - -#: lib/RT/Transaction_Overlay.pm:715 -#. ($value) -msgid "Dependency on %1 added" -msgstr "%1 için bağımlılık eklendi" - -#: lib/RT/Transaction_Overlay.pm:755 -#. ($value) -msgid "Dependency on %1 deleted" -msgstr "%1 için bağımlılık silindi" - -#: html/Elements/EditLinks:136 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:220 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46 -msgid "Depends on" -msgstr "Bağımlılık" - -#: html/Search/Elements/DisplayOptions:86 -msgid "Desc" -msgstr Azal"" - -#: html/Elements/SelectSortOrder:56 -msgid "Descending" -msgstr "Azalan" - -#: html/SelfService/Create.html:100 html/Ticket/Create.html:152 -msgid "Describe the issue below" -msgstr "Sorunu aşağıda tanımlayın" - -#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:55 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70 -msgid "Description" -msgstr "Tanım" - -#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 -msgid "Display" -msgstr "Görüntüle" - -#: lib/RT/Queue_Overlay.pm:93 -msgid "Display Access Control List" -msgstr "Erişim Denetim Listesini Görüntüle" - -#: html/Search/Elements/DisplayOptions:46 -msgid "Display Columns" -msgstr "Sütunları Görüntüle" - -#: lib/RT/Queue_Overlay.pm:99 -msgid "Display Scrip templates for this queue" -msgstr "Bu kuyruk için senet şablonlarını görüntüle" - -#: lib/RT/Queue_Overlay.pm:102 -msgid "Display Scrips for this queue" -msgstr "Bu kuyruk için senetleri görüntüle" - -#: html/Ticket/Elements/ShowHistory:59 -msgid "Display mode" -msgstr "Görüntüleme kipi" - -#: lib/RT/Group_Overlay.pm:168 -msgid "Display saved searches for this group" -msgstr "Bu grup için, kaydedilmiş aramaları görüntüle" - -#: html/Elements/Footer:61 -msgid "Distributed under version 2 of the GNU GPL." -msgstr "GNU GPL' nin 2. sürümü altında dağıtılmaktadır." - -#: lib/RT/System.pm:75 -msgid "Do anything and everything" -msgstr "Hiçbirşeyi ve herşeyi yapın" - -#: html/Elements/Refresh:51 -msgid "Don't refresh this page." -msgstr "Bu sayfayı yenilemeyin" - -#: html/Ticket/Elements/ShowTransactionAttachments:82 -msgid "Download" -msgstr "Ä°ndir" - -#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 -msgid "Download as a tab-delimited file" -msgstr "Sekme ile ayrılmış dosya olarak indir" - -#: html/Elements/SelectDateType:53 html/Ticket/Create.html:209 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/Reminders:133 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1173 -msgid "Due" -msgstr "Vade" - -#: html/Elements/Quicksearch:48 html/Elements/ShowSearch:49 html/index.html:107 -msgid "Edit" -msgstr "Düzenle" - -#: html/Search/Bulk.html:149 -msgid "Edit Custom Fields" -msgstr "Özel Bölümleri Düzenle" - -#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 -#. ($Object->Name) -msgid "Edit Custom Fields for %1" -msgstr "%1 için özel bölümleri düzenle" - -#: html/Admin/Global/CustomFields/Groups.html:54 -msgid "Edit Custom Fields for all groups" -msgstr "Bütün gruplar için özel bölümleri düzenle" - -#: html/Admin/Global/CustomFields/Users.html:54 -msgid "Edit Custom Fields for all users" -msgstr "Bütün kullanıcılar için özel bölümleri düzenle" - -#: html/Admin/Global/CustomFields/Queue-Tickets.html:54 html/Admin/Global/CustomFields/Queue-Transactions.html:54 -msgid "Edit Custom Fields for tickets in all queues" -msgstr "Bütün kuyruklardaki bütün biletler için özel bölümleri düzenle" - -#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57 -msgid "Edit Links" -msgstr "Bağlantıları Düzenle" - -#: html/Search/Edit.html:68 -msgid "Edit Query" -msgstr "Sorguyu Düzenle" - -#: html/Ticket/Elements/Tabs:214 -msgid "Edit Search" -msgstr "Aramayı Düzenle" - -#: html/Admin/Queues/Templates.html:63 -#. ($QueueObj->Name) -msgid "Edit Templates for queue %1" -msgstr "%1 kuyruğundaki şablonları düzenle" - -#: lib/RT/Group_Overlay.pm:167 -msgid "Edit saved searches for this group" -msgstr "Bu grup için kaydedilmiş aramaları düzenle" - -#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 -msgid "Edit system templates" -msgstr "Sistem şablonlarını düzenle" - -#: lib/RT/Group_Overlay.pm:167 -msgid "EditSavedSearches" -msgstr "KaydedilmişAramalarıDüzenle" - -#: html/Admin/Queues/Modify.html:140 -#. ($QueueObj->Name) -msgid "Editing Configuration for queue %1" -msgstr "%1 kuyruğunun ayarları düzenleniyor" - -#: html/Admin/CustomFields/Modify.html:167 html/Admin/Elements/EditCustomField:120 -#. ($CustomFieldObj->Name()) -msgid "Editing CustomField %1" -msgstr "Özel bölüm %1 düzenleniyor" - -#: html/Admin/Groups/Members.html:53 -#. ($Group->Name) -msgid "Editing membership for group %1" -msgstr "%1 grubu için üyelik düzenleniyor" - -#: html/User/Groups/Members.html:150 -#. ($Group->Name) -msgid "Editing membership for personal group %1" -msgstr "Özel grup %1 için üyelik düzenleniyor" - -#: lib/RT/Record.pm:1295 lib/RT/Record.pm:1372 lib/RT/Ticket_Overlay.pm:2518 lib/RT/Ticket_Overlay.pm:2608 -msgid "Either base or target must be specified" -msgstr "Taban veya hedef belirtilmeli" - -#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 -msgid "Email" -msgstr "Eposta" - -#: lib/RT/User_Overlay.pm:235 -msgid "Email address in use" -msgstr "Eposta adresi kullanımda" - -#: html/Admin/CustomFields/Modify.html:98 html/Admin/Elements/EditCustomField:72 -msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Etkinleştirildi (Bu kutudaki işareti kaldırmak, bu özel bölümü iptal eder)" - -#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 -msgid "Enabled (Unchecking this box disables this group)" -msgstr "Etkinleştirildi (Bu kutudaki işareti kaldırmak, bu grubu iptal eder)" - -#: html/Admin/Queues/Modify.html:105 -msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Etkinleştirildi (Bu kutudaki işareti kaldırmak, bu kuyruğu iptal eder)" - -#: html/Admin/Queues/index.html:78 -msgid "Enabled Queues" -msgstr "Etkinleştirilmiş Kuyruklar" - -#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:350 html/User/Groups/Modify.html:138 -#. (loc_fuzzy($msg)) -msgid "Enabled status %1" -msgstr "Etkinleştirilme durumu %1" - -#: html/Admin/CustomFields/Modify.html:185 html/Admin/Queues/Modify.html:162 -#. (loc_fuzzy($msg)) -msgid "Enabled status: %1" -msgstr "Etkinleştirilme durumu %1" - -#: lib/RT/CustomField_Overlay.pm:64 -msgid "Enter multiple values" -msgstr "Çoklu değer girin" - -#: html/Elements/EditLinks:126 -msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." -msgstr "Bu nesneleri bağlamak için, nesneler veya URIler girin. Çoklu girdileri boşluk ile ayırın." - -#: lib/RT/CustomField_Overlay.pm:65 -msgid "Enter one value" -msgstr "Bir değer girin" - -#: html/Elements/EditLinks:123 -msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." -msgstr "Bu kuyrukları bağlamak için, kuyruklar veya URIler girin. Çoklu girdileri boşluk ile ayırın." - -#: html/Elements/EditLinks:119 html/Search/Bulk.html:189 -msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." -msgstr "Bu biletleri bağlamak için, biletler veya URIler girin. Çoklu girdileri boşluk ile ayırın." - -#: lib/RT/CustomField_Overlay.pm:66 -msgid "Enter up to %1 values" -msgstr "%1 adet değer girin" - -#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47 -msgid "Error" -msgstr "Hata" - -#: lib/RT/Queue_Overlay.pm:672 -msgid "Error in parameters to Queue->AddWatcher" -msgstr "Queue->AddWatcher için geçilen parametrelerde hata var" - -#: lib/RT/Queue_Overlay.pm:833 -msgid "Error in parameters to Queue->DeleteWatcher" -msgstr "Queue->DeleteWatcher için geçilen parametrelerde hata var" - -#: lib/RT/Ticket_Overlay.pm:1372 -msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Ticket->AddWatcher için geçilen parametrelerde hata var" - -#: lib/RT/Ticket_Overlay.pm:1538 -msgid "Error in parameters to Ticket->DeleteWatcher" -msgstr "Ticket->DeleteWatcher için geçilen parametrelerde hata var" - -#: bin/rt-crontool:285 -msgid "Escalate tickets" -msgstr "Biletleri Yükselt" - -#: html/Ticket/Elements/ShowBasics:57 -msgid "Estimated" -msgstr "Tahmini" - -#: etc/initialdata:20 -msgid "Everyone" -msgstr "Herkes" - -#: bin/rt-crontool:271 -msgid "Example:" -msgstr "Örnek:" - -#: html/Admin/Users/Modify.html:99 -msgid "Extra info" -msgstr "Ek Bilgi" - -#: lib/RT/SavedSearch.pm:177 -msgid "Failed to create search attribute" -msgstr "Arama özniteliği oluşturulamadı" - -#: lib/RT/User_Overlay.pm:376 -msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "'Ayrıcalıklı' sahte kullanıcı grubu bulunamadı" - -#: lib/RT/User_Overlay.pm:383 -msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "'Ayrıcalıksız' sahte kullanıcı grubu bulunamadı" - -#: bin/rt-crontool:206 -#. ($modname, $@) -msgid "Failed to load module %1. (%2)" -msgstr "%1 modülü yüklenemedi. (%2)" - -#: lib/RT/SavedSearch.pm:152 -#. ($privacy) -msgid "Failed to load object for %1" -msgstr "%1 için nesne yüklenemedi" - -#: lib/RT/Date.pm:442 -msgid "Feb." -msgstr "Şub." - -#: html/Elements/SelectAttachmentField:50 -msgid "Filename" -msgstr "Dosya adı" - -#: lib/RT/CustomField_Overlay.pm:69 -msgid "Fill in multiple text areas" -msgstr "Çoklu metin alanları doldur" - -#: lib/RT/CustomField_Overlay.pm:74 -msgid "Fill in multiple wikitext areas" -msgstr "Çoklu wikimetin alanları doldur" - -#: lib/RT/CustomField_Overlay.pm:70 -msgid "Fill in one text area" -msgstr "Tek bir metin alanı doldur" - -#: lib/RT/CustomField_Overlay.pm:75 -msgid "Fill in one wikitext area" -msgstr "Tek bir wikimetin alanı doldur" - -#: html/Admin/CustomFields/Modify.html:107 html/Admin/CustomFields/Modify.html:118 -msgid "Fill in this field with a URL." -msgstr "Bu bölümü bir URL ile doldur" - -#: lib/RT/CustomField_Overlay.pm:71 -msgid "Fill in up to %1 text areas" -msgstr "En fazla %1 adet metin alanı doldur" - -#: lib/RT/CustomField_Overlay.pm:76 -msgid "Fill in up to %1 wikitext areas" -msgstr "En fazla %1 adet wikimetin alanı doldur" - -#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:182 html/Ticket/Elements/EditBasics:97 lib/RT/Tickets_Overlay.pm:1841 -msgid "Final Priority" -msgstr "Son Öncelik" - -#: lib/RT/Ticket_Overlay.pm:1164 -msgid "FinalPriority" -msgstr "SonÖncelik" - -#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 -msgid "Find groups whose" -msgstr "Grupları bul:" - -#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 -msgid "Find people whose" -msgstr "Kişileri bul:" - -#: html/Search/Results.html:147 -msgid "Find tickets" -msgstr "Biletleri bul" - -#: html/Ticket/Elements/Tabs:81 -msgid "First" -msgstr "Ä°lk" - -#: 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 "Değişikliği zorla" - -#: html/Search/Elements/EditFormat:52 -msgid "Format" -msgstr "Biçim" - -#: html/Search/Results.html:145 -#. ($ticketcount) -msgid "Found %quant(%1,ticket)" -msgstr "%quant(%1,ticket) bulundu" - -#: lib/RT/Record.pm:956 -msgid "Found Object" -msgstr "Nesne bulundu" - -#: lib/RT/Date.pm:421 -msgid "Fri." -msgstr "Cum." - -#: html/Ticket/Elements/ShowHistory:66 html/Ticket/Elements/ShowHistory:72 -msgid "Full headers" -msgstr "Tüm Başlıklar" - -#: html/Tools/Offline.html:85 -msgid "Get template from file" -msgstr "Dosyadan şablon al" - -#: lib/RT/Transaction_Overlay.pm:684 -#. ($New->Name) -msgid "Given to %1" -msgstr "Verilen: %1" - -#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 -msgid "Global" -msgstr "Küresel" - -#: html/Admin/Elements/EditCustomFields:55 -msgid "Global Custom Fields" -msgstr "Küresel Özel Alanlar" - -#: html/Admin/Global/CustomFields/index.html:59 -msgid "Global custom field configuration" -msgstr "Küresel Özel Alan Ayarları" - -#: html/Admin/Global/MyRT.html:48 -#. ($pane) -msgid "Global portlet %1 saved." -msgstr "Küresel portlet %1 kaydedildi" - -#: html/Admin/Elements/SelectTemplate:59 -#. (loc($Template->Name)) -msgid "Global template: %1" -msgstr "Küresel şablon: %1" - -#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:89 -msgid "Go" -msgstr "Git" - -#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57 -msgid "Go!" -msgstr "Git!" - -#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 -msgid "Goto ticket" -msgstr "Bilete git" - -#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 -msgid "Group" -msgstr "Grup" - -#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76 -msgid "Group Rights" -msgstr "Grup Yetkileri" - -#: lib/RT/Group_Overlay.pm:983 -msgid "Group already has member" -msgstr "Grup üyeye sahip" - -#: html/Admin/Groups/Modify.html:109 -#. ($create_msg) -msgid "Group could not be created: %1" -msgstr "Grup oluşturulamıyor: %1" - -#: lib/RT/Group_Overlay.pm:521 -msgid "Group created" -msgstr "Grup oluşturuldu" - -#: lib/RT/Group_Overlay.pm:1155 -msgid "Group has no such member" -msgstr "Grupta böyle bir üye yok" - -#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:748 lib/RT/Queue_Overlay.pm:808 lib/RT/Ticket_Overlay.pm:1430 lib/RT/Ticket_Overlay.pm:1510 -msgid "Group not found" -msgstr "Grup bulunamadı" - -#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:57 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:86 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1210 -msgid "Groups" -msgstr "Gruplar" - -#: lib/RT/Group_Overlay.pm:989 -msgid "Groups can't be members of their members" -msgstr "Gruplar, üyelerinin üyeleri olamazlar" - -#: html/Admin/Groups/index.html:86 -msgid "Groups matching search criteria" -msgstr "Arama kıstaslarına uyan gruplar" - -#: html/Ticket/Elements/ShowRequestor:77 -msgid "Groups this user belongs to" -msgstr "Bu kullanıcının kayıtlı olduğu gruplar" - -#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 -msgid "Hello!" -msgstr "Merhaba!" - -#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 -#. ($name) -msgid "Hello, %1" -msgstr "Merhaba, %1" - -#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:53 html/Ticket/Elements/Tabs:111 -msgid "History" -msgstr "Geçmiş" - -#: html/Admin/Groups/History.html:62 -#. ($GroupObj->Name) -msgid "History of the group %1" -msgstr "%1 grubunun geçmişi" - -#: html/Admin/Users/History.html:62 -#. ($UserObj->Name) -msgid "History of the user %1" -msgstr "%1 üyesinin geçmişi" - -#: html/Elements/Tabs:65 -msgid "Homepage" -msgstr "Ev Sayfası" - -#: html/Elements/SelectTimeUnits:48 -msgid "Hours" -msgstr "Saat" - -#: lib/RT/Base.pm:119 -#. (6) -msgid "I have %quant(%1,concrete mixer)." -msgstr "" - -#: html/Search/Build.html:460 lib/RT/Report/Tickets.pm:415 -msgid "I'm lost" -msgstr "Kayboldum" - -#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1766 -msgid "Id" -msgstr "Numara" - -#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 -msgid "Identity" -msgstr "Kimlik" - -#: etc/initialdata:429 -msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "Eğer bir onaylama reddedilmişse, özgün kaydı reddet ve bekleyen onayları sil" - -#: html/Tools/Offline.html:74 -msgid "If no Requestor is specified, create tickets with this requestor." -msgstr "Eğer bir istekçi belirtilmemişse, biletleri, bu istekçi üzerinden oluştur" - -#: html/Tools/Offline.html:65 -msgid "If no queue is specified, create tickets in this queue." -msgstr "Eğer bir kuyruk belirtilmemişse, biletleri bu kuyrukta oluştur." - -#: bin/rt-crontool:267 -msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT." -msgstr "Eğer bu araş setgid ise, saldırgan bir yerel kullanıcı, bu aracı kullanarak RT' ye yönetici erişimi hakkı kazanabilir." - -#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:60 -msgid "If you've updated anything above, be sure to" -msgstr "Eğer yukarıda herhangi bir şeyi değiştirdiyseniz, mutlaka" - -#: lib/RT/Record.pm:947 -msgid "Illegal value for %1" -msgstr "%1 için geçersiz değer" - -#: lib/RT/Record.pm:950 -msgid "Immutable field" -msgstr "Değişmez alan" - -#: html/Admin/Groups/index.html:65 -msgid "Include disabled groups in listing." -msgstr "Listelerken, etkinleştirilmemiş grupları ekle" - -#: html/Admin/Queues/index.html:65 -msgid "Include disabled queues in listing." -msgstr "Listelerken, etkinleştirilmemiş kuyrukları ekle" - -#: html/Admin/Users/index.html:71 -msgid "Include disabled users in search." -msgstr "Listelerken, iptal edilmiş üyeleri ekle" - -#: html/Admin/CustomFields/Modify.html:113 -msgid "Include page" -msgstr "Sayfayı İçer" - -#: html/Search/Build.html:486 lib/RT/Report/Tickets.pm:441 -msgid "Incomplete Query" -msgstr "Eksik Sorgu" - -#: html/Search/Build.html:483 lib/RT/Report/Tickets.pm:438 -msgid "Incomplete query" -msgstr "Eksik sorgu" - -#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1816 -msgid "Initial Priority" -msgstr "Başlangıç Önceliği" - -#: lib/RT/Ticket_Overlay.pm:1163 lib/RT/Ticket_Overlay.pm:1165 -msgid "InitialPriority" -msgstr "BaşlangıçÖnceliği" - -#: lib/RT/ScripAction_Overlay.pm:133 -msgid "Input error" -msgstr "Girdi Hatası" - -#: 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 "Girdi, %1 ile eşleşmeli" - -#: lib/RT/Ticket_Overlay.pm:3503 -msgid "Internal Error" -msgstr "İç Hata" - -#: lib/RT/Record.pm:308 -#. ($id->{error_message}) -msgid "Internal Error: %1" -msgstr "İç Hata: %1" - -#: lib/RT/Group_Overlay.pm:668 -msgid "Invalid Group Type" -msgstr Geçersiz Grup Türü" - -#: lib/RT/Principal_Overlay.pm:161 -msgid "Invalid Right" -msgstr "Geçersiz Hak" - -#: lib/RT/Record.pm:952 -msgid "Invalid data" -msgstr "Geçersiz veri" - -#: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:678 -#. ($msg) -msgid "Invalid pattern: %1" -msgstr "Geçersiz desen: %1" - -#: lib/RT/Scrip_Overlay.pm:157 lib/RT/Template_Overlay.pm:244 -msgid "Invalid queue" -msgstr "Geçersiz kuyruk" - -#: lib/RT/ACE_Overlay.pm:264 lib/RT/ACE_Overlay.pm:273 lib/RT/ACE_Overlay.pm:279 lib/RT/ACE_Overlay.pm:290 -msgid "Invalid right" -msgstr "Geçersiz hak" - -#: lib/RT/Record.pm:283 -#. ($key) -msgid "Invalid value for %1" -msgstr "%1 için geçersiz değer" - -#: lib/RT/Record.pm:1610 -msgid "Invalid value for custom field" -msgstr "Özel alan için geçersiz değer" - -#: lib/RT/Ticket_Overlay.pm:424 -msgid "Invalid value for status" -msgstr "Durum için geçersiz değer" - -#: bin/rt-crontool:268 -msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Yetkisiz kullanıcıların, bu aracı kullanmasını engellemek çok önemlidir." - -#: bin/rt-crontool:269 -msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool." -msgstr "Bu araca erişim için, doğru grup üyeliğiyle yetkisiz bir unix kullanıcısı oluşturmanız ve RT erişimi vermeniz gerekmektedir." - -#: bin/rt-crontool:231 -msgid "It takes several arguments:" -msgstr "Çeşitli argümanlar alır:" - -#: html/Search/Elements/EditFormat:85 -msgid "Italic" -msgstr "Eğik" - -#: lib/RT/Date.pm:441 -msgid "Jan." -msgstr "Oca." - -#: lib/RT/Group_Overlay.pm:166 -msgid "Join or leave this group" -msgstr "Bu gruba katılın veya ayrılın" - -#: lib/RT/Date.pm:447 -msgid "Jul." -msgstr "Tem." - -#: html/Ticket/Elements/Tabs:125 -msgid "Jumbo" -msgstr "" - -#: lib/RT/Date.pm:446 -msgid "Jun." -msgstr "Haz." - -#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 -msgid "Language" -msgstr "Dil" - -#: html/Search/Elements/EditFormat:79 -msgid "Large" -msgstr "Geniş" - -#: html/Ticket/Elements/Tabs:96 -msgid "Last" -msgstr "Son" - -#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 -msgid "Last Contact" -msgstr "Son Temas" - -#: html/Elements/SelectDateType:50 -msgid "Last Contacted" -msgstr "Son Temasedilen" - -#: html/Elements/SelectDateType:51 -msgid "Last Updated" -msgstr "Son Güncelleme" - -#: html/Search/Elements/PickBasics:103 -msgid "LastUpdatedBy" -msgstr "SonGüncelleyen" - -#: html/Ticket/Elements/ShowBasics:68 -msgid "Left" -msgstr "Kalan" - -#: html/Admin/Users/Modify.html:109 -msgid "Let this user access RT" -msgstr "Bu kullanıcının RT' ye erişimine izin ver" - -#: html/Admin/Users/Modify.html:113 -msgid "Let this user be granted rights" -msgstr "Bu kullanıcının yetkiye sahip olmasına izin ver" - -#: html/Search/Elements/EditFormat:68 -msgid "Link" -msgstr "Bağlantı" - -#: lib/RT/Record.pm:1306 -msgid "Link already exists" -msgstr "Bağlantı mevcut" - -#: lib/RT/Record.pm:1320 -msgid "Link could not be created" -msgstr "Bağlantı oluşturulamıyor" - -#: lib/RT/Record.pm:1326 -#. ($TransString) -msgid "Link created (%1)" -msgstr "Bağlantı oulşturuldu (%1)" - -#: lib/RT/Record.pm:1387 -#. ($TransString) -msgid "Link deleted (%1)" -msgstr "Bağlantı silindi (%1)" - -#: lib/RT/Record.pm:1393 -msgid "Link not found" -msgstr "Bağlantı bulunamadı" - -#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 -#. ($Ticket->Id) -msgid "Link ticket #%1" -msgstr "Bileti bağla #%1" - -#: html/Admin/CustomFields/Modify.html:102 -msgid "Link values to" -msgstr "Değerleri bağla:" - -#: lib/RT/Ticket_Overlay.pm:700 -msgid "Linking. Permission denied" -msgstr "Bağlanıyor. Erişim reddedildi" - -#: html/Ticket/Create.html:216 html/Ticket/Elements/ShowSummary:89 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 -msgid "Links" -msgstr "Bağlantılar" - -#: html/Search/Elements/EditSearches:75 -msgid "Load" -msgstr "Yükle" - -#: html/Search/Elements/EditSearches:73 -msgid "Load saved search:" -msgstr "Kaydedilmiş aramayı yükle:" - -#: lib/RT/System.pm:86 -msgid "LoadSavedSearch" -msgstr "" - -#: html/Admin/Tools/Configuration.html:64 -msgid "Loaded perl modules" -msgstr "Yüklenmiş Perl modülleri" - -#: lib/RT/SavedSearch.pm:111 -#. ($self->Name) -msgid "Loaded search %1" -msgstr "Yüklenmiş arama %1" - -#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 -msgid "Location" -msgstr "Konum" - -#: html/Elements/Header:91 -#. ("".$session{'CurrentUser'}->Name."") -msgid "Logged in as %1" -msgstr "%1 olarak giriş yapıldı" - -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797 -msgid "Login" -msgstr "Giriş yap" - -#: html/Elements/Header:101 -msgid "Logout" -msgstr "Çık" - -#: lib/RT/CustomField_Overlay.pm:932 -msgid "Lookup type mismatch" -msgstr "Arama türü eşleşmedi" - -#: html/Search/Bulk.html:82 -msgid "Make Owner" -msgstr "Yapım Sahibi" - -#: html/Search/Bulk.html:106 -msgid "Make Status" -msgstr "Yapım Durumu" - -#: html/Search/Bulk.html:114 -msgid "Make date Due" -msgstr "Yapım Zamanlaması" - -#: html/Search/Bulk.html:116 -msgid "Make date Resolved" -msgstr "Yapım tarihi Çözümlendi" - -#: html/Search/Bulk.html:110 -msgid "Make date Started" -msgstr "Yapma tarihi Başladı" - -#: html/Search/Bulk.html:108 -msgid "Make date Starts" -msgstr "Yapma tarihi Başlangıcı" - -#: html/Search/Bulk.html:112 -msgid "Make date Told" -msgstr "Yapım tarihi Belirtilen" - -#: html/Search/Bulk.html:102 -msgid "Make priority" -msgstr "Yapım önceliği" - -#: html/Search/Bulk.html:104 -msgid "Make queue" -msgstr "Yapım kuyruğu" - -#: html/Search/Bulk.html:100 -msgid "Make subject" -msgstr "Yapım başlığı" - -#: lib/RT/Group_Overlay.pm:169 -msgid "Make this group visible to user" -msgstr "Bu grubun, kullanıcıya görünür olmasını sağla" - -#: html/Admin/index.html:78 -msgid "Manage custom fields and custom field values" -msgstr "Özel alanları ve özel alan değerlerini yönet" - -#: html/Admin/index.html:69 -msgid "Manage groups and group membership" -msgstr "Grupları ve grup üyeliklerini yönet" - -#: html/Admin/index.html:85 -msgid "Manage properties and configuration which apply to all queues" -msgstr "Bütün kuyruklara etki eden özellikleri ve ayarları yönetin" - -#: html/Admin/index.html:74 -msgid "Manage queues and queue-specific properties" -msgstr "Kuyrukları ve kuyruğa-özel özellikleri yönetin" - -#: html/Admin/index.html:64 -msgid "Manage users and passwords" -msgstr "Kullanıcıları ve parolaları yönetin" - -#: lib/RT/Date.pm:443 -msgid "Mar." -msgstr "Mar." - -#: lib/RT/Date.pm:445 -msgid "May." -msgstr "May." - -#: lib/RT/Transaction_Overlay.pm:731 -#. ($value) -msgid "Member %1 added" -msgstr "Üye %1 eklendi" - -#: lib/RT/Transaction_Overlay.pm:771 -#. ($value) -msgid "Member %1 deleted" -msgstr "Üye %1 silindi" - -#: lib/RT/Group_Overlay.pm:1000 -msgid "Member added" -msgstr "Üye eklendi" - -#: lib/RT/Group_Overlay.pm:1162 -msgid "Member deleted" -msgstr "Üye Silindi" - -#: lib/RT/Group_Overlay.pm:1166 -msgid "Member not deleted" -msgstr "Üye Silinemedi" - -#: html/Elements/SelectLinkType:47 -msgid "Member of" -msgstr "Üye olduğu yer:" - -#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 -msgid "Members" -msgstr "Üyeler" - -#: lib/RT/Transaction_Overlay.pm:728 -#. ($value) -msgid "Membership in %1 added" -msgstr "%1 için üyelik eklendi" - -#: lib/RT/Transaction_Overlay.pm:768 -#. ($value) -msgid "Membership in %1 deleted" -msgstr "%1 için üyelik silindi" - -#: html/Admin/Elements/UserTabs:61 -msgid "Memberships" -msgstr "Üyelikler" - -#: html/Admin/Users/Memberships.html:60 -#. ($UserObj->Name) -msgid "Memberships of the user %1" -msgstr "%1 üyesinin üyelikleri" - -#: lib/RT/Ticket_Overlay.pm:2893 -msgid "Merge Successful" -msgstr "Birleştirme başarılı" - -#: lib/RT/Ticket_Overlay.pm:2780 -msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Birleştirme başarısız. Etkin Numara atanamıyor" - -#: lib/RT/Ticket_Overlay.pm:2788 -msgid "Merge failed. Couldn't set Status" -msgstr "Birleştirme başarısız. Durum atanamıyor" - -#: html/Elements/EditLinks:131 html/Ticket/Elements/BulkLinks:48 -msgid "Merge into" -msgstr "Şununla birleştir: " - -#: lib/RT/Transaction_Overlay.pm:734 -#. ($value) -msgid "Merged into %1" -msgstr "%1 içinde birleştirildi" - -#: html/Search/Bulk.html:143 html/Ticket/Update.html:118 -msgid "Message" -msgstr "Ä°leti" - -#: html/Ticket/Elements/ShowTransactionAttachments:164 -msgid "Message body not shown because it is too large or is not plain text." -msgstr "Ä°leti gövdesi, çok büyük veya düz metin olmadığından gösterilmiyor." - -#: lib/RT/Ticket_Overlay.pm:2451 -msgid "Message could not be recorded" -msgstr "Ä°leti kaydedilemedi" - -#: lib/RT/Ticket_Overlay.pm:2454 -msgid "Message recorded" -msgstr "Ä°leti kaydedildi" - -#: html/Ticket/Elements/PreviewScrips:122 -msgid "Messages about this ticket will not be sent to..." -msgstr "Bu bilet hakkındaki iletiler gönderilmeyecek..." - -#: html/Elements/SelectTimeUnits:47 -msgid "Minutes" -msgstr "Dakika" - -#: html/Search/Build.html:490 lib/RT/Report/Tickets.pm:445 -msgid "Mismatched parentheses" -msgstr "Eşleşmemiş parantezler" - -#: lib/RT/Record.pm:954 -msgid "Missing a primary key?: %1" -msgstr "Başlıca anahtarlardan birisi eksik mi?: %1" - -#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:92 -msgid "Mobile" -msgstr "Hareketli" - -#: lib/RT/Queue_Overlay.pm:94 -msgid "Modify Access Control List" -msgstr "Erişim Denetim listesini Değiştir" - -#: html/Admin/Elements/ObjectCustomFields:96 -#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) -msgid "Modify Custom Fields which apply to %1 for all %2" -msgstr "Bütün %2 için, %1 etki eden bütün özel alanları değiştir" - -#: html/Admin/Elements/ObjectCustomFields:98 -#. (loc(lc($Types))) -msgid "Modify Custom Fields which apply to all %1" -msgstr "Bütün %1 etki eden özel alanları değiştir" - -#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 -msgid "Modify Group Rights" -msgstr "Grup yetkilerini değiştir" - -#: html/Admin/Groups/Members.html:105 html/User/Groups/Members.html:101 -msgid "Modify Members" -msgstr "Üyeleri Değiştir" - -#: html/User/Delegation.html:58 -msgid "Modify Rights" -msgstr "Yetkileri Değiştir" - -#: lib/RT/Queue_Overlay.pm:97 -msgid "Modify Scrip templates for this queue" -msgstr "Bu kuyruk için, senet şablonlarını değiştir" - -#: lib/RT/Queue_Overlay.pm:100 -msgid "Modify Scrips for this queue" -msgstr "Bu kuyruk için senetleri değiştir" - -#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 -msgid "Modify User Rights" -msgstr "Kullanıcı haklarını değiştir" - -#: html/Admin/Queues/CustomField.html:66 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" -msgstr "%1 kuyruğu için bir ÖzelAlanı değiştir" - -#: html/Admin/Queues/Scrip.html:82 -#. ($QueueObj->Name) -msgid "Modify a scrip for queue %1" -msgstr "%1 kuyruğu için bir senet değiştir" - -#: html/Admin/Global/Scrip.html:75 -msgid "Modify a scrip which applies to all queues" -msgstr "Bütün kuyruklara etki eden bir senedi değiştir" - -#: html/Admin/CustomFields/Objects.html:90 -#. ($CF->Name) -msgid "Modify associated objects for %1" -msgstr "%1 için, ilişkili nesneleri değiştir" - -#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 -#. ($TicketObj->Id) -msgid "Modify dates for #%1" -msgstr "#%1 için tarihleri değiştir" - -#: html/Ticket/ModifyDates.html:57 -#. ($TicketObj->Id) -msgid "Modify dates for ticket # %1" -msgstr "Bilet # %1 için, tarihleri değiştir" - -#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 -msgid "Modify global custom fields" -msgstr "Küresel özel alanları değiştir" - -#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77 -msgid "Modify global group rights" -msgstr "Küresel grup izinlerini değiştir" - -#: html/Admin/Global/GroupRights.html:54 -msgid "Modify global group rights." -msgstr "Küresel grup izinlerini değiştir." - -#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 -msgid "Modify global user rights" -msgstr "Küresel kullanıcı izinlerini değiştir" - -#: html/Admin/Global/UserRights.html:54 -msgid "Modify global user rights." -msgstr "Küresel kullanıcı izinlerini değiştir." - -#: lib/RT/Group_Overlay.pm:163 -msgid "Modify group metadata or delete group" -msgstr "Grup mal bilgisini değiştir veya grubu sil" - -#: html/Admin/CustomFields/GroupRights.html:164 -#. ($CustomFieldObj->Name) -msgid "Modify group rights for custom field %1" -msgstr "Özel alan %1 için grup izinlerini değiştir" - -#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 -#. ($GroupObj->Name) -msgid "Modify group rights for group %1" -msgstr "%1 grubu için, grup izinlerini değiştir." - -#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 -#. ($QueueObj->Name) -msgid "Modify group rights for queue %1" -msgstr "%1 kuyruğu için, grup izinlerini değiştir." - -#: lib/RT/Group_Overlay.pm:165 -msgid "Modify membership roster for this group" -msgstr "Bu grup için, üyelik listesini değiştir" - -#: lib/RT/System.pm:82 -msgid "Modify one's own RT account" -msgstr "Kişinin kendi RT hesabını değiştir" - -#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 -#. ($QueueObj->Name) -msgid "Modify people related to queue %1" -msgstr "%1 ile ilişkili kişileri değiştir" - -#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:57 -#. ($Ticket->id) -#. ($Ticket->Id) -msgid "Modify people related to ticket #%1" -msgstr "%1 bileti ile ilişkili kişileri değiştir" - -#: html/Admin/Queues/Scrips.html:67 -#. ($QueueObj->Name) -msgid "Modify scrips for queue %1" -msgstr "%1 kuyruğu için senetleri değiştir" - -#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63 -msgid "Modify scrips which apply to all queues" -msgstr "Bütn kuyruklara etki eden senetleri değiştir" - -#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99 -#. (loc($TemplateObj->Name())) -#. ($TemplateObj->id) -msgid "Modify template %1" -msgstr "%1 şablonunu değiştir" - -#: html/Admin/Global/Templates.html:65 -msgid "Modify templates which apply to all queues" -msgstr "Bütün kuyruklara etki eden şablonları değiştir" - -#: html/Admin/Global/index.html:85 -msgid "Modify the default \"RT at a glance\" view" -msgstr "Varsayılan \"Bir bakışta RT\" görünümünü değiştir" - -#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 -#. ($Group->Name) -msgid "Modify the group %1" -msgstr "%1 grubunu değiştir" - -#: lib/RT/Queue_Overlay.pm:95 -msgid "Modify the queue watchers" -msgstr "Kuyruk gözcülerini değiştir" - -#: html/Admin/Users/Modify.html:309 -#. ($UserObj->Name) -msgid "Modify the user %1" -msgstr "%1 kullanıcısını değiştir" - -#: html/Ticket/ModifyAll.html:58 -#. ($Ticket->Id) -msgid "Modify ticket # %1" -msgstr "#%1 biletini değiştir" - -#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 -#. ($TicketObj->Id) -msgid "Modify ticket #%1" -msgstr "#%1 biletini değiştir" - -#: lib/RT/Queue_Overlay.pm:113 -msgid "Modify tickets" -msgstr "Biletleri değiştir" - -#: html/Admin/CustomFields/UserRights.html:157 -#. ($CustomFieldObj->Name) -msgid "Modify user rights for custom field %1" -msgstr "Özel alan %1 için kullanıcı haklarını değiştir" - -#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 -#. ($GroupObj->Name) -msgid "Modify user rights for group %1" -msgstr "%1 grubu için kullanıcı haklarını değiştir" - -#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 -#. ($QueueObj->Name) -msgid "Modify user rights for queue %1" -msgstr "%1 kuyruğu için kullanıcı haklarını değiştir" - -#: 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 "" - -#: lib/RT/Date.pm:417 -msgid "Mon." -msgstr "Pzt." - -#: html/Ticket/Elements/ShowRequestor:61 -#. ($name) -msgid "More about %1" -msgstr "%1 hakkında daha fazla bilgi" - -#: html/Admin/Elements/PickCustomFields:83 -msgid "Move down" -msgstr "Aşağı git" - -#: html/Admin/Elements/PickCustomFields:75 -msgid "Move up" -msgstr "Yukarı git" - -#: html/Admin/Elements/SelectSingleOrMultiple:48 -msgid "Multiple" -msgstr "Çoklu" - -#: lib/RT/User_Overlay.pm:226 -msgid "Must specify 'Name' attribute" -msgstr "'Ad' özniteliği belirtilmeli" - -#: html/SelfService/Elements/MyRequests:57 -#. ($friendly_status) -msgid "My %1 tickets" -msgstr "Benim %1 biletim" - -#: html/Tools/Elements/Tabs:63 -msgid "My Day" -msgstr "Benim Günüm" - -#: html/Approvals/index.html:46 html/Approvals/index.html:47 -msgid "My approvals" -msgstr "Benim Onaylarım" - -#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:54 -msgid "My saved searches" -msgstr "Benim kaydedilmiş aramalarım" - -#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65 -msgid "Name" -msgstr "Ad" - -#: lib/RT/User_Overlay.pm:233 -msgid "Name in use" -msgstr "Kullanımdaki ad" - -#: html/Ticket/Elements/ShowDates:73 -msgid "Never" -msgstr "Asla" - -#: html/Elements/EditLinks:117 -msgid "New Links" -msgstr "Yeni bağlantılar" - -#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 -msgid "New Password" -msgstr "Yeni parola" - -#: etc/initialdata:332 -msgid "New Pending Approval" -msgstr "Yeni bekleyen onay" - -#: html/Ticket/Elements/Tabs:212 -msgid "New Search" -msgstr "Yeni arama" - -#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 -msgid "New custom field" -msgstr "Yeni özel alan" - -#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 -msgid "New group" -msgstr "Yeni grup" - -#: html/SelfService/Prefs.html:53 -msgid "New password" -msgstr "Yeni parola" - -#: lib/RT/User_Overlay.pm:816 -msgid "New password notification sent" -msgstr "Yeni parola uyarısı iletildi" - -#: html/Admin/Elements/QueueTabs:95 -msgid "New queue" -msgstr "Yeni kuyruk" - -#: html/Ticket/Elements/Reminders:118 -msgid "New reminder:" -msgstr "Yeni hatırlatıcı:" - -#: html/Admin/Elements/SelectRights:65 -msgid "New rights" -msgstr "Yeni yetkiler" - -#: html/Admin/Global/Scrip.html:63 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:76 -msgid "New scrip" -msgstr "Yeni senet" - -#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71 -msgid "New template" -msgstr "Yeni şablon" - -#: html/SelfService/Elements/Tabs:84 html/SelfService/Elements/Tabs:88 -msgid "New ticket" -msgstr "Yeni bilet" - -#: lib/RT/Ticket_Overlay.pm:2757 -msgid "New ticket doesn't exist" -msgstr "Yeni bilet yok" - -#: html/Admin/Elements/UserTabs:81 -msgid "New user" -msgstr "Yeni kullanıcı" - -#: html/Admin/Elements/CreateUserCalled:47 -msgid "New user called" -msgstr "Yeni kullanıcı: " - -#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 -msgid "New watchers" -msgstr "Yeni gözcüler" - -#: html/Helpers/CalPopup.html:58 html/Ticket/Elements/Tabs:92 -msgid "Next" -msgstr "Ä°leri" - -#: html/Elements/TicketList:104 -msgid "Next Page" -msgstr "Sonraki Sayfa" - -#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 -msgid "Nickname" -msgstr "Rumuz" - -#: html/Admin/CustomFields/UserRights.html:145 -msgid "No Class defined" -msgstr "Bir sınıf tanımlanmadı" - -#: html/Admin/CustomFields/Modify.html:166 html/Admin/Elements/EditCustomField:119 -msgid "No CustomField" -msgstr "Özel alan yok" - -#: html/Admin/CustomFields/GroupRights.html:103 -msgid "No CustomField defined" -msgstr "Özel alan tanımlanmadı" - -#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 -msgid "No Group defined" -msgstr "Grup alan tanımlanmadı" - -#: lib/RT/Tickets_Overlay_SQL.pm:482 -msgid "No Query" -msgstr "Sorgu Yok" - -#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 -msgid "No Queue defined" -msgstr "Kuyruk tanımlanmadı" - -#: bin/rt-crontool:73 -msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "RT kullanıcısı bulunamadı. Lütfen RT yöneticinize danışın.\\n" - -#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 -msgid "No Template" -msgstr "Şablon Yok" - -#: html/Approvals/Elements/Approve:77 -msgid "No action" -msgstr "Eylem Yok" - -#: lib/RT/Record.pm:949 -msgid "No column specified" -msgstr "Sütun belirtilmedi" - -#: html/Ticket/Elements/ShowRequestor:68 -msgid "No comment entered about this user" -msgstr "Bu kullanıcı hakkında yorum yapılmadı" - -#: lib/RT/Action/Generic.pm:185 lib/RT/Condition/Generic.pm:197 lib/RT/Search/ActiveTicketsInQueue.pm:77 lib/RT/Search/Generic.pm:134 lib/RT/Search/Googleish.pm:78 -#. (ref $self) -msgid "No description for %1" -msgstr "%1 için herhangi bir tanım yok" - -#: lib/RT/Users_Overlay.pm:190 -msgid "No group specified" -msgstr "Grup belirtilmedi" - -#: html/Admin/Groups/index.html:52 -msgid "No groups matching search criteria found." -msgstr "Arama kıstaslarıyla örtüşen bir grup bulunamadı." - -#: lib/RT/Ticket_Overlay.pm:2393 -msgid "No message attached" -msgstr "Herhangi bir ileti eklenmedi" - -#: lib/RT/User_Overlay.pm:1034 -msgid "No password set" -msgstr "Herhangi bir parola atanmadı" - -#: lib/RT/Queue_Overlay.pm:361 -msgid "No permission to create queues" -msgstr "Kuyruk oluşturmak için gerekli yetki yok" - -#: lib/RT/Ticket_Overlay.pm:420 -#. ($QueueObj->Name) -msgid "No permission to create tickets in the queue '%1'" -msgstr "%1 kuyruğunda bilet oluşturmak için gerekli yetki yok" - -#: lib/RT/User_Overlay.pm:186 -msgid "No permission to create users" -msgstr "Kullanıcı oluşturmak için gerekli yetki yok" - -#: html/SelfService/Display.html:167 -msgid "No permission to display that ticket" -msgstr "Bu bileti görüntülemek için gerekli yetki yok" - -#: lib/RT/SavedSearch.pm:156 -msgid "No permission to save system-wide searches" -msgstr "Sistem genelinde yapılan aramaları kaydetmek için gerekli yetki yok" - -#: html/SelfService/Update.html:117 -msgid "No permission to view update ticket" -msgstr "Bilet güncellemeyi görüntülemek için gerekli yetki yok" - -#: lib/RT/Queue_Overlay.pm:795 lib/RT/Ticket_Overlay.pm:1489 -msgid "No principal specified" -msgstr "Yetkili belirtilmedi" - -#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 -msgid "No principals selected." -msgstr "Herhangi bir yetkili seçilmedi" - -#: html/Admin/Queues/index.html:57 -msgid "No queues matching search criteria found." -msgstr "Arama kıstaslarıyla örtüşen bir kuyruk bulunamadı." - -#: html/Admin/Elements/SelectRights:106 -msgid "No rights found" -msgstr "Herhangi bir yetki bulunamadı" - -#: html/Admin/Elements/SelectRights:53 -msgid "No rights granted." -msgstr "Herhangi bir yetki verilmedi." - -#: lib/RT/SavedSearch.pm:196 -msgid "No search loaded" -msgstr "Herhangi bir arama yüklenemedi" - -#: html/Search/Bulk.html:232 -msgid "No search to operate on." -msgstr "İşlenecek bir arama bulunamadı" - -#: html/Elements/RT__Ticket/ColumnMap:137 html/Search/Results.rdf:78 -msgid "No subject" -msgstr "Başlık yok" - -#: lib/RT/Transaction_Overlay.pm:528 lib/RT/Transaction_Overlay.pm:565 -msgid "No transaction type specified" -msgstr "Aktarım türü belirtilmedi" - -#: html/Admin/Users/index.html:55 -msgid "No users matching search criteria found." -msgstr "Arama kıstaslarıyla örtüşen herhangi bir kullanıcı bulunamadı." - -#: lib/RT/Record.pm:946 -msgid "No value sent to _Set!\\n" -msgstr "_Set için herhangi bir değer gönderilmedi!\\n" - -#: html/Elements/QuickCreate:59 -msgid "Nobody" -msgstr "Hiçkimse" - -#: lib/RT/Record.pm:951 -msgid "Nonexistant field?" -msgstr "Varolmayan Alan?" - -#: html/Search/Chart:71 html/Search/Elements/Chart:88 -msgid "Not Set" -msgstr "Atanmadı" - -#: html/Elements/Header:96 -msgid "Not logged in." -msgstr "Giriş yapılmadı" - -#: lib/RT/Date.pm:397 -msgid "Not set" -msgstr "Atanmadı" - -#: html/NoAuth/Reminder.html:48 -msgid "Not yet implemented." -msgstr "Henüz oluşturulmadı." - -#: html/Approvals/Elements/Approve:81 -msgid "Notes" -msgstr "Notlar" - -#: lib/RT/User_Overlay.pm:819 -msgid "Notification could not be sent" -msgstr "Uyarı gönderilemiyor" - -#: etc/initialdata:101 -msgid "Notify AdminCcs" -msgstr "Yönetici Kk' ları bildir" - -#: etc/initialdata:97 -msgid "Notify AdminCcs as Comment" -msgstr "Yönetici Kk' ları yorum olarak bildir" - -#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 -msgid "Notify Ccs" -msgstr "Kk' ları bildir" - -#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 -msgid "Notify Ccs as Comment" -msgstr "Kk' ları yorum olarak bildir" - -#: etc/initialdata:128 -msgid "Notify Other Recipients" -msgstr "Diğer alıcıları uyar" - -#: etc/initialdata:124 -msgid "Notify Other Recipients as Comment" -msgstr "Diğer alıcıları yorum olarak uyar" - -#: etc/initialdata:85 -msgid "Notify Owner" -msgstr "Sahibi uyar" - -#: etc/initialdata:81 -msgid "Notify Owner as Comment" -msgstr "Sahibi yorum olarak uyar" - -#: etc/initialdata:376 -msgid "Notify Owner of their rejected ticket" -msgstr "Sahipleri, reddedilen biletleri hakkında uyar" - -#: etc/initialdata:365 -msgid "Notify Owner of their ticket has been approved by all approvers" -msgstr "Bütün onaycılar tarafından onaylanan bileti hakkında sahibi uyar" - -#: etc/initialdata:353 -msgid "Notify Owner of their ticket has been approved by some approver" -msgstr "Herhangi bir onaycı tarafından onaylanan bileti hakkında sahibi uyar" - -#: etc/initialdata:334 -msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Onaylanmayı bekleyen yeni öğeler hakkında sahipleri ve Yönetici Kk' ları uyar" - -#: etc/initialdata:77 -msgid "Notify Requestors" -msgstr "Ä°stekçileri Uyar" - -#: etc/initialdata:111 -msgid "Notify Requestors and Ccs" -msgstr "Ä°stekçileri ve Kk' ları uyar" - -#: etc/initialdata:106 -msgid "Notify Requestors and Ccs as Comment" -msgstr "Ä°stekçileri ve Kk' ları yorum olarak uyar" - -#: etc/initialdata:120 -msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "Ä°stekçileri, Kk' ları ve Yönetici Kk' ları uyar" - -#: etc/initialdata:116 -msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "Ä°stekçileri, Kk' ları ve Yönetici Kk' ları yorum olarak uyar" - -#: lib/RT/Date.pm:451 -msgid "Nov." -msgstr "Kas." - -#: html/Search/Elements/SelectAndOr:47 -msgid "OR" -msgstr "VEYA" - -#: lib/RT/Record.pm:322 -msgid "Object could not be created" -msgstr "Nesne oluşturulamıyor" - -#: lib/RT/Record.pm:123 -msgid "Object could not be deleted" -msgstr "Nesne silinemiyor" - -#: lib/RT/Record.pm:341 -msgid "Object created" -msgstr "Nesne oluşturuldu" - -#: lib/RT/Record.pm:120 -msgid "Object deleted" -msgstr "Nesne silindi" - -#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 -#. ($ObjectType) -#. ($LookupType) -msgid "Object of type %1 cannot take custom fields" -msgstr "%1 türündeki nesneler, özel alanlar alamazlar" - -#: lib/RT/CustomField_Overlay.pm:967 -msgid "Object type mismatch" -msgstr "Nesne türü eşleşmiyor" - -#: lib/RT/Date.pm:450 -msgid "Oct." -msgstr "Eki." - -#: html/Tools/Elements/Tabs:55 -msgid "Offline" -msgstr "Çevrimdışı" - -#: html/Tools/Offline.html:49 -msgid "Offline edits" -msgstr "Çevrimdışı düzenlemeler" - -#: html/Tools/Offline.html:46 -msgid "Offline upload" -msgstr "Çevrimdışı yükleme" - -#: html/Elements/SelectDateRelation:56 -msgid "On" -msgstr "Tarih:" - -#: lib/RT/Transaction_Overlay.pm:326 -#. ($self->CreatedAsString(), $self->CreatorObj->Name()) -msgid "On %1, %2 wrote:" -msgstr "%1 tarihinde, %2 yazdı:" - -#: etc/initialdata:163 -msgid "On Comment" -msgstr "Yorumda" - -#: etc/initialdata:156 -msgid "On Correspond" -msgstr "Cevapta" - -#: etc/initialdata:145 -msgid "On Create" -msgstr "Oluşturmada" - -#: etc/initialdata:184 -msgid "On Owner Change" -msgstr "Sahiplik değişiminde" - -#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 -msgid "On Priority Change" -msgstr "Öncelik değişiminde" - -#: etc/initialdata:192 -msgid "On Queue Change" -msgstr "Kuyruk değişiminde" - -#: etc/initialdata:198 -msgid "On Resolve" -msgstr "Çözümde" - -#: etc/initialdata:169 -msgid "On Status Change" -msgstr "Durum değişikliğinde" - -#: etc/initialdata:150 -msgid "On Transaction" -msgstr "Harekette" - -#: html/Approvals/Elements/PendingMyApproval:70 -#. ("") -msgid "Only show approvals for requests created after %1" -msgstr "Sadece %1 sonrası oluşturulmuş isteklere ait onayları göster" - -#: html/Approvals/Elements/PendingMyApproval:68 -#. ("") -msgid "Only show approvals for requests created before %1" -msgstr "Sadece %1 öncesi oluşturulmuş isteklere ait onayları göster" - -#: html/Admin/CustomFields/index.html:75 -msgid "Only show custom fields for:" -msgstr "Sadece şunun için özel alanları göster:" - -#: html/SelfService/index.html:46 -msgid "Open Tickets" -msgstr "Biletleri Aç" - -#: html/Ticket/Elements/Tabs:160 -msgid "Open it" -msgstr "Aç" - -#: html/SelfService/Elements/Tabs:75 -msgid "Open tickets" -msgstr "Biletleri aç" - -#: etc/initialdata:140 -msgid "Open tickets on correspondence" -msgstr "Cevap geldiğinde biletleri aç" - -#: html/Prefs/MyRT.html:70 -msgid "Options" -msgstr "Seçenekler" - -#: html/Search/Elements/DisplayOptions:59 -msgid "Order by" -msgstr "Sıralama:" - -#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 -msgid "Organization" -msgstr "Kurum" - -#: html/Approvals/Elements/Approve:53 -#. ($approving->Id, $approving->Subject) -msgid "Originating ticket: #%1" -msgstr "Kaynak alınan bilet: #%1" - -#: lib/RT/Transaction_Overlay.pm:622 -msgid "Outgoing email about a comment recorded" -msgstr "Bir yorum hakkındaki giden eposta kaydedildi" - -#: lib/RT/Transaction_Overlay.pm:626 -msgid "Outgoing email recorded" -msgstr "Giden eposta kaydedildi" - -#: html/Admin/Queues/Modify.html:90 -msgid "Over time, priority moves toward" -msgstr "Zaman içinde, öncelik ilerler" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "Own tickets" -msgstr "Biletleri sahiplen" - -#: lib/RT/Queue_Overlay.pm:112 -msgid "OwnTicket" -msgstr "BiletleriSahiplen" - -#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/Ticket/Create.html:72 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:129 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:110 lib/RT/Tickets_Overlay.pm:2006 -msgid "Owner" -msgstr "Sahip" - -#: lib/RT/Ticket_Overlay.pm:505 -msgid "Owner could not be set." -msgstr "Sahip atanamıyor" - -#: lib/RT/Transaction_Overlay.pm:672 -#. ($Old->Name , $New->Name) -msgid "Owner forcibly changed from %1 to %2" -msgstr "Sahip, zorla %1 den %2 ye değiştirildi" - -#: html/Elements/TicketList:78 -#. ($Page, int($TotalFound/$Rows)+$oddRows) -msgid "Page %1 of %2" -msgstr "Sayfa %1/%2" - -#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:96 -msgid "Pager" -msgstr "Sayfalayıcı" - -#: html/Elements/EditLinks:144 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:222 html/Ticket/Elements/BulkLinks:60 -msgid "Parents" -msgstr "Ana bölüm" - -#: html/Elements/Login:95 html/User/Prefs.html:105 -msgid "Password" -msgstr "Parola" - -#: html/NoAuth/Reminder.html:46 -msgid "Password Reminder" -msgstr "Parola Hatırlatıcı" - -#: lib/RT/Transaction_Overlay.pm:781 lib/RT/User_Overlay.pm:1045 -msgid "Password changed" -msgstr "Parola değişti" - -#: 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 "Parola en az %1 karakter uzunluğunda olmalı" - -#: lib/RT/User_Overlay.pm:1044 -msgid "Password set" -msgstr "Parola atandı" - -#: html/User/Prefs.html:240 -#. (loc_fuzzy($msg)) -msgid "Password: %1" -msgstr "Parola: %1" - -#: lib/RT/User_Overlay.pm:1030 -msgid "Password: Permission Denied" -msgstr "Parola: Ä°zin Reddedildi" - -#: html/Admin/Users/Modify.html:364 -msgid "Passwords do not match." -msgstr "Parolalar eşleşmiyor" - -#: html/User/Prefs.html:242 -msgid "Passwords do not match. Your password has not been changed" -msgstr "Parolalar eşleşmiyor. Parolanız değişmedi" - -#: html/Ticket/Elements/ShowSummary:62 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 -msgid "People" -msgstr "Kişiler" - -#: etc/initialdata:133 -msgid "Perform a user-defined action" -msgstr "Kullanıcı tanımlı bir eylemi yerine getir" - -#: html/Admin/Tools/Configuration.html:94 -msgid "Perl configuration" -msgstr "Perl ayarları" - -#: lib/RT/ACE_Overlay.pm:251 lib/RT/ACE_Overlay.pm:257 lib/RT/ACE_Overlay.pm:580 lib/RT/ACE_Overlay.pm:590 lib/RT/ACE_Overlay.pm:600 lib/RT/ACE_Overlay.pm:665 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:116 lib/RT/CurrentUser.pm:125 lib/RT/CustomField_Overlay.pm:1017 lib/RT/CustomField_Overlay.pm:1138 lib/RT/CustomField_Overlay.pm:1281 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:403 lib/RT/CustomField_Overlay.pm:763 lib/RT/CustomField_Overlay.pm:936 lib/RT/CustomField_Overlay.pm:971 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1054 lib/RT/Queue_Overlay.pm:140 lib/RT/Queue_Overlay.pm:158 lib/RT/Queue_Overlay.pm:657 lib/RT/Queue_Overlay.pm:667 lib/RT/Queue_Overlay.pm:681 lib/RT/Queue_Overlay.pm:819 lib/RT/Queue_Overlay.pm:828 lib/RT/Queue_Overlay.pm:841 lib/RT/Scrip_Overlay.pm:149 lib/RT/Scrip_Overlay.pm:160 lib/RT/Scrip_Overlay.pm:224 lib/RT/Scrip_Overlay.pm:538 lib/RT/Template_Overlay.pm:108 lib/RT/Template_Overlay.pm:277 lib/RT/Ticket_Overlay.pm:1357 lib/RT/Ticket_Overlay.pm:1367 lib/RT/Ticket_Overlay.pm:1381 lib/RT/Ticket_Overlay.pm:1522 lib/RT/Ticket_Overlay.pm:1532 lib/RT/Ticket_Overlay.pm:1546 lib/RT/Ticket_Overlay.pm:1663 lib/RT/Ticket_Overlay.pm:1983 lib/RT/Ticket_Overlay.pm:2126 lib/RT/Ticket_Overlay.pm:2296 lib/RT/Ticket_Overlay.pm:2346 lib/RT/Ticket_Overlay.pm:2525 lib/RT/Ticket_Overlay.pm:2538 lib/RT/Ticket_Overlay.pm:2614 lib/RT/Ticket_Overlay.pm:2627 lib/RT/Ticket_Overlay.pm:2748 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2990 lib/RT/Ticket_Overlay.pm:3000 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3224 lib/RT/Ticket_Overlay.pm:3228 lib/RT/Ticket_Overlay.pm:3371 lib/RT/Ticket_Overlay.pm:3497 lib/RT/Transaction_Overlay.pm:516 lib/RT/Transaction_Overlay.pm:523 lib/RT/Transaction_Overlay.pm:551 lib/RT/Transaction_Overlay.pm:558 lib/RT/User_Overlay.pm:1176 lib/RT/User_Overlay.pm:1856 lib/RT/User_Overlay.pm:369 lib/RT/User_Overlay.pm:735 lib/RT/User_Overlay.pm:774 -msgid "Permission Denied" -msgstr "Pääsy kielletty" - -#: lib/RT/Template_Overlay.pm:238 lib/RT/Template_Overlay.pm:247 -msgid "Permission denied" -msgstr "Ä°zin Reddedildi" - -#: lib/RT/Template_Overlay.pm:372 -msgid "Permissions denied" -msgstr "Ä°zin Reddedildi" - -#: html/User/Elements/Tabs:56 -msgid "Personal Groups" -msgstr "Kişisel gruplar" - -#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 -msgid "Personal groups" -msgstr "Kişisel gruplar" - -#: html/User/Elements/DelegateRights:58 -msgid "Personal groups:" -msgstr "Kişisel gruplar:" - -#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:81 -msgid "Phone numbers" -msgstr "Telefon numaraları" - -#: html/Elements/Header:93 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:95 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49 -msgid "Preferences" -msgstr "Tercihler" - -#: html/Admin/Users/MyRT.html:75 -#. ($pane, $UserObj->Name) -msgid "Preferences %1 for user %2 ." -msgstr "%2 kullanıcısı için %1 tercihleri" - -#: html/Prefs/MyRT.html:141 -#. ($pane) -msgid "Preferences saved for %1." -msgstr "%1 için tercihler kaydedildi" - -#: lib/RT/Action/Generic.pm:195 -msgid "Prepare Stubbed" -msgstr "Küt hazırla" - -#: html/Helpers/CalPopup.html:56 html/Ticket/Elements/Tabs:84 -msgid "Prev" -msgstr "Önceki" - -#: html/Elements/TicketList:101 -msgid "Previous Page" -msgstr "Önceki sayfa" - -#: 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 yetkilisi bulunamadı" - -#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:92 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1790 -msgid "Priority" -msgstr "Öncelik" - -#: html/Admin/Queues/Modify.html:86 -msgid "Priority starts at" -msgstr "Öncelik başlangıcı:" - -#: html/Search/Elements/EditSearches:50 -msgid "Privacy:" -msgstr "Gizlilik:" - -#: etc/initialdata:25 -msgid "Privileged" -msgstr "Ayrıcalıklı" - -#: html/Admin/Users/Modify.html:342 html/User/Prefs.html:231 -#. (loc_fuzzy($msg)) -msgid "Privileged status: %1" -msgstr "Ayrıcalık durumu: &1" - -#: html/Admin/Users/index.html:102 -msgid "Privileged users" -msgstr "Ayrıcalıklı kullanıcılar" - -#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 -msgid "Pseudogroup for internal use" -msgstr "İç kullanım için sahte grup" - -#: html/Search/Build.html:121 -msgid "Query Builder" -msgstr "Sorgu Oluşturucu" - -#: html/Search/Elements/Chart:101 -msgid "Query:" -msgstr "Sorgu:" - -#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:62 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:85 html/Tools/Reports/ResolvedByDates.html:86 html/Tools/Reports/ResolvedByOwner.html:66 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1617 -msgid "Queue" -msgstr "Kuyruk" - -#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65 -#. ($Queue) -#. ($id) -msgid "Queue %1 not found" -msgstr "%1 kuyruğu bulunamadı" - -#: html/Admin/Queues/Modify.html:64 -msgid "Queue Name" -msgstr "Kuyruk adı" - -#: lib/RT/Queue_Overlay.pm:365 -msgid "Queue already exists" -msgstr "Kuyruk halihazırda mevcut" - -#: lib/RT/Queue_Overlay.pm:374 lib/RT/Queue_Overlay.pm:380 -msgid "Queue could not be created" -msgstr "Kuyruk oluşturulamıyor" - -#: html/Ticket/Create.html:244 lib/t/regression/01ticket_link_searching.t:17 -msgid "Queue could not be loaded." -msgstr "Kuyruk yüklenemiyor." - -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:384 lib/RT/StyleGuide.pod:809 -msgid "Queue created" -msgstr "Kuyruk oluşturuldu" - -#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:197 -msgid "Queue not found" -msgstr "Kuyruk bulunamadı" - -#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 -msgid "Queues" -msgstr "Kuyruklar" - -#: html/Elements/MyAdminQueues:46 -msgid "Queues I administer" -msgstr "Yönettiğim kuyruklar" - -#: html/Elements/MySupportQueues:46 -msgid "Queues I'm an AdminCc for" -msgstr "Yönetici Kk olduğum kuyruklar" - -#: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70 -msgid "Quick search" -msgstr "Hızlı arama" - -#: html/Elements/QuickCreate:47 -msgid "Quick ticket creation" -msgstr "Hızlı bilet oluşturumu" - -#: html/Search/Results.html:81 -msgid "RSS" -msgstr "" - -#: 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 - %2" - -#: html/Admin/index.html:46 html/Admin/index.html:47 -msgid "RT Administration" -msgstr "RT Yönetimi" - -#: html/Elements/Error:63 html/SelfService/Error.html:62 -msgid "RT Error" -msgstr "RT Hatası" - -#: html/Admin/Tools/Configuration.html:73 -msgid "RT Variables" -msgstr "RT Değişkenleri" - -#: html/Admin/Elements/SystemTabs:71 html/Admin/Elements/UserTabs:67 html/Admin/Global/MyRT.html:1 html/Admin/Global/MyRT.html:12 html/Admin/Global/MyRT.html:4 html/Admin/Global/index.html:84 html/Admin/Users/MyRT.html:21 html/Prefs/MyRT.html:66 html/Prefs/MyRT.html:78 html/User/Elements/Tabs:65 html/index.html:1 html/index.html:75 -msgid "RT at a glance" -msgstr "Bir bakışta RT" - -#: html/Admin/Users/MyRT.html:30 -#. ($UserObj->Name) -msgid "RT at a glance for the user %1" -msgstr "%1 kullanıcısı için bir bakışta RT" - -#: html/Admin/CustomFields/Modify.html:117 -msgid "RT can include content from another web service when showing this custom field." -msgstr "RT, bu özel alanı gösterirken, diğerbir ağ hizmetinden içerik ekleyebilir" - -#: html/Admin/CustomFields/Modify.html:106 -msgid "RT can make this custom field's values into hyperlinks to another service." -msgstr "RT, bu özel alanın değerlerini, diğer bir hizmetin hiperbağlantılarına dönüştürebilir." - -#: html/Elements/SetupSessionCookie:100 -msgid "RT couldn't store your session." -msgstr "RT, oturumunuzu kaydedemiyor." - -#: html/Elements/Logo:49 html/Elements/PageLayout:172 -#. ($RT::rtname) -msgid "RT for %1" -msgstr "%1: RT" - -#: html/Search/Simple.html:58 -msgid "RT will look for anything else you enter in ticket subjects." -msgstr "RT, bilet başlıklarına gireceğiniz herhangi bir şeyi araştıracaktır." - -#: html/Admin/CustomFields/Modify.html:108 html/Admin/CustomFields/Modify.html:119 -msgid "RT will replace __id__ and __CustomField__ with the record id and custom field value, respectively" -msgstr "RT, __id__ ve __CustomField__ değerlerini, kayıt numarası ve özel alan değeri ile değiştirecektir" - -#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 -msgid "Real Name" -msgstr "Gerçek Ad" - -#: lib/RT/Transaction_Overlay.pm:725 -#. ($value) -msgid "Reference by %1 added" -msgstr "%1 ile başvuru eklendi" - -#: lib/RT/Transaction_Overlay.pm:765 -#. ($value) -msgid "Reference by %1 deleted" -msgstr "%1 ile başvuru silindi" - -#: lib/RT/Transaction_Overlay.pm:722 -#. ($value) -msgid "Reference to %1 added" -msgstr "%1 için başvuru eklendi" - -#: lib/RT/Transaction_Overlay.pm:762 -#. ($value) -msgid "Reference to %1 deleted" -msgstr "%1 için başvuru silindi" - -#: html/Elements/EditLinks:103 html/Elements/EditLinks:156 html/Elements/ShowLinks:92 html/Ticket/Create.html:225 html/Ticket/Elements/BulkLinks:72 -msgid "Referred to by" -msgstr "Kaynak gösteren:" - -#: html/Elements/EditLinks:152 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:224 html/Ticket/Elements/BulkLinks:68 -msgid "Refers to" -msgstr "Kaynak gösterdiği:" - -#: html/Elements/Refresh:57 -#. ($value/60) -msgid "Refresh this page every %1 minutes." -msgstr "Bu sayfayı, her %1 dakikada bir yenile" - -#: lib/RT/Transaction_Overlay.pm:811 -#. ($ticket->Subject) -msgid "Reminder '%1' added" -msgstr "'%1' hatırlatıcısı eklendi" - -#: lib/RT/Transaction_Overlay.pm:824 -#. ($ticket->Subject) -msgid "Reminder '%1' completed" -msgstr "'%1' hatırlatıcısı tamamlandı" - -#: lib/RT/Transaction_Overlay.pm:817 -#. ($ticket->Subject) -msgid "Reminder '%1' reopened" -msgstr "'%1' hatırlatıcısı tekrar açıldı" - -#: html/Ticket/Reminders.html:46 -#. ($Ticket->Id) -msgid "Reminder ticket #%1" -msgstr "Hatırlatıcı bilet #%1" - -#: html/Elements/MyReminders:48 html/Ticket/Elements/ShowSummary:75 html/Ticket/Elements/Tabs:122 html/Ticket/Reminders.html:52 -msgid "Reminders" -msgstr "Hatırlatıcılar" - -#: html/Ticket/Reminders.html:50 -#. ($Ticket->Id) -msgid "Reminders for ticket #%1" -msgstr "#%1 bileti için hatırlatıcılar" - -#: html/Search/Bulk.html:94 -msgid "Remove AdminCc" -msgstr "Yönetici Kk Kaldır" - -#: html/Search/Bulk.html:90 -msgid "Remove Cc" -msgstr "Kk kaldır" - -#: html/Search/Bulk.html:86 -msgid "Remove Requestor" -msgstr "Ä°stekçi kaldır" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:147 -msgid "Reply" -msgstr "Yanıtla" - -#: html/Admin/Queues/Modify.html:72 -msgid "Reply Address" -msgstr "Yanıtlama Adresi" - -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:78 -msgid "Reply to requestors" -msgstr "Ä°stekçileri Yanıtla" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "Reply to tickets" -msgstr "Biletleri Yanıtla" - -#: lib/RT/Queue_Overlay.pm:110 -msgid "ReplyToTicket" -msgstr "BiletiYanıtla" - -#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:46 html/Tools/Reports/index.html:47 -msgid "Reports" -msgstr "Raporlar" - -#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:111 -msgid "Requestor" -msgstr "Ä°stekçi" - -#: html/SelfService/Create.html:63 html/Ticket/Create.html:80 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 -msgid "Requestors" -msgstr "Ä°stekçiler" - -#: html/Admin/Queues/Modify.html:96 -msgid "Requests should be due in" -msgstr "Ä°steklerin yapılacağı zaman:" - -#: lib/RT/Attribute_Overlay.pm:146 -#. ('Object') -msgid "Required parameter '%1' not specified" -msgstr "Gerekli parametre '%1' belirtilmedi" - -#: html/Elements/Submit:83 -msgid "Reset" -msgstr "Sıfırla" - -#: html/Admin/Users/MyRT.html:15 html/Prefs/MyRT.html:60 -msgid "Reset to default" -msgstr "Varsayılana sıfırla" - -#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:84 -msgid "Residence" -msgstr "Hane" - -#: html/Ticket/Elements/Tabs:156 -msgid "Resolve" -msgstr "Çöz" - -#: html/Ticket/Update.html:156 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Resolve ticket #%1 (%2)" -msgstr "#%1 biletini çözümle (%2)" - -#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1172 -msgid "Resolved" -msgstr "Çözüldü" - -#: html/Tools/Reports/Elements/Tabs:55 -msgid "Resolved by owner" -msgstr "Sahip tarafından çözüldü" - -#: html/Tools/Reports/Elements/Tabs:59 -msgid "Resolved in date range" -msgstr "Zaman aralığında çözüldü" - -#: html/Tools/Reports/ResolvedByDates.html:52 -msgid "Resolved tickets in period, grouped by owner" -msgstr "Dönemdeki çözülmüş biletler (sahip ile gruplandırılmış)" - -#: html/Tools/Reports/ResolvedByOwner.html:50 -msgid "Resolved tickets, grouped by owner" -msgstr "Çözülmüş biletler (sahip ile gruplandırılmış)" - -#: html/Elements/ListActions:46 html/Search/Elements/NewListActions:47 -msgid "Results" -msgstr "Sonuçlar" - -#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 -msgid "Retype Password" -msgstr "Parolayı tekrar yazın" - -#: html/Search/Elements/EditSearches:61 -msgid "Revert" -msgstr "Eskiye dön" - -#: lib/RT/ACE_Overlay.pm:630 -msgid "Right Delegated" -msgstr "Yetki Aktarıldı" - -#: lib/RT/ACE_Overlay.pm:320 -msgid "Right Granted" -msgstr "Yetki Verildi" - -#: lib/RT/ACE_Overlay.pm:178 -msgid "Right Loaded" -msgstr "Yetki Yüklendi" - -#: lib/RT/ACE_Overlay.pm:695 lib/RT/ACE_Overlay.pm:716 -msgid "Right could not be revoked" -msgstr "Yetki geri alınamıyor" - -#: html/User/Delegation.html:85 -msgid "Right not found" -msgstr "Yetki bulunamadı" - -#: lib/RT/ACE_Overlay.pm:560 lib/RT/ACE_Overlay.pm:655 -msgid "Right not loaded." -msgstr "Yetki yüklenemedi" - -#: lib/RT/ACE_Overlay.pm:712 -msgid "Right revoked" -msgstr "Yetki geri alındı" - -#: html/Admin/Elements/UserTabs:70 -msgid "Rights" -msgstr "Yetkiler" - -#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:961 -#. ($object_type) -msgid "Rights could not be granted for %1" -msgstr "Yetkiler %1 için verilemiyor" - -#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:990 -#. ($object_type) -msgid "Rights could not be revoked for %1" -msgstr "Yetkiler %1 için geri alınamıyor" - -#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 -msgid "Roles" -msgstr "Roller" - -#: html/Prefs/MyRT.html:72 -msgid "Rows per box" -msgstr "Kutu başına satır" - -#: html/Search/Elements/DisplayOptions:93 -msgid "Rows per page" -msgstr "Sayfa başına satır" - -#: lib/RT/Date.pm:422 -msgid "Sat." -msgstr "Cmt." - -#: html/Prefs/MyRT.html:72 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:211 -msgid "Save" -msgstr "Kaydet" - -#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:239 html/Prefs/Quicksearch.html:64 html/Prefs/SearchOptions.html:63 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:61 html/Ticket/ModifyPeople.html:60 html/User/Groups/Modify.html:77 -msgid "Save Changes" -msgstr "Değişiklikleri Kaydet" - -#: html/User/Prefs.html:181 -msgid "Save Preferences" -msgstr "Tercihleri Kaydet" - -#: html/Ticket/Elements/PreviewScrips:131 -msgid "Save changes" -msgstr "Değişiklikleri kaydet" - -#: lib/RT/SavedSearch.pm:173 -#. ($name) -msgid "Saved search %1" -msgstr "Kaydedilmiş arama %1" - -#: html/Admin/Elements/ListGlobalScrips:60 html/Admin/Global/Scrip.html:77 html/Admin/Queues/Scrip.html:84 -#. ($scrip->Id) -#. ($id) -msgid "Scrip #%1" -msgstr "Senet #%1" - -#: lib/RT/Scrip_Overlay.pm:203 -msgid "Scrip Created" -msgstr "Senet oluşturuldu" - -#: html/Admin/Elements/EditScrip:52 -msgid "Scrip Fields" -msgstr "Senet alanları" - -#: html/Admin/Elements/EditScrips:109 -msgid "Scrip deleted" -msgstr "Senet silindi" - -#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 -msgid "Scrips" -msgstr "Senetler" - -#: html/Admin/Queues/Scrips.html:55 -msgid "Scrips which apply to all queues" -msgstr "Bütün kuyruklara etki eden senetler" - -#: html/Elements/SimpleSearch:48 html/Search/Simple.html:63 -msgid "Search" -msgstr "Arama" - -#: html/Prefs/SearchOptions.html:47 html/Prefs/SearchOptions.html:50 -msgid "Search Preferences" -msgstr "Arama Tercihleri" - -#: lib/RT/SavedSearch.pm:115 -msgid "Search attribute load failure" -msgstr "Arama özniteliği yükleme hatası" - -#: html/Approvals/Elements/PendingMyApproval:59 -msgid "Search for approvals" -msgstr "Onayları ara" - -#: html/Search/Simple.html:67 -msgid "Search for tickets" -msgstr "Biletleri ara" - -#: 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 "Biletleri ara. Bilet numarasını, Kuyrukları adı ile, Sahipleri kulanıcı adı ile ve Ä°stekçileri eposta adresi ile girin. RT, girdiğiniz diğer şeyleri bilet gövdelerinde ve eklentilerde arayacaktır." - -#: html/User/Elements/Tabs:62 -msgid "Search options" -msgstr "Arama tercihleri" - -#: html/Search/Chart.html:56 -#. ($PrimaryGroupBy) -msgid "Search results grouped by %1" -msgstr "Arama sonuçları %1 ile gruplandırılmıştır." - -#: lib/RT/SavedSearch.pm:203 -#. ($msg) -msgid "Search update: %1" -msgstr "Arama güncellemesi: %1" - -#: 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 "Her bir biletin tüm metninin aranması uzun sürebilir, ama eğer bunu yapmanız gerkiyorsa, fulltext:kelime yazarak tüm bilet tarihçesindeki herhangi bir kelimeyi aratabilirsiniz." - -#: bin/rt-crontool:265 -msgid "Security:" -msgstr "Güvenlik:" - -#: html/Elements/ShowCustomFields:98 -msgid "See also:" -msgstr "Bakınız:" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "See custom fields" -msgstr "Özel alanları gör" - -#: lib/RT/Queue_Overlay.pm:106 -msgid "See exact outgoing email messages and their recipeients" -msgstr "Giden eposta iletilerinin tamamını ve alıcılarını gör" - -#: lib/RT/Queue_Overlay.pm:104 -msgid "See ticket private commentary" -msgstr "Biletin gizli yorumlarını gör" - -#: lib/RT/Queue_Overlay.pm:103 -msgid "See ticket summaries" -msgstr "Bilet özetlerini gör" - -#: lib/RT/CustomField_Overlay.pm:105 -msgid "SeeCustomField" -msgstr "ÖzelAlanıGör" - -#: lib/RT/Group_Overlay.pm:169 -msgid "SeeGroup" -msgstr "GrubuGör" - -#: lib/RT/Queue_Overlay.pm:91 -msgid "SeeQueue" -msgstr "KuyruğuGör" - -#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 -msgid "Select a Custom Field" -msgstr "Özel bir alanı seç" - -#: html/Admin/Groups/index.html:78 -msgid "Select a group" -msgstr "Bir grubu seç" - -#: html/Admin/Queues/index.html:54 -msgid "Select a queue" -msgstr "Bir kuyruğu seç" - -#: html/SelfService/CreateTicketInQueue.html:48 -msgid "Select a queue for your new ticket" -msgstr "Yeni biletiniz için bir kuyruk seçin" - -#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 -msgid "Select a user" -msgstr "Bir kullanıcı seçin" - -#: html/Admin/Elements/CustomFieldTabs:90 -msgid "Select custom field" -msgstr "Özel alan seçin" - -#: html/Admin/Global/CustomFields/index.html:70 -msgid "Select custom fields for all user groups" -msgstr "Bütün kullanıcı grupları için özel alanları seçin" - -#: html/Admin/Global/CustomFields/index.html:65 -msgid "Select custom fields for all users" -msgstr "Bütün kullanıcılar için özel alanları seçin" - -#: html/Admin/Global/CustomFields/index.html:76 -msgid "Select custom fields for tickets in all queues" -msgstr "Bütün kuyruklardaki biletler için özel alanlar seç" - -#: html/Admin/Global/CustomFields/index.html:83 -msgid "Select custom fields for transactions on tickets in all queues" -msgstr "Bütün kuyruklardaki biletlerin hareketleri için özel alanlar seçin" - -#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 -msgid "Select group" -msgstr "Grup seçin" - -#: lib/RT/CustomField_Overlay.pm:59 -msgid "Select multiple values" -msgstr "Çoklu değer seçin" - -#: lib/RT/CustomField_Overlay.pm:60 -msgid "Select one value" -msgstr "Bir değer seçin" - -#: html/Admin/Elements/QueueTabs:92 -msgid "Select queue" -msgstr "Kuyruk seçin" - -#: html/Prefs/Quicksearch.html:53 -msgid "Select queues to be displayed on the \"RT at a glance\" page" -msgstr "\"Bir bakışta RT\" sayfasında görüntülenecek kuyrukları seçin" - -#: html/Admin/Global/Scrip.html:59 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:67 html/Admin/Queues/Scrips.html:73 -msgid "Select scrip" -msgstr "Senet seçin" - -#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68 -msgid "Select template" -msgstr "Şablon seçin" - -#: lib/RT/CustomField_Overlay.pm:61 -msgid "Select up to %1 values" -msgstr "En çok %1 adet değer seçin" - -#: html/Admin/Elements/UserTabs:78 -msgid "Select user" -msgstr "Kullanıcı seç" - -#: html/Admin/Elements/EditCustomFields:58 -msgid "Selected Custom Fields" -msgstr "Seçili özel alanlar" - -#: html/Admin/CustomFields/Objects.html:59 -msgid "Selected objects" -msgstr "Seçili nesneler" - -#: html/Widgets/SelectionBox:209 -msgid "Selections modified. Please save your changes" -msgstr "Seçimler değişti. Lütfen değişikliklerinizi kaydedin" - -#: etc/initialdata:121 -msgid "Send mail to all watchers" -msgstr "Tüm izleyicilere posta gönder" - -#: etc/initialdata:117 -msgid "Send mail to all watchers as a \"comment\"" -msgstr "Tüm izleyicilere \"yorum\" olarak posta gönder" - -#: etc/initialdata:112 -msgid "Send mail to requestors and Ccs" -msgstr "Ä°stekçilere ve Kk' lara posta gönder" - -#: etc/initialdata:107 -msgid "Send mail to requestors and Ccs as a comment" -msgstr "Ä°stekçilere ve Kk' lara yorum olarak posta gönder" - -#: etc/initialdata:78 -msgid "Sends a message to the requestors" -msgstr "Ä°stekçilere posta gönderir" - -#: etc/initialdata:125 etc/initialdata:129 -msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Belirtilmiş Kk ve GKk listesine posta gönderir" - -#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 -msgid "Sends mail to the Ccs" -msgstr "Kk' lara posta gönderir" - -#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 -msgid "Sends mail to the Ccs as a comment" -msgstr "Kk' lara yorum olarak eposta gönderir" - -#: etc/initialdata:102 -msgid "Sends mail to the administrative Ccs" -msgstr "Yönetimsel Kk' lara eposta gönderir" - -#: etc/initialdata:98 -msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Yönetimsel Kk' lara yorum olarak eposta gönderir" - -#: etc/initialdata:82 etc/initialdata:86 -msgid "Sends mail to the owner" -msgstr "Sahibe posta gönderir" - -#: lib/RT/Date.pm:449 -msgid "Sep." -msgstr "Eki." - -#: html/Ticket/Elements/ShowTransaction:158 -msgid "Show" -msgstr "Göster" - -#: html/Approvals/index.html:52 -msgid "Show Approvals" -msgstr "Onayları Göster" - -#: html/Search/Elements/EditFormat:56 -msgid "Show Columns" -msgstr "Sütunları göster" - -#: html/Ticket/Elements/Tabs:220 -msgid "Show Results" -msgstr "Sonuçları Göster" - -#: html/Approvals/Elements/PendingMyApproval:64 -msgid "Show approved requests" -msgstr "Onaylanmış istekleri göster" - -#: html/Ticket/Create.html:316 -msgid "Show basics" -msgstr "Temelleri Göster" - -#: html/Approvals/Elements/PendingMyApproval:65 -msgid "Show denied requests" -msgstr "Reddedilmiş istekleri göster" - -#: html/Ticket/Create.html:319 -msgid "Show details" -msgstr "Ayrıntıları göster" - -#: html/Approvals/Elements/PendingMyApproval:63 -msgid "Show pending requests" -msgstr "Bekleyen istekleri göster" - -#: html/Approvals/Elements/PendingMyApproval:66 -msgid "Show requests awaiting other approvals" -msgstr "Diğer onayları bekleyen istekleri göster" - -#: 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 "Bilet istekçisi veya bilet veya kuyruk Kk olarak yazılın" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "Sign up as a ticket or queue AdminCc" -msgstr "Bilet veya kuyruk Kk olarak yazılın" - -#: html/Admin/Users/Modify.html:230 html/User/Prefs.html:168 -msgid "Signature" -msgstr "Ä°mza" - -#: html/Elements/Tabs:68 -msgid "Simple Search" -msgstr "Basit Arama" - -#: html/Admin/Elements/SelectSingleOrMultiple:47 -msgid "Single" -msgstr "Tekil" - -#: html/Search/Elements/EditFormat:75 -msgid "Size" -msgstr "Boyut" - -#: html/Elements/Header:89 -msgid "Skip Menu" -msgstr "Menüyü Geç" - -#: html/Search/Elements/EditFormat:78 -msgid "Small" -msgstr "Küçük" - -#: html/Admin/CustomFields/Modify.html:120 -msgid "Some browsers may only load content from the same domain as your RT server." -msgstr "Bazı gezginler, sadece aynı alan adından (RT sunucunuz gibi) içerik yükleyebilirler." - -#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 -msgid "Sort" -msgstr "Sırala" - -#: html/Admin/Elements/EditScrip:78 -msgid "Stage" -msgstr "Aşama" - -#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 -msgid "Started" -msgstr "Başlangıcı" - -#: html/Elements/SelectDateType:52 html/Ticket/Create.html:208 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 -msgid "Starts" -msgstr "Başlayacak" - -#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 -msgid "State" -msgstr "Durum" - -#: html/Search/Elements/PickBasics:87 html/SelfService/Update.html:57 html/Ticket/Create.html:66 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:1651 -msgid "Status" -msgstr "Durum" - -#: etc/initialdata:309 -msgid "Status Change" -msgstr "Durum Değişikliği" - -#: html/Ticket/Elements/Tabs:178 -msgid "Steal" -msgstr "Çal" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "Steal tickets" -msgstr "Biletleri Çal" - -#: lib/RT/Queue_Overlay.pm:117 -msgid "StealTicket" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:678 -#. ($Old->Name) -msgid "Stolen from %1" -msgstr "%1 den çalındı" - -#: html/Search/Elements/EditFormat:81 -msgid "Style" -msgstr "Biçem" - -#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Update.html:65 html/Ticket/Create.html:108 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:125 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:82 lib/RT/Ticket_Overlay.pm:1162 lib/RT/Tickets_Overlay.pm:1733 -msgid "Subject" -msgstr "Konu" - -#: 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 "Konu değişti: %1" - -#: html/Elements/Submit:75 -msgid "Submit" -msgstr "Gönder" - -#: lib/RT/Group_Overlay.pm:774 -msgid "Succeeded" -msgstr "Başarılı" - -#: lib/RT/Date.pm:423 -msgid "Sun." -msgstr "Paz." - -#: lib/RT/System.pm:75 -msgid "SuperUser" -msgstr "" - -#: html/User/Elements/DelegateRights:98 -msgid "System" -msgstr "Sistem" - -#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 -msgid "System Configuration" -msgstr "Sistem Ayarları" - -#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:584 lib/RT/Interface/Web.pm:960 lib/RT/Interface/Web.pm:989 -msgid "System Error" -msgstr "Sistem Hatası" - -#: lib/RT/Transaction_Overlay.pm:224 lib/RT/Transaction_Overlay.pm:230 -#. ($msg) -msgid "System Error: %1" -msgstr "Sistem Hatası: %1" - -#: html/Admin/Tools/index.html:47 -msgid "System Tools" -msgstr "Sistem Araçları" - -#: lib/RT/ACE_Overlay.pm:633 -msgid "System error. Right not delegated." -msgstr "Sistem hatası. Yetki devredilemedi." - -#: lib/RT/ACE_Overlay.pm:163 lib/RT/ACE_Overlay.pm:228 lib/RT/ACE_Overlay.pm:323 lib/RT/ACE_Overlay.pm:920 -msgid "System error. Right not granted." -msgstr "Sistem hatası. Yetki verilemedi." - -#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57 -msgid "System groups" -msgstr "Sistem grupları" - -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 -msgid "SystemRolegroup for internal use" -msgstr "İç kullanım için SistemRolGrubu" - -#: lib/RT/CurrentUser.pm:357 -msgid "TEST_STRING" -msgstr "DENEME_YAZISI" - -#: etc/initialdata:603 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:170 -msgid "Take" -msgstr "Al" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "Take tickets" -msgstr "Biletleri al" - -#: lib/RT/Queue_Overlay.pm:115 -msgid "TakeTicket" -msgstr "BiletiAl" - -#: lib/RT/Transaction_Overlay.pm:663 -msgid "Taken" -msgstr "Alındı" - -#: html/Admin/Elements/EditScrip:71 html/Tools/Offline.html:78 -msgid "Template" -msgstr "Şablon" - -#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 -#. ($TemplateObj->Id()) -msgid "Template #%1" -msgstr "Şablon #%1" - -#: html/Admin/Elements/EditTemplates:110 -msgid "Template deleted" -msgstr "Şablon silindi" - -#: lib/RT/Scrip_Overlay.pm:176 -msgid "Template is mandatory argument" -msgstr "Şablon gerekli bir argüman" - -#: lib/RT/Scrip_Overlay.pm:180 -msgid "Template not found" -msgstr "Şablon bulunamadı" - -#: lib/RT/Template_Overlay.pm:343 -msgid "Template parsed" -msgstr "Şablon ayrıştırıldı" - -#: lib/RT/Template_Overlay.pm:391 -msgid "Template parsing error" -msgstr "Şablon ayrıştırma hatası" - -#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 -msgid "Templates" -msgstr "Şablonlar" - -#: lib/RT/CustomField_Overlay.pm:943 lib/RT/Record.pm:945 -msgid "That is already the current value" -msgstr "Bu, zaten şimdiki değer" - -#: lib/RT/CustomField_Overlay.pm:412 -msgid "That is not a value for this custom field" -msgstr "Bu, bu özel alan için bir değer değil" - -#: lib/RT/Ticket_Overlay.pm:1994 -msgid "That is the same value" -msgstr "Bu, aynı değer" - -#: lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:614 -msgid "That principal already has that right" -msgstr "Bu yetkili, zaten bu hakka sahip" - -#: lib/RT/Queue_Overlay.pm:753 -#. ($args{'Type'}) -msgid "That principal is already a %1 for this queue" -msgstr "Bu yetkili, zaten bu kuyruk için bir %1" - -#: lib/RT/Ticket_Overlay.pm:1435 -#. ($self->loc($args{'Type'})) -msgid "That principal is already a %1 for this ticket" -msgstr "Bu yetkili, zaten bu bilet için bir %1" - -#: lib/RT/Queue_Overlay.pm:852 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this queue" -msgstr "Bu yetkili, zaten bu kuyruk için bir %1 değil" - -#: lib/RT/Ticket_Overlay.pm:1990 -msgid "That queue does not exist" -msgstr "Böyle bir kuyruk mevcut değil" - -#: lib/RT/Ticket_Overlay.pm:3233 -msgid "That ticket has unresolved dependencies" -msgstr "Bu bilet, çözümlenmemiş bağımlılıklara sahip" - -#: lib/RT/Action/CreateTickets.pm:710 lib/RT/Ticket_Overlay.pm:3037 -msgid "That user already owns that ticket" -msgstr "Bu kullanıcı, zaten bu biletin sahibi" - -#: lib/RT/Ticket_Overlay.pm:3012 -msgid "That user does not exist" -msgstr "Bu kullanıcı bulunamadı" - -#: lib/RT/User_Overlay.pm:389 -msgid "That user is already privileged" -msgstr "Bu kullanıcı zaten yetkili" - -#: lib/RT/User_Overlay.pm:410 -msgid "That user is already unprivileged" -msgstr "Bu kullanıcı zaten yetkisiz" - -#: lib/RT/User_Overlay.pm:402 -msgid "That user is now privileged" -msgstr "Bu kullanıcı şu anda yetkilendirildi" - -#: lib/RT/User_Overlay.pm:423 -msgid "That user is now unprivileged" -msgstr "Bu kullanıcı artık yetkisiz" - -#: lib/RT/Ticket_Overlay.pm:3031 -msgid "That user may not own tickets in that queue" -msgstr "Bu kullanıcı, bu kuyruktaki biletleri sahiplenemez" - -#: lib/RT/Link_Overlay.pm:233 -msgid "That's not a numerical id" -msgstr "Bu, sayısal bir kimlik değil" - -#: html/SelfService/Display.html:53 html/Ticket/Create.html:177 html/Ticket/Elements/ShowSummary:49 -msgid "The Basics" -msgstr "Temeller" - -#: lib/RT/ACE_Overlay.pm:112 -msgid "The CC of a ticket" -msgstr "Bir biletin KK' sı" - -#: lib/RT/ACE_Overlay.pm:113 -msgid "The administrative CC of a ticket" -msgstr "Bir biletin yönetimsel KK' sı" - -#: 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 "Sonraki komut, 'genel' kuyruğundaki bütün biletleri bulacak ve eğer son 4 saat içinde dokunulmamışlarsa, önem derecelerini 99 a yükseltecektir." - -#: lib/RT/Record.pm:948 -msgid "The new value has been set." -msgstr "Yeni değer atandı." - -#: lib/RT/ACE_Overlay.pm:110 -msgid "The owner of a ticket" -msgstr "Bir biletin sahibi" - -#: lib/RT/ACE_Overlay.pm:111 -msgid "The requestor of a ticket" -msgstr "Bir biletin istekçisi" - -#: html/Admin/Elements/EditUserComments:47 -msgid "These comments aren't generally visible to the user" -msgstr "Bu yorumlar, genellikle kullanıcıya görünür değillerdir" - -#: lib/RT/CustomField_Overlay.pm:978 -msgid "This custom field does not apply to that object" -msgstr "Bu özel alan, bu nesneye etkimez" - -#: html/Admin/Tools/Configuration.html:50 -msgid "This feature is only available to system administrators" -msgstr "Bu özellik, sadece sistem yöneticileri tarafından kullanılabilir" - -#: html/Ticket/Elements/PreviewScrips:96 -msgid "This message will be sent to..." -msgstr "Bu iletinin gönderileceği kişi..." - -#: bin/rt-crontool:266 -msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Bu araç, kullanıcının RT içinden keyfi perl modüllerini çalıştırabilmesine olanak verir." - -#: lib/RT/Transaction_Overlay.pm:301 -msgid "This transaction appears to have no content" -msgstr "Bu hareketin bir içeriğe sahip olmadığı gözüküyor" - -#: html/Ticket/Elements/ShowRequestor:70 -#. ($rows) -msgid "This user's %1 highest priority tickets" -msgstr "Bu kullanıcının %1 en yüksek öneme sahip biletleri" - -#: lib/RT/Date.pm:420 -msgid "Thu." -msgstr "Per." - -#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket #%1 Jumbo update: %2" -msgstr "Bilet #%1 Büyük güncelleme: %2" - -#: html/Approvals/Elements/ShowDependency:67 -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "Ticket #%1: %2" -msgstr "Bilet #%1: %2" - -#: lib/RT/Action/CreateTickets.pm:1350 lib/RT/Action/CreateTickets.pm:1359 lib/RT/Action/CreateTickets.pm:605 lib/RT/Action/CreateTickets.pm:729 lib/RT/Action/CreateTickets.pm:741 -#. ($T::Tickets{$template_id}->Id) -#. ($T::Tickets{$template_id}->id) -#. ($ticket->Id) -msgid "Ticket %1" -msgstr "Bilet %1" - -#: lib/RT/Ticket_Overlay.pm:755 lib/RT/Ticket_Overlay.pm:775 -#. ($self->Id, $QueueObj->Name) -msgid "Ticket %1 created in queue '%2'" -msgstr "Bilet %1, '%2' kuyruğunda oluşturuldu" - -#: html/Search/Bulk.html:377 -#. ($Ticket->Id, $_) -msgid "Ticket %1: %2" -msgstr "Bilet %1: %2" - -#: html/Admin/Elements/QueueTabs:74 -msgid "Ticket Custom Fields" -msgstr "Bilet Özel Alanları" - -#: html/Ticket/History.html:46 html/Ticket/History.html:49 -#. ($Ticket->Id, $Ticket->Subject) -msgid "Ticket History # %1 %2" -msgstr "Bilet geçmişi # %1 %2" - -#: etc/initialdata:324 -msgid "Ticket Resolved" -msgstr "Bilet Çözümlendi" - -#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1207 -msgid "Ticket Transactions" -msgstr "Bilet Hareketleri" - -#: lib/RT/Tickets_Overlay.pm:1920 -msgid "Ticket content" -msgstr "Bilet oluşturuldu" - -#: lib/RT/Tickets_Overlay.pm:1969 -msgid "Ticket content type" -msgstr "Bilet içerik türü" - -#: lib/RT/Ticket_Overlay.pm:603 lib/RT/Ticket_Overlay.pm:617 lib/RT/Ticket_Overlay.pm:628 lib/RT/Ticket_Overlay.pm:763 -msgid "Ticket could not be created due to an internal error" -msgstr "Bir iç hata nedeniyle, bilet oluşturulamadı" - -#: html/Ticket/Display.html:55 -msgid "Ticket metadata" -msgstr "Bilet özel bilgisi" - -#: etc/initialdata:310 -msgid "Ticket status changed" -msgstr "Bilet durumu değişti" - -#: lib/RT/Search/FromSQL.pm:82 -#. (ref $self) -msgid "TicketSQL search module" -msgstr "BiletSQL arama modülü" - -#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:71 html/Search/Elements/Chart:109 lib/RT/CustomField_Overlay.pm:1206 -msgid "Tickets" -msgstr "Biletler" - -#: html/Tools/Reports/CreatedByDates.html:86 -msgid "Tickets created after" -msgstr "Şundan sonra oluşturulan biletler:" - -#: html/Tools/Reports/CreatedByDates.html:88 -msgid "Tickets created before" -msgstr "Şundan önce oluşturulan biletler:" - -#: html/Tools/Reports/ResolvedByDates.html:87 -msgid "Tickets resolved after" -msgstr "Şundan sonra çözümlenen biletler:" - -#: html/Tools/Reports/ResolvedByDates.html:89 -msgid "Tickets resolved before" -msgstr "Şundan önce çözümlenen biletler:" - -#: html/Approvals/Elements/ShowDependency:48 -msgid "Tickets which depend on this approval:" -msgstr "Bu onaya dayanan biletler:" - -#: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:183 html/Ticket/Elements/EditBasics:72 -msgid "Time Estimated" -msgstr "Tahmini Süre" - -#: html/Search/Elements/PickBasics:135 html/Ticket/Create.html:196 html/Ticket/Elements/EditBasics:85 -msgid "Time Left" -msgstr "Kalan Süre" - -#: html/Search/Elements/PickBasics:133 html/Ticket/Create.html:189 html/Ticket/Elements/EditBasics:78 -msgid "Time Worked" -msgstr "Çalışılan Süre" - -#: lib/RT/Tickets_Overlay.pm:1891 -msgid "Time left" -msgstr "Kalan süre" - -#: html/Elements/Footer:51 -msgid "Time to display" -msgstr "Gösterilecek süre" - -#: lib/RT/Tickets_Overlay.pm:1866 -msgid "Time worked" -msgstr "Çalışılan süre" - -#: lib/RT/Ticket_Overlay.pm:1167 -msgid "TimeWorked" -msgstr "ÇalışılanSüre" - -#: html/Search/Elements/EditFormat:74 -msgid "Title" -msgstr "Başlık" - -#: html/Elements/Footer:62 -#. ('sales@bestpractical.com') -msgid "To inquire about support, training, custom development or licensing, please contact %1." -msgstr "Destek hakkında soru sormak için, kişisel geliştirim veya lisanslama için, lütfen %1 ile temasa geçin." - -#: lib/RT/Ticket_Overlay.pm:1170 -msgid "Told" -msgstr "Söylendi" - -#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:74 html/Tools/index.html:46 html/Tools/index.html:49 -msgid "Tools" -msgstr "Araçlar" - -#: html/Search/Elements/Chart:130 -msgid "Total" -msgstr "Toplam" - -#: etc/initialdata:252 -msgid "Transaction" -msgstr "Hareket" - -#: lib/RT/Transaction_Overlay.pm:805 -#. ($self->Data) -msgid "Transaction %1 purged" -msgstr "Hareket %1 tasfiye edildi" - -#: lib/RT/Transaction_Overlay.pm:183 -msgid "Transaction Created" -msgstr "Hareket Oluşturuldu" - -#: html/Admin/Elements/QueueTabs:78 -msgid "Transaction Custom Fields" -msgstr "Hareket Özel Alanları" - -#: lib/RT/Transaction_Overlay.pm:128 -msgid "Transaction->Create couldn't, as you didn't specify an object type and id" -msgstr "Transaction->Create gerçekleştirilemedi, çünkü bir nesne türü ve kimliği belirtmediniz" - -#: lib/RT/Transaction_Overlay.pm:870 -msgid "Transactions are immutable" -msgstr "Hareketler değişemez" - -#: lib/RT/Date.pm:418 -msgid "Tue." -msgstr "Sal." - -#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:1705 -msgid "Type" -msgstr "Tür" - -#: lib/RT/ScripCondition_Overlay.pm:128 -msgid "Unimplemented" -msgstr "Gerçekleştirilmedi" - -#: html/Admin/Users/Modify.html:89 -msgid "Unix login" -msgstr "Unix girişi" - -#: lib/RT/Attachment_Overlay.pm:289 lib/RT/Record.pm:861 -#. ($self->ContentEncoding) -#. ($ContentEncoding) -msgid "Unknown ContentEncoding %1" -msgstr "Bilinmeyen İçerikKodlaması %1" - -#: html/Search/Build.html:455 lib/RT/Report/Tickets.pm:410 -msgid "Unknown field: $key" -msgstr "Bilinmeyen alan: $key" - -#: html/Elements/SelectResultsPerPage:58 -msgid "Unlimited" -msgstr "Sınırsız" - -#: html/Search/Elements/SelectSearchesForObjects:64 -msgid "Unnamed search" -msgstr "Adlandırılmamış arama" - -#: etc/initialdata:32 -msgid "Unprivileged" -msgstr "Yetkisiz" - -#: html/Admin/Elements/EditCustomFields:60 -msgid "Unselected Custom Fields" -msgstr "Seçilmemiş Özel Alanlar" - -#: html/Admin/CustomFields/Objects.html:61 -msgid "Unselected objects" -msgstr "Seçilmemiş nesneler" - -#: lib/RT/Transaction_Overlay.pm:659 -msgid "Untaken" -msgstr "Alınmamış" - -#: html/Admin/Elements/EditScrip:128 html/Elements/RT__Ticket/ColumnMap:302 html/Search/Bulk.html:193 html/Search/Bulk.html:75 -msgid "Update" -msgstr "Güncelle" - -#: html/Ticket/Update.html:135 -msgid "Update Ticket" -msgstr "Bileti Güncelle" - -#: html/Search/Bulk.html:126 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:72 -msgid "Update Type" -msgstr "Türü Güncelle" - -#: html/Search/Bulk.html:200 html/Search/Results.html:78 -msgid "Update multiple tickets" -msgstr "Birden çok bileti güncelle" - -#: lib/RT/Action/CreateTickets.pm:750 lib/RT/Interface/Web.pm:584 -msgid "Update not recorded." -msgstr "Güncelleme kaydedilmedi" - -#: html/Ticket/ModifyAll.html:84 -msgid "Update ticket" -msgstr "Bileti güncelle" - -#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 -#. ($Ticket->id) -msgid "Update ticket #%1" -msgstr "Bileti güncelle: #%1" - -#: html/Ticket/Update.html:158 -#. ($TicketObj->id, $TicketObj->Subject) -msgid "Update ticket #%1 (%2)" -msgstr "Bileti güncelle: #%1 (%2)" - -#: lib/RT/Action/CreateTickets.pm:748 lib/RT/Interface/Web.pm:583 -msgid "Update type was neither correspondence nor comment." -msgstr "Güncelleme türü cevap veya yorum değildi." - -#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/CustomField_Overlay.pm:1284 lib/RT/Ticket_Overlay.pm:1171 -msgid "Updated" -msgstr "Güncellendi" - -#: html/Tools/Offline.html:93 -msgid "Upload" -msgstr "Yükle" - -#: lib/RT/CustomField_Overlay.pm:84 -msgid "Upload multiple files" -msgstr "Çoklu dostya yükle" - -#: lib/RT/CustomField_Overlay.pm:79 -msgid "Upload multiple images" -msgstr "Çoklu resim yükle" - -#: lib/RT/CustomField_Overlay.pm:85 -msgid "Upload one file" -msgstr "Tek bir dosya yükle" - -#: lib/RT/CustomField_Overlay.pm:80 -msgid "Upload one image" -msgstr "Tek bir resim yükle" - -#: lib/RT/CustomField_Overlay.pm:86 -msgid "Upload up to %1 files" -msgstr "En çok %1 dosya yükle" - -#: lib/RT/CustomField_Overlay.pm:81 -msgid "Upload up to %1 images" -msgstr "En çok %1 resim yükle" - -#: html/Tools/Offline.html:93 -msgid "Upload your changes" -msgstr "Değişikliklerinizi yükleyin" - -#: html/Admin/index.html:90 -msgid "Use other RT administrative tools" -msgstr "Diğer RT yönetimsel araçlarını kullan" - -#: lib/RT/Ticket_Overlay.pm:506 -#. ($args{'Owner'}) -msgid "User '%1' could not be found." -msgstr "Kullanıcı '%1' bulunamadı." - -#: etc/initialdata:132 etc/initialdata:206 -msgid "User Defined" -msgstr "Kullanıcı Tanımlandı" - -#: html/Admin/Elements/EditScrip:93 -msgid "User Defined conditions and actions" -msgstr "Kullanıcı tanımlı durumlar ve eylemler" - -#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80 -msgid "User Rights" -msgstr "Kullanıcı Hakları" - -#: html/Admin/Users/Modify.html:301 -#. ($msg) -msgid "User could not be created: %1" -msgstr "Kullanıcı oluşturulamıyor: %1" - -#: lib/RT/User_Overlay.pm:330 -msgid "User created" -msgstr "Kullanıcı oluşturuldu" - -#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 -msgid "User defined groups" -msgstr "Kullanıcı tanımlı gruplar" - -#: lib/RT/User_Overlay.pm:592 lib/RT/User_Overlay.pm:612 -msgid "User loaded" -msgstr "Kullanıcı yüklendi" - -#: html/Admin/Groups/index.html:103 -msgid "User-defined groups" -msgstr "Kullanıcı-tanımlı gruplar" - -#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56 -msgid "Username" -msgstr "Kullanıcı adı" - -#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1208 -msgid "Users" -msgstr "Kullanıcılar" - -#: html/Admin/Users/index.html:85 -msgid "Users matching search criteria" -msgstr "Arama kıstaslarıyla eşleşen kullanıcılar" - -#: bin/rt-crontool:134 -#. ($transaction->id) -msgid "Using transaction #%1..." -msgstr "Hareket #%1 kullanılıyor..." - -#: lib/RT/Tickets_Overlay_SQL.pm:528 -msgid "Valid Query" -msgstr "Geçerli Sorgu" - -#: html/Admin/CustomFields/Modify.html:80 -msgid "Validation" -msgstr "Geçerlilik" - -#: html/Admin/CustomFields/Modify.html:130 html/Admin/Elements/EditCustomField:78 -msgid "Values" -msgstr "Değerler" - -#: lib/RT/Queue_Overlay.pm:107 -msgid "Watch" -msgstr "Gözle" - -#: lib/RT/Queue_Overlay.pm:108 -msgid "WatchAsAdminCc" -msgstr "YöneticiKkOlarakGözle" - -#: html/Admin/Elements/QueueTabs:63 -msgid "Watchers" -msgstr "Gözcüler" - -#: lib/RT/Date.pm:419 -msgid "Wed." -msgstr "Çar." - -#: html/Tools/MyDay.html:75 -msgid "What I did today" -msgstr "Bugün ne yaptım" - -#: etc/initialdata:521 -msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" -msgstr "Bir bilet, bütün onaycılar tarafından onaylandığında, özgün bilete cevap yolla" - -#: etc/initialdata:485 -msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "Bir bilet, herhangi bir onaycı tarafından onaylandığında, özgün bilete cevap yolla" - -#: etc/initialdata:146 -msgid "When a ticket is created" -msgstr "Bir bilet oluşturulduğunda" - -#: etc/initialdata:418 -msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "Bir onay bileti oluşturulduğunda, sahibi ve YöneticiKk' yı, nesnenin onaylarını beklediği konusunda uyar" - -#: etc/initialdata:151 -msgid "When anything happens" -msgstr "Herhangi bir şey olduğunda" - -#: etc/initialdata:199 -msgid "Whenever a ticket is resolved" -msgstr "Bir bilet çözümlendiğinde" - -#: etc/initialdata:185 -msgid "Whenever a ticket's owner changes" -msgstr "Bir biletin sahibi değiştiğinde" - -#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 -msgid "Whenever a ticket's priority changes" -msgstr "Bir biletin önceliği değiştiğinde" - -#: etc/initialdata:193 -msgid "Whenever a ticket's queue changes" -msgstr "Bir biletin kuyruğu değiştiğinde" - -#: etc/initialdata:170 -msgid "Whenever a ticket's status changes" -msgstr "Bir biletin durumu değiştiğinde" - -#: etc/initialdata:207 -msgid "Whenever a user-defined condition occurs" -msgstr "Kullanıcı tanımlı bir durum oluştuğunda" - -#: etc/initialdata:164 -msgid "Whenever comments come in" -msgstr "Bir yorum geldiğinde" - -#: etc/initialdata:157 -msgid "Whenever correspondence comes in" -msgstr "Cevap geldiğinde" - -#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:88 -msgid "Work" -msgstr "Çalışma" - -#: html/Search/Results.html:82 -msgid "Work offline" -msgstr "Çevrimdışı çalışma" - -#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 -msgid "Worked" -msgstr "Çalışıldı" - -#: lib/RT/Ticket_Overlay.pm:3140 -msgid "You already own this ticket" -msgstr "Bu biletin sahibi zaten sizsiniz" - -#: html/autohandler:214 html/autohandler:222 -msgid "You are not an authorized user" -msgstr "Yetkili bir kullanıcı değilsiniz" - -#: html/Prefs/Search.html:56 -msgid "You can also edit the predefined search itself" -msgstr "Öntanımlı aramanın kendisinide değiştirebilirsiniz" - -#: lib/RT/Ticket_Overlay.pm:3025 -msgid "You can only reassign tickets that you own or that are unowned" -msgstr "Sahibi olduğunuz veya sahipsiz biletleri tekrar tahsis edebilirsiniz" - -#: lib/RT/Ticket_Overlay.pm:3021 -msgid "You can only take tickets that are unowned" -msgstr "Sadece sahibi olmadığınız biletleri alabilirsiniz" - -#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 -#. ($num, $queue) -msgid "You found %1 tickets in queue %2" -msgstr "%2 kuyruğunda %1 bilet buldunuz" - -#: html/NoAuth/Logout.html:52 -msgid "You have been logged out of RT." -msgstr "RT' den çıkış yaptınız" - -#: html/SelfService/Display.html:133 -msgid "You have no permission to create tickets in that queue." -msgstr "Bu kuyrukta bilet oluşturmaya yetkiniz yok." - -#: lib/RT/Ticket_Overlay.pm:2003 -msgid "You may not create requests in that queue." -msgstr "Bu kuyrukta istek oluşturamazsınız." - -#: html/NoAuth/Logout.html:56 -msgid "You're welcome to login again" -msgstr "Tekrar giriş yapabilirsiniz" - -#: etc/initialdata:502 -msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Ä°steğiniz %1 tarafından onaylandı. Diğer onaylar, halen bekliyor olabilir." - -#: etc/initialdata:540 -msgid "Your request has been approved." -msgstr "Ä°steğiniz onaylandı" - -#: etc/initialdata:445 -msgid "Your request was rejected." -msgstr "Ä°steğiniz reddedildi." - -#: html/autohandler:251 -msgid "Your username or password is incorrect" -msgstr "Kullanıcı adınız veya parolanız yanlış" - -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 -msgid "Zip" -msgstr "Posta Kodu" - -#: lib/RT/System.pm:87 -msgid "allow creation of saved searches" -msgstr "kaydedilmiş aramaların oluşturulmasına izin ver" - -#: lib/RT/System.pm:86 -msgid "allow loading of saved searches" -msgstr "kaydedilmiş aramaların yüklenmesine izin ver" - -#: html/User/Elements/DelegateRights:80 -#. ($right->PrincipalObj->Object->SelfDescription) -msgid "as granted to %1" -msgstr "%1' e verildi" - -#: html/Search/Results.html:83 -msgid "chart" -msgstr "şema" - -#: html/SelfService/Closed.html:49 -msgid "closed" -msgstr "kapalı" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 -msgid "contains" -msgstr "içeriyor" - -#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:346 -msgid "days" -msgstr "gün" - -#: lib/RT/Queue_Overlay.pm:87 -msgid "deleted" -msgstr "silindi" - -#: html/Search/Elements/PickBasics:61 -msgid "does not match" -msgstr "eşleşmiyor" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 -msgid "doesn't contain" -msgstr "içermiyor" - -#: html/Elements/SelectEqualityOperator:59 -msgid "equal to" -msgstr "eşittir" - -#: html/Search/Build.html:547 -msgid "error: can't move down" -msgstr "hata: aşağı gidemiyorum" - -#: html/Search/Build.html:569 -msgid "error: can't move left" -msgstr "hata sola gidemiyorum" - -#: html/Search/Build.html:528 -msgid "error: can't move up" -msgstr "hata yukarı gidemiyorum" - -#: html/Search/Build.html:612 -msgid "error: nothing to delete" -msgstr "hata: silinecek bir şey yok" - -#: html/Search/Build.html:533 html/Search/Build.html:552 html/Search/Build.html:574 html/Search/Build.html:603 -msgid "error: nothing to move" -msgstr "hata: taşınacak bir şey yok" - -#: html/Search/Build.html:630 -msgid "error: nothing to toggle" -msgstr "hata: değiştirecek bir şey yok" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "greater than" -msgstr "büyüktür" - -#: lib/RT/Group_Overlay.pm:214 -#. ($self->Name) -msgid "group '%1'" -msgstr "grup %1" - -#: html/Search/Results.html:88 -#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $Query)) -msgid "grouped by %1" -msgstr "%1 ile gruplanmış" - -#: lib/RT/Date.pm:342 -msgid "hours" -msgstr "saat" - -#: html/Search/Elements/PickBasics:48 -msgid "id" -msgstr "numara" - -#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53 -msgid "is" -msgstr "aynıdır" - -#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54 -msgid "isn't" -msgstr "aynı değildir" - -#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 -msgid "less than" -msgstr "azdır" - -#: html/Search/Elements/PickBasics:60 -msgid "matches" -msgstr "eşleşir" - -#: lib/RT/Date.pm:338 -msgid "min" -msgstr "en az" - -#: lib/RT/Date.pm:354 -msgid "months" -msgstr "ay" - -#: lib/RT/Queue_Overlay.pm:82 -msgid "new" -msgstr "yeni" - -#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:65 -msgid "no name" -msgstr "adsız" - -#: html/Admin/Elements/EditScrips:64 -msgid "no value" -msgstr "değersiz" - -#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 -msgid "none" -msgstr "hiçbiri" - -#: html/Elements/SelectEqualityOperator:59 -msgid "not equal to" -msgstr "eşit değildir" - -#: html/SelfService/Elements/MyRequests:82 lib/RT/Queue_Overlay.pm:83 -msgid "open" -msgstr "açık" - -#: lib/RT/Group_Overlay.pm:219 -#. ($self->Name, $user->Name) -msgid "personal group '%1' for user '%2'" -msgstr "'%2' kullanıcısı için, kişisel grup '%1'" - -#: lib/RT/Group_Overlay.pm:227 -#. ($queue->Name, $self->Type) -msgid "queue %1 %2" -msgstr "kuyruk %1 %2" - -#: lib/RT/Queue_Overlay.pm:86 -msgid "rejected" -msgstr "reddedildi" - -#: lib/RT/Queue_Overlay.pm:85 -msgid "resolved" -msgstr "çözüldü" - -#: lib/RT/Date.pm:334 -msgid "sec" -msgstr "saniye" - -#: lib/RT/System.pm:85 -msgid "show Configuration tab" -msgstr "ayar sekmesini göster" - -#: html/Search/Results.html:80 -msgid "spreadsheet" -msgstr "hesap çizelgesi" - -#: lib/RT/Queue_Overlay.pm:84 -msgid "stalled" -msgstr "savsaklandı" - -#: html/Search/Results.html:89 -#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle')) -msgid "style: %1" -msgstr "biçem: %1" - -#: html/Prefs/MyRT.html:93 -msgid "summary rows" -msgstr "özet satırları" - -#: lib/RT/Group_Overlay.pm:222 -#. ($self->Type) -msgid "system %1" -msgstr "sistem %1" - -#: lib/RT/Group_Overlay.pm:233 -#. ($self->Type) -msgid "system group '%1'" -msgstr "sistem grubu '%1'" - -#: html/Elements/Error:64 html/SelfService/Error.html:63 -msgid "the calling component did not specify why" -msgstr "çağıran bileşen, nedenini belirtmedi" - -#: lib/RT/Group_Overlay.pm:230 -#. ($self->Instance, $self->Type) -msgid "ticket #%1 %2" -msgstr "bilet #%1 %2" - -#: lib/RT/Group_Overlay.pm:236 -#. ($self->Id) -msgid "undescribed group %1" -msgstr "betimlenmemiş grup %1" - -#: lib/RT/Group_Overlay.pm:211 -#. ($user->Object->Name) -msgid "user %1" -msgstr "kullanıcı %1" - -#: lib/RT/Date.pm:350 -msgid "weeks" -msgstr "hafta" - -#: lib/RT/Date.pm:358 -msgid "years" -msgstr "yıl" - diff --git a/rt/lib/RT/I18N/zh_cn.po b/rt/lib/RT/I18N/zh_cn.po deleted file mode 100644 index 84932e9bf..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 which 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 which 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 which 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 618f3dc22..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 which 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 which 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 which 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/Interface/CLI.pm b/rt/lib/RT/Interface/CLI.pm deleted file mode 100644 index ec0e877b4..000000000 --- a/rt/lib/RT/Interface/CLI.pm +++ /dev/null @@ -1,246 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -use strict; - -use RT; -package RT::Interface::CLI; - - - -BEGIN { - use Exporter (); - use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); - - # set the version for version checking - $VERSION = do { my @r = (q$Revision: 1.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker - - @ISA = qw(Exporter); - - # your exported package globals go here, - # as well as any optionally exported functions - @EXPORT_OK = qw(&CleanEnv - &GetCurrentUser &GetMessageContent &debug &loc); -} - -=head1 NAME - - RT::Interface::CLI - helper functions for creating a commandline RT interface - -=head1 SYNOPSIS - - use lib "/path/to/rt/libraries/"; - - use RT::Interface::CLI qw(CleanEnv - GetCurrentUser GetMessageContent loc); - - #Clean out all the nasties from the environment - CleanEnv(); - - #let's talk to RT' - use RT; - - #Load RT's config file - RT::LoadConfig(); - - # Connect to the database. set up loggign - RT::Init(); - - #Get the current user all loaded - my $CurrentUser = GetCurrentUser(); - - print loc('Hello!'); # Synonym of $CuurentUser->loc('Hello!'); - -=head1 DESCRIPTION - - -=head1 METHODS - -=begin testing - -ok(require RT::Interface::CLI); - -=end testing - -=cut - - -=head2 CleanEnv - -Removes some of the nastiest nasties from the user\'s environment. - -=cut - -sub CleanEnv { - $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need - $ENV{'CDPATH'} = '' if defined $ENV{'CDPATH'}; - $ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'}; - $ENV{'ENV'} = '' if defined $ENV{'ENV'}; - $ENV{'IFS'} = '' if defined $ENV{'IFS'}; -} - - - - -{ - - my $CurrentUser; # shared betwen GetCurrentUser and loc - -# {{{ sub GetCurrentUser - -=head2 GetCurrentUser - - Figures out the uid of the current user and returns an RT::CurrentUser object -loaded with that user. if the current user isn't found, returns a copy of RT::Nobody. - -=cut - -sub GetCurrentUser { - - require RT::CurrentUser; - - #Instantiate a user object - - my $Gecos= ($^O eq 'MSWin32') ? Win32::LoginName() : (getpwuid($<))[0]; - - #If the current user is 0, then RT will assume that the User object - #is that of the currentuser. - - $CurrentUser = new RT::CurrentUser(); - $CurrentUser->LoadByGecos($Gecos); - - unless ($CurrentUser->Id) { - $RT::Logger->debug("No user with a unix login of '$Gecos' was found. "); - } - - return($CurrentUser); -} -# }}} - - -# {{{ sub loc - -=head2 loc - - Synonym of $CurrentUser->loc(). - -=cut - -sub loc { - die "No current user yet" unless $CurrentUser ||= RT::CurrentUser->new; - return $CurrentUser->loc(@_); -} -# }}} - -} - - -# {{{ sub GetMessageContent - -=head2 GetMessageContent - -Takes two arguments a source file and a boolean "edit". If the source file -is undef or "", assumes an empty file. Returns an edited file as an -array of lines. - -=cut - -sub GetMessageContent { - my %args = ( Source => undef, - Content => undef, - Edit => undef, - CurrentUser => undef, - @_); - my $source = $args{'Source'}; - - my $edit = $args{'Edit'}; - - my $currentuser = $args{'CurrentUser'}; - my @lines; - - use File::Temp qw/ tempfile/; - - #Load the sourcefile, if it's been handed to us - if ($source) { - open (SOURCE, "<$source"); - @lines = (); - close (SOURCE); - } - elsif ($args{'Content'}) { - @lines = split('\n',$args{'Content'}); - } - #get us a tempfile. - my ($fh, $filename) = tempfile(); - - #write to a tmpfile - for (@lines) { - print $fh $_; - } - close ($fh); - - #Edit the file if we need to - if ($edit) { - - unless ($ENV{'EDITOR'}) { - $RT::Logger->crit('No $EDITOR variable defined'. "\n"); - return undef; - } - system ($ENV{'EDITOR'}, $filename); - } - - open (READ, "<$filename"); - my @newlines = (); - close (READ); - - unlink ($filename) unless (debug()); - return(\@newlines); - -} - -# }}} - -# {{{ sub debug - -sub debug { - my $val = shift; - my ($debug); - if ($val) { - $RT::Logger->debug($val."\n"); - if ($debug) { - print STDERR "$val\n"; - } - } - if ($debug) { - return(1); - } -} - -# }}} - - -eval "require RT::Interface::CLI_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/CLI_Vendor.pm}); -eval "require RT::Interface::CLI_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/CLI_Local.pm}); - -1; diff --git a/rt/lib/RT/Interface/Email.pm b/rt/lib/RT/Interface/Email.pm deleted file mode 100755 index 7eec0502f..000000000 --- a/rt/lib/RT/Interface/Email.pm +++ /dev/null @@ -1,648 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -package RT::Interface::Email; - -use strict; -use Mail::Address; -use MIME::Entity; -use RT::EmailParser; - - -BEGIN { - use Exporter (); - use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); - - # set the version for version checking - $VERSION = do { my @r = (q$Revision: 1.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker - - @ISA = qw(Exporter); - - # your exported package globals go here, - # as well as any optionally exported functions - @EXPORT_OK = qw( - &CreateUser - &GetMessageContent - &CheckForLoops - &CheckForSuspiciousSender - &CheckForAutoGenerated - &MailError - &ParseCcAddressesFromHead - &ParseSenderAddressFromHead - &ParseErrorsToAddressFromHead - &ParseAddressFromHeader - &Gateway); - -} - -=head1 NAME - - RT::Interface::CLI - helper functions for creating a commandline RT interface - -=head1 SYNOPSIS - - use lib "!!RT_LIB_PATH!!"; - use lib "!!RT_ETC_PATH!!"; - - use RT::Interface::Email qw(Gateway CreateUser); - -=head1 DESCRIPTION - - -=begin testing - -ok(require RT::Interface::Email); - -=end testing - - -=head1 METHODS - -=cut - - -# {{{ sub CheckForLoops - -sub CheckForLoops { - my $head = shift; - - #If this instance of RT sent it our, we don't want to take it in - my $RTLoop = $head->get("X-RT-Loop-Prevention") || ""; - chomp ($RTLoop); #remove that newline - if ($RTLoop eq "$RT::rtname") { - return (1); - } - - # TODO: We might not trap the case where RT instance A sends a mail - # to RT instance B which sends a mail to ... - return (undef); -} - -# }}} - -# {{{ sub CheckForSuspiciousSender - -sub CheckForSuspiciousSender { - my $head = shift; - - #if it's from a postmaster or mailer daemon, it's likely a bounce. - - #TODO: better algorithms needed here - there is no standards for - #bounces, so it's very difficult to separate them from anything - #else. At the other hand, the Return-To address is only ment to be - #used as an error channel, we might want to put up a separate - #Return-To address which is treated differently. - - #TODO: search through the whole email and find the right Ticket ID. - - my ($From, $junk) = ParseSenderAddressFromHead($head); - - if (($From =~ /^mailer-daemon/i) or - ($From =~ /^postmaster/i)){ - return (1); - - } - - return (undef); - -} - -# }}} - -# {{{ sub CheckForAutoGenerated -sub CheckForAutoGenerated { - my $head = shift; - - my $Precedence = $head->get("Precedence") || "" ; - if ($Precedence =~ /^(bulk|junk)/i) { - return (1); - } - else { - return (0); - } -} - -# }}} - - -# {{{ sub MailError -sub MailError { - my %args = (To => $RT::OwnerEmail, - Bcc => undef, - From => $RT::CorrespondAddress, - Subject => 'There has been an error', - Explanation => 'Unexplained error', - MIMEObj => undef, - LogLevel => 'crit', - @_); - - - $RT::Logger->log(level => $args{'LogLevel'}, - message => $args{'Explanation'} - ); - my $entity = MIME::Entity->build( Type =>"multipart/mixed", - From => $args{'From'}, - Bcc => $args{'Bcc'}, - To => $args{'To'}, - Subject => $args{'Subject'}, - 'X-RT-Loop-Prevention' => $RT::rtname, - ); - - $entity->attach( Data => $args{'Explanation'}."\n"); - - my $mimeobj = $args{'MIMEObj'}; - if ($mimeobj) { - $mimeobj->sync_headers(); - $entity->add_part($mimeobj); - } - - if ($RT::MailCommand eq 'sendmailpipe') { - open (MAIL, "|$RT::SendmailPath $RT::SendmailArguments") || return(0); - print MAIL $entity->as_string; - close(MAIL); - } - else { - $entity->send($RT::MailCommand, $RT::MailParams); - } -} - -# }}} - -# {{{ Create User - -sub CreateUser { - my ($Username, $Address, $Name, $ErrorsTo, $entity) = @_; - my $NewUser = RT::User->new($RT::SystemUser); - - # This data is tainted by some Very Broken mailers. - # (Sometimes they send raw ISO 8859-1 data here. fear that. - require Encode; - $Username = Encode::encode(utf8 => $Username, Encode::FB_PERLQQ()) if defined $Username; - $Name = Encode::encode(utf8 => $Name, Encode::FB_PERLQQ()) if defined $Name; - - my ($Val, $Message) = - $NewUser->Create(Name => ($Username || $Address), - EmailAddress => $Address, - RealName => $Name, - Password => undef, - Privileged => 0, - Comments => 'Autocreated on ticket submission' - ); - - unless ($Val) { - - # Deal with the race condition of two account creations at once - # - if ($Username) { - $NewUser->LoadByName($Username); - } - - unless ($NewUser->Id) { - $NewUser->LoadByEmail($Address); - } - - unless ($NewUser->Id) { - MailError( To => $ErrorsTo, - Subject => "User could not be created", - Explanation => "User creation failed in mailgateway: $Message", - MIMEObj => $entity, - LogLevel => 'crit' - ); - } - } - - #Load the new user object - my $CurrentUser = RT::CurrentUser->new(); - $CurrentUser->LoadByEmail($Address); - - unless ($CurrentUser->id) { - $RT::Logger->warning("Couldn't load user '$Address'.". "giving up"); - MailError( To => $ErrorsTo, - Subject => "User could not be loaded", - Explanation => "User '$Address' could not be loaded in the mail gateway", - MIMEObj => $entity, - LogLevel => 'crit' - ); - } - - return $CurrentUser; -} -# }}} -# {{{ ParseCcAddressesFromHead - -=head2 ParseCcAddressesFromHead HASHREF - -Takes a hashref object containing QueueObj, Head and CurrentUser objects. -Returns a list of all email addresses in the To and Cc -headers b the current Queue\'s email addresses, the CurrentUser\'s -email address and anything that the configuration sub RT::IsRTAddress matches. - -=cut - -sub ParseCcAddressesFromHead { - my %args = ( Head => undef, - QueueObj => undef, - CurrentUser => undef, - @_ ); - - my (@Addresses); - - my @ToObjs = Mail::Address->parse($args{'Head'}->get('To')); - my @CcObjs = Mail::Address->parse($args{'Head'}->get('Cc')); - - foreach my $AddrObj (@ToObjs, @CcObjs) { - my $Address = $AddrObj->address; - $Address = $args{'CurrentUser'}->UserObj->CanonicalizeEmailAddress($Address); - next if ($args{'CurrentUser'}->EmailAddress =~ /^$Address$/i); - next if ($args{'QueueObj'}->CorrespondAddress =~ /^$Address$/i); - next if ($args{'QueueObj'}->CommentAddress =~ /^$Address$/i); - next if (RT::EmailParser::IsRTAddress(undef, $Address)); - - push (@Addresses, $Address); - } - return (@Addresses); -} - - -# }}} - -# {{{ ParseSenderAdddressFromHead - -=head2 ParseSenderAddressFromHead - -Takes a MIME::Header object. Returns a tuple: (user@host, friendly name) -of the From (evaluated in order of Reply-To:, From:, Sender) - -=cut - -sub ParseSenderAddressFromHead { - my $head = shift; - #Figure out who's sending this message. - my $From = $head->get('Reply-To') || - $head->get('From') || - $head->get('Sender'); - return (ParseAddressFromHeader($From)); -} -# }}} - -# {{{ ParseErrorsToAdddressFromHead - -=head2 ParseErrorsToAddressFromHead - -Takes a MIME::Header object. Return a single value : user@host -of the From (evaluated in order of Errors-To:,Reply-To:, From:, Sender) - -=cut - -sub ParseErrorsToAddressFromHead { - my $head = shift; - #Figure out who's sending this message. - - foreach my $header ('Errors-To' , 'Reply-To', 'From', 'Sender' ) { - # If there's a header of that name - my $headerobj = $head->get($header); - if ($headerobj) { - my ($addr, $name ) = ParseAddressFromHeader($headerobj); - # If it's got actual useful content... - return ($addr) if ($addr); - } - } -} -# }}} - -# {{{ ParseAddressFromHeader - -=head2 ParseAddressFromHeader ADDRESS - -Takes an address from $head->get('Line') and returns a tuple: user@host, friendly name - -=cut - - -sub ParseAddressFromHeader{ - my $Addr = shift; - - my @Addresses = Mail::Address->parse($Addr); - - my $AddrObj = $Addresses[0]; - - unless (ref($AddrObj)) { - return(undef,undef); - } - - my $Name = ($AddrObj->phrase || $AddrObj->comment || $AddrObj->address); - - #Lets take the from and load a user object. - my $Address = $AddrObj->address; - - return ($Address, $Name); -} -# }}} - - - -=head2 Gateway - -This performs all the "guts" of the mail rt-mailgate program, and is -designed to be called from the web interface with a message, user -object, and so on. - -=cut - -sub Gateway { - my %args = ( message => undef, - queue => 1, - action => 'correspond', - ticket => undef, - @_ ); - - # Validate the action - unless ( $args{'action'} =~ /^(comment|correspond|action)$/ ) { - - # Can't safely loc this. What object do we loc around? - return ( 0, "Invalid 'action' parameter", undef ); - } - - my $parser = RT::EmailParser->new(); - $parser->ParseMIMEEntityFromScalar( $args{'message'} ); - - my $Message = $parser->Entity(); - my $head = $Message->head; - - my ( $CurrentUser, $AuthStat, $status, $error ); - - my $ErrorsTo = ParseErrorsToAddressFromHead($head); - - my $MessageId = $head->get('Message-Id') - || ""; - - #Pull apart the subject line - my $Subject = $head->get('Subject') || ''; - chomp $Subject; - - - $args{'ticket'} ||= $parser->ParseTicketId($Subject); - - my $SystemTicket; - if ($args{'ticket'} ) { - $SystemTicket = RT::Ticket->new($RT::SystemUser); - $SystemTicket->Load($args{'ticket'}); - } - - #Set up a queue object - my $SystemQueueObj = RT::Queue->new($RT::SystemUser); - $SystemQueueObj->Load( $args{'queue'} ); - - - # We can safely have no queue of we have a known-good ticket - unless ( $args{'ticket'} || $SystemQueueObj->id ) { - MailError( - To => $RT::OwnerEmail, - Subject => "RT Bounce: $Subject", - Explanation => "RT couldn't find the queue: " . $args{'queue'}, - MIMEObj => $Message ); - return ( 0, "RT couldn't find the queue: " . $args{'queue'}, undef ); - } - - # Authentication Level - # -1 - Get out. this user has been explicitly declined - # 0 - User may not do anything (Not used at the moment) - # 1 - Normal user - # 2 - User is allowed to specify status updates etc. a la enhanced-mailgate - - push @RT::MailPlugins, "Auth::MailFrom" unless @RT::MailPlugins; - # Since this needs loading, no matter what - - for (@RT::MailPlugins) { - my $Code; - my $NewAuthStat; - if ( ref($_) eq "CODE" ) { - $Code = $_; - } - else { - $_ = "RT::Interface::Email::$_" unless /^RT::Interface::Email::/; - eval "require $_;"; - if ($@) { - die ("Couldn't load module $_: $@"); - next; - } - no strict 'refs'; - if ( !defined( $Code = *{ $_ . "::GetCurrentUser" }{CODE} ) ) { - die ("No GetCurrentUser code found in $_ module"); - next; - } - } - - ( $CurrentUser, $NewAuthStat ) = $Code->( Message => $Message, - CurrentUser => $CurrentUser, - AuthLevel => $AuthStat, - Action => $args{'action'}, - Ticket => $SystemTicket, - Queue => $SystemQueueObj ); - - # You get the highest level of authentication you were assigned. - last if $AuthStat == -1; - $AuthStat = $NewAuthStat if $NewAuthStat > $AuthStat; - } - - # {{{ If authentication fails and no new user was created, get out. - if ( !$CurrentUser or !$CurrentUser->Id or $AuthStat == -1 ) { - - # If the plugins refused to create one, they lose. - MailError( - Subject => "Could not load a valid user", - Explanation => < $Message, - LogLevel => 'error' ) - unless $AuthStat == -1; - return ( 0, "Could not load a valid user", undef ); - } - - # }}} - - # {{{ Lets check for mail loops of various sorts. - my $IsAutoGenerated = CheckForAutoGenerated($head); - - my $IsSuspiciousSender = CheckForSuspiciousSender($head); - - my $IsALoop = CheckForLoops($head); - - my $SquelchReplies = 0; - - #If the message is autogenerated, we need to know, so we can not - # send mail to the sender - if ( $IsSuspiciousSender || $IsAutoGenerated || $IsALoop ) { - $SquelchReplies = 1; - $ErrorsTo = $RT::OwnerEmail; - } - - # }}} - - # {{{ Drop it if it's disallowed - if ( $AuthStat == 0 ) { - MailError( - To => $ErrorsTo, - Subject => "Permission Denied", - Explanation => "You do not have permission to communicate with RT", - MIMEObj => $Message ); - } - - # }}} - # {{{ Warn someone if it's a loop - - # Warn someone if it's a loop, before we drop it on the ground - if ($IsALoop) { - $RT::Logger->crit("RT Recieved mail ($MessageId) from itself."); - - #Should we mail it to RTOwner? - if ($RT::LoopsToRTOwner) { - MailError( To => $RT::OwnerEmail, - Subject => "RT Bounce: $Subject", - Explanation => "RT thinks this message may be a bounce", - MIMEObj => $Message ); - - #Do we actually want to store it? - return ( 0, "Message Bounced", undef ) unless ($RT::StoreLoops); - } - } - - # }}} - - # {{{ Squelch replies if necessary - # Don't let the user stuff the RT-Squelch-Replies-To header. - if ( $head->get('RT-Squelch-Replies-To') ) { - $head->add( 'RT-Relocated-Squelch-Replies-To', - $head->get('RT-Squelch-Replies-To') ); - $head->delete('RT-Squelch-Replies-To'); - } - - if ($SquelchReplies) { - ## TODO: This is a hack. It should be some other way to - ## indicate that the transaction should be "silent". - - my ( $Sender, $junk ) = ParseSenderAddressFromHead($head); - $head->add( 'RT-Squelch-Replies-To', $Sender ); - } - - # }}} - - my $Ticket = RT::Ticket->new($CurrentUser); - - # {{{ If we don't have a ticket Id, we're creating a new ticket - if ( !$args{'ticket'} ) { - - # {{{ Create a new ticket - - my @Cc; - my @Requestors = ( $CurrentUser->id ); - - if ($RT::ParseNewMessageForTicketCcs) { - @Cc = ParseCcAddressesFromHead( Head => $head, - CurrentUser => $CurrentUser, - QueueObj => $SystemQueueObj ); - } - - my ( $id, $Transaction, $ErrStr ) = $Ticket->Create( - Queue => $SystemQueueObj->Id, - Subject => $Subject, - Requestor => \@Requestors, - Cc => \@Cc, - MIMEObj => $Message ); - if ( $id == 0 ) { - MailError( To => $ErrorsTo, - Subject => "Ticket creation failed", - Explanation => $ErrStr, - MIMEObj => $Message ); - $RT::Logger->error("Create failed: $id / $Transaction / $ErrStr "); - return ( 0, "Ticket creation failed", $Ticket ); - } - - # }}} - } - - # }}} - - # If the action is comment, add a comment. - elsif ( $args{'action'} =~ /^(comment|correspond)$/i ) { - $Ticket->Load($args{'ticket'}); - unless ( $Ticket->Id ) { - my $message = "Could not find a ticket with id ".$args{'ticket'}; - MailError( To => $ErrorsTo, - Subject => "Message not recorded", - Explanation => $message, - MIMEObj => $Message ); - - return ( 0, $message); - } - - my ( $status, $msg ); - if ( $args{'action'} =~ /^correspond$/ ) { - ( $status, $msg ) = $Ticket->Correspond( MIMEObj => $Message ); - } - else { - ( $status, $msg ) = $Ticket->Comment( MIMEObj => $Message ); - } - unless ($status) { - - #Warn the sender that we couldn't actually submit the comment. - MailError( To => $ErrorsTo, - Subject => "Message not recorded", - Explanation => $msg, - MIMEObj => $Message ); - return ( 0, "Message not recorded", $Ticket ); - } - } - - else { - - #Return mail to the sender with an error - MailError( To => $ErrorsTo, - Subject => "RT Configuration error", - Explanation => "'" - . $args{'action'} - . "' not a recognized action." - . " Your RT administrator has misconfigured " - . "the mail aliases which invoke RT", - MIMEObj => $Message ); - $RT::Logger->crit( $args{'action'} . " type unknown for $MessageId" ); - return ( 0, "Configuration error: " . $args{'action'} . " not a recognized action", $Ticket ); - - } - - -return ( 1, "Success", $Ticket ); -} - -eval "require RT::Interface::Email_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email_Vendor.pm}); -eval "require RT::Interface::Email_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email_Local.pm}); - -1; diff --git a/rt/lib/RT/Interface/Email/Auth/GnuPG.pm b/rt/lib/RT/Interface/Email/Auth/GnuPG.pm deleted file mode 100755 index 115080722..000000000 --- a/rt/lib/RT/Interface/Email/Auth/GnuPG.pm +++ /dev/null @@ -1,123 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# -package RT::Interface::Email::Auth::GnuPG; -use Mail::GnuPG; - -=head2 GetCurrentUser - -To use the gnupg-secured mail gateway, you need to do the following: - -Set up a gnupgp key directory with a pubring containing only the keys -you care about and specify the following in your SiteConfig.pm - -Set($RT::GPGKeyDir, "/path/to/keyring-directory"); -@RT::MailPlugins = qw(Auth::MailFrom Auth::GnuPG Filter::TakeAction); - - - -=cut - - - -sub GetCurrentUser { - my %args = ( - Message => undef, - RawMessageRef => undef, - CurrentUser => undef, - AuthLevel => undef, - Ticket => undef, - Queue => undef, - Action => undef, - @_ - ); - - my ( $val, $key, $address,$gpg ); - - eval { - - my $parser = RT::EmailParser->new(); - $parser->SmartParseMIMEEntityFromScalar(Message => ${$args{'RawMessageRef'}}, Decode => 0); - $gpg = Mail::GnuPG->new( keydir => $RT::GPGKeyDir ); - my $entity = $parser->Entity; - ( $val, $key, $address ) = $gpg->verify( $parser->Entity); - $RT::Logger->crit("Got $val - $key - $address"); - }; - - if ($@) { - $RT::Logger->crit($@); - } - - unless ($address) { - $RT::Logger->crit( "Couldn't find a valid signature" . join ( "\n", @{ $gpg->{'last_message'} } ) ); - return ( $args{'CurrentUser'}, $args{'AuthLevel'} ); - } - - my @addrs = Mail::Address->parse($address); - $address = $addrs[0]->address(); - - my $CurrentUser = RT::CurrentUser->new(); - $CurrentUser->LoadByEmail($address); - - if ( $CurrentUser->Id ) { - $RT::Logger->crit($address . " authenticated via PGP signature"); - return ( $CurrentUser, 2 ); - } - -} - -eval "require RT::Interface::Email::Auth::GnuPG_Vendor"; -die $@ - if ( $@ - && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPG_Vendor.pm} ); -eval "require RT::Interface::Email::Auth::GnuPG_Local"; -die $@ - if ( $@ - && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPG_Local.pm} ); - -1; diff --git a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm deleted file mode 100644 index 32009c372..000000000 --- a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm +++ /dev/null @@ -1,189 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Interface::Email::Auth::MailFrom; -use RT::Interface::Email qw(ParseSenderAddressFromHead CreateUser); - -# This is what the ordinary, non-enhanced gateway does at the moment. - -sub GetCurrentUser { - my %args = ( Message => undef, - CurrentUser => undef, - AuthLevel => undef, - Ticket => undef, - Queue => undef, - Action => undef, - @_ ); - - - # We don't need to do any external lookups - my ( $Address, $Name ) = ParseSenderAddressFromHead( $args{'Message'}->head ); - - unless ($Address) { - return ( $args{'CurrentUser'}, -1 ); - } - - my $CurrentUser = RT::CurrentUser->new(); - $CurrentUser->LoadByEmail($Address); - - unless ( $CurrentUser->Id ) { - $CurrentUser->LoadByName($Address); - } - - if ( $CurrentUser->Id ) { - return ( $CurrentUser, 1 ); - } - - - - # If the user can't be loaded, we may need to create one. Figure out the acl situation. - my $unpriv = RT::Group->new($RT::SystemUser); - $unpriv->LoadSystemInternalGroup('Unprivileged'); - unless ( $unpriv->Id ) { - $RT::Logger->crit( "Auth::MailFrom couldn't find the 'Unprivileged' internal group" ); - return ( $args{'CurrentUser'}, -1 ); - } - - my $everyone = RT::Group->new($RT::SystemUser); - $everyone->LoadSystemInternalGroup('Everyone'); - unless ( $everyone->Id ) { - $RT::Logger->crit( "Auth::MailFrom couldn't find the 'Everyone' internal group"); - return ( $args{'CurrentUser'}, -1 ); - } - - # but before we do that, we need to make sure that the created user would have the right - # to do what we're doing. - if ( $args{'Ticket'} && $args{'Ticket'}->Id ) { - # We have a ticket. that means we're commenting or corresponding - if ( $args{'Action'} =~ /^comment$/i ) { - - # check to see whether "Everyone" or "Unprivileged users" can comment on tickets - unless ( $everyone->PrincipalObj->HasRight( - Object => $args{'Queue'}, - Right => 'CommentOnTicket' - ) - || $unpriv->PrincipalObj->HasRight( - Object => $args{'Queue'}, - Right => 'CommentOnTicket' - ) - ) { - return ( $args{'CurrentUser'}, 0 ); - } - } - elsif ( $args{'Action'} =~ /^correspond$/i ) { - - # check to see whether "Everybody" or "Unprivileged users" can correspond on tickets - unless ( $everyone->PrincipalObj->HasRight(Object => $args{'Queue'}, - Right => 'ReplyToTicket' - ) - || $unpriv->PrincipalObj->HasRight( - Object => $args{'Queue'}, - Right => 'ReplyToTicket' - ) - ) { - return ( $args{'CurrentUser'}, 0 ); - } - - } - elsif ( $args{'Action'} =~ /^take$/i ) { - - # check to see whether "Everybody" or "Unprivileged users" can correspond on tickets - unless ( $everyone->PrincipalObj->HasRight(Object => $args{'Queue'}, - Right => 'OwnTicket' - ) - || $unpriv->PrincipalObj->HasRight( - Object => $args{'Queue'}, - Right => 'OwnTicket' - ) - ) { - return ( $args{'CurrentUser'}, 0 ); - } - - } - elsif ( $args{'Action'} =~ /^resolve$/i ) { - - # check to see whether "Everybody" or "Unprivileged users" can correspond on tickets - unless ( $everyone->PrincipalObj->HasRight(Object => $args{'Queue'}, - Right => 'ModifyTicket' - ) - || $unpriv->PrincipalObj->HasRight( - Object => $args{'Queue'}, - Right => 'ModifyTicket' - ) - ) { - return ( $args{'CurrentUser'}, 0 ); - } - - } - else { - return ( $args{'CurrentUser'}, 0 ); - } - } - - # We're creating a ticket - elsif ( $args{'Queue'} && $args{'Queue'}->Id ) { - - # check to see whether "Everybody" or "Unprivileged users" can create tickets in this queue - unless ( $everyone->PrincipalObj->HasRight( Object => $args{'Queue'}, - Right => 'CreateTicket' ) - ) { - return ( $args{'CurrentUser'}, 0 ); - } - - } - - $CurrentUser = CreateUser( undef, $Address, $Name, $Address, $args{'Message'} ); - - return ( $CurrentUser, 1 ); -} - -eval "require RT::Interface::Email::Auth::MailFrom_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/MailFrom_Vendor.pm}); -eval "require RT::Interface::Email::Auth::MailFrom_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/MailFrom_Local.pm}); - -1; diff --git a/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm b/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm deleted file mode 100644 index 2f8b61cdb..000000000 --- a/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm +++ /dev/null @@ -1,96 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Interface::Email::Filter::SpamAssassin; - -use Mail::SpamAssassin; -my $spamtest = Mail::SpamAssassin->new(); - -sub GetCurrentUser { - my %args = ( - Message => undef, - CurrentUser => undef, - AuthLevel => undef, - @_ - ); - my $status = $spamtest->check( $args{'Message'} ); - return ( $args{'CurrentUser'}, $args{'AuthLevel'} ) - unless $status->is_spam(); - - eval { $status->rewrite_mail() }; - if ( $status->get_hits > $status->get_required_hits() * 1.5 ) { - - # Spammy indeed - return ( $args{'CurrentUser'}, -1 ); - } - return ( $args{'CurrentUser'}, $args{'AuthLevel'} ); - -} - -=head1 NAME - -RT::Interface::Email::Filter::SpamAssassin - Spam filter for RT - -=head1 SYNOPSIS - - @RT::MailPlugins = ("Filter::SpamAssassin", ...); - -=head1 DESCRIPTION - -This plugin checks to see if an incoming mail is spam (using -C) and if so, rewrites its headers. If the mail is very -definitely spam - 1.5x more hits than required - then it is dropped on -the floor; otherwise, it is passed on as normal. - -=cut - -eval "require RT::Interface::Email::Filter::SpamAssassin_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email/Filter/SpamAssassin_Vendor.pm}); -eval "require RT::Interface::Email::Filter::SpamAssassin_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email/Filter/SpamAssassin_Local.pm}); - -1; diff --git a/rt/lib/RT/Interface/REST.pm b/rt/lib/RT/Interface/REST.pm deleted file mode 100644 index bb2bf24bb..000000000 --- a/rt/lib/RT/Interface/REST.pm +++ /dev/null @@ -1,288 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# lib/RT/Interface/REST.pm -# - -package RT::Interface::REST; -use strict; -use RT; - -BEGIN { - use Exporter (); - use vars qw($VERSION @ISA @EXPORT); - - $VERSION = do { my @r = (q$Revision: 1.1.1.6 $ =~ /\d+/g); sprintf "%d."."%02d"x$#r, @r }; - - @ISA = qw(Exporter); - @EXPORT = qw(expand_list form_parse form_compose vpush vsplit); -} - -my $field = '(?i:[a-z][a-z0-9_-]*|C(?:ustom)?F(?:ield)?-(?:[a-z0-9_ -]|\s)+)'; - -# WARN: this code is duplicated in bin/rt.in, -# change both functions at once -sub expand_list { - my ($list) = @_; - - my @elts; - foreach (split /,/, $list) { - push @elts, /^(\d+)-(\d+)$/? ($1..$2): $_; - } - - return map $_->[0], # schwartzian transform - sort { - defined $a->[1] && defined $b->[1]? - # both numbers - $a->[1] <=> $b->[1] - :!defined $a->[1] && !defined $b->[1]? - # both letters - $a->[2] cmp $b->[2] - # mix, number must be first - :defined $a->[1]? -1: 1 - } - map [ $_, (defined( /^(\d+)$/ )? $1: undef), lc($_) ], - @elts; -} - -# Returns a reference to an array of parsed forms. -sub form_parse { - my $state = 0; - my @forms = (); - my @lines = split /\n/, $_[0]; - my ($c, $o, $k, $e) = ("", [], {}, ""); - - LINE: - while (@lines) { - my $line = shift @lines; - - next LINE if $line eq ''; - - if ($line eq '--') { - # We reached the end of one form. We'll ignore it if it was - # empty, and store it otherwise, errors and all. - if ($e || $c || @$o) { - push @forms, [ $c, $o, $k, $e ]; - $c = ""; $o = []; $k = {}; $e = ""; - } - $state = 0; - } - elsif ($state != -1) { - if ($state == 0 && $line =~ /^#/) { - # Read an optional block of comments (only) at the start - # of the form. - $state = 1; - $c = $line; - while (@lines && $lines[0] =~ /^#/) { - $c .= "\n".shift @lines; - } - $c .= "\n"; - } - elsif ($state <= 1 && $line =~ /^($field):(?:\s+(.*))?$/i) { - # Read a field: value specification. - my $f = $1; - my @v = ($2 || ()); - - # Read continuation lines, if any. - while (@lines && ($lines[0] eq '' || $lines[0] =~ /^\s+/)) { - push @v, shift @lines; - } - pop @v while (@v && $v[-1] eq ''); - - # Strip longest common leading indent from text. - my ($ws, $ls) = (""); - foreach $ls (map {/^(\s+)/} @v[1..$#v]) { - $ws = $ls if (!$ws || length($ls) < length($ws)); - } - s/^$ws// foreach @v; - - push(@$o, $f) unless exists $k->{$f}; - vpush($k, $f, join("\n", @v)); - - $state = 1; - } - elsif ($line !~ /^#/) { - # We've found a syntax error, so we'll reconstruct the - # form parsed thus far, and add an error marker. (>>) - $state = -1; - $e = form_compose([[ "", $o, $k, "" ]]); - $e.= $line =~ /^>>/ ? "$line\n" : ">> $line\n"; - } - } - else { - # We saw a syntax error earlier, so we'll accumulate the - # contents of this form until the end. - $e .= "$line\n"; - } - } - push(@forms, [ $c, $o, $k, $e ]) if ($e || $c || @$o); - - my $l; - foreach $l (keys %$k) { - $k->{$l} = vsplit($k->{$l}) if (ref $k->{$l} eq 'ARRAY'); - } - - return \@forms; -} - -# Returns text representing a set of forms. -sub form_compose { - my ($forms) = @_; - my (@text, $form); - - foreach $form (@$forms) { - my ($c, $o, $k, $e) = @$form; - my $text = ""; - - if ($c) { - $c =~ s/\n*$/\n/; - $text = "$c\n"; - } - if ($e) { - $text .= $e; - } - elsif ($o) { - my (@lines, $key); - - foreach $key (@$o) { - my ($line, $sp, $v); - my @values = (ref $k->{$key} eq 'ARRAY') ? - @{ $k->{$key} } : - $k->{$key}; - - $sp = " "x(length("$key: ")); - $sp = " "x4 if length($sp) > 16; - - foreach $v (@values) { - if ($v =~ /\n/) { - $v =~ s/^/$sp/gm; - $v =~ s/^$sp//; - - if ($line) { - push @lines, "$line\n\n"; - $line = ""; - } - elsif (@lines && $lines[-1] !~ /\n\n$/) { - $lines[-1] .= "\n"; - } - push @lines, "$key: $v\n\n"; - } - elsif ($line && - length($line)+length($v)-rindex($line, "\n") >= 70) - { - $line .= ",\n$sp$v"; - } - else { - $line = $line ? "$line, $v" : "$key: $v"; - } - } - - $line = "$key:" unless @values; - if ($line) { - if ($line =~ /\n/) { - if (@lines && $lines[-1] !~ /\n\n$/) { - $lines[-1] .= "\n"; - } - $line .= "\n"; - } - push @lines, "$line\n"; - } - } - - $text .= join "", @lines; - } - else { - chomp $text; - } - push @text, $text; - } - - return join "\n--\n\n", @text; -} - -# Add a value to a (possibly multi-valued) hash key. -sub vpush { - my ($hash, $key, $val) = @_; - my @val = ref $val eq 'ARRAY' ? @$val : $val; - - if (exists $hash->{$key}) { - unless (ref $hash->{$key} eq 'ARRAY') { - my @v = $hash->{$key} ne '' ? $hash->{$key} : (); - $hash->{$key} = \@v; - } - push @{ $hash->{$key} }, @val; - } - else { - $hash->{$key} = $val; - } -} - -# "Normalise" a hash key that's known to be multi-valued. -sub vsplit { - my ($val) = @_; - my ($line, $word, @words); - - foreach $line (map {split /\n/} (ref $val eq 'ARRAY') ? @$val : $val) - { - # XXX: This should become a real parser, à la Text::ParseWords. - $line =~ s/^\s+//; - $line =~ s/\s+$//; - push @words, split /\s*,\s*/, $line; - } - - return \@words; -} - -1; - -=head1 NAME - - RT::Interface::REST - helper functions for the REST interface. - -=head1 SYNOPSIS - - Only the REST should use this module. diff --git a/rt/lib/RT/Interface/Web.pm b/rt/lib/RT/Interface/Web.pm deleted file mode 100644 index 5097f54a4..000000000 --- a/rt/lib/RT/Interface/Web.pm +++ /dev/null @@ -1,1377 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -## Portions Copyright 2000 Tobias Brox - -## This is a library of static subs to be used by the Mason web -## interface to RT - - -=head1 NAME - -RT::Interface::Web - -=begin testing - -use_ok(RT::Interface::Web); - -=end testing - -=cut - - -package RT::Interface::Web; -use strict; - - - - - -# {{{ sub NewApacheHandler - -=head2 NewApacheHandler - - Takes extra options to pass to HTML::Mason::ApacheHandler->new - Returns a new Mason::ApacheHandler object - -=cut - -sub NewApacheHandler { - require HTML::Mason::ApacheHandler; - my $ah = new HTML::Mason::ApacheHandler( - - comp_root => [ - [ local => $RT::MasonLocalComponentRoot ], - [ standard => $RT::MasonComponentRoot ] - ], - args_method => "CGI", - default_escape_flags => 'h', - allow_globals => [qw(%session)], - data_dir => "$RT::MasonDataDir", - @_ - ); - - $ah->interp->set_escape( h => \&RT::Interface::Web::EscapeUTF8 ); - - return ($ah); -} - -# }}} - -# {{{ sub NewCGIHandler - -=head2 NewCGIHandler - - Returns a new Mason::CGIHandler object - -=cut - -sub NewCGIHandler { - my %args = ( - @_ - ); - - my $handler = HTML::Mason::CGIHandler->new( - comp_root => [ - [ local => $RT::MasonLocalComponentRoot ], - [ standard => $RT::MasonComponentRoot ] - ], - data_dir => "$RT::MasonDataDir", - default_escape_flags => 'h', - allow_globals => [qw(%session)] - ); - - - $handler->interp->set_escape( h => \&RT::Interface::Web::EscapeUTF8 ); - - - return ($handler); - -} -# }}} - - -# {{{ EscapeUTF8 - -=head2 EscapeUTF8 SCALARREF - -does a css-busting but minimalist escaping of whatever html you're passing in. - -=cut - -sub EscapeUTF8 { - my $ref = shift; - my $val = $$ref; - use bytes; - $val =~ s/&/&/g; - $val =~ s//>/g; - $val =~ s/\(/(/g; - $val =~ s/\)/)/g; - $val =~ s/"/"/g; - $val =~ s/'/'/g; - $$ref = $val; - Encode::_utf8_on($$ref); - -} - -# }}} - - -package HTML::Mason::Commands; -use strict; -use vars qw/$r $m %session/; - - -# {{{ loc - -=head2 loc ARRAY - -loc is a nice clean global routine which calls $session{'CurrentUser'}->loc() -with whatever it's called with. If there is no $session{'CurrentUser'}, -it creates a temporary user, so we have something to get a localisation handle -through - -=cut - -sub loc { - - if ($session{'CurrentUser'} && - UNIVERSAL::can($session{'CurrentUser'}, 'loc')){ - return($session{'CurrentUser'}->loc(@_)); - } - else { - my $u = RT::CurrentUser->new($RT::SystemUser); - return ($u->loc(@_)); - } -} - -# }}} - - -# {{{ loc_fuzzy - -=head2 loc_fuzzy STRING - -loc_fuzzy is for handling localizations of messages that may already -contain interpolated variables, typically returned from libraries -outside RT's control. It takes the message string and extracts the -variable array automatically by matching against the candidate entries -inside the lexicon file. - -=cut - -sub loc_fuzzy { - my $msg = shift; - - if ($session{'CurrentUser'} && - UNIVERSAL::can($session{'CurrentUser'}, 'loc')){ - return($session{'CurrentUser'}->loc_fuzzy($msg)); - } - else { - my $u = RT::CurrentUser->new($RT::SystemUser); - return ($u->loc_fuzzy($msg)); - } -} - -# }}} - - -# {{{ sub Abort -# Error - calls Error and aborts -sub Abort { - - if ($session{'ErrorDocument'} && - $session{'ErrorDocumentType'}) { - $r->content_type($session{'ErrorDocumentType'}); - $m->comp($session{'ErrorDocument'} , Why => shift); - $m->abort; - } - else { - $m->comp("/Elements/Error" , Why => shift); - $m->abort; - } -} - -# }}} - -# {{{ sub CreateTicket - -=head2 CreateTicket ARGS - -Create a new ticket, using Mason's %ARGS. returns @results. - -=cut - -sub CreateTicket { - my %ARGS = (@_); - - my (@Actions); - - my $Ticket = new RT::Ticket( $session{'CurrentUser'} ); - - 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.'); - } - - my $due = new RT::Date( $session{'CurrentUser'} ); - $due->Set( Format => 'unknown', Value => $ARGS{'Due'} ); - my $starts = new RT::Date( $session{'CurrentUser'} ); - $starts->Set( Format => 'unknown', Value => $ARGS{'Starts'} ); - - my @Requestors = split ( /\s*,\s*/, $ARGS{'Requestors'} ); - my @Cc = split ( /\s*,\s*/, $ARGS{'Cc'} ); - my @AdminCc = split ( /\s*,\s*/, $ARGS{'AdminCc'} ); - - my $MIMEObj = MakeMIMEEntity( - Subject => $ARGS{'Subject'}, - From => $ARGS{'From'}, - Cc => $ARGS{'Cc'}, - Body => $ARGS{'Content'}, - ); - - if ($ARGS{'Attachments'}) { - $MIMEObj->make_multipart; - $MIMEObj->add_part($_) foreach values %{$ARGS{'Attachments'}}; - } - - my %create_args = ( - Queue => $ARGS{'Queue'}, - Owner => $ARGS{'Owner'}, - InitialPriority => $ARGS{'InitialPriority'}, - FinalPriority => $ARGS{'FinalPriority'}, - TimeLeft => $ARGS{'TimeLeft'}, - TimeEstimated => $ARGS{'TimeEstimated'}, - TimeWorked => $ARGS{'TimeWorked'}, - Requestor => \@Requestors, - Cc => \@Cc, - AdminCc => \@AdminCc, - Subject => $ARGS{'Subject'}, - Status => $ARGS{'Status'}, - Due => $due->ISO, - Starts => $starts->ISO, - MIMEObj => $MIMEObj - ); - foreach my $arg (%ARGS) { - if ($arg =~ /^CustomField-(\d+)(.*?)$/) { - next if ($arg =~ /-Magic$/); - $create_args{"CustomField-".$1} = $ARGS{"$arg"}; - } - } - my ( $id, $Trans, $ErrMsg ) = $Ticket->Create(%create_args); - unless ( $id && $Trans ) { - Abort($ErrMsg); - } - my @linktypes = qw( DependsOn MemberOf RefersTo ); - - foreach my $linktype (@linktypes) { - foreach my $luri ( split ( / /, $ARGS{"new-$linktype"} ) ) { - $luri =~ s/\s*$//; # Strip trailing whitespace - my ( $val, $msg ) = $Ticket->AddLink( - Target => $luri, - Type => $linktype - ); - push ( @Actions, $msg ) unless ($val); - } - - foreach my $luri ( split ( / /, $ARGS{"$linktype-new"} ) ) { - my ( $val, $msg ) = $Ticket->AddLink( - Base => $luri, - Type => $linktype - ); - - push ( @Actions, $msg ) unless ($val); - } - } - - push ( @Actions, split("\n", $ErrMsg) ); - unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) { - Abort( "No permission to view newly created ticket #" - . $Ticket->id . "." ); - } - return ( $Ticket, @Actions ); - -} - -# }}} - -# {{{ sub LoadTicket - loads a ticket - -=head2 LoadTicket id - -Takes a ticket id as its only variable. if it's handed an array, it takes -the first value. - -Returns an RT::Ticket object as the current user. - -=cut - -sub LoadTicket { - my $id = shift; - - if ( ref($id) eq "ARRAY" ) { - $id = $id->[0]; - } - - unless ($id) { - Abort("No ticket specified"); - } - - my $Ticket = RT::Ticket->new( $session{'CurrentUser'} ); - $Ticket->Load($id); - unless ( $Ticket->id ) { - Abort("Could not load ticket $id"); - } - return $Ticket; -} - -# }}} - -# {{{ sub ProcessUpdateMessage - -sub ProcessUpdateMessage { - - #TODO document what else this takes. - my %args = ( - ARGSRef => undef, - Actions => undef, - TicketObj => undef, - @_ - ); - - #Make the update content have no 'weird' newlines in it - if ( $args{ARGSRef}->{'UpdateContent'} ) { - - if ( - $args{ARGSRef}->{'UpdateSubject'} eq $args{'TicketObj'}->Subject() ) - { - $args{ARGSRef}->{'UpdateSubject'} = undef; - } - - my $Message = MakeMIMEEntity( - Subject => $args{ARGSRef}->{'UpdateSubject'}, - Body => $args{ARGSRef}->{'UpdateContent'}, - ); - - if ($args{ARGSRef}->{'UpdateAttachments'}) { - $Message->make_multipart; - $Message->add_part($_) foreach values %{$args{ARGSRef}->{'UpdateAttachments'}}; - } - - ## TODO: Implement public comments - if ( $args{ARGSRef}->{'UpdateType'} =~ /^(private|public)$/ ) { - my ( $Transaction, $Description ) = $args{TicketObj}->Comment( - CcMessageTo => $args{ARGSRef}->{'UpdateCc'}, - BccMessageTo => $args{ARGSRef}->{'UpdateBcc'}, - MIMEObj => $Message, - TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'} - ); - push ( @{ $args{Actions} }, $Description ); - } - elsif ( $args{ARGSRef}->{'UpdateType'} eq 'response' ) { - my ( $Transaction, $Description ) = $args{TicketObj}->Correspond( - CcMessageTo => $args{ARGSRef}->{'UpdateCc'}, - BccMessageTo => $args{ARGSRef}->{'UpdateBcc'}, - MIMEObj => $Message, - TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'} - ); - push ( @{ $args{Actions} }, $Description ); - } - else { - push ( @{ $args{'Actions'} }, - loc("Update type was neither correspondence nor comment."). - " ". - loc("Update not recorded.") - ); - } - } -} - -# }}} - -# {{{ sub MakeMIMEEntity - -=head2 MakeMIMEEntity PARAMHASH - -Takes a paramhash Subject, Body and AttachmentFieldName. - - Returns a MIME::Entity. - -=cut - -sub MakeMIMEEntity { - - #TODO document what else this takes. - my %args = ( - Subject => undef, - From => undef, - Cc => undef, - Body => undef, - AttachmentFieldName => undef, - map Encode::encode_utf8($_), @_, - ); - - #Make the update content have no 'weird' newlines in it - - $args{'Body'} =~ s/\r\n/\n/gs; - my $Message; - { - # MIME::Head is not happy in utf-8 domain. This only happens - # when processing an incoming email (so far observed). - no utf8; - use bytes; - $Message = MIME::Entity->build( - Subject => $args{'Subject'} || "", - From => $args{'From'}, - Cc => $args{'Cc'}, - Data => [ $args{'Body'} ] - ); - } - - my $cgi_object = $m->cgi_object; - - if (my $filehandle = $cgi_object->upload( $args{'AttachmentFieldName'} ) ) { - - - - use File::Temp qw(tempfile tempdir); - - #foreach my $filehandle (@filenames) { - - my ( $fh, $temp_file ) = tempfile(); - - binmode $fh; #thank you, windows - my ($buffer); - while ( my $bytesread = read( $filehandle, $buffer, 4096 ) ) { - print $fh $buffer; - } - - my $uploadinfo = $cgi_object->uploadInfo($filehandle); - - # Prefer the cached name first over CGI.pm stringification. - my $filename = $RT::Mason::CGI::Filename; - $filename = "$filehandle" unless defined($filename); - - $filename =~ s#^.*[\\/]##; - - $Message->attach( - Path => $temp_file, - Filename => $filename, - Type => $uploadinfo->{'Content-Type'}, - ); - close($fh); - - # } - - } - - $Message->make_singlepart(); - RT::I18N::SetMIMEEntityToUTF8($Message); # convert text parts into utf-8 - - return ($Message); - -} - -# }}} - -# {{{ sub ProcessSearchQuery - -=head2 ProcessSearchQuery - - Takes a form such as the one filled out in webrt/Search/Elements/PickRestriction and turns it into something that RT::Tickets can understand. - -TODO Doc exactly what comes in the paramhash - - -=cut - -sub ProcessSearchQuery { - my %args = @_; - - ## TODO: The only parameter here is %ARGS. Maybe it would be - ## cleaner to load this parameter as $ARGS, and use $ARGS->{...} - ## instead of $args{ARGS}->{...} ? :) - - #Searches are sticky. - if ( defined $session{'tickets'} ) { - - # Reset the old search - $session{'tickets'}->GotoFirstItem; - } - else { - - # Init a new search - $session{'tickets'} = RT::Tickets->new( $session{'CurrentUser'} ); - } - - #Import a bookmarked search if we have one - if ( defined $args{ARGS}->{'Bookmark'} ) { - $session{'tickets'}->ThawLimits( $args{ARGS}->{'Bookmark'} ); - } - - # {{{ Goto next/prev page - if ( $args{ARGS}->{'GotoPage'} eq 'Next' ) { - $session{'tickets'}->NextPage; - } - elsif ( $args{ARGS}->{'GotoPage'} eq 'Prev' ) { - $session{'tickets'}->PrevPage; - } - elsif ( $args{ARGS}->{'GotoPage'} > 0 ) { - $session{'tickets'}->GotoPage( $args{ARGS}->{GotoPage} - 1 ); - } - - # }}} - - # {{{ Deal with limiting the search - - if ( $args{ARGS}->{'RefreshSearchInterval'} ) { - $session{'tickets_refresh_interval'} = - $args{ARGS}->{'RefreshSearchInterval'}; - } - - if ( $args{ARGS}->{'TicketsSortBy'} ) { - $session{'tickets_sort_by'} = $args{ARGS}->{'TicketsSortBy'}; - $session{'tickets_sort_order'} = $args{ARGS}->{'TicketsSortOrder'}; - $session{'tickets'}->OrderBy( - FIELD => $args{ARGS}->{'TicketsSortBy'}, - ORDER => $args{ARGS}->{'TicketsSortOrder'} - ); - } - - # }}} - - # {{{ Set the query limit - if ( defined $args{ARGS}->{'RowsPerPage'} ) { - $RT::Logger->debug( - "limiting to " . $args{ARGS}->{'RowsPerPage'} . " rows" ); - - $session{'tickets_rows_per_page'} = $args{ARGS}->{'RowsPerPage'}; - $session{'tickets'}->RowsPerPage( $args{ARGS}->{'RowsPerPage'} ); - } - - # }}} - # {{{ Limit priority - if ( $args{ARGS}->{'ValueOfPriority'} ne '' ) { - $session{'tickets'}->LimitPriority( - VALUE => $args{ARGS}->{'ValueOfPriority'}, - OPERATOR => $args{ARGS}->{'PriorityOp'} - ); - } - - # }}} - # {{{ Limit owner - if ( $args{ARGS}->{'ValueOfOwner'} ne '' ) { - $session{'tickets'}->LimitOwner( - VALUE => $args{ARGS}->{'ValueOfOwner'}, - OPERATOR => $args{ARGS}->{'OwnerOp'} - ); - } - - # }}} - # {{{ Limit requestor email - - if ( $args{ARGS}->{'ValueOfRequestor'} ne '' ) { - my $alias = $session{'tickets'}->LimitRequestor( - VALUE => $args{ARGS}->{'ValueOfRequestor'}, - OPERATOR => $args{ARGS}->{'RequestorOp'}, - ); - - } - - # }}} - # {{{ Limit Queue - if ( $args{ARGS}->{'ValueOfQueue'} ne '' ) { - $session{'tickets'}->LimitQueue( - VALUE => $args{ARGS}->{'ValueOfQueue'}, - OPERATOR => $args{ARGS}->{'QueueOp'} - ); - } - - # }}} - # {{{ Limit Status - if ( $args{ARGS}->{'ValueOfStatus'} ne '' ) { - if ( ref( $args{ARGS}->{'ValueOfStatus'} ) ) { - foreach my $value ( @{ $args{ARGS}->{'ValueOfStatus'} } ) { - $session{'tickets'}->LimitStatus( - VALUE => $value, - OPERATOR => $args{ARGS}->{'StatusOp'}, - ); - } - } - else { - $session{'tickets'}->LimitStatus( - VALUE => $args{ARGS}->{'ValueOfStatus'}, - OPERATOR => $args{ARGS}->{'StatusOp'}, - ); - } - - } - - # }}} - # {{{ Limit Subject - if ( $args{ARGS}->{'ValueOfSubject'} ne '' ) { - my $val = $args{ARGS}->{'ValueOfSubject'}; - if ($args{ARGS}->{'SubjectOp'} =~ /like/) { - $val = "%".$val."%"; - } - $session{'tickets'}->LimitSubject( - VALUE => $val, - OPERATOR => $args{ARGS}->{'SubjectOp'}, - ); - } - - # }}} - # {{{ Limit Dates - if ( $args{ARGS}->{'ValueOfDate'} ne '' ) { - my $date = ParseDateToISO( $args{ARGS}->{'ValueOfDate'} ); - $args{ARGS}->{'DateType'} =~ s/_Date$//; - - if ( $args{ARGS}->{'DateType'} eq 'Updated' ) { - $session{'tickets'}->LimitTransactionDate( - VALUE => $date, - OPERATOR => $args{ARGS}->{'DateOp'}, - ); - } - else { - $session{'tickets'}->LimitDate( FIELD => $args{ARGS}->{'DateType'}, - VALUE => $date, - OPERATOR => $args{ARGS}->{'DateOp'}, - ); - } - } - - # }}} - # {{{ Limit Content - if ( $args{ARGS}->{'ValueOfAttachmentField'} ne '' ) { - my $val = $args{ARGS}->{'ValueOfAttachmentField'}; - if ($args{ARGS}->{'AttachmentFieldOp'} =~ /like/) { - $val = "%".$val."%"; - } - $session{'tickets'}->Limit( - FIELD => $args{ARGS}->{'AttachmentField'}, - VALUE => $val, - OPERATOR => $args{ARGS}->{'AttachmentFieldOp'}, - ); - } - - # }}} - - # {{{ Limit CustomFields - - foreach my $arg ( keys %{ $args{ARGS} } ) { - my $id; - if ( $arg =~ /^CustomField(\d+)$/ ) { - $id = $1; - } - else { - next; - } - next unless ( $args{ARGS}->{$arg} ); - - my $form = $args{ARGS}->{$arg}; - my $oper = $args{ARGS}->{ "CustomFieldOp" . $id }; - foreach my $value ( ref($form) ? @{$form} : ($form) ) { - my $quote = 1; - if ($oper =~ /like/i) { - $value = "%".$value."%"; - } - if ( $value =~ /^null$/i ) { - - #Don't quote the string 'null' - $quote = 0; - - # Convert the operator to something apropriate for nulls - $oper = 'IS' if ( $oper eq '=' ); - $oper = 'IS NOT' if ( $oper eq '!=' ); - } - $session{'tickets'}->LimitCustomField( CUSTOMFIELD => $id, - OPERATOR => $oper, - QUOTEVALUE => $quote, - VALUE => $value ); - } - } - - # }}} - - -} - -# }}} - -# {{{ sub ParseDateToISO - -=head2 ParseDateToISO - -Takes a date in an arbitrary format. -Returns an ISO date and time in GMT - -=cut - -sub ParseDateToISO { - my $date = shift; - - my $date_obj = RT::Date->new($session{'CurrentUser'}); - $date_obj->Set( - Format => 'unknown', - Value => $date - ); - return ( $date_obj->ISO ); -} - -# }}} - -# {{{ sub Config -# TODO: This might eventually read the cookies, user configuration -# information from the DB, queue configuration information from the -# DB, etc. - -sub Config { - my $args = shift; - my $key = shift; - return $args->{$key} || $RT::WebOptions{$key}; -} - -# }}} - -# {{{ sub ProcessACLChanges - -sub ProcessACLChanges { - my $ARGSref = shift; - - my %ARGS = %$ARGSref; - - my ( $ACL, @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::Queue') { - $obj = RT::Queue->new($session{'CurrentUser'}); - $obj->Load($object_id); - } elsif ($object_type eq 'RT::Group') { - $obj = RT::Group->new($session{'CurrentUser'}); - $obj->Load($object_id); - - } elsif ($object_type eq 'RT::System') { - $obj = $RT::System; - } 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::Queue') { - $obj = RT::Queue->new($session{'CurrentUser'}); - $obj->Load($object_id); - } elsif ($object_type eq 'RT::Group') { - $obj = RT::Group->new($session{'CurrentUser'}); - $obj->Load($object_id); - - } elsif ($object_type eq 'RT::System') { - $obj = $RT::System; - } 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); - } - - - } - - return (@results); - - } - -# }}} - -# {{{ sub UpdateRecordObj - -=head2 UpdateRecordObj ( ARGSRef => \%ARGS, Object => RT::Record, AttributesRef => \@attribs) - -@attribs is a list of ticket fields to check and update if they differ from the B's current values. ARGSRef is a ref to HTML::Mason's %ARGS. - -Returns an array of success/failure messages - -=cut - -sub UpdateRecordObject { - my %args = ( - ARGSRef => undef, - AttributesRef => undef, - Object => undef, - AttributePrefix => undef, - @_ - ); - - my (@results); - - my $object = $args{'Object'}; - my $attributes = $args{'AttributesRef'}; - my $ARGSRef = $args{'ARGSRef'}; - foreach my $attribute (@$attributes) { - my $value; - if ( defined $ARGSRef->{$attribute} ) { - $value = $ARGSRef->{$attribute}; - } - elsif ( - defined( $args{'AttributePrefix'} ) - && defined( - $ARGSRef->{ $args{'AttributePrefix'} . "-" . $attribute } - ) - ) { - $value = $ARGSRef->{ $args{'AttributePrefix'} . "-" . $attribute }; - - } else { - next; - } - - $value =~ s/\r\n/\n/gs; - - if ($value ne $object->$attribute()){ - - my $method = "Set$attribute"; - my ( $code, $msg ) = $object->$method($value); - - push @results, loc($attribute) . ': ' . loc_fuzzy($msg); -=for loc - "[_1] could not be set to [_2].", # loc - "That is already the current value", # loc - "No value sent to _Set!\n", # loc - "Illegal value for [_1]", # loc - "The new value has been set.", # loc - "No column specified", # loc - "Immutable field", # loc - "Nonexistant field?", # loc - "Invalid data", # loc - "Couldn't find row", # loc - "Missing a primary key?: [_1]", # loc - "Found Object", # loc -=cut - }; - } - return (@results); -} - -# }}} - -# {{{ Sub ProcessCustomFieldUpdates - -sub ProcessCustomFieldUpdates { - my %args = ( - CustomFieldObj => undef, - ARGSRef => undef, - @_ - ); - - my $Object = $args{'CustomFieldObj'}; - my $ARGSRef = $args{'ARGSRef'}; - - my @attribs = qw( Name Type Description Queue SortOrder); - my @results = UpdateRecordObject( - AttributesRef => \@attribs, - Object => $Object, - ARGSRef => $ARGSRef - ); - - if ( $ARGSRef->{ "CustomField-" . $Object->Id . "-AddValue-Name" } ) { - - my ( $addval, $addmsg ) = $Object->AddValue( - Name => - $ARGSRef->{ "CustomField-" . $Object->Id . "-AddValue-Name" }, - Description => $ARGSRef->{ "CustomField-" - . $Object->Id - . "-AddValue-Description" }, - SortOrder => $ARGSRef->{ "CustomField-" - . $Object->Id - . "-AddValue-SortOrder" }, - ); - push ( @results, $addmsg ); - } - my @delete_values = ( - ref $ARGSRef->{ 'CustomField-' . $Object->Id . '-DeleteValue' } eq - 'ARRAY' ) - ? @{ $ARGSRef->{ 'CustomField-' . $Object->Id . '-DeleteValue' } } - : ( $ARGSRef->{ 'CustomField-' . $Object->Id . '-DeleteValue' } ); - foreach my $id (@delete_values) { - next unless defined $id; - my ( $err, $msg ) = $Object->DeleteValue($id); - push ( @results, $msg ); - } - return (@results); -} - -# }}} - -# {{{ sub ProcessTicketBasics - -=head2 ProcessTicketBasics ( TicketObj => $Ticket, ARGSRef => \%ARGS ); - -Returns an array of results messages. - -=cut - -sub ProcessTicketBasics { - - my %args = ( - TicketObj => undef, - ARGSRef => undef, - @_ - ); - - my $TicketObj = $args{'TicketObj'}; - my $ARGSRef = $args{'ARGSRef'}; - - # {{{ Set basic fields - my @attribs = qw( - Subject - FinalPriority - Priority - TimeEstimated - TimeWorked - TimeLeft - Status - Queue - ); - - if ( $ARGSRef->{'Queue'} and ( $ARGSRef->{'Queue'} !~ /^(\d+)$/ ) ) { - my $tempqueue = RT::Queue->new($RT::SystemUser); - $tempqueue->Load( $ARGSRef->{'Queue'} ); - if ( $tempqueue->id ) { - $ARGSRef->{'Queue'} = $tempqueue->Id(); - } - } - - my @results = UpdateRecordObject( - AttributesRef => \@attribs, - Object => $TicketObj, - ARGSRef => $ARGSRef - ); - - # We special case owner changing, so we can use ForceOwnerChange - if ( $ARGSRef->{'Owner'} && ( $TicketObj->Owner != $ARGSRef->{'Owner'} ) ) { - my ($ChownType); - if ( $ARGSRef->{'ForceOwnerChange'} ) { - $ChownType = "Force"; - } - else { - $ChownType = "Give"; - } - - my ( $val, $msg ) = - $TicketObj->SetOwner( $ARGSRef->{'Owner'}, $ChownType ); - push ( @results, $msg ); - } - - # }}} - - return (@results); -} - -# }}} - -# {{{ Sub ProcessTicketCustomFieldUpdates - -sub ProcessTicketCustomFieldUpdates { - my %args = ( - ARGSRef => undef, - @_ - ); - - my @results; - - my $ARGSRef = $args{'ARGSRef'}; - - # Build up a list of tickets that we want to work with - my %tickets_to_mod; - my %custom_fields_to_mod; - foreach my $arg ( keys %{$ARGSRef} ) { - if ( $arg =~ /^Ticket-(\d+)-CustomField-(\d+)-/ ) { - - # For each of those tickets, find out what custom fields we want to work with. - $custom_fields_to_mod{$1}{$2} = 1; - } - } - - # For each of those tickets - foreach my $tick ( keys %custom_fields_to_mod ) { - my $Ticket = RT::Ticket->new( $session{'CurrentUser'} ); - $Ticket->Load($tick); - - # For each custom field - foreach my $cf ( keys %{ $custom_fields_to_mod{$tick} } ) { - - my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'}); - $CustomFieldObj->LoadById($cf); - - foreach my $arg ( keys %{$ARGSRef} ) { - # since http won't pass in a form element with a null value, we need - # to fake it - if ($arg =~ /^(.*?)-Values-Magic$/ ) { - # We don't care about the magic, if there's really a values element; - next if (exists $ARGSRef->{$1.'-Values'}) ; - - $arg = $1."-Values"; - $ARGSRef->{$1."-Values"} = undef; - - } - next unless ( $arg =~ /^Ticket-$tick-CustomField-$cf-/ ); - my @values = - ( ref( $ARGSRef->{$arg} ) eq 'ARRAY' ) - ? @{ $ARGSRef->{$arg} } - : ( $ARGSRef->{$arg} ); - if ( ( $arg =~ /-AddValue$/ ) || ( $arg =~ /-Value$/ ) ) { - foreach my $value (@values) { - next unless ($value); - my ( $val, $msg ) = $Ticket->AddCustomFieldValue( - Field => $cf, - Value => $value - ); - push ( @results, $msg ); - } - } - elsif ( $arg =~ /-DeleteValues$/ ) { - foreach my $value (@values) { - next unless ($value); - my ( $val, $msg ) = $Ticket->DeleteCustomFieldValue( - Field => $cf, - Value => $value - ); - push ( @results, $msg ); - } - } - elsif ( $arg =~ /-Values$/ and $CustomFieldObj->Type !~ /Entry/) { - my $cf_values = $Ticket->CustomFieldValues($cf); - - my %values_hash; - foreach my $value (@values) { - next unless ($value); - - # build up a hash of values that the new set has - $values_hash{$value} = 1; - - unless ( $cf_values->HasEntry($value) ) { - my ( $val, $msg ) = $Ticket->AddCustomFieldValue( - Field => $cf, - Value => $value - ); - push ( @results, $msg ); - } - - } - while ( my $cf_value = $cf_values->Next ) { - unless ( $values_hash{ $cf_value->Content } == 1 ) { - my ( $val, $msg ) = $Ticket->DeleteCustomFieldValue( - Field => $cf, - Value => $cf_value->Content - ); - push ( @results, $msg); - - } - - } - } - elsif ( $arg =~ /-Values$/ ) { - my $cf_values = $Ticket->CustomFieldValues($cf); - - # keep everything up to the point of difference, delete the rest - my $delete_flag; - foreach my $old_cf (@{$cf_values->ItemsArrayRef}) { - if (!$delete_flag and @values and $old_cf->Content eq $values[0]) { - shift @values; - next; - } - - $delete_flag ||= 1; - $old_cf->Delete; - } - - # now add/replace extra things, if any - foreach my $value (@values) { - my ( $val, $msg ) = $Ticket->AddCustomFieldValue( - Field => $cf, - Value => $value - ); - push ( @results, $msg ); - } - } - else { - push ( @results, "User asked for an unknown update type for custom field " . $cf->Name . " for ticket " . $Ticket->id ); - } - } - } - return (@results); - } -} - -# }}} - -# {{{ sub ProcessTicketWatchers - -=head2 ProcessTicketWatchers ( TicketObj => $Ticket, ARGSRef => \%ARGS ); - -Returns an array of results messages. - -=cut - -sub ProcessTicketWatchers { - my %args = ( - TicketObj => undef, - ARGSRef => undef, - @_ - ); - my (@results); - - my $Ticket = $args{'TicketObj'}; - my $ARGSRef = $args{'ARGSRef'}; - - # {{{ Munge watchers - - foreach my $key ( keys %$ARGSRef ) { - - # {{{ Delete deletable watchers - if ( ( $key =~ /^Ticket-DelWatcher-Type-(.*)-Principal-(\d+)$/ ) ) { - my ( $code, $msg ) = - $Ticket->DeleteWatcher(PrincipalId => $2, - Type => $1); - push @results, $msg; - } - - # Delete watchers in the simple style demanded by the bulk manipulator - elsif ( $key =~ /^Delete(Requestor|Cc|AdminCc)$/ ) { - my ( $code, $msg ) = $Ticket->DeleteWatcher( Type => $ARGSRef->{$key}, PrincipalId => $1 ); - push @results, $msg; - } - - # }}} - - # Add new wathchers by email address - elsif ( ( $ARGSRef->{$key} =~ /^(AdminCc|Cc|Requestor)$/ ) - and ( $key =~ /^WatcherTypeEmail(\d*)$/ ) ) - { - - #They're in this order because otherwise $1 gets clobbered :/ - my ( $code, $msg ) = $Ticket->AddWatcher( - Type => $ARGSRef->{$key}, - Email => $ARGSRef->{ "WatcherAddressEmail" . $1 } - ); - push @results, $msg; - } - - #Add requestors in the simple style demanded by the bulk manipulator - elsif ( $key =~ /^Add(Requestor|Cc|AdminCc)$/ ) { - my ( $code, $msg ) = $Ticket->AddWatcher( - Type => $1, - Email => $ARGSRef->{$key} - ); - push @results, $msg; - } - - # Add new watchers by owner - elsif ( ( $ARGSRef->{$key} =~ /^(AdminCc|Cc|Requestor)$/ ) - and ( $key =~ /^Ticket-AddWatcher-Principal-(\d*)$/ ) ) { - - #They're in this order because otherwise $1 gets clobbered :/ - my ( $code, $msg ) = - $Ticket->AddWatcher( Type => $ARGSRef->{$key}, PrincipalId => $1 ); - push @results, $msg; - } - } - - # }}} - - return (@results); -} - -# }}} - -# {{{ sub ProcessTicketDates - -=head2 ProcessTicketDates ( TicketObj => $Ticket, ARGSRef => \%ARGS ); - -Returns an array of results messages. - -=cut - -sub ProcessTicketDates { - my %args = ( - TicketObj => undef, - ARGSRef => undef, - @_ - ); - - my $Ticket = $args{'TicketObj'}; - my $ARGSRef = $args{'ARGSRef'}; - - my (@results); - - # {{{ Set date fields - my @date_fields = qw( - Told - Resolved - Starts - Started - Due - ); - - #Run through each field in this list. update the value if apropriate - foreach my $field (@date_fields) { - my ( $code, $msg ); - - my $DateObj = RT::Date->new( $session{'CurrentUser'} ); - - #If it's something other than just whitespace - if ( $ARGSRef->{ $field . '_Date' } ne '' ) { - $DateObj->Set( - Format => 'unknown', - Value => $ARGSRef->{ $field . '_Date' } - ); - my $obj = $field . "Obj"; - if ( ( defined $DateObj->Unix ) - and ( $DateObj->Unix ne $Ticket->$obj()->Unix() ) ) - { - my $method = "Set$field"; - my ( $code, $msg ) = $Ticket->$method( $DateObj->ISO ); - push @results, "$msg"; - } - } - } - - # }}} - return (@results); -} - -# }}} - -# {{{ sub ProcessTicketLinks - -=head2 ProcessTicketLinks ( TicketObj => $Ticket, ARGSRef => \%ARGS ); - -Returns an array of results messages. - -=cut - -sub ProcessTicketLinks { - my %args = ( TicketObj => undef, - ARGSRef => undef, - @_ ); - - my $Ticket = $args{'TicketObj'}; - my $ARGSRef = $args{'ARGSRef'}; - - my (@results); - - # Delete links that are gone gone gone. - foreach my $arg ( keys %$ARGSRef ) { - if ( $arg =~ /DeleteLink-(.*?)-(DependsOn|MemberOf|RefersTo)-(.*)$/ ) { - my $base = $1; - my $type = $2; - my $target = $3; - - push @results, - "Trying to delete: Base: $base Target: $target Type $type"; - my ( $val, $msg ) = $Ticket->DeleteLink( Base => $base, - Type => $type, - Target => $target ); - - push @results, $msg; - - } - - } - - my @linktypes = qw( DependsOn MemberOf RefersTo ); - - foreach my $linktype (@linktypes) { - if ( $ARGSRef->{ $Ticket->Id . "-$linktype" } ) { - for my $luri ( split ( / /, $ARGSRef->{ $Ticket->Id . "-$linktype" } ) ) { - $luri =~ s/\s*$//; # Strip trailing whitespace - my ( $val, $msg ) = $Ticket->AddLink( Target => $luri, - Type => $linktype ); - push @results, $msg; - } - } - if ( $ARGSRef->{ "$linktype-" . $Ticket->Id } ) { - - for my $luri ( split ( / /, $ARGSRef->{ "$linktype-" . $Ticket->Id } ) ) { - my ( $val, $msg ) = $Ticket->AddLink( Base => $luri, - Type => $linktype ); - - push @results, $msg; - } - } - } - - #Merge if we need to - if ( $ARGSRef->{ $Ticket->Id . "-MergeInto" } ) { - my ( $val, $msg ) = - $Ticket->MergeInto( $ARGSRef->{ $Ticket->Id . "-MergeInto" } ); - push @results, $msg; - } - - return (@results); -} - -# }}} - -eval "require RT::Interface::Web_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web_Vendor.pm}); -eval "require RT::Interface::Web_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web_Local.pm}); - -1; diff --git a/rt/lib/RT/Interface/Web/Handler.pm b/rt/lib/RT/Interface/Web/Handler.pm deleted file mode 100644 index 1e871ec59..000000000 --- a/rt/lib/RT/Interface/Web/Handler.pm +++ /dev/null @@ -1,211 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Interface::Web::Handler; - -use CGI qw/-private_tempfiles/; -use MIME::Entity; -use Text::Wrapper; -use CGI::Cookie; -use Time::ParseDate; -use Time::HiRes; -use HTML::Entities; -use HTML::Scrubber; -use RT::Interface::Web::Handler; -use File::Path qw( rmtree ); -use File::Glob qw( bsd_glob ); -use File::Spec::Unix; - -sub DefaultHandlerArgs { ( - comp_root => [ - [ local => $RT::MasonLocalComponentRoot ], - [ standard => $RT::MasonComponentRoot ] - ], - default_escape_flags => 'h', - data_dir => "$RT::MasonDataDir", - allow_globals => [qw(%session)], - # Turn off static source if we're in developer mode. - static_source => ($RT::DevelMode ? '0' : '1'), - use_object_files => ($RT::DevelMode ? '0' : '1'), - autoflush => 0 -) }; - -# {{{ sub new - -=head2 new - - Constructs a web handler of the appropriate class. - Takes options to pass to the constructor. - -=cut - -sub new { - my $class = shift; - $class->InitSessionDir; - - if ( $mod_perl::VERSION && $mod_perl::VERSION >= 1.9908 ) { - goto &NewApacheHandler; - } - elsif ($CGI::MOD_PERL) { - goto &NewApacheHandler; - } - else { - goto &NewCGIHandler; - } -} - -sub InitSessionDir { - # Activate the following if running httpd as root (the normal case). - # Resets ownership of all files created by Mason at startup. - # Note that mysql uses DB for sessions, so there's no need to do this. - unless ( $RT::DatabaseType =~ /(?:mysql|Pg)/ ) { - - # Clean up our umask to protect session files - umask(0077); - - if ($CGI::MOD_PERL) { local $@; eval { - - chown( Apache->server->uid, Apache->server->gid, - $RT::MasonSessionDir ) - }} - - # Die if WebSessionDir doesn't exist or we can't write to it - stat($RT::MasonSessionDir); - die "Can't read and write $RT::MasonSessionDir" - unless ( ( -d _ ) and ( -r _ ) and ( -w _ ) ); - } - -} - -# }}} - -# {{{ sub NewApacheHandler - -=head2 NewApacheHandler - - Takes extra options to pass to HTML::Mason::ApacheHandler->new - Returns a new Mason::ApacheHandler object - -=cut - -sub NewApacheHandler { - require HTML::Mason::ApacheHandler; - return NewHandler('HTML::Mason::ApacheHandler', args_method => "CGI", @_); -} - -# }}} - -# {{{ sub NewApache2Handler - -=head2 NewApache2Handler - - Takes extra options to pass to MasonX::Apache2Handler->new - Returns a new MasonX::Apache2Handler object - -=cut - -sub NewApache2Handler { - require MasonX::Apache2Handler; - return NewHandler('MasonX::Apache2Handler', args_method => "CGI", @_); -} - -# }}} - -# {{{ sub NewCGIHandler - -=head2 NewCGIHandler - - Returns a new Mason::CGIHandler object - -=cut - -sub NewCGIHandler { - require HTML::Mason::CGIHandler; - return NewHandler('HTML::Mason::CGIHandler', @_); -} - -sub NewHandler { - my $class = shift; - my $handler = $class->new( - DefaultHandlerArgs(), - @_ - ); - - $handler->interp->set_escape( h => \&RT::Interface::Web::EscapeUTF8 ); - $handler->interp->set_escape( u => \&RT::Interface::Web::EscapeURI ); - return($handler); -} - -=head2 CleanupRequest - -Rollback any uncommitted transaction. -Flush the ACL cache -Flush the searchbuilder query cache - -=cut - -sub CleanupRequest { - - if ( $RT::Handle->TransactionDepth ) { - $RT::Handle->ForceRollback; - $RT::Logger->crit( - "Transaction not committed. Usually indicates a software fault." - . "Data loss may have occurred" ); - } - - # Clean out the ACL cache. the performance impact should be marginal. - # Consistency is imprived, too. - RT::Principal->InvalidateACLCache(); - DBIx::SearchBuilder::Record::Cachable->FlushCache - if ( $RT::WebFlushDbCacheEveryRequest - and UNIVERSAL::can( - 'DBIx::SearchBuilder::Record::Cachable' => 'FlushCache' ) ); - -} -# }}} - -1; diff --git a/rt/lib/RT/Interface/Web/Menu.pm b/rt/lib/RT/Interface/Web/Menu.pm deleted file mode 100644 index f2d78ef6c..000000000 --- a/rt/lib/RT/Interface/Web/Menu.pm +++ /dev/null @@ -1,68 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Interface::Web::Menu; - - -sub new { - my $class = shift; - my $self = bless {}, $class; - $self->{'root_node'} = RT::Interface::Web::Menu::Item->new(); - return $self; -} - - -sub as_hash_of_hashes { - -} - -sub root { - my $self = shift; - return $self->{'root_node'}; -} - -1; diff --git a/rt/lib/RT/Interface/Web/Menu/Item.pm b/rt/lib/RT/Interface/Web/Menu/Item.pm deleted file mode 100644 index 5365db33a..000000000 --- a/rt/lib/RT/Interface/Web/Menu/Item.pm +++ /dev/null @@ -1,86 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Interface::Web::Menu::Item; - - -sub new { - my $class = shift; - my $self = bless {},$class; - $self->{'_attributes'} = {}; - return($self); -} - -sub label { my $self = shift; $self->_accessor( label => @_) } ; -sub absolute_url { my $self = shift; $self->_accessor( absolute_url => @_) } ; -sub rt_path { my $self = shift; $self->_accessor( rt_path => @_) } ; -sub hilight { my $self = shift; $self->_accessor( hilight => @_); - $self->parent->hilight(1); - } ; -sub sort_order { my $self = shift; $self->_accessor( sort_order => @_) } ; - -sub add_child { -} - -sub delete { -} - -sub children { - -} - -sub _accessor { - my $self = shift; - my $key = shift; - if (@_){ - $self->{'attributes'}->{$key} = shift; - - } - return $self->{'_attributes'}->{$key}; -} - -1; diff --git a/rt/lib/RT/Interface/Web/QueryBuilder.pm b/rt/lib/RT/Interface/Web/QueryBuilder.pm deleted file mode 100755 index 56c5b038c..000000000 --- a/rt/lib/RT/Interface/Web/QueryBuilder.pm +++ /dev/null @@ -1,58 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Interface::Web::QueryBuilder; - -use strict; -use warnings; - -eval "require RT::Interface::Web::QueryBuilder_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder_Vendor.pm}); -eval "require RT::Interface::Web::QueryBuilder_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder_Local.pm}); - -1; diff --git a/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm b/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm deleted file mode 100755 index 467627313..000000000 --- a/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm +++ /dev/null @@ -1,247 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Interface::Web::QueryBuilder::Tree; - -use strict; -use warnings; - -use base qw/Tree::Simple/; - -=head1 NAME - - RT::Interface::Web::QueryBuilder::Tree - subclass of Tree::Simple used in Query Builder - -=head1 DESCRIPTION - -This class provides support functionality for the Query Builder (Search/Build.html). -It is a subclass of L. - -=head1 METHODS - -=head2 TraversePrePost PREFUNC POSTFUNC - -Traverses the tree depth-first. Before processing the node's children, -calls PREFUNC with the node as its argument; after processing all of the -children, calls POSTFUNC with the node as its argument. - -(Note that unlike Tree::Simple's C, it actually calls its functions -on the root node passed to it.) - -=cut - -sub TraversePrePost { - my ($self, $prefunc, $postfunc) = @_; - - $prefunc->($self); - - foreach my $child ($self->getAllChildren()) { - $child->TraversePrePost($prefunc, $postfunc); - } - - $postfunc->($self); -} - -=head2 GetReferencedQueues - -Returns a hash reference with keys each queue name referenced in a clause in -the key (even if it's "Queue != 'Foo'"), and values all 1. - -=cut - -sub GetReferencedQueues { - my $self = shift; - - my $queues = {}; - - $self->traverse( - sub { - my $node = shift; - - return if $node->isRoot; - - my $clause = $node->getNodeValue(); - - if ( ref($clause) and $clause->{Key} eq 'Queue' ) { - $queues->{ $clause->{Value} } = 1; - }; - } - ); - - return $queues; -} - -=head2 GetQueryAndOptionList SELECTED_NODES - -Given an array reference of tree nodes that have been selected by the user, -traverses the tree and returns the equivalent SQL query and a list of hashes -representing the "clauses" select option list. Each has contains the keys -TEXT, INDEX, SELECTED, and DEPTH. TEXT is the displayed text of the option -(including parentheses, not including indentation); INDEX is the 0-based -index of the option in the list (also used as its CGI parameter); SELECTED -is either 'SELECTED' or '', depending on whether the node corresponding -to the select option was in the SELECTED_NODES list; and DEPTH is the -level of indentation for the option. - -=cut - -sub GetQueryAndOptionList { - my $self = shift; - my $selected_nodes = shift; - - my $optionlist = []; - - my $i = 0; - - $self->TraversePrePost( - sub { # This is called before recursing to the node's children. - my $node = shift; - - return if $node->isRoot or $node->getParent->isRoot; - - my $clause = $node->getNodeValue(); - my $str = ' '; - my $aggregator_context = $node->getParent()->getNodeValue(); - $str = $aggregator_context . " " if $node->getIndex() > 0; - - if ( ref($clause) ) { # ie, it's a leaf - $str .= - $clause->{Key} . " " . $clause->{Op} . " " . $clause->{Value}; - } - - unless ($node->getParent->getParent->isRoot) { - # used to check !ref( $parent->getNodeValue() ) ) - if ( $node->getIndex() == 0 ) { - $str = '( ' . $str; - } - } - - push @$optionlist, { - TEXT => $str, - INDEX => $i, - SELECTED => (grep { $_ == $node } @$selected_nodes) ? 'SELECTED' : '', - DEPTH => $node->getDepth() - 1, - }; - - $i++; - }, sub { - # This is called after recursing to the node's children. - my $node = shift; - - return if $node->isRoot or $node->getParent->isRoot or $node->getParent->getParent->isRoot; - - # Only do this for the rightmost child. - return unless $node->getIndex == $node->getParent->getChildCount - 1; - - $optionlist->[-1]{TEXT} .= ' )'; - } - ); - - return (join ' ', map { $_->{TEXT} } @$optionlist), $optionlist; -} - -=head2 PruneChildLessAggregators - -If tree manipulation has left it in a state where there are ANDs, ORs, -or parenthesizations with no children, get rid of them. - -=cut - -sub PruneChildlessAggregators { - my $self = shift; - - $self->TraversePrePost( - sub { - }, - sub { - my $node = shift; - - return if $node->isRoot or $node->getParent->isRoot; - - # We're only looking for aggregators (AND/OR) - return if ref $node->getNodeValue; - - return if $node->getChildCount != 0; - - # OK, this is a childless aggregator. Remove self. - - $node->getParent->removeChild($node); - - # Deal with circular refs - $node->DESTROY; - } - ); -} - -=head2 GetDisplayedNodes - -This function returns a list of the nodes of the tree in depth-first -order which correspond to options in the "clauses" multi-select box. -In fact, it's all of them but the root and its child. - -=cut - -sub GetDisplayedNodes { - my $self = shift; - my @lines; - - $self->traverse(sub { - my $node = shift; - - push @lines, $node unless $node->isRoot or $node->getParent->isRoot; - }); - - return @lines; -} - - -eval "require RT::Interface::Web::QueryBuilder::Tree_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder/Tree_Vendor.pm}); -eval "require RT::Interface::Web::QueryBuilder::Tree_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder/Tree_Local.pm}); - -1; diff --git a/rt/lib/RT/Interface/Web/Standalone.pm b/rt/lib/RT/Interface/Web/Standalone.pm deleted file mode 100755 index 319e317b8..000000000 --- a/rt/lib/RT/Interface/Web/Standalone.pm +++ /dev/null @@ -1,84 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Interface::Web::Standalone; - -use strict; -use base 'HTTP::Server::Simple::Mason'; -use RT::Interface::Web::Handler; -use RT::Interface::Web; - -sub handler_class { "RT::Interface::Web::Handler" } - -sub setup_escapes { - my $self = shift; - my $handler = shift; - - # Override HTTP::Server::Simple::Mason's version of this method to do - # nothing. (RT::Interface::Web::Handler does this already for us in - # NewHandler.) -} - -sub default_mason_config { - return @RT::MasonParameters; -} - -sub handle_request { - - my $self = shift; - my $cgi = shift; - - Module::Refresh->refresh if $RT::DevelMode; - - $self->SUPER::handle_request($cgi); - $RT::Logger->crit($@) if ($@); - - RT::Interface::Web::Handler->CleanupRequest(); - -} - -1; diff --git a/rt/lib/RT/Interface/Web_Vendor.pm b/rt/lib/RT/Interface/Web_Vendor.pm deleted file mode 100644 index 5be20e6b9..000000000 --- a/rt/lib/RT/Interface/Web_Vendor.pm +++ /dev/null @@ -1,95 +0,0 @@ -# Copyright (c) 2004 Ivan Kohler -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -=head1 NAME - -RT::Interface::Web_Vendor - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -Freeside vendor overlay for RT::Interface::Web. - -=begin testing - -use_ok(RT::Interface::Web_Vendor); - -=end testing - -=cut - -#package RT::Interface::Web; -#use strict; - -package HTML::Mason::Commands; -use strict; - -=head2 ProcessTicketCustomers - -=cut - -sub ProcessTicketCustomers { - my %args = ( - TicketObj => undef, - ARGSRef => undef, - @_ - ); - my @results = (); - - my $Ticket = $args{'TicketObj'}; - my $ARGSRef = $args{'ARGSRef'}; - - ### false laziness w/RT::Interface::Web::ProcessTicketLinks - # Delete links that are gone gone gone. - foreach my $arg ( keys %$ARGSRef ) { - if ( $arg =~ /DeleteLink-(.*?)-(DependsOn|MemberOf|RefersTo)-(.*)$/ ) { - my $base = $1; - my $type = $2; - my $target = $3; - - push @results, - "Trying to delete: Base: $base Target: $target Type $type"; - my ( $val, $msg ) = $Ticket->DeleteLink( Base => $base, - Type => $type, - Target => $target ); - - push @results, $msg; - - } - - } - ### - - my @delete_custnums = - map { /^Ticket-AddCustomer-(\d+)$/; $1 } - grep { /^Ticket-AddCustomer-(\d+)$/ && $ARGSRef->{$_} } - keys %$ARGSRef; - - my @custnums = map { /^Ticket-AddCustomer-(\d+)$/; $1 } - grep { /^Ticket-AddCustomer-(\d+)$/ && $ARGSRef->{$_} } - keys %$ARGSRef; - - foreach my $custnum ( @custnums ) { - my( $val, $msg ) = - $Ticket->AddLink( 'Type' => 'MemberOf', - 'Target' => "freeside://freeside/cust_main/$custnum", - ); - push @results, $msg; - } - - return @results; - -} - -1; - diff --git a/rt/lib/RT/Link.pm b/rt/lib/RT/Link.pm deleted file mode 100644 index 962c378a8..000000000 --- a/rt/lib/RT/Link.pm +++ /dev/null @@ -1,302 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::Link - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::Link; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('Links'); - $self->SUPER::_Init(@_); -} - - - - - -=item Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(240) 'Base'. - varchar(240) 'Target'. - varchar(20) 'Type'. - int(11) 'LocalTarget'. - int(11) 'LocalBase'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Base => '', - Target => '', - Type => '', - LocalTarget => '0', - LocalBase => '0', - - @_); - $self->SUPER::Create( - Base => $args{'Base'}, - Target => $args{'Target'}, - Type => $args{'Type'}, - LocalTarget => $args{'LocalTarget'}, - LocalBase => $args{'LocalBase'}, -); - -} - - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item Base - -Returns the current value of Base. -(In the database, Base is stored as varchar(240).) - - - -=item SetBase VALUE - - -Set Base to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Base will be stored as a varchar(240).) - - -=cut - - -=item Target - -Returns the current value of Target. -(In the database, Target is stored as varchar(240).) - - - -=item SetTarget VALUE - - -Set Target to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Target will be stored as a varchar(240).) - - -=cut - - -=item Type - -Returns the current value of Type. -(In the database, Type is stored as varchar(20).) - - - -=item SetType VALUE - - -Set Type to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Type will be stored as a varchar(20).) - - -=cut - - -=item LocalTarget - -Returns the current value of LocalTarget. -(In the database, LocalTarget is stored as int(11).) - - - -=item SetLocalTarget VALUE - - -Set LocalTarget to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, LocalTarget will be stored as a int(11).) - - -=cut - - -=item LocalBase - -Returns the current value of LocalBase. -(In the database, LocalBase is stored as int(11).) - - - -=item SetLocalBase VALUE - - -Set LocalBase to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, LocalBase will be stored as a int(11).) - - -=cut - - -=item LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=item LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - -=item Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=item Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - - -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - Base => - {read => 1, write => 1, type => 'varchar(240)', default => ''}, - Target => - {read => 1, write => 1, type => 'varchar(240)', default => ''}, - Type => - {read => 1, write => 1, type => 'varchar(20)', default => ''}, - LocalTarget => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - LocalBase => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, - Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, - - } -}; - - - eval "require RT::Link_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Link_Overlay.pm}) { - die $@; - }; - - eval "require RT::Link_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Link_Vendor.pm}) { - die $@; - }; - - eval "require RT::Link_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Link_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Link_Overlay, RT::Link_Vendor, RT::Link_Local - -=cut - - -1; diff --git a/rt/lib/RT/Link_Overlay.pm b/rt/lib/RT/Link_Overlay.pm deleted file mode 100644 index e8d6c7c1b..000000000 --- a/rt/lib/RT/Link_Overlay.pm +++ /dev/null @@ -1,390 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Link - an RT Link object - -=head1 SYNOPSIS - - use RT::Link; - -=head1 DESCRIPTION - -This module should never be called directly by client code. it's an internal module which -should only be accessed through exported APIs in Ticket other similar objects. - -=head1 METHODS - - -=begin testing - - -use RT::Link; -my $link = RT::Link->new($RT::SystemUser); - - -ok (ref $link); -ok (UNIVERSAL::isa($link, 'RT::Link')); -ok (UNIVERSAL::isa($link, 'RT::Base')); -ok (UNIVERSAL::isa($link, 'RT::Record')); -ok (UNIVERSAL::isa($link, 'DBIx::SearchBuilder::Record')); - -=end testing - -=cut - - -package RT::Link; - -use strict; -no warnings qw(redefine); - - -use Carp; -use RT::URI; - - -# {{{ sub Create - -=head2 Create PARAMHASH - -Create a new link object. Takes 'Base', 'Target' and 'Type'. -Returns undef on failure or a Link Id on success. - -=cut - -sub Create { - my $self = shift; - my %args = ( Base => undef, - Target => undef, - Type => undef, - @_ ); - - my $base = RT::URI->new( $self->CurrentUser ); - $base->FromURI( $args{'Base'} ); - - unless ( $base->Resolver && $base->Scheme ) { - my $msg = $self->loc("Couldn't resolve base '[_1]' into a URI.", - $args{'Base'}); - $RT::Logger->warning( "$self $msg\n" ); - - if (wantarray) { - return(undef, $msg); - } else { - return (undef); - } - } - - my $target = RT::URI->new( $self->CurrentUser ); - $target->FromURI( $args{'Target'} ); - - unless ( $target->Resolver ) { - my $msg = $self->loc("Couldn't resolve target '[_1]' into a URI.", - $args{'Target'}); - $RT::Logger->warning( "$self $msg\n" ); - - if (wantarray) { - return(undef, $msg); - } else { - return (undef); - } - } - - my $base_id = 0; - my $target_id = 0; - - - - - if ( $base->IsLocal ) { - unless (UNIVERSAL::can($base->Object, 'Id')) { - return (undef, $self->loc("[_1] appears to be a local object, but can't be found in the database", $args{'Base'})); - - } - $base_id = $base->Object->Id; - } - if ( $target->IsLocal ) { - unless (UNIVERSAL::can($target->Object, 'Id')) { - return (undef, $self->loc("[_1] appears to be a local object, but can't be found in the database", $args{'Target'})); - - } - $target_id = $target->Object->Id; - } - - # {{{ We don't want references to ourself - if ( $base->URI eq $target->URI ) { - return ( 0, $self->loc("Can't link a ticket to itself") ); - } - - # }}} - - my ( $id, $msg ) = $self->SUPER::Create( Base => $base->URI, - Target => $target->URI, - LocalBase => $base_id, - LocalTarget => $target_id, - Type => $args{'Type'} ); - return ( $id, $msg ); -} - -# }}} - # {{{ sub LoadByParams - -=head2 LoadByParams - - Load an RT::Link object from the database. Takes three parameters - - Base => undef, - Target => undef, - Type =>undef - - Base and Target are expected to be integers which refer to Tickets or URIs - Type is the link type - -=cut - -sub LoadByParams { - my $self = shift; - my %args = ( Base => undef, - Target => undef, - Type => undef, - @_ ); - - my $base = RT::URI->new($self->CurrentUser); - $base->FromURI( $args{'Base'} ); - - my $target = RT::URI->new($self->CurrentUser); - $target->FromURI( $args{'Target'} ); - - unless ($base->Resolver && $target->Resolver) { - return ( 0, $self->loc("Couldn't load link") ); - } - - - my ( $id, $msg ) = $self->LoadByCols( Base => $base->URI, - Type => $args{'Type'}, - Target => $target->URI ); - - unless ($id) { - return ( 0, $self->loc("Couldn't load link") ); - } -} - -# }}} -# {{{ sub Load - -=head2 Load - - Load an RT::Link object from the database. Takes one parameter, the id of an entry in the links table. - - -=cut - -sub Load { - my $self = shift; - my $identifier = shift; - - - - - if ( $identifier !~ /^\d+$/ ) { - return ( 0, $self->loc("That's not a numerical id") ); - } - else { - my ( $id, $msg ) = $self->LoadById($identifier); - unless ( $self->Id ) { - return ( 0, $self->loc("Couldn't load link") ); - } - return ( $id, $msg ); - } -} - -# }}} - - -# {{{ TargetURI - -=head2 TargetURI - -returns an RT::URI object for the "Target" of this link. - -=cut - -sub TargetURI { - my $self = shift; - my $URI = RT::URI->new($self->CurrentUser); - $URI->FromURI($self->Target); - return ($URI); -} - -# }}} -# {{{ sub TargetObj - -=head2 TargetObj - -=cut - -sub TargetObj { - my $self = shift; - return $self->TargetURI->Object; -} -# }}} - -# {{{ BaseURI - -=head2 BaseURI - -returns an RT::URI object for the "Base" of this link. - -=cut - -sub BaseURI { - my $self = shift; - my $URI = RT::URI->new($self->CurrentUser); - $URI->FromURI($self->Base); - return ($URI); -} - -# }}} -# {{{ sub BaseObj - -=head2 BaseObj - -=cut - -sub BaseObj { - my $self = shift; - return $self->BaseURI->Object; -} -# }}} - - - -# Static methods: - -# {{{ sub BaseIsLocal - -=head2 BaseIsLocal - -Returns true if the base of this link is a local ticket - -=cut - -sub BaseIsLocal { - my $self = shift; - $RT::Logger->crit("Link::BaseIsLocal is deprecated in favor of Link->BaseURI->IsLocal at (". join(":",caller).")"); - return $self->BaseURI->IsLocal; -} - -# }}} - -# {{{ sub TargetIsLocal - -=head2 TargetIsLocal - -Returns true if the target of this link is a local ticket - -=cut - -sub TargetIsLocal { - my $self = shift; - $RT::Logger->crit("Link::BaseIsLocal is deprecated in favor of Link->BaseURI->IsLocal at (". join(":",caller).")"); - return $self->TargetURI->IsLocal; -} - -# }}} - - -# {{{ sub BaseAsHREF - -=head2 BaseAsHREF - -Returns an HTTP url to access the base of this link - -=cut - -sub BaseAsHREF { - my $self = shift; - $RT::Logger->crit("Link::BaseAsHREF deprecated in favor of ->BaseURI->AsHREF at (". join(":",caller).")"); - return $self->BaseURI->AsHREF; -} -# }}} - -# {{{ sub TargetAsHREF - -=head2 TargetAsHREF - -return an HTTP url to access the target of this link - -=cut - -sub TargetAsHREF { - my $self = shift; - $RT::Logger->crit("Link::TargetAsHREF deprecated in favor of ->TargetURI->AsHREF at (". join(":",caller).")"); - return $self->TargetURI->AsHREF; -} -# }}} - -# {{{ sub AsHREF - Converts Link URIs to HTTP URLs - -=head2 URI - -Takes a URI and returns an http: url to access that object. - -=cut - - -sub AsHREF { - my $self=shift; - - $RT::Logger->crit("AsHREF is gone. look at URI::HREF to figure out what to do with \$URI"); -} - -# }}} - -1; - diff --git a/rt/lib/RT/Links.pm b/rt/lib/RT/Links.pm deleted file mode 100644 index 7a1773af9..000000000 --- a/rt/lib/RT/Links.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::Links -- Class Description - -=head1 SYNOPSIS - - use RT::Links - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::Links; - -use RT::SearchBuilder; -use RT::Link; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'Links'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=item NewItem - -Returns an empty new RT::Link item - -=cut - -sub NewItem { - my $self = shift; - return(RT::Link->new($self->CurrentUser)); -} - - eval "require RT::Links_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Links_Overlay.pm}) { - die $@; - }; - - eval "require RT::Links_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Links_Vendor.pm}) { - die $@; - }; - - eval "require RT::Links_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Links_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Links_Overlay, RT::Links_Vendor, RT::Links_Local - -=cut - - -1; diff --git a/rt/lib/RT/Links_Overlay.pm b/rt/lib/RT/Links_Overlay.pm deleted file mode 100644 index bf95e6326..000000000 --- a/rt/lib/RT/Links_Overlay.pm +++ /dev/null @@ -1,174 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Links - A collection of Link objects - -=head1 SYNOPSIS - - use RT::Links; - my $links = new RT::Links($CurrentUser); - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::Links); - -=end testing - -=cut - - -package RT::Links; - -use strict; -no warnings qw(redefine); -use RT::URI; - -# {{{ sub Limit -sub Limit { - my $self = shift; - my %args = ( ENTRYAGGREGATOR => 'AND', - OPERATOR => '=', - @_); - - #if someone's trying to search for tickets, try to resolve the uris for searching. - - if ( ( $args{'OPERATOR'} eq '=') and - ( $args{'FIELD'} eq 'Base') or ($args{'FIELD'} eq 'Target') - ) { - my $dummy = RT::URI->new($self->CurrentUser); - $dummy->FromURI($args{'VALUE'}); - # $uri = $dummy->URI; - } - - - # If we're limiting by target, order by base - # (Order by the thing that's changing) - - if ( ($args{'FIELD'} eq 'Target') or - ($args{'FIELD'} eq 'LocalTarget') ) { - $self->OrderBy (ALIAS => 'main', - FIELD => 'Base', - ORDER => 'ASC'); - } - elsif ( ($args{'FIELD'} eq 'Base') or - ($args{'FIELD'} eq 'LocalBase') ) { - $self->OrderBy (ALIAS => 'main', - FIELD => 'Target', - ORDER => 'ASC'); - } - - - $self->SUPER::Limit(%args); -} -# }}} - -# {{{ LimitRefersTo - -=head2 LimitRefersTo URI - -find all things that refer to URI - -=cut - -sub LimitRefersTo { - my $self = shift; - my $URI = shift; - - $self->Limit(FIELD => 'Type', VALUE => 'RefersTo'); - $self->Limit(FIELD => 'Target', VALUE => $URI); -} - -# }}} -# {{{ LimitReferredToBy - -=head2 LimitReferredToBy URI - -find all things that URI refers to - -=cut - -sub LimitReferredToBy { - my $self = shift; - my $URI = shift; - - $self->Limit(FIELD => 'Type', VALUE => 'RefersTo'); - $self->Limit(FIELD => 'Base', VALUE => $URI); -} - -# }}} - - -# {{{ Next -sub Next { - my $self = shift; - - my $Link = $self->SUPER::Next(); - return $Link unless $Link && ref $Link; - - # Skip links to local objects thast are deleted - if ( $Link->TargetURI->IsLocal and UNIVERSAL::isa($Link->TargetObj,"RT::Ticket") - and $Link->TargetObj->__Value('status') eq "deleted") { - return $self->Next; - } elsif ($Link->BaseURI->IsLocal and UNIVERSAL::isa($Link->BaseObj,"RT::Ticket") - and $Link->BaseObj->__Value('status') eq "deleted") { - return $self->Next; - } else { - return $Link; - } -} - -# }}} -1; - diff --git a/rt/lib/RT/ObjectCustomField.pm b/rt/lib/RT/ObjectCustomField.pm deleted file mode 100644 index 077c8fc1c..000000000 --- a/rt/lib/RT/ObjectCustomField.pm +++ /dev/null @@ -1,295 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::ObjectCustomField - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::ObjectCustomField; -use RT::Record; -use RT::CustomField; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('ObjectCustomFields'); - $self->SUPER::_Init(@_); -} - - - - - -=head2 Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - int(11) 'CustomField'. - int(11) 'ObjectId'. - int(11) 'SortOrder'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - CustomField => '0', - ObjectId => '0', - SortOrder => '0', - - @_); - $self->SUPER::Create( - CustomField => $args{'CustomField'}, - ObjectId => $args{'ObjectId'}, - SortOrder => $args{'SortOrder'}, -); - -} - - - -=head2 id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=head2 CustomField - -Returns the current value of CustomField. -(In the database, CustomField is stored as int(11).) - - - -=head2 SetCustomField VALUE - - -Set CustomField to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CustomField will be stored as a int(11).) - - -=cut - - -=head2 CustomFieldObj - -Returns the CustomField Object which has the id returned by CustomField - - -=cut - -sub CustomFieldObj { - my $self = shift; - my $CustomField = RT::CustomField->new($self->CurrentUser); - $CustomField->Load($self->__Value('CustomField')); - return($CustomField); -} - -=head2 ObjectId - -Returns the current value of ObjectId. -(In the database, ObjectId is stored as int(11).) - - - -=head2 SetObjectId VALUE - - -Set ObjectId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ObjectId will be stored as a int(11).) - - -=cut - - -=head2 SortOrder - -Returns the current value of SortOrder. -(In the database, SortOrder is stored as int(11).) - - - -=head2 SetSortOrder VALUE - - -Set SortOrder to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, SortOrder will be stored as a int(11).) - - -=cut - - -=head2 Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=head2 Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - -=head2 LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=head2 LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - - -sub _CoreAccessible { - { - - id => - {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - CustomField => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - ObjectId => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - SortOrder => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - Creator => - {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - - } -}; - - - eval "require RT::ObjectCustomField_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomField_Overlay.pm}) { - die $@; - }; - - eval "require RT::ObjectCustomField_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomField_Vendor.pm}) { - die $@; - }; - - eval "require RT::ObjectCustomField_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomField_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::ObjectCustomField_Overlay, RT::ObjectCustomField_Vendor, RT::ObjectCustomField_Local - -=cut - - -1; diff --git a/rt/lib/RT/ObjectCustomFieldValue.pm b/rt/lib/RT/ObjectCustomFieldValue.pm deleted file mode 100644 index 91c201380..000000000 --- a/rt/lib/RT/ObjectCustomFieldValue.pm +++ /dev/null @@ -1,433 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::ObjectCustomFieldValue - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::ObjectCustomFieldValue; -use RT::Record; -use RT::CustomField; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('ObjectCustomFieldValues'); - $self->SUPER::_Init(@_); -} - - - - - -=head2 Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - int(11) 'CustomField'. - varchar(255) 'ObjectType'. - int(11) 'ObjectId'. - int(11) 'SortOrder'. - varchar(255) 'Content'. - longtext 'LargeContent'. - varchar(80) 'ContentType'. - varchar(80) 'ContentEncoding'. - smallint(6) 'Disabled'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - CustomField => '0', - ObjectType => '', - ObjectId => '0', - SortOrder => '0', - Content => '', - LargeContent => '', - ContentType => '', - ContentEncoding => '', - Disabled => '0', - - @_); - $self->SUPER::Create( - CustomField => $args{'CustomField'}, - ObjectType => $args{'ObjectType'}, - ObjectId => $args{'ObjectId'}, - SortOrder => $args{'SortOrder'}, - Content => $args{'Content'}, - LargeContent => $args{'LargeContent'}, - ContentType => $args{'ContentType'}, - ContentEncoding => $args{'ContentEncoding'}, - Disabled => $args{'Disabled'}, -); - -} - - - -=head2 id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=head2 CustomField - -Returns the current value of CustomField. -(In the database, CustomField is stored as int(11).) - - - -=head2 SetCustomField VALUE - - -Set CustomField to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CustomField will be stored as a int(11).) - - -=cut - - -=head2 CustomFieldObj - -Returns the CustomField Object which has the id returned by CustomField - - -=cut - -sub CustomFieldObj { - my $self = shift; - my $CustomField = RT::CustomField->new($self->CurrentUser); - $CustomField->Load($self->__Value('CustomField')); - return($CustomField); -} - -=head2 ObjectType - -Returns the current value of ObjectType. -(In the database, ObjectType is stored as varchar(255).) - - - -=head2 SetObjectType VALUE - - -Set ObjectType to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ObjectType will be stored as a varchar(255).) - - -=cut - - -=head2 ObjectId - -Returns the current value of ObjectId. -(In the database, ObjectId is stored as int(11).) - - - -=head2 SetObjectId VALUE - - -Set ObjectId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ObjectId will be stored as a int(11).) - - -=cut - - -=head2 SortOrder - -Returns the current value of SortOrder. -(In the database, SortOrder is stored as int(11).) - - - -=head2 SetSortOrder VALUE - - -Set SortOrder to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, SortOrder will be stored as a int(11).) - - -=cut - - -=head2 Content - -Returns the current value of Content. -(In the database, Content is stored as varchar(255).) - - - -=head2 SetContent VALUE - - -Set Content to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Content will be stored as a varchar(255).) - - -=cut - - -=head2 LargeContent - -Returns the current value of LargeContent. -(In the database, LargeContent is stored as longtext.) - - - -=head2 SetLargeContent VALUE - - -Set LargeContent to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, LargeContent will be stored as a longtext.) - - -=cut - - -=head2 ContentType - -Returns the current value of ContentType. -(In the database, ContentType is stored as varchar(80).) - - - -=head2 SetContentType VALUE - - -Set ContentType to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ContentType will be stored as a varchar(80).) - - -=cut - - -=head2 ContentEncoding - -Returns the current value of ContentEncoding. -(In the database, ContentEncoding is stored as varchar(80).) - - - -=head2 SetContentEncoding VALUE - - -Set ContentEncoding to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ContentEncoding will be stored as a varchar(80).) - - -=cut - - -=head2 Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=head2 Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - -=head2 LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=head2 LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - -=head2 Disabled - -Returns the current value of Disabled. -(In the database, Disabled is stored as smallint(6).) - - - -=head2 SetDisabled VALUE - - -Set Disabled to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Disabled will be stored as a smallint(6).) - - -=cut - - - -sub _CoreAccessible { - { - - id => - {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - CustomField => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - ObjectType => - {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, - ObjectId => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - SortOrder => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - Content => - {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, - LargeContent => - {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'longtext', default => ''}, - ContentType => - {read => 1, write => 1, sql_type => 12, length => 80, is_blob => 0, is_numeric => 0, type => 'varchar(80)', default => ''}, - ContentEncoding => - {read => 1, write => 1, sql_type => 12, length => 80, is_blob => 0, is_numeric => 0, type => 'varchar(80)', default => ''}, - Creator => - {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, - Disabled => - {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, - - } -}; - - - eval "require RT::ObjectCustomFieldValue_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValue_Overlay.pm}) { - die $@; - }; - - eval "require RT::ObjectCustomFieldValue_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValue_Vendor.pm}) { - die $@; - }; - - eval "require RT::ObjectCustomFieldValue_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValue_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::ObjectCustomFieldValue_Overlay, RT::ObjectCustomFieldValue_Vendor, RT::ObjectCustomFieldValue_Local - -=cut - - -1; diff --git a/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm b/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm deleted file mode 100644 index ed86b11df..000000000 --- a/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm +++ /dev/null @@ -1,262 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::ObjectCustomFieldValue; - -use strict; -no warnings qw(redefine); - - -sub Create { - my $self = shift; - my %args = ( - CustomField => '0', - ObjectType => '', - ObjectId => '0', - Disabled => '0', - Content => '', - LargeContent => '', - ContentType => '', - ContentEncoding => '', - - @_); - - - if( $args{'Content'} && length($args{'Content'}) > 255 && !$args{'LargeContent'} ) { - - $args{'LargeContent'} = $args{'Content'}; - $args{'Content'} = ''; - $args{'ContentType'} = 'text/plain'; - } - - ( $args{'ContentEncoding'}, $args{'LargeContent'} ) = - $self->_EncodeLOB( $args{'LargeContent'}, $args{'ContentType'} ) - if ( $args{'LargeContent'} ); - - $self->SUPER::Create( - CustomField => $args{'CustomField'}, - ObjectType => $args{'ObjectType'}, - ObjectId => $args{'ObjectId'}, - Disabled => $args{'Disabled'}, - Content => $args{'Content'}, - LargeContent => $args{'LargeContent'}, - ContentType => $args{'ContentType'}, - ContentEncoding => $args{'ContentEncoding'}, -); - - - -} - - -sub LargeContent { - my $self = shift; - $self->_DecodeLOB( $self->ContentType, $self->ContentEncoding, - $self->_Value( 'LargeContent', decode_utf8 => 0 ) ); - -} - - - - -=head2 LoadByTicketContentAndCustomField { Ticket => TICKET, CustomField => CUSTOMFIELD, Content => CONTENT } - -Loads a custom field value by Ticket, Content and which CustomField it's tied to - -=cut - - -sub LoadByTicketContentAndCustomField { - my $self = shift; - my %args = ( Ticket => undef, - CustomField => undef, - Content => undef, - @_ - ); - - - $self->LoadByCols( Content => $args{'Content'}, - CustomField => $args{'CustomField'}, - ObjectType => 'RT::Ticket', - ObjectId => $args{'Ticket'}, - Disabled => 0 - ); - - -} - -sub LoadByObjectContentAndCustomField { - my $self = shift; - my %args = ( Object => undef, - CustomField => undef, - Content => undef, - @_ - ); - - my $obj = $args{'Object'} or return; - - $self->LoadByCols( Content => $args{'Content'}, - CustomField => $args{'CustomField'}, - ObjectType => ref($obj), - ObjectId => $obj->Id, - Disabled => 0 - ); - -} - - -=head2 Content - -Return this custom field's content. If there's no "regular" -content, try "LargeContent" - -=cut - - -sub Content { - my $self = shift; - my $content = $self->SUPER::Content; - if (!$content && $self->ContentType eq 'text/plain') { - return $self->LargeContent(); - } else { - return $content; - } -} - - -=head2 Object - -Returns the object this value applies to - -=cut - -sub Object { - my $self = shift; - my $Object = $self->__Value('ObjectType')->new($self->CurrentUser); - $Object->Load($self->__Value('ObjectId')); - return($Object); -} - - -=head2 Delete - -Disable this value. Used to remove "current" values from records while leaving them in the history. - -=cut - - -sub Delete { - my $self = shift; - $self->SetDisabled(1); -} - -=head2 _FillInTemplateURL URL - -Takes a URL containing placeholders and returns the URL as filled in for this -ObjectCustomFieldValue. - -Available placeholders: - -=over - -=item __id__ - -The id of the object in question. - -=item __CustomField__ - -The value of this custom field for the object in question. - -=back - -=cut - -sub _FillInTemplateURL { - - my $self = shift; - - my $url = shift; - - $url =~ s/__id__/@{[$self->ObjectId]}/g; - $url =~ s/__CustomField__/@{[$self->Content]}/g; - - return $url; -} - - -=head2 ValueLinkURL - -Returns a filled in URL template for this ObjectCustomFieldValue, suitable for -constructing a hyperlink in RT's webui. Returns undef if this custom field doesn't have -a LinkValueTo - -=cut - -sub LinkValueTo { - my $self = shift; - return $self->_FillInTemplateURL($self->CustomFieldObj->LinkValueTo); -} - - - -=head2 ValueIncludeURL - -Returns a filled in URL template for this ObjectCustomFieldValue, suitable for -constructing a hyperlink in RT's webui. Returns undef if this custom field doesn't have -a IncludeContentForValue - -=cut - -sub IncludeContentForValue { - my $self = shift; - return $self->_FillInTemplateURL($self->CustomFieldObj->IncludeContentForValue); -} - - - - -1; diff --git a/rt/lib/RT/ObjectCustomFieldValues.pm b/rt/lib/RT/ObjectCustomFieldValues.pm deleted file mode 100644 index 8d8dbf8a5..000000000 --- a/rt/lib/RT/ObjectCustomFieldValues.pm +++ /dev/null @@ -1,150 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::ObjectCustomFieldValues -- Class Description - -=head1 SYNOPSIS - - use RT::ObjectCustomFieldValues - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::ObjectCustomFieldValues; - -use RT::SearchBuilder; -use RT::ObjectCustomFieldValue; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'ObjectCustomFieldValues'; - $self->{'primary_key'} = 'id'; - - - - # By default, order by SortOrder - $self->OrderByCols( - { ALIAS => 'main', - FIELD => 'SortOrder', - ORDER => 'ASC' }, - { ALIAS => 'main', - FIELD => 'id', - ORDER => 'ASC' }, - ); - - return ( $self->SUPER::_Init(@_) ); -} - - -=head2 NewItem - -Returns an empty new RT::ObjectCustomFieldValue item - -=cut - -sub NewItem { - my $self = shift; - return(RT::ObjectCustomFieldValue->new($self->CurrentUser)); -} - - eval "require RT::ObjectCustomFieldValues_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValues_Overlay.pm}) { - die $@; - }; - - eval "require RT::ObjectCustomFieldValues_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValues_Vendor.pm}) { - die $@; - }; - - eval "require RT::ObjectCustomFieldValues_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValues_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::ObjectCustomFieldValues_Overlay, RT::ObjectCustomFieldValues_Vendor, RT::ObjectCustomFieldValues_Local - -=cut - - -1; diff --git a/rt/lib/RT/ObjectCustomFieldValues_Overlay.pm b/rt/lib/RT/ObjectCustomFieldValues_Overlay.pm deleted file mode 100644 index 6917e89da..000000000 --- a/rt/lib/RT/ObjectCustomFieldValues_Overlay.pm +++ /dev/null @@ -1,155 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::ObjectCustomFieldValues; - -use strict; -no warnings qw(redefine); - -# {{{ sub LimitToCustomField - -=head2 LimitToCustomField FIELD - -Limits the returned set to values for the custom field with Id FIELD - -=cut - -sub LimitToCustomField { - my $self = shift; - my $cf = shift; - return ($self->Limit( FIELD => 'CustomField', - VALUE => $cf, - OPERATOR => '=')); - -} - -# }}} - -# {{{ sub LimitToTicket - -=head2 LimitToTicket TICKETID - -Limits the returned set to values for the ticket with Id TICKETID - -=cut - -sub LimitToTicket { - my $self = shift; - my $ticket = shift; - - - $RT::Logger->warning(ref($self) . " -> LimitToTicket deprecated in favor of LimitToObject at (". join(":",caller).")"); - - $self->Limit( FIELD => 'ObjectType', - VALUE => 'RT::Ticket', - OPERATOR => '='); - return ($self->Limit( FIELD => 'ObjectId', - VALUE => $ticket, - OPERATOR => '=')); - -} - -# }}} - - -sub LimitToObject { - my $self = shift; - my $object = shift; - $self->Limit( FIELD => 'ObjectType', - VALUE => ref($object), - OPERATOR => '='); - return ($self->Limit( FIELD => 'ObjectId', - VALUE => $object->Id, - OPERATOR => '=')); - -} - -=sub HasEntry VALUE - -Returns true if this CustomFieldValues collection has an entry with content that eq VALUE - -=cut - - -sub HasEntry { - my $self = shift; - my $value = shift; - - #TODO: this could cache and optimize a fair bit. - foreach my $item (@{$self->ItemsArrayRef}) { - return(1) if ($item->Content eq $value); - } - return undef; - -} - -sub _DoSearch { - my $self = shift; - - #unless we really want to find disabled rows, make sure we\'re only finding enabled ones. - unless($self->{'find_expired_rows'}) { - $self->LimitToEnabled(); - } - - return($self->SUPER::_DoSearch(@_)); - -} - -sub _DoCount { - my $self = shift; - - #unless we really want to find disabled rows, make sure we\'re only finding enabled ones. - unless($self->{'find_expired_rows'}) { - $self->LimitToEnabled(); - } - - return($self->SUPER::_DoCount(@_)); - -} - -1; - diff --git a/rt/lib/RT/ObjectCustomField_Overlay.pm b/rt/lib/RT/ObjectCustomField_Overlay.pm deleted file mode 100644 index 36cbceb40..000000000 --- a/rt/lib/RT/ObjectCustomField_Overlay.pm +++ /dev/null @@ -1,103 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::ObjectCustomField; - -use strict; -no warnings qw(redefine); - -sub Create { - my $self = shift; - my %args = ( - CustomField => '0', - ObjectId => '0', - SortOrder => undef, - @_); - - if (!defined $args{SortOrder}) { - my $CF = $self->CustomFieldObj($args{'CustomField'}); - my $ObjectCFs = RT::ObjectCustomFields->new($self->CurrentUser); - $ObjectCFs->LimitToObjectId($args{'ObjectId'}); - $ObjectCFs->LimitToLookupType($CF->LookupType); - - $args{SortOrder} = $ObjectCFs->Count + 1; - } - - $self->SUPER::Create( - CustomField => $args{'CustomField'}, - ObjectId => $args{'ObjectId'}, - SortOrder => $args{'SortOrder'}, - ); -} - -sub Delete { - my $self = shift; - - my $ObjectCFs = RT::ObjectCustomFields->new($self->CurrentUser); - $ObjectCFs->LimitToObjectId($self->ObjectId); - $ObjectCFs->LimitToLookupType($self->CustomFieldObj->LookupType); - - # Move everything below us up - my $sort_order = $self->SortOrder; - while (my $OCF = $ObjectCFs->Next) { - my $this_order = $OCF->SortOrder; - next if $this_order <= $sort_order; - $OCF->SetSortOrder($this_order - 1); - } - - $self->SUPER::Delete; -} - -sub CustomFieldObj { - my $self = shift; - my $id = shift || $self->CustomField; - my $CF = RT::CustomField->new($self->CurrentUser); - $CF->Load($id) or die "Cannot load CustomField $id"; - return $CF; -} - -1; diff --git a/rt/lib/RT/ObjectCustomFields.pm b/rt/lib/RT/ObjectCustomFields.pm deleted file mode 100644 index fde8bfac7..000000000 --- a/rt/lib/RT/ObjectCustomFields.pm +++ /dev/null @@ -1,150 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::ObjectCustomFields -- Class Description - -=head1 SYNOPSIS - - use RT::ObjectCustomFields - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::ObjectCustomFields; - -use RT::SearchBuilder; -use RT::ObjectCustomField; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'ObjectCustomFields'; - $self->{'primary_key'} = 'id'; - - - - # By default, order by SortOrder - $self->OrderByCols( - { ALIAS => 'main', - FIELD => 'SortOrder', - ORDER => 'ASC' }, - { ALIAS => 'main', - FIELD => 'id', - ORDER => 'ASC' }, - ); - - return ( $self->SUPER::_Init(@_) ); -} - - -=head2 NewItem - -Returns an empty new RT::ObjectCustomField item - -=cut - -sub NewItem { - my $self = shift; - return(RT::ObjectCustomField->new($self->CurrentUser)); -} - - eval "require RT::ObjectCustomFields_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFields_Overlay.pm}) { - die $@; - }; - - eval "require RT::ObjectCustomFields_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFields_Vendor.pm}) { - die $@; - }; - - eval "require RT::ObjectCustomFields_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFields_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::ObjectCustomFields_Overlay, RT::ObjectCustomFields_Vendor, RT::ObjectCustomFields_Local - -=cut - - -1; diff --git a/rt/lib/RT/ObjectCustomFields_Overlay.pm b/rt/lib/RT/ObjectCustomFields_Overlay.pm deleted file mode 100644 index 0378bf398..000000000 --- a/rt/lib/RT/ObjectCustomFields_Overlay.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::ObjectCustomFields; - -use strict; -no warnings qw(redefine); - -sub LimitToCustomField { - my $self = shift; - my $id = shift; - $self->Limit( FIELD => 'CustomField', VALUE => $id ); -} - -sub LimitToObjectId { - my $self = shift; - my $id = shift || 0; - $self->Limit( FIELD => 'ObjectId', VALUE => $id ); -} - -sub LimitToLookupType { - my $self = shift; - my $lookup = shift; - unless ($self->{'_cfs_alias'}) { - $self->{'_cfs_alias'} = $self->NewAlias('CustomFields'); - } - $self->Join( ALIAS1 => 'main', - FIELD1 => 'CustomField', - ALIAS2 => $self->{'_cfs_alias'}, - FIELD2 => 'id' ); - $self->Limit( ALIAS => $self->{'_cfs_alias'}, - FIELD => 'LookupType', - OPERATOR => '=', - VALUE => $lookup ); -} - -sub HasEntryForCustomField { - my $self = shift; - my $id = shift; - - my @items = grep {$_->CustomField == $id } @{$self->ItemsArrayRef}; - - if ($#items > 1) { - die "$self HasEntry had a list with more than one of $id in it. this can never happen"; - } - if ($#items == -1 ) { - return undef; - } - else { - return ($items[0]); - } -} - -sub CustomFields { - my $self = shift; - my %seen; - map { $_->CustomFieldObj } @{$self->ItemsArrayRef}; -} - -sub _DoSearch { - my $self = shift; - if ($self->{'_cfs_alias'}) { - $self->Limit( ALIAS => $self->{'_cfs_alias'}, - FIELD => 'Disabled', - OPERATOR => '!=', - VALUE => 1); - } - $self->SUPER::_DoSearch() -} - -1; diff --git a/rt/lib/RT/Principal.pm b/rt/lib/RT/Principal.pm deleted file mode 100644 index cbc305e52..000000000 --- a/rt/lib/RT/Principal.pm +++ /dev/null @@ -1,236 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::Principal - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::Principal; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('Principals'); - $self->SUPER::_Init(@_); -} - - - - - -=head2 Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(16) 'PrincipalType'. - int(11) 'ObjectId'. - smallint(6) 'Disabled'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - PrincipalType => '', - ObjectId => '', - Disabled => '0', - - @_); - $self->SUPER::Create( - PrincipalType => $args{'PrincipalType'}, - ObjectId => $args{'ObjectId'}, - Disabled => $args{'Disabled'}, -); - -} - - - -=head2 id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=head2 PrincipalType - -Returns the current value of PrincipalType. -(In the database, PrincipalType is stored as varchar(16).) - - - -=head2 SetPrincipalType VALUE - - -Set PrincipalType to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, PrincipalType will be stored as a varchar(16).) - - -=cut - - -=head2 ObjectId - -Returns the current value of ObjectId. -(In the database, ObjectId is stored as int(11).) - - - -=head2 SetObjectId VALUE - - -Set ObjectId to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ObjectId will be stored as a int(11).) - - -=cut - - -=head2 Disabled - -Returns the current value of Disabled. -(In the database, Disabled is stored as smallint(6).) - - - -=head2 SetDisabled VALUE - - -Set Disabled to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Disabled will be stored as a smallint(6).) - - -=cut - - - -sub _CoreAccessible { - { - - id => - {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - PrincipalType => - {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, - ObjectId => - {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, - Disabled => - {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, - - } -}; - - - eval "require RT::Principal_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Principal_Overlay.pm}) { - die $@; - }; - - eval "require RT::Principal_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Principal_Vendor.pm}) { - die $@; - }; - - eval "require RT::Principal_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Principal_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Principal_Overlay, RT::Principal_Vendor, RT::Principal_Local - -=cut - - -1; diff --git a/rt/lib/RT/Principal_Overlay.pm b/rt/lib/RT/Principal_Overlay.pm deleted file mode 100644 index c3112595b..000000000 --- a/rt/lib/RT/Principal_Overlay.pm +++ /dev/null @@ -1,596 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# - -package RT::Principal; - -use strict; -use warnings; - -no warnings qw(redefine); - -use Cache::Simple::TimedExpiry; - - - -use RT::Group; -use RT::User; - -# Set up the ACL cache on startup -our $_ACL_CACHE; -InvalidateACLCache(); - -# {{{ IsGroup - -=head2 IsGroup - -Returns true if this principal is a group. -Returns undef, otherwise - -=cut - -sub IsGroup { - my $self = shift; - if ($self->PrincipalType eq 'Group') { - return(1); - } - else { - return undef; - } -} - -# }}} - -# {{{ IsUser - -=head2 IsUser - -Returns true if this principal is a User. -Returns undef, otherwise - -=cut - -sub IsUser { - my $self = shift; - if ($self->PrincipalType eq 'User') { - return(1); - } - else { - return undef; - } -} - -# }}} - -# {{{ Object - -=head2 Object - -Returns the user or group associated with this principal - -=cut - -sub Object { - my $self = shift; - - unless ($self->{'object'}) { - if ($self->IsUser) { - $self->{'object'} = RT::User->new($self->CurrentUser); - } - elsif ($self->IsGroup) { - $self->{'object'} = RT::Group->new($self->CurrentUser); - } - else { - $RT::Logger->crit("Found a principal (".$self->Id.") that was neither a user nor a group"); - return(undef); - } - $self->{'object'}->Load($self->ObjectId()); - } - return ($self->{'object'}); - - -} -# }}} - -# {{{ ACL Related routines - -# {{{ GrantRight - -=head2 GrantRight { Right => RIGHTNAME, Object => undef } - -A helper function which calls RT::ACE->Create - - - - Returns a tuple of (STATUS, MESSAGE); If the call succeeded, STATUS is true. Otherwise it's - false. - -=cut - -sub GrantRight { - my $self = shift; - my %args = ( Right => undef, - Object => undef, - @_); - - - unless ($args{'Right'}) { - return(0, $self->loc("Invalid Right")); - } - - - #ACL check handled in ACE.pm - my $ace = RT::ACE->new( $self->CurrentUser ); - - - my $type = $self->_GetPrincipalTypeForACL(); - - # If it's a user, we really want to grant the right to their - # user equivalence group - return ( $ace->Create(RightName => $args{'Right'}, - Object => $args{'Object'}, - PrincipalType => $type, - PrincipalId => $self->Id - ) ); -} -# }}} - -# {{{ RevokeRight - -=head2 RevokeRight { Right => "RightName", Object => "object" } - -Delete a right that a user has - - - Returns a tuple of (STATUS, MESSAGE); If the call succeeded, STATUS is true. Otherwise it's - false. - - -=cut - -sub RevokeRight { - - my $self = shift; - my %args = ( - Right => undef, - Object => undef, - @_ - ); - - #if we haven't specified any sort of right, we're talking about a global right - if (!defined $args{'Object'} && !defined $args{'ObjectId'} && !defined $args{'ObjectType'}) { - $args{'Object'} = $RT::System; - } - #ACL check handled in ACE.pm - my $type = $self->_GetPrincipalTypeForACL(); - - my $ace = RT::ACE->new( $self->CurrentUser ); - $ace->LoadByValues( - RightName => $args{'Right'}, - Object => $args{'Object'}, - PrincipalType => $type, - PrincipalId => $self->Id - ); - - unless ( $ace->Id ) { - return ( 0, $self->loc("ACE not found") ); - } - return ( $ace->Delete ); -} - -# }}} - -# {{{ sub _CleanupInvalidDelegations - -=head2 sub _CleanupInvalidDelegations { InsideTransaction => undef } - -Revokes all ACE entries delegated by this principal which are -inconsistent with this principal's current delegation rights. Does -not perform permission checks, but takes no action and returns success -if this principal still retains DelegateRights. Should only ever be -called from inside the RT library. - -If this principal is a group, recursively calls this method on each -cached user member of itself. - -If called from inside a transaction, specify a true value for the -InsideTransaction parameter. - -Returns a true value if the deletion succeeded; returns a false value -and logs an internal error if the deletion fails (should not happen). - -=cut - -# This is currently just a stub for the methods of the same name in -# RT::User and RT::Group. - -sub _CleanupInvalidDelegations { - my $self = shift; - unless ( $self->Id ) { - $RT::Logger->warning("Principal not loaded."); - return (undef); - } - return ($self->Object->_CleanupInvalidDelegations(@_)); -} - -# }}} - -# {{{ sub HasRight - -=head2 sub HasRight (Right => 'right' Object => undef) - - -Checks to see whether this principal has the right "Right" for the Object -specified. If the Object parameter is omitted, checks to see whether the -user has the right globally. - -This still hard codes to check to see if a user has queue-level rights -if we ask about a specific ticket. - - -This takes the params: - - Right => name of a right - - And either: - - Object => an RT style object (->id will get its id) - - -Returns 1 if a matching ACE was found. - -Returns undef if no ACE was found. - -=cut - -sub HasRight { - - my $self = shift; - my %args = ( - Right => undef, - Object => undef, - EquivObjects => undef, - @_, - ); - - unless ( $args{'Right'} ) { - $RT::Logger->crit("HasRight called without a right"); - return (undef); - } - - $args{'EquivObjects'} = [ @{ $args{'EquivObjects'} } ] - if $args{'EquivObjects'}; - - if ( $self->Disabled ) { - $RT::Logger->error( "Disabled User #" - . $self->id - . " failed access check for " - . $args{'Right'} ); - return (undef); - } - - if ( defined( $args{'Object'} ) - && UNIVERSAL::can( $args{'Object'}, 'id' ) - && $args{'Object'}->id ) { - - push @{ $args{'EquivObjects'} }, $args{'Object'}; - } - else { - $RT::Logger->crit("HasRight called with no valid object"); - return (undef); - } - - # If this object is a ticket, we care about ticket roles and queue roles - if ( UNIVERSAL::isa( $args{'Object'} => 'RT::Ticket' ) ) { - - # this is a little bit hacky, but basically, now that we've done - # the ticket roles magic, we load the queue object - # and ask all the rest of our questions about the queue. - unshift @{ $args{'EquivObjects'} }, $args{'Object'}->QueueObj; - - } - - unshift @{ $args{'EquivObjects'} }, $RT::System - unless $self->can('_IsOverrideGlobalACL') - && $self->_IsOverrideGlobalACL( $args{'Object'} ); - - - # {{{ If we've cached a win or loss for this lookup say so - - # Construct a hashkeys to cache decisions: - # 1) full_hashkey - key for any result and for full combination of uid, right and objects - # 2) short_hashkey - one key for each object to store positive results only, it applies - # only to direct group rights and partly to role rights - my $self_id = $self->id; - my $full_hashkey = join ";:;", $self_id, $args{'Right'}; - foreach ( @{ $args{'EquivObjects'} } ) { - my $ref_id = _ReferenceId($_); - $full_hashkey .= ";:;$ref_id"; - - my $short_hashkey = join ";:;", $self_id, $args{'Right'}, $ref_id; - my $cached_answer = $_ACL_CACHE->fetch($short_hashkey); - return $cached_answer > 0 if defined $cached_answer; - } - - { - my $cached_answer = $_ACL_CACHE->fetch($full_hashkey); - return $cached_answer > 0 if defined $cached_answer; - } - - - my ($hitcount, $via_obj) = $self->_HasRight( %args ); - - $_ACL_CACHE->set( $full_hashkey => $hitcount? 1: -1 ); - $_ACL_CACHE->set( "$self_id;:;$args{'Right'};:;$via_obj" => 1 ) - if $via_obj && $hitcount; - - return ($hitcount); -} - -=head2 _HasRight - -Low level HasRight implementation, use HasRight method instead. - -=cut - -sub _HasRight -{ - my $self = shift; - { - my ($hit, @other) = $self->_HasGroupRight( @_ ); - return ($hit, @other) if $hit; - } - { - my ($hit, @other) = $self->_HasRoleRight( @_ ); - return ($hit, @other) if $hit; - } - return (0); -} - -# this method handles role rights partly in situations -# where user plays role X on an object and as well the right is -# assigned to this role X of the object, for example right CommentOnTicket -# is granted to Cc role of a queue and user is in cc list of the queue -sub _HasGroupRight -{ - my $self = shift; - my %args = ( - Right => undef, - EquivObjects => [], - @_ - ); - my $right = $args{'Right'}; - - my $query = - "SELECT ACL.id, ACL.ObjectType, ACL.ObjectId " . - "FROM ACL, Principals, CachedGroupMembers WHERE " . - - # Only find superuser or rights with the name $right - "(ACL.RightName = 'SuperUser' OR ACL.RightName = '$right') " - - # Never find disabled groups. - . "AND Principals.id = ACL.PrincipalId " - . "AND Principals.PrincipalType = 'Group' " - . "AND Principals.Disabled = 0 " - - # See if the principal is a member of the group recursively or _is the rightholder_ - # never find recursively disabled group members - # also, check to see if the right is being granted _directly_ to this principal, - # as is the case when we want to look up group rights - . "AND CachedGroupMembers.GroupId = ACL.PrincipalId " - . "AND CachedGroupMembers.GroupId = Principals.id " - . "AND CachedGroupMembers.MemberId = ". $self->Id ." " - . "AND CachedGroupMembers.Disabled = 0 "; - - my @clauses; - foreach my $obj ( @{ $args{'EquivObjects'} } ) { - my $type = ref( $obj ) || $obj; - my $clause = "ACL.ObjectType = '$type'"; - - if ( ref($obj) && UNIVERSAL::can($obj, 'id') && $obj->id ) { - $clause .= " AND ACL.ObjectId = ". $obj->id; - } - - push @clauses, "($clause)"; - } - if ( @clauses ) { - $query .= " AND (". join( ' OR ', @clauses ) .")"; - } - - $self->_Handle->ApplyLimits( \$query, 1 ); - my ($hit, $obj, $id) = $self->_Handle->FetchResult( $query ); - return (0) unless $hit; - - $obj .= "-$id" if $id; - return (1, $obj); -} - -sub _HasRoleRight -{ - my $self = shift; - my %args = ( - Right => undef, - EquivObjects => [], - @_ - ); - my $right = $args{'Right'}; - - my $query = - "SELECT ACL.id " . - "FROM ACL, Groups, Principals, CachedGroupMembers WHERE " . - - # Only find superuser or rights with the name $right - "(ACL.RightName = 'SuperUser' OR ACL.RightName = '$right') " - - # Never find disabled things - . "AND Principals.Disabled = 0 " - . "AND CachedGroupMembers.Disabled = 0 " - - # We always grant rights to Groups - . "AND Principals.id = Groups.id " - . "AND Principals.PrincipalType = 'Group' " - - # See if the principal is a member of the group recursively or _is the rightholder_ - # never find recursively disabled group members - # also, check to see if the right is being granted _directly_ to this principal, - # as is the case when we want to look up group rights - . "AND Principals.id = CachedGroupMembers.GroupId " - . "AND CachedGroupMembers.MemberId = ". $self->Id ." " - . "AND ACL.PrincipalType = Groups.Type "; - - my (@object_clauses); - foreach my $obj ( @{ $args{'EquivObjects'} } ) { - my $type = ref($obj)? ref($obj): $obj; - my $id; - $id = $obj->id if ref($obj) && UNIVERSAL::can($obj, 'id') && $obj->id; - - my $object_clause = "ACL.ObjectType = '$type'"; - $object_clause .= " AND ACL.ObjectId = $id" if $id; - push @object_clauses, "($object_clause)"; - } - # find ACLs that are related to our objects only - $query .= " AND (". join( ' OR ', @object_clauses ) .")"; - - # because of mysql bug in versions up to 5.0.45 we do one query per object - # each query should be faster on any DB as it uses indexes more effective - foreach my $obj ( @{ $args{'EquivObjects'} } ) { - my $type = ref($obj)? ref($obj): $obj; - my $id; - $id = $obj->id if ref($obj) && UNIVERSAL::can($obj, 'id') && $obj->id; - - my $tmp = $query; - $tmp .= " AND Groups.Domain = '$type-Role'"; - # XXX: Groups.Instance is VARCHAR in DB, we should quote value - # if we want mysql 4.0 use indexes here. we MUST convert that - # field to integer and drop this quotes. - $tmp .= " AND Groups.Instance = '$id'" if $id; - - $self->_Handle->ApplyLimits( \$tmp, 1 ); - my ($hit) = $self->_Handle->FetchResult( $tmp ); - return (1) if $hit; - } - - return 0; -} - -# }}} - -# }}} - -# {{{ ACL caching - - -# {{{ InvalidateACLCache - -=head2 InvalidateACLCache - -Cleans out and reinitializes the user rights cache - -=cut - -sub InvalidateACLCache { - $_ACL_CACHE = Cache::Simple::TimedExpiry->new(); - $_ACL_CACHE->expire_after($RT::ACLCacheLifetime||60); - -} - -# }}} - -# }}} - - -# {{{ _GetPrincipalTypeForACL - -=head2 _GetPrincipalTypeForACL - -Gets the principal type. if it's a user, it's a user. if it's a role group and it has a Type, -return that. if it has no type, return group. - -=cut - -sub _GetPrincipalTypeForACL { - my $self = shift; - my $type; - if ($self->PrincipalType eq 'Group' && $self->Object->Domain =~ /Role$/) { - $type = $self->Object->Type; - } - else { - $type = $self->PrincipalType; - } - - return($type); -} - -# }}} - -# {{{ _ReferenceId - -=head2 _ReferenceId - -Returns a list uniquely representing an object or normal scalar. - -For scalars, its string value is returned; for objects that has an -id() method, its class name and Id are returned as a string separated by a "-". - -=cut - -sub _ReferenceId { - my $scalar = shift; - - # just return the value for non-objects - return $scalar unless UNIVERSAL::can($scalar, 'id'); - - return ref($scalar) unless $scalar->id; - - # an object -- return the class and id - return(ref($scalar)."-". $scalar->id); -} - -# }}} - -1; diff --git a/rt/lib/RT/Principals.pm b/rt/lib/RT/Principals.pm deleted file mode 100644 index 4c87cc986..000000000 --- a/rt/lib/RT/Principals.pm +++ /dev/null @@ -1,139 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::Principals -- Class Description - -=head1 SYNOPSIS - - use RT::Principals - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::Principals; - -use RT::SearchBuilder; -use RT::Principal; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'Principals'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=head2 NewItem - -Returns an empty new RT::Principal item - -=cut - -sub NewItem { - my $self = shift; - return(RT::Principal->new($self->CurrentUser)); -} - - eval "require RT::Principals_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Principals_Overlay.pm}) { - die $@; - }; - - eval "require RT::Principals_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Principals_Vendor.pm}) { - die $@; - }; - - eval "require RT::Principals_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Principals_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -Each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Principals_Overlay, RT::Principals_Vendor, RT::Principals_Local - -=cut - - -1; diff --git a/rt/lib/RT/Principals_Overlay.pm b/rt/lib/RT/Principals_Overlay.pm deleted file mode 100644 index 3f4bfee7d..000000000 --- a/rt/lib/RT/Principals_Overlay.pm +++ /dev/null @@ -1,79 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Principals - a collection of RT::Principal objects - -=head1 SYNOPSIS - - use RT::Principals; - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::Principals); - -=end testing - -=cut - - -package RT::Principals; - -use strict; -no warnings qw(redefine); - - - - -1; diff --git a/rt/lib/RT/Queue.pm b/rt/lib/RT/Queue.pm deleted file mode 100755 index b362c9f0d..000000000 --- a/rt/lib/RT/Queue.pm +++ /dev/null @@ -1,371 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::Queue - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::Queue; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('Queues'); - $self->SUPER::_Init(@_); -} - - - - - -=item Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(200) 'Name'. - varchar(255) 'Description'. - varchar(120) 'CorrespondAddress'. - varchar(120) 'CommentAddress'. - int(11) 'InitialPriority'. - int(11) 'FinalPriority'. - int(11) 'DefaultDueIn'. - smallint(6) 'Disabled'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Name => '', - Description => '', - CorrespondAddress => '', - CommentAddress => '', - InitialPriority => '0', - FinalPriority => '0', - DefaultDueIn => '0', - Disabled => '0', - - @_); - $self->SUPER::Create( - Name => $args{'Name'}, - Description => $args{'Description'}, - CorrespondAddress => $args{'CorrespondAddress'}, - CommentAddress => $args{'CommentAddress'}, - InitialPriority => $args{'InitialPriority'}, - FinalPriority => $args{'FinalPriority'}, - DefaultDueIn => $args{'DefaultDueIn'}, - Disabled => $args{'Disabled'}, -); - -} - - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item Name - -Returns the current value of Name. -(In the database, Name is stored as varchar(200).) - - - -=item SetName VALUE - - -Set Name to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Name will be stored as a varchar(200).) - - -=cut - - -=item Description - -Returns the current value of Description. -(In the database, Description is stored as varchar(255).) - - - -=item SetDescription VALUE - - -Set Description to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Description will be stored as a varchar(255).) - - -=cut - - -=item CorrespondAddress - -Returns the current value of CorrespondAddress. -(In the database, CorrespondAddress is stored as varchar(120).) - - - -=item SetCorrespondAddress VALUE - - -Set CorrespondAddress to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CorrespondAddress will be stored as a varchar(120).) - - -=cut - - -=item CommentAddress - -Returns the current value of CommentAddress. -(In the database, CommentAddress is stored as varchar(120).) - - - -=item SetCommentAddress VALUE - - -Set CommentAddress to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CommentAddress will be stored as a varchar(120).) - - -=cut - - -=item InitialPriority - -Returns the current value of InitialPriority. -(In the database, InitialPriority is stored as int(11).) - - - -=item SetInitialPriority VALUE - - -Set InitialPriority to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, InitialPriority will be stored as a int(11).) - - -=cut - - -=item FinalPriority - -Returns the current value of FinalPriority. -(In the database, FinalPriority is stored as int(11).) - - - -=item SetFinalPriority VALUE - - -Set FinalPriority to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, FinalPriority will be stored as a int(11).) - - -=cut - - -=item DefaultDueIn - -Returns the current value of DefaultDueIn. -(In the database, DefaultDueIn is stored as int(11).) - - - -=item SetDefaultDueIn VALUE - - -Set DefaultDueIn to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, DefaultDueIn will be stored as a int(11).) - - -=cut - - -=item Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=item Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - -=item LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=item LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - -=item Disabled - -Returns the current value of Disabled. -(In the database, Disabled is stored as smallint(6).) - - - -=item SetDisabled VALUE - - -Set Disabled to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Disabled will be stored as a smallint(6).) - - -=cut - - - -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, - Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - CorrespondAddress => - {read => 1, write => 1, type => 'varchar(120)', default => ''}, - CommentAddress => - {read => 1, write => 1, type => 'varchar(120)', default => ''}, - InitialPriority => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - FinalPriority => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - DefaultDueIn => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, - Disabled => - {read => 1, write => 1, type => 'smallint(6)', default => '0'}, - - } -}; - - - eval "require RT::Queue_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Queue_Overlay.pm}) { - die $@; - }; - - eval "require RT::Queue_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Queue_Vendor.pm}) { - die $@; - }; - - eval "require RT::Queue_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Queue_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Queue_Overlay, RT::Queue_Vendor, RT::Queue_Local - -=cut - - -1; diff --git a/rt/lib/RT/Queue_Overlay.pm b/rt/lib/RT/Queue_Overlay.pm deleted file mode 100644 index c81cb1f84..000000000 --- a/rt/lib/RT/Queue_Overlay.pm +++ /dev/null @@ -1,1137 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Queue - an RT Queue object - -=head1 SYNOPSIS - - use RT::Queue; - -=head1 DESCRIPTION - - -=head1 METHODS - -=begin testing - -use RT::Queue; - -=end testing - -=cut - - -package RT::Queue; - -use strict; -no warnings qw(redefine); - -use vars qw(@DEFAULT_ACTIVE_STATUS @DEFAULT_INACTIVE_STATUS $RIGHTS); - -use RT::Groups; -use RT::ACL; -use RT::Interface::Email; - -@DEFAULT_ACTIVE_STATUS = qw(new open stalled); -@DEFAULT_INACTIVE_STATUS = qw(resolved rejected deleted); - -# $self->loc('new'); # For the string extractor to get a string to localize -# $self->loc('open'); # For the string extractor to get a string to localize -# $self->loc('stalled'); # For the string extractor to get a string to localize -# $self->loc('resolved'); # For the string extractor to get a string to localize -# $self->loc('rejected'); # For the string extractor to get a string to localize -# $self->loc('deleted'); # For the string extractor to get a string to localize - - -$RIGHTS = { - SeeQueue => 'Can this principal see this queue', # loc_pair - AdminQueue => 'Create, delete and modify queues', # loc_pair - ShowACL => 'Display Access Control List', # loc_pair - ModifyACL => 'Modify Access Control List', # loc_pair - ModifyQueueWatchers => 'Modify the queue watchers', # loc_pair - AssignCustomFields => 'Assign and remove custom fields', # loc_pair - ModifyTemplate => 'Modify Scrip templates for this queue', # loc_pair - ShowTemplate => 'Display Scrip templates for this queue', # loc_pair - - ModifyScrips => 'Modify Scrips for this queue', # loc_pair - ShowScrips => 'Display Scrips for this queue', # loc_pair - - ShowTicket => 'See ticket summaries', # loc_pair - ShowTicketComments => 'See ticket private commentary', # loc_pair - ShowOutgoingEmail => 'See exact outgoing email messages and their recipeients', # loc_pair - - Watch => 'Sign up as a ticket Requestor or ticket or queue Cc', # loc_pair - WatchAsAdminCc => 'Sign up as a ticket or queue AdminCc', # loc_pair - CreateTicket => 'Create tickets in this queue', # loc_pair - ReplyToTicket => 'Reply to tickets', # loc_pair - CommentOnTicket => 'Comment on tickets', # loc_pair - OwnTicket => 'Own tickets', # loc_pair - ModifyTicket => 'Modify tickets', # loc_pair - DeleteTicket => 'Delete tickets', # loc_pair - TakeTicket => 'Take tickets', # loc_pair - StealTicket => 'Steal tickets', # loc_pair - -}; - -# Tell RT::ACE that this sort of object can get acls granted -$RT::ACE::OBJECT_TYPES{'RT::Queue'} = 1; - -# TODO: This should be refactored out into an RT::ACLedObject or something -# stuff the rights into a hash of rights that can exist. - -foreach my $right ( keys %{$RIGHTS} ) { - $RT::ACE::LOWERCASERIGHTNAMES{ lc $right } = $right; -} - - -sub AddLink { - my $self = shift; - my %args = ( Target => '', - Base => '', - Type => '', - Silent => undef, - @_ ); - - unless ( $self->CurrentUserHasRight('ModifyQueue') ) { - return ( 0, $self->loc("Permission Denied") ); - } - - return $self->SUPER::_AddLink(%args); -} - -sub DeleteLink { - my $self = shift; - my %args = ( - Base => undef, - Target => undef, - Type => undef, - @_ - ); - - #check acls - unless ( $self->CurrentUserHasRight('ModifyQueue') ) { - $RT::Logger->debug("No permission to delete links\n"); - return ( 0, $self->loc('Permission Denied')) - } - - return $self->SUPER::_DeleteLink(%args); -} - -=head2 AvailableRights - -Returns a hash of available rights for this object. The keys are the right names and the values are a description of what the rights do - -=cut - -sub AvailableRights { - my $self = shift; - return($RIGHTS); -} - -# {{{ ActiveStatusArray - -=head2 ActiveStatusArray - -Returns an array of all ActiveStatuses for this queue - -=cut - -sub ActiveStatusArray { - my $self = shift; - if (@RT::ActiveStatus) { - return (@RT::ActiveStatus) - } else { - $RT::Logger->warning("RT::ActiveStatus undefined, falling back to deprecated defaults"); - return (@DEFAULT_ACTIVE_STATUS); - } -} - -# }}} - -# {{{ InactiveStatusArray - -=head2 InactiveStatusArray - -Returns an array of all InactiveStatuses for this queue - -=cut - -sub InactiveStatusArray { - my $self = shift; - if (@RT::InactiveStatus) { - return (@RT::InactiveStatus) - } else { - $RT::Logger->warning("RT::InactiveStatus undefined, falling back to deprecated defaults"); - return (@DEFAULT_INACTIVE_STATUS); - } -} - -# }}} - -# {{{ StatusArray - -=head2 StatusArray - -Returns an array of all statuses for this queue - -=cut - -sub StatusArray { - my $self = shift; - return ($self->ActiveStatusArray(), $self->InactiveStatusArray()); -} - -# }}} - -# {{{ IsValidStatus - -=head2 IsValidStatus VALUE - -Returns true if VALUE is a valid status. Otherwise, returns 0. - -=begin testing - -my $q = RT::Queue->new($RT::SystemUser); -ok($q->IsValidStatus('new')== 1, 'New is a valid status'); -ok($q->IsValidStatus('f00')== 0, 'f00 is not a valid status'); - -=end testing - -=cut - -sub IsValidStatus { - my $self = shift; - my $value = shift; - - my $retval = grep ( $_ eq $value, $self->StatusArray ); - return ($retval); - -} - -# }}} - -# {{{ IsActiveStatus - -=head2 IsActiveStatus VALUE - -Returns true if VALUE is a Active status. Otherwise, returns 0 - -=begin testing - -my $q = RT::Queue->new($RT::SystemUser); -ok($q->IsActiveStatus('new')== 1, 'New is a Active status'); -ok($q->IsActiveStatus('rejected')== 0, 'Rejected is an inactive status'); -ok($q->IsActiveStatus('f00')== 0, 'f00 is not a Active status'); - -=end testing - -=cut - -sub IsActiveStatus { - my $self = shift; - my $value = shift; - - my $retval = grep ( $_ eq $value, $self->ActiveStatusArray ); - return ($retval); - -} - -# }}} - -# {{{ IsInactiveStatus - -=head2 IsInactiveStatus VALUE - -Returns true if VALUE is a Inactive status. Otherwise, returns 0 - -=begin testing - -my $q = RT::Queue->new($RT::SystemUser); -ok($q->IsInactiveStatus('new')== 0, 'New is a Active status'); -ok($q->IsInactiveStatus('rejected')== 1, 'rejeected is an Inactive status'); -ok($q->IsInactiveStatus('f00')== 0, 'f00 is not a Active status'); - -=end testing - -=cut - -sub IsInactiveStatus { - my $self = shift; - my $value = shift; - - my $retval = grep ( $_ eq $value, $self->InactiveStatusArray ); - return ($retval); - -} - -# }}} - - -# {{{ sub Create - - - - -=head2 Create(ARGS) - -Arguments: ARGS is a hash of named parameters. Valid parameters are: - - Name (required) - Description - CorrespondAddress - CommentAddress - InitialPriority - FinalPriority - DefaultDueIn - -If you pass the ACL check, it creates the queue and returns its queue id. - -=begin testing - -my $queue = RT::Queue->new($RT::SystemUser); -my ($id, $val) = $queue->Create( Name => 'Test1'); -ok($id, $val); - -($id, $val) = $queue->Create( Name => '66'); -ok(!$id, $val); - -=end testing - -=cut - -sub Create { - my $self = shift; - my %args = ( - Name => undef, - CorrespondAddress => '', - Description => '', - CommentAddress => '', - InitialPriority => "0", - FinalPriority => "0", - DefaultDueIn => "0", - @_ - ); - - unless ( $self->CurrentUser->HasRight(Right => 'AdminQueue', Object => $RT::System) ) - { #Check them ACLs - return ( 0, $self->loc("No permission to create queues") ); - } - - unless ( $self->ValidateName( $args{'Name'} ) ) { - return ( 0, $self->loc('Queue already exists') ); - } - - #TODO better input validation - $RT::Handle->BeginTransaction(); - - my $id = $self->SUPER::Create(%args); - unless ($id) { - $RT::Handle->Rollback(); - return ( 0, $self->loc('Queue could not be created') ); - } - - my $create_ret = $self->_CreateQueueGroups(); - unless ($create_ret) { - $RT::Handle->Rollback(); - return ( 0, $self->loc('Queue could not be created') ); - } - - $RT::Handle->Commit(); - return ( $id, $self->loc("Queue created") ); -} - -# }}} - -# {{{ sub Delete - -sub Delete { - my $self = shift; - return ( 0, - $self->loc('Deleting this object would break referential integrity') ); -} - -# }}} - -# {{{ sub SetDisabled - -=head2 SetDisabled - -Takes a boolean. -1 will cause this queue to no longer be available for tickets. -0 will re-enable this queue. - -=cut - -# }}} - -# {{{ sub Load - -=head2 Load - -Takes either a numerical id or a textual Name and loads the specified queue. - -=cut - -sub Load { - my $self = shift; - - my $identifier = shift; - if ( !$identifier ) { - return (undef); - } - - if ( $identifier =~ /^(\d+)$/ ) { - $self->SUPER::LoadById($identifier); - } - else { - $self->LoadByCols( Name => $identifier ); - } - - return ( $self->Id ); - -} - -# }}} - -# {{{ sub ValidateName - -=head2 ValidateName NAME - -Takes a queue name. Returns true if it's an ok name for -a new queue. Returns undef if there's already a queue by that name. - -=cut - -sub ValidateName { - my $self = shift; - my $name = shift; - - my $tempqueue = new RT::Queue($RT::SystemUser); - $tempqueue->Load($name); - - #If this queue exists, return undef - if ( $tempqueue->Name() && $tempqueue->id != $self->id) { - return (undef); - } - - #If the queue doesn't exist, return 1 - else { - return ($self->SUPER::ValidateName($name)); - } - -} - -# }}} - -# {{{ sub Templates - -=head2 Templates - -Returns an RT::Templates object of all of this queue's templates. - -=cut - -sub Templates { - my $self = shift; - - my $templates = RT::Templates->new( $self->CurrentUser ); - - if ( $self->CurrentUserHasRight('ShowTemplate') ) { - $templates->LimitToQueue( $self->id ); - } - - return ($templates); -} - -# }}} - -# {{{ Dealing with custom fields - -# {{{ CustomField - -=head2 CustomField NAME - -Load the queue-specific custom field named NAME - -=cut - -sub CustomField { - my $self = shift; - my $name = shift; - my $cf = RT::CustomField->new($self->CurrentUser); - $cf->LoadByNameAndQueue(Name => $name, Queue => $self->Id); - return ($cf); -} - - -# {{{ CustomFields - -=head2 CustomFields - -Returns an RT::CustomFields object containing all global custom fields, as well as those tied to this queue - -=cut - -# XXX TODO - this should become TicketCustomFields - -sub CustomFields { - my $self = shift; - warn "Queue->CustomFields is deprecated, use Queue->TicketCustomFields instead at (". join(":",caller).")"; - return $self->TicketCustomFields(@_); -} - -sub TicketCustomFields { - my $self = shift; - - my $cfs = RT::CustomFields->new( $self->CurrentUser ); - if ( $self->CurrentUserHasRight('SeeQueue') ) { - $cfs->LimitToGlobalOrObjectId( $self->Id ); - $cfs->LimitToLookupType( 'RT::Queue-RT::Ticket' ); - } - return ($cfs); -} - -sub TicketTransactionCustomFields { - my $self = shift; - - my $cfs = RT::CustomFields->new( $self->CurrentUser ); - if ( $self->CurrentUserHasRight('SeeQueue') ) { - $cfs->LimitToGlobalOrObjectId( $self->Id ); - $cfs->LimitToLookupType( 'RT::Queue-RT::Ticket-RT::Transaction' ); - } - return ($cfs); -} - -# }}} - -# }}} - - -# {{{ Routines dealing with watchers. - -# {{{ _CreateQueueGroups - -=head2 _CreateQueueGroups - -Create the ticket groups and links for this ticket. -This routine expects to be called from Ticket->Create _inside of a transaction_ - -It will create four groups for this ticket: Requestor, Cc, AdminCc and Owner. - -It will return true on success and undef on failure. - -=begin testing - -my $Queue = RT::Queue->new($RT::SystemUser); my ($id, $msg) = $Queue->Create(Name => "Foo", - ); -ok ($id, "Foo $id was created"); -ok(my $group = RT::Group->new($RT::SystemUser)); -ok($group->LoadQueueRoleGroup(Queue => $id, Type=> 'Cc')); -ok ($group->Id, "Found the requestors object for this Queue"); - - -ok ((my $add_id, $add_msg) = $Queue->AddWatcher(Type => 'Cc', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor"); -ok ($add_id, "Add succeeded: ($add_msg)"); -ok(my $bob = RT::User->new($RT::SystemUser), "Creating a bob rt::user"); -$bob->LoadByEmail('bob@fsck.com'); -ok($bob->Id, "Found the bob rt user"); -ok ($Queue->IsWatcher(Type => 'Cc', PrincipalId => $bob->PrincipalId), "The Queue actually has bob at fsck.com as a requestor");; -ok ((my $add_id, $add_msg) = $Queue->DeleteWatcher(Type =>'Cc', Email => 'bob@fsck.com'), "Added bob at fsck.com as a requestor"); -ok (!$Queue->IsWatcher(Type => 'Cc', Principal => $bob->PrincipalId), "The Queue no longer has bob at fsck.com as a requestor");; - - -$group = RT::Group->new($RT::SystemUser); -ok($group->LoadQueueRoleGroup(Queue => $id, Type=> 'Cc')); -ok ($group->Id, "Found the cc object for this Queue"); -$group = RT::Group->new($RT::SystemUser); -ok($group->LoadQueueRoleGroup(Queue => $id, Type=> 'AdminCc')); -ok ($group->Id, "Found the AdminCc object for this Queue"); - -=end testing - -=cut - - -sub _CreateQueueGroups { - my $self = shift; - - my @types = qw(Cc AdminCc Requestor Owner); - - foreach my $type (@types) { - my $type_obj = RT::Group->new($self->CurrentUser); - my ($id, $msg) = $type_obj->CreateRoleGroup(Instance => $self->Id, - Type => $type, - Domain => 'RT::Queue-Role'); - unless ($id) { - $RT::Logger->error("Couldn't create a Queue group of type '$type' for ticket ". - $self->Id.": ".$msg); - return(undef); - } - } - return(1); - -} - - -# }}} - -# {{{ sub AddWatcher - -=head2 AddWatcher - -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 -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. - -Returns a tuple of (status/id, message). - -=cut - -sub AddWatcher { - my $self = shift; - my %args = ( - Type => undef, - PrincipalId => undef, - Email => undef, - @_ - ); - - # {{{ Check ACLS - #If the watcher we're trying to add is for the current user - if ( $self->CurrentUser->PrincipalId eq $args{'PrincipalId'}) { - # If it's an AdminCc and they don't have - # 'WatchAsAdminCc' or 'ModifyTicket', bail - if ( $args{'Type'} eq 'AdminCc' ) { - unless ( $self->CurrentUserHasRight('ModifyQueueWatchers') - or $self->CurrentUserHasRight('WatchAsAdminCc') ) { - return ( 0, $self->loc('Permission Denied')) - } - } - - # If it's a Requestor or Cc and they don't have - # 'Watch' or 'ModifyTicket', bail - elsif ( ( $args{'Type'} eq 'Cc' ) or ( $args{'Type'} eq 'Requestor' ) ) { - - unless ( $self->CurrentUserHasRight('ModifyQueueWatchers') - or $self->CurrentUserHasRight('Watch') ) { - return ( 0, $self->loc('Permission Denied')) - } - } - else { - $RT::Logger->warning( "$self -> AddWatcher got passed a bogus type"); - return ( 0, $self->loc('Error in parameters to Queue->AddWatcher') ); - } - } - - # If the watcher isn't the current user - # and the current user doesn't have 'ModifyQueueWatcher' - # bail - else { - unless ( $self->CurrentUserHasRight('ModifyQueueWatchers') ) { - return ( 0, $self->loc("Permission Denied") ); - } - } - - # }}} - - return ( $self->_AddWatcher(%args) ); -} - -#This contains the meat of AddWatcher. but can be called from a routine like -# Create, which doesn't need the additional acl check -sub _AddWatcher { - my $self = shift; - my %args = ( - Type => undef, - Silent => undef, - PrincipalId => undef, - Email => undef, - @_ - ); - - - my $principal = RT::Principal->new($self->CurrentUser); - if ($args{'PrincipalId'}) { - $principal->Load($args{'PrincipalId'}); - } - elsif ($args{'Email'}) { - - my $user = RT::User->new($self->CurrentUser); - $user->LoadByEmail($args{'Email'}); - - unless ($user->Id) { - $user->Load($args{'Email'}); - } - if ($user->Id) { # If the user exists - $principal->Load($user->PrincipalId); - } else { - - # if the user doesn't exist, we need to create a new user - my $new_user = RT::User->new($RT::SystemUser); - - my ( $Address, $Name ) = - RT::Interface::Email::ParseAddressFromHeader($args{'Email'}); - - my ( $Val, $Message ) = $new_user->Create( - Name => $Address, - EmailAddress => $Address, - RealName => $Name, - Privileged => 0, - Comments => 'Autocreated when added as a watcher'); - unless ($Val) { - $RT::Logger->error("Failed to create user ".$args{'Email'} .": " .$Message); - # Deal with the race condition of two account creations at once - $new_user->LoadByEmail($args{'Email'}); - } - $principal->Load($new_user->PrincipalId); - } - } - # If we can't find this watcher, we need to bail. - unless ($principal->Id) { - return(0, $self->loc("Could not find or create that user")); - } - - - my $group = RT::Group->new($self->CurrentUser); - $group->LoadQueueRoleGroup(Type => $args{'Type'}, Queue => $self->Id); - unless ($group->id) { - return(0,$self->loc("Group not found")); - } - - if ( $group->HasMember( $principal)) { - - return ( 0, $self->loc('That principal is already a [_1] for this queue', $args{'Type'}) ); - } - - - my ($m_id, $m_msg) = $group->_AddMember(PrincipalId => $principal->Id); - unless ($m_id) { - $RT::Logger->error("Failed to add ".$principal->Id." as a member of group ".$group->Id."\n".$m_msg); - - return ( 0, $self->loc('Could not make that principal a [_1] for this queue', $args{'Type'}) ); - } - return ( 1, $self->loc('Added principal as a [_1] for this queue', $args{'Type'}) ); -} - -# }}} - -# {{{ sub DeleteWatcher - -=head2 DeleteWatcher { Type => TYPE, PrincipalId => PRINCIPAL_ID, Email => EMAIL_ADDRESS } - - -Deletes a queue watcher. Takes two arguments: - -Type (one of Requestor,Cc,AdminCc) - -and one of - -PrincipalId (an RT::Principal Id of the watcher you want to remove) - OR -Email (the email address of an existing wathcer) - - -=cut - - -sub DeleteWatcher { - my $self = shift; - - my %args = ( Type => undef, - PrincipalId => undef, - @_ ); - - unless ($args{'PrincipalId'} ) { - return(0, $self->loc("No principal specified")); - } - my $principal = RT::Principal->new($self->CurrentUser); - $principal->Load($args{'PrincipalId'}); - - # If we can't find this watcher, we need to bail. - unless ($principal->Id) { - return(0, $self->loc("Could not find that principal")); - } - - my $group = RT::Group->new($self->CurrentUser); - $group->LoadQueueRoleGroup(Type => $args{'Type'}, Queue => $self->Id); - unless ($group->id) { - return(0,$self->loc("Group not found")); - } - - # {{{ Check ACLS - #If the watcher we're trying to add is for the current user - if ( $self->CurrentUser->PrincipalId eq $args{'PrincipalId'}) { - # If it's an AdminCc and they don't have - # 'WatchAsAdminCc' or 'ModifyQueue', bail - if ( $args{'Type'} eq 'AdminCc' ) { - unless ( $self->CurrentUserHasRight('ModifyQueueWatchers') - or $self->CurrentUserHasRight('WatchAsAdminCc') ) { - return ( 0, $self->loc('Permission Denied')) - } - } - - # If it's a Requestor or Cc and they don't have - # 'Watch' or 'ModifyQueue', bail - elsif ( ( $args{'Type'} eq 'Cc' ) or ( $args{'Type'} eq 'Requestor' ) ) { - unless ( $self->CurrentUserHasRight('ModifyQueueWatchers') - or $self->CurrentUserHasRight('Watch') ) { - return ( 0, $self->loc('Permission Denied')) - } - } - else { - $RT::Logger->warning( "$self -> DeleteWatcher got passed a bogus type"); - return ( 0, $self->loc('Error in parameters to Queue->DeleteWatcher') ); - } - } - - # If the watcher isn't the current user - # and the current user doesn't have 'ModifyQueueWathcers' bail - else { - unless ( $self->CurrentUserHasRight('ModifyQueueWatchers') ) { - return ( 0, $self->loc("Permission Denied") ); - } - } - - # }}} - - - # see if this user is already a watcher. - - unless ( $group->HasMember($principal)) { - return ( 0, - $self->loc('That principal is not a [_1] for this queue', $args{'Type'}) ); - } - - my ($m_id, $m_msg) = $group->_DeleteMember($principal->Id); - unless ($m_id) { - $RT::Logger->error("Failed to delete ".$principal->Id. - " as a member of group ".$group->Id."\n".$m_msg); - - return ( 0, $self->loc('Could not remove that principal as a [_1] for this queue', $args{'Type'}) ); - } - - return ( 1, $self->loc("[_1] is no longer a [_2] for this queue.", $principal->Object->Name, $args{'Type'} )); -} - -# }}} - -# {{{ AdminCcAddresses - -=head2 AdminCcAddresses - -returns String: All queue AdminCc email addresses as a string - -=cut - -sub AdminCcAddresses { - my $self = shift; - - unless ( $self->CurrentUserHasRight('SeeQueue') ) { - return undef; - } - - return ( $self->AdminCc->MemberEmailAddressesAsString ) - -} - -# }}} - -# {{{ CcAddresses - -=head2 CcAddresses - -returns String: All queue Ccs as a string of email addresses - -=cut - -sub CcAddresses { - my $self = shift; - - unless ( $self->CurrentUserHasRight('SeeQueue') ) { - return undef; - } - - return ( $self->Cc->MemberEmailAddressesAsString); - -} -# }}} - - -# {{{ sub Cc - -=head2 Cc - -Takes nothing. -Returns an RT::Group object which contains this Queue's Ccs. -If the user doesn't have "ShowQueue" permission, returns an empty group - -=cut - -sub Cc { - my $self = shift; - - my $group = RT::Group->new($self->CurrentUser); - if ( $self->CurrentUserHasRight('SeeQueue') ) { - $group->LoadQueueRoleGroup(Type => 'Cc', Queue => $self->Id); - } - return ($group); - -} - -# }}} - -# {{{ sub AdminCc - -=head2 AdminCc - -Takes nothing. -Returns an RT::Group object which contains this Queue's AdminCcs. -If the user doesn't have "ShowQueue" permission, returns an empty group - -=cut - -sub AdminCc { - my $self = shift; - - my $group = RT::Group->new($self->CurrentUser); - if ( $self->CurrentUserHasRight('SeeQueue') ) { - $group->LoadQueueRoleGroup(Type => 'AdminCc', Queue => $self->Id); - } - return ($group); - -} - -# }}} - -# {{{ IsWatcher, IsCc, IsAdminCc - -# {{{ sub IsWatcher -# a generic routine to be called by IsRequestor, IsCc and IsAdminCc - -=head2 IsWatcher { Type => TYPE, PrincipalId => PRINCIPAL_ID } - -Takes a param hash with the attributes Type and PrincipalId - -Type is one of Requestor, Cc, AdminCc and Owner - -PrincipalId is an RT::Principal id - -Returns true if that principal is a member of the group Type for this queue - - -=cut - -sub IsWatcher { - my $self = shift; - - my %args = ( Type => 'Cc', - PrincipalId => undef, - @_ - ); - - # Load the relevant group. - my $group = RT::Group->new($self->CurrentUser); - $group->LoadQueueRoleGroup(Type => $args{'Type'}, Queue => $self->id); - # Ask if it has the member in question - - my $principal = RT::Principal->new($self->CurrentUser); - $principal->Load($args{'PrincipalId'}); - unless ($principal->Id) { - return (undef); - } - - return ($group->HasMemberRecursively($principal)); -} - -# }}} - - -# {{{ sub IsCc - -=head2 IsCc PRINCIPAL_ID - -Takes an RT::Principal id. -Returns true if the principal is a requestor of the current queue. - - -=cut - -sub IsCc { - my $self = shift; - my $cc = shift; - - return ( $self->IsWatcher( Type => 'Cc', PrincipalId => $cc ) ); - -} - -# }}} - -# {{{ sub IsAdminCc - -=head2 IsAdminCc PRINCIPAL_ID - -Takes an RT::Principal id. -Returns true if the principal is a requestor of the current queue. - -=cut - -sub IsAdminCc { - my $self = shift; - my $person = shift; - - return ( $self->IsWatcher( Type => 'AdminCc', PrincipalId => $person ) ); - -} - -# }}} - - -# }}} - - - - - -# }}} - -# {{{ ACCESS CONTROL - -# {{{ sub _Set -sub _Set { - my $self = shift; - - unless ( $self->CurrentUserHasRight('AdminQueue') ) { - return ( 0, $self->loc('Permission Denied') ); - } - return ( $self->SUPER::_Set(@_) ); -} - -# }}} - -# {{{ sub _Value - -sub _Value { - my $self = shift; - - unless ( $self->CurrentUserHasRight('SeeQueue') ) { - return (undef); - } - - return ( $self->__Value(@_) ); -} - -# }}} - -# {{{ sub CurrentUserHasRight - -=head2 CurrentUserHasRight - -Takes one argument. A textual string with the name of the right we want to check. -Returns true if the current user has that right for this queue. -Returns undef otherwise. - -=cut - -sub CurrentUserHasRight { - my $self = shift; - my $right = shift; - - return ( - $self->HasRight( - Principal => $self->CurrentUser, - Right => "$right" - ) - ); - -} - -# }}} - -# {{{ sub HasRight - -=head2 HasRight - -Takes a param hash with the fields 'Right' and 'Principal'. -Principal defaults to the current user. -Returns true if the principal has that right for this queue. -Returns undef otherwise. - -=cut - -# TAKES: Right and optional "Principal" which defaults to the current user -sub HasRight { - my $self = shift; - my %args = ( - Right => undef, - Principal => $self->CurrentUser, - @_ - ); - unless ( defined $args{'Principal'} ) { - $RT::Logger->debug("Principal undefined in Queue::HasRight"); - - } - return ( - $args{'Principal'}->HasRight( - Object => $self->Id ? $self : $RT::System, - Right => $args{'Right'} - ) - ); -} - -# }}} - -# }}} - -1; diff --git a/rt/lib/RT/Queues.pm b/rt/lib/RT/Queues.pm deleted file mode 100755 index 60aec9086..000000000 --- a/rt/lib/RT/Queues.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::Queues -- Class Description - -=head1 SYNOPSIS - - use RT::Queues - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::Queues; - -use RT::SearchBuilder; -use RT::Queue; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'Queues'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=item NewItem - -Returns an empty new RT::Queue item - -=cut - -sub NewItem { - my $self = shift; - return(RT::Queue->new($self->CurrentUser)); -} - - eval "require RT::Queues_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Queues_Overlay.pm}) { - die $@; - }; - - eval "require RT::Queues_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Queues_Vendor.pm}) { - die $@; - }; - - eval "require RT::Queues_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Queues_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Queues_Overlay, RT::Queues_Vendor, RT::Queues_Local - -=cut - - -1; diff --git a/rt/lib/RT/Queues_Overlay.pm b/rt/lib/RT/Queues_Overlay.pm deleted file mode 100644 index ffc1d78bb..000000000 --- a/rt/lib/RT/Queues_Overlay.pm +++ /dev/null @@ -1,144 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Queues - a collection of RT::Queue objects - -=head1 SYNOPSIS - - use RT::Queues; - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::Queues); - -=end testing - -=cut - - -package RT::Queues; - -use strict; -no warnings qw(redefine); - -# {{{ sub _Init -sub _Init { - my $self = shift; - $self->{'table'} = "Queues"; - $self->{'primary_key'} = "id"; - - # By default, order by name - $self->OrderBy( ALIAS => 'main', - FIELD => 'Name', - ORDER => 'ASC'); - - return ($self->SUPER::_Init(@_)); -} -# }}} - -# {{{ sub _DoSearch - -=head2 _DoSearch - - A subclass of DBIx::SearchBuilder::_DoSearch that makes sure that _Disabled rows never get seen unless -we're explicitly trying to see them. - -=cut - -sub _DoSearch { - my $self = shift; - - #unless we really want to find disabled rows, make sure we\'re only finding enabled ones. - unless($self->{'find_disabled_rows'}) { - $self->LimitToEnabled(); - } - - return($self->SUPER::_DoSearch(@_)); - -} - -# }}} - - -# {{{ sub Limit -sub Limit { - my $self = shift; - my %args = ( ENTRYAGGREGATOR => 'AND', - @_); - $self->SUPER::Limit(%args); -} -# }}} - -# {{{ sub AddRecord - -=head2 AddRecord - -Adds a record object to this collection if this user can see. -This is used for filtering objects for both Next and ItemsArrayRef. - -=cut - -sub AddRecord { - my $self = shift; - my $Queue = shift; - return unless $Queue->CurrentUserHasRight('SeeQueue'); - - push @{$self->{'items'}}, $Queue; - $self->{'rows'}++; -} -# }}} - -1; - diff --git a/rt/lib/RT/Record.pm b/rt/lib/RT/Record.pm deleted file mode 100755 index 6962221ea..000000000 --- a/rt/lib/RT/Record.pm +++ /dev/null @@ -1,455 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -=head1 NAME - - RT::Record - Base class for RT record objects - -=head1 SYNOPSIS - - -=head1 DESCRIPTION - - -=begin testing - -ok (require RT::Record); - -=end testing - -=head1 METHODS - -=cut - -package RT::Record; -use RT::Date; -use RT::User; - -use RT::Base; -use DBIx::SearchBuilder::Record::Cachable; - -use strict; -use vars qw/@ISA/; - -@ISA = qw(RT::Base); - -if ($RT::DontCacheSearchBuilderRecords ) { - push (@ISA, 'DBIx::SearchBuilder::Record'); -} else { - push (@ISA, 'DBIx::SearchBuilder::Record::Cachable'); - -} - -# {{{ sub _Init - -sub _Init { - my $self = shift; - $self->CurrentUser(@_); - -} - -# }}} - -# {{{ _PrimaryKeys - -=head2 _PrimaryKeys - -The primary keys for RT classes is 'id' - -=cut - -sub _PrimaryKeys { - my $self = shift; - return ( ['id'] ); -} - -# }}} - -# {{{ sub _Handle -sub _Handle { - my $self = shift; - return ($RT::Handle); -} - -# }}} - -# {{{ sub Create - -=item Create PARAMHASH - -Takes a PARAMHASH of Column -> Value pairs. -If any Column has a Validate$PARAMNAME subroutine defined and the -value provided doesn't pass validation, this routine returns -an error. - -If this object's table has any of the following atetributes defined as -'Auto', this routine will automatically fill in their values. - -=cut - -sub Create { - my $self = shift; - my %attribs = (@_); - foreach my $key ( keys %attribs ) { - my $method = "Validate$key"; - unless ( $self->$method( $attribs{$key} ) ) { - if (wantarray) { - return ( 0, $self->loc('Invalid value for [_1]', $key) ); - } - else { - return (0); - } - } - } - my $now = RT::Date->new( $self->CurrentUser ); - $now->Set( Format => 'unix', Value => time ); - $attribs{'Created'} = $now->ISO() if ( $self->_Accessible( 'Created', 'auto' ) && !$attribs{'Created'}); - - if ($self->_Accessible( 'Creator', 'auto' ) && !$attribs{'Creator'}) { - $attribs{'Creator'} = $self->CurrentUser->id || '0'; - } - $attribs{'LastUpdated'} = $now->ISO() - if ( $self->_Accessible( 'LastUpdated', 'auto' ) && !$attribs{'LastUpdated'}); - - $attribs{'LastUpdatedBy'} = $self->CurrentUser->id || '0' - if ( $self->_Accessible( 'LastUpdatedBy', 'auto' ) && !$attribs{'LastUpdatedBy'}); - - my $id = $self->SUPER::Create(%attribs); - if ( UNIVERSAL::isa( $id, 'Class::ReturnValue' ) ) { - if ( $id->errno ) { - if (wantarray) { - return ( 0, - $self->loc( "Internal Error: [_1]", $id->{error_message} ) ); - } - else { - return (0); - } - } - } - # If the object was created in the database, - # load it up now, so we're sure we get what the database - # has. Arguably, this should not be necessary, but there - # isn't much we can do about it. - - unless ($id) { - if (wantarray) { - return ( $id, $self->loc('Object could not be created') ); - } - else { - return ($id); - } - - } - - if (UNIVERSAL::isa('errno',$id)) { - exit(0); - warn "It's here!"; - return(undef); - } - - $self->Load($id) if ($id); - - - - if (wantarray) { - return ( $id, $self->loc('Object created') ); - } - else { - return ($id); - } - -} - -# }}} - -# {{{ sub LoadByCols - -=head2 LoadByCols - -Override DBIx::SearchBuilder::LoadByCols to do case-insensitive loads if the -DB is case sensitive - -=cut - -sub LoadByCols { - my $self = shift; - my %hash = (@_); - - # 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 { - $newhash{ "lower(" . $key . ")" } = lc( $hash{$key} ); - } - } - - # We've clobbered everything we care about. bash the old hash - # and replace it with the new hash - %hash = %newhash; - } - $self->SUPER::LoadByCols(%hash); -} - -# }}} - -# {{{ Datehandling - -# There is room for optimizations in most of those subs: - -# {{{ LastUpdatedObj - -sub LastUpdatedObj { - my $self = shift; - my $obj = new RT::Date( $self->CurrentUser ); - - $obj->Set( Format => 'sql', Value => $self->LastUpdated ); - return $obj; -} - -# }}} - -# {{{ CreatedObj - -sub CreatedObj { - my $self = shift; - my $obj = new RT::Date( $self->CurrentUser ); - - $obj->Set( Format => 'sql', Value => $self->Created ); - - return $obj; -} - -# }}} - -# {{{ AgeAsString -# -# TODO: This should be deprecated -# -sub AgeAsString { - my $self = shift; - return ( $self->CreatedObj->AgeAsString() ); -} - -# }}} - -# {{{ LastUpdatedAsString - -# TODO this should be deprecated - -sub LastUpdatedAsString { - my $self = shift; - if ( $self->LastUpdated ) { - return ( $self->LastUpdatedObj->AsString() ); - - } - else { - return "never"; - } -} - -# }}} - -# {{{ CreatedAsString -# -# TODO This should be deprecated -# -sub CreatedAsString { - my $self = shift; - return ( $self->CreatedObj->AsString() ); -} - -# }}} - -# {{{ LongSinceUpdateAsString -# -# TODO This should be deprecated -# -sub LongSinceUpdateAsString { - my $self = shift; - if ( $self->LastUpdated ) { - - return ( $self->LastUpdatedObj->AgeAsString() ); - - } - else { - return "never"; - } -} - -# }}} - -# }}} Datehandling - -# {{{ sub _Set -sub _Set { - my $self = shift; - - my %args = ( - Field => undef, - Value => undef, - IsSQL => undef, - @_ - ); - - #if the user is trying to modify the record - # TODO: document _why_ this code is here - - if ( ( !defined( $args{'Field'} ) ) || ( !defined( $args{'Value'} ) ) ) { - $args{'Value'} = 0; - } - - $self->_SetLastUpdated(); - my ( $val, $msg ) = $self->SUPER::_Set( - Field => $args{'Field'}, - Value => $args{'Value'}, - IsSQL => $args{'IsSQL'} - ); -} - -# }}} - -# {{{ sub _SetLastUpdated - -=head2 _SetLastUpdated - -This routine updates the LastUpdated and LastUpdatedBy columns of the row in question -It takes no options. Arguably, this is a bug - -=cut - -sub _SetLastUpdated { - my $self = shift; - use RT::Date; - my $now = new RT::Date( $self->CurrentUser ); - $now->SetToNow(); - - if ( $self->_Accessible( 'LastUpdated', 'auto' ) ) { - my ( $msg, $val ) = $self->__Set( - Field => 'LastUpdated', - Value => $now->ISO - ); - } - if ( $self->_Accessible( 'LastUpdatedBy', 'auto' ) ) { - my ( $msg, $val ) = $self->__Set( - Field => 'LastUpdatedBy', - Value => $self->CurrentUser->id - ); - } -} - -# }}} - -# {{{ sub CreatorObj - -=head2 CreatorObj - -Returns an RT::User object with the RT account of the creator of this row - -=cut - -sub CreatorObj { - my $self = shift; - unless ( exists $self->{'CreatorObj'} ) { - - $self->{'CreatorObj'} = RT::User->new( $self->CurrentUser ); - $self->{'CreatorObj'}->Load( $self->Creator ); - } - return ( $self->{'CreatorObj'} ); -} - -# }}} - -# {{{ sub LastUpdatedByObj - -=head2 LastUpdatedByObj - - Returns an RT::User object of the last user to touch this object - -=cut - -sub LastUpdatedByObj { - my $self = shift; - unless ( exists $self->{LastUpdatedByObj} ) { - $self->{'LastUpdatedByObj'} = RT::User->new( $self->CurrentUser ); - $self->{'LastUpdatedByObj'}->Load( $self->LastUpdatedBy ); - } - return $self->{'LastUpdatedByObj'}; -} - -# }}} - - -require Encode::compat if $] < 5.007001; -require Encode; - -sub __Value { - my $self = shift; - my $field = shift; - my %args = ( decode_utf8 => 1, - @_ ); - - unless (defined $field && $field) { - $RT::Logger->error("$self __Value called with undef field"); - } - my $value = $self->SUPER::__Value($field); - - return('') if ( !defined($value) || $value eq ''); - - return Encode::decode_utf8($value) || $value if $args{'decode_utf8'}; - return $value; -} - -# Set up defaults for DBIx::SearchBuilder::Record::Cachable - -sub _CacheConfig { - { - 'cache_p' => 1, - 'fast_update_p' => 1, - 'cache_for_sec' => 30, - } -} - -=head2 _DecodeUTF8 - - When passed a string will "decode" it int a proper UTF-8 string - -=cut - -eval "require RT::Record_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Record_Vendor.pm}); -eval "require RT::Record_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Record_Local.pm}); - -1; diff --git a/rt/lib/RT/Reminders.pm b/rt/lib/RT/Reminders.pm deleted file mode 100644 index f99fbf7c1..000000000 --- a/rt/lib/RT/Reminders.pm +++ /dev/null @@ -1,167 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Reminders; - -use base qw/RT::Base/; - -our $REMINDER_QUEUE = 'General'; - - -sub new { - my $class = shift; - my $self = {}; - bless $self, $class; - $self->CurrentUser(@_); - return($self); -} - - -sub Ticket { - my $self = shift; - $self->{'_ticket'} = shift if (@_); - return ($self->{'_ticket'}); -} - -sub TicketObj { - my $self = shift; - unless ($self->{'_ticketobj'}) { - $self->{'_ticketobj'} = RT::Ticket->new($self->CurrentUser); - $self->{'_ticketobj'}->Load($self->Ticket); - } - return $self->{'_ticketobj'}; -} - - -=head2 Collection - -Returns an RT::Tickets object containing reminders for this object's "Ticket" - -=cut - -sub Collection { - my $self = shift; - my $col = RT::Tickets->new($self->CurrentUser); - - my $query = 'Queue = "'. $self->TicketObj->QueueObj->Name .'" AND Type = "reminder"'; - $query .= ' AND RefersTo = "'.$self->Ticket.'"'; - - $col->FromSQL($query); - - return($col); -} - -=head2 Add - -Add a reminder for this ticket. - -Takes - - Subject - Owner - Due - - -=cut - - -sub Add { - my $self = shift; - my %args = ( Subject => undef, - Owner => undef, - Due => undef, - @_); - - my $reminder = RT::Ticket->new($self->CurrentUser); - $reminder->Create( Subject => $args{'Subject'}, - Owner => $args{'Owner'}, - Due => $args{'Due'}, - RefersTo => $self->Ticket, - Type => 'reminder', - Queue => $self->TicketObj->Queue, - - ); - $self->TicketObj->_NewTransaction(Type => 'AddReminder', - Field => 'RT::Ticket', - NewValue => $reminder->id); - - -} - - -sub Open { - my $self = shift; - my $reminder = shift; - - $reminder->SetStatus('open'); - $self->TicketObj->_NewTransaction(Type => 'OpenReminder', - Field => 'RT::Ticket', - NewValue => $reminder->id); -} - - -sub Resolve { - my $self = shift; - my $reminder = shift; - $reminder->SetStatus('resolved'); - $self->TicketObj->_NewTransaction(Type => 'ResolveReminder', - Field => 'RT::Ticket', - NewValue => $reminder->id); -} - - eval "require RT::Reminders_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Reminders_Vendor.pm}) { - die $@; - }; - - eval "require RT::Reminders_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Reminders_Local.pm}) { - die $@; - }; - - -1; diff --git a/rt/lib/RT/Report/Tickets.pm b/rt/lib/RT/Report/Tickets.pm deleted file mode 100644 index 97e27d3ff..000000000 --- a/rt/lib/RT/Report/Tickets.pm +++ /dev/null @@ -1,451 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Report::Tickets; - -use base qw/RT::Tickets/; -use RT::Report::Tickets::Entry; - -use strict; -use warnings; - -sub Groupings { - my $self = shift; - my %args = (@_); - my @fields = qw( - Owner - Status - Queue - DueDaily - DueMonthly - DueAnnually - ResolvedDaily - ResolvedMonthly - ResolvedAnnually - CreatedDaily - CreatedMonthly - CreatedAnnually - LastUpdatedDaily - LastUpdatedMonthly - LastUpdatedAnnually - StartedDaily - StartedMonthly - StartedAnnually - StartsDaily - StartsMonthly - StartsAnnually - ); - - @fields = map {$_, $_} @fields; - - my $queues = $args{'Queues'}; - if ( !$queues && $args{'Query'} ) { - my @actions; - my $tree; - # XXX TODO REFACTOR OUT - $self->_ParseQuery( $args{'Query'}, \$tree, \@actions ); - $queues = $tree->GetReferencedQueues; - } - - if ( $queues ) { - my $CustomFields = RT::CustomFields->new( $self->CurrentUser ); - foreach my $id (keys %$queues) { - my $queue = RT::Queue->new( $self->CurrentUser ); - $queue->Load($id); - unless ($queue->id) { - # XXX TODO: This ancient code dates from a former developer - # we have no idea what it means or why cfqueues are so encoded. - $id =~ s/^.'*(.*).'*$/$1/; - $queue->Load($id); - } - $CustomFields->LimitToQueue($queue->Id); - } - $CustomFields->LimitToGlobal; - while ( my $CustomField = $CustomFields->Next ) { - push @fields, "Custom field '". $CustomField->Name ."'", "CF.{". $CustomField->id ."}"; - } - } - return @fields; -} - -sub Label { - my $self = shift; - my $field = shift; - if ( $field =~ /^(?:CF|CustomField)\.{(.*)}$/ ) { - my $cf = $1; - return $self->CurrentUser->loc( "Custom field '[_1]'", $cf ) if $cf =~ /\D/; - my $obj = RT::CustomField->new( $self->CurrentUser ); - $obj->Load( $cf ); - return $self->CurrentUser->loc( "Custom field '[_1]'", $obj->Name ); - } - return $self->CurrentUser->loc($field); -} - -sub GroupBy { - my $self = shift; - my %args = ref $_[0]? %{ $_[0] }: (@_); - - $self->{'_group_by_field'} = $args{'FIELD'}; - %args = $self->_FieldToFunction( %args ); - - $self->SUPER::GroupBy( \%args ); -} - -sub Column { - my $self = shift; - my %args = (@_); - - if ( $args{'FIELD'} && !$args{'FUNCTION'} ) { - %args = $self->_FieldToFunction( %args ); - } - - return $self->SUPER::Column( %args ); -} - -=head2 _DoSearch - -Subclass _DoSearch from our parent so we can go through and add in empty -columns if it makes sense - -=cut - -sub _DoSearch { - my $self = shift; - $self->SUPER::_DoSearch( @_ ); - $self->AddEmptyRows; -} - -=head2 _FieldToFunction FIELD - -Returns a tuple of the field or a database function to allow grouping on that -field. - -=cut - -sub _FieldToFunction { - my $self = shift; - my %args = (@_); - - my $field = $args{'FIELD'}; - - if ($field =~ /^(.*)(Daily|Monthly|Annually)$/) { - my ($field, $grouping) = ($1, $2); - if ( $grouping =~ /Daily/ ) { - $args{'FUNCTION'} = "SUBSTR($field,1,10)"; - } - elsif ( $grouping =~ /Monthly/ ) { - $args{'FUNCTION'} = "SUBSTR($field,1,7)"; - } - elsif ( $grouping =~ /Annually/ ) { - $args{'FUNCTION'} = "SUBSTR($field,1,4)"; - } - } elsif ( $field =~ /^(?:CF|CustomField)\.{(.*)}$/ ) { #XXX: use CFDecipher method - my $cf_name = $1; - my $cf = RT::CustomField->new( $self->CurrentUser ); - $cf->Load($cf_name); - unless ( $cf->id ) { - $RT::Logger->error("Couldn't load CustomField #$cf_name"); - } else { - my ($ticket_cf_alias, $cf_alias) = $self->_CustomFieldJoin($cf->id, $cf->id, $cf_name); - @args{qw(ALIAS FIELD)} = ($ticket_cf_alias, 'Content'); - } - } - return %args; -} - - -# Override the AddRecord from DBI::SearchBuilder::Unique. id isn't id here -# wedon't want to disambiguate all the items with a count of 1. -sub AddRecord { - my $self = shift; - my $record = shift; - push @{$self->{'items'}}, $record; - $self->{'rows'}++; -} - -1; - - - -# Gotta skip over RT::Tickets->Next, since it does all sorts of crazy magic we -# don't want. -sub Next { - my $self = shift; - $self->RT::SearchBuilder::Next(@_); - -} - -sub NewItem { - my $self = shift; - return RT::Report::Tickets::Entry->new($RT::SystemUser); # $self->CurrentUser); -} - - -=head2 AddEmptyRows - -If we're grouping on a criterion we know how to add zero-value rows -for, do that. - -=cut - -sub AddEmptyRows { - my $self = shift; - if ( $self->{'_group_by_field'} eq 'Status' ) { - my %has = map { $_->__Value('Status') => 1 } @{ $self->ItemsArrayRef || [] }; - - foreach my $status ( grep !$has{$_}, RT::Queue->new($self->CurrentUser)->StatusArray ) { - - my $record = $self->NewItem; - $record->LoadFromHash( { - id => 0, - status => $status - } ); - $self->AddRecord($record); - } - } -} - - -# XXX TODO: this code cut and pasted from html/Search/Build.html -# This has already been improved (But not backported) in 3.7 -# -# This code is hacky, evil and wrong. But it's end of lifed from day one and is -# less likely to destabilize the codebase than the full refactoring it should get. -use Regexp::Common qw /delimited/; - -# States -use constant VALUE => 1; -use constant AGGREG => 2; -use constant OP => 4; -use constant PAREN => 8; -use constant KEYWORD => 16; - -sub _match { - - # Case insensitive equality - my ( $y, $x ) = @_; - return 1 if $x =~ /^$y$/i; - - # return 1 if ((lc $x) eq (lc $y)); # Why isnt this equiv? - return 0; -} - -sub _ParseQuery { - my $self = shift; - my $string = shift; - my $tree = shift; - my @actions = shift; - my $want = KEYWORD | PAREN; - my $last = undef; - - my $depth = 1; - - # make a tree root - use RT::Interface::Web::QueryBuilder::Tree; - $$tree = RT::Interface::Web::QueryBuilder::Tree->new; - my $root = RT::Interface::Web::QueryBuilder::Tree->new( 'AND', $$tree ); - my $lastnode = $root; - my $parentnode = $root; - - # get the FIELDS from Tickets_Overlay - my $tickets = new RT::Tickets( $self->CurrentUser ); - my %FIELDS = %{ $tickets->FIELDS }; - - # Lower Case version of FIELDS, for case insensitivity - my %lcfields = map { ( lc($_) => $_ ) } ( keys %FIELDS ); - - my @tokens = qw[VALUE AGGREG OP PAREN KEYWORD]; - my $re_aggreg = qr[(?i:AND|OR)]; - my $re_value = qr[$RE{delimited}{-delim=>qq{\'\"}}|\d+]; - my $re_keyword = qr[$RE{delimited}{-delim=>qq{\'\"}}|(?:\{|\}|\w|\.)+]; - my $re_op = - qr[=|!=|>=|<=|>|<|(?i:IS NOT)|(?i:IS)|(?i:NOT LIKE)|(?i:LIKE)] - ; # long to short - my $re_paren = qr'\(|\)'; - - # assume that $ea is AND if it is not set - my ( $ea, $key, $op, $value ) = ( "AND", "", "", "" ); - - # order of matches in the RE is important.. op should come early, - # because it has spaces in it. otherwise "NOT LIKE" might be parsed - # as a keyword or value. - - while ( - $string =~ /( - $re_aggreg - |$re_op - |$re_keyword - |$re_value - |$re_paren - )/igx - ) - { - my $val = $1; - my $current = 0; - - # Highest priority is last - $current = OP if _match( $re_op, $val ); - $current = VALUE if _match( $re_value, $val ); - $current = KEYWORD - if _match( $re_keyword, $val ) && ( $want & KEYWORD ); - $current = AGGREG if _match( $re_aggreg, $val ); - $current = PAREN if _match( $re_paren, $val ); - - unless ( $current && $want & $current ) { - - # Error - # FIXME: I will only print out the highest $want value - my $token = $tokens[ ( ( log $want ) / ( log 2 ) ) ]; - push @actions, - [ - $self->CurrentUser->loc( -"current: $current, want $want, Error near ->$val<- expecting a " - . $token - . " in '$string'\n" - ), - -1 - ]; - } - - # State Machine: - my $parentdepth = $depth; - - # Parens are highest priority - if ( $current & PAREN ) { - if ( $val eq "(" ) { - $depth++; - - # make a new node that the clauses can be children of - $parentnode = RT::Interface::Web::QueryBuilder::Tree->new( $ea, $parentnode ); - } - else { - $depth--; - $parentnode = $parentnode->getParent(); - $lastnode = $parentnode; - } - - $want = KEYWORD | PAREN | AGGREG; - } - elsif ( $current & AGGREG ) { - $ea = $val; - $want = KEYWORD | PAREN; - } - elsif ( $current & KEYWORD ) { - $key = $val; - $want = OP; - } - elsif ( $current & OP ) { - $op = $val; - $want = VALUE; - } - elsif ( $current & VALUE ) { - $value = $val; - - # Remove surrounding quotes from $key, $val - # (in future, simplify as for($key,$val) { action on $_ }) - if ( $key =~ /$RE{delimited}{-delim=>qq{\'\"}}/ ) { - substr( $key, 0, 1 ) = ""; - substr( $key, -1, 1 ) = ""; - } - if ( $val =~ /$RE{delimited}{-delim=>qq{\'\"}}/ ) { - substr( $val, 0, 1 ) = ""; - substr( $val, -1, 1 ) = ""; - } - - # Unescape escaped characters - $key =~ s!\\(.)!$1!g; - $val =~ s!\\(.)!$1!g; - - my $class; - if ( exists $lcfields{ lc $key } ) { - $key = $lcfields{ lc $key }; - $class = $FIELDS{$key}->[0]; - } - if ( $class ne 'INT' ) { - $val = "'$val'"; - } - - push @actions, [ $self->CurrentUser->loc("Unknown field: [_1]", $key), -1 ] unless $class; - - $want = PAREN | AGGREG; - } - else { - push @actions, [ $self->CurrentUser->loc("I'm lost"), -1 ]; - } - - if ( $current & VALUE ) { - if ( $key =~ /^CF./ ) { - $key = "'" . $key . "'"; - } - my $clause = { - Key => $key, - Op => $op, - Value => $val - }; - - # explicity add a child to it - $lastnode = RT::Interface::Web::QueryBuilder::Tree->new( $clause, $parentnode ); - $lastnode->getParent()->setNodeValue($ea); - - ( $ea, $key, $op, $value ) = ( "", "", "", "" ); - } - - $last = $current; - } # while - - push @actions, [ $self->CurrentUser->loc("Incomplete query"), -1 ] - unless ( ( $want | PAREN ) || ( $want | KEYWORD ) ); - - push @actions, [ $self->CurrentUser->loc("Incomplete Query"), -1 ] - unless ( $last && ( $last | PAREN ) || ( $last || VALUE ) ); - - # This will never happen, because the parser will complain - push @actions, [ $self->CurrentUser->loc("Mismatched parentheses"), -1 ] - unless $depth == 1; -}; - -1; diff --git a/rt/lib/RT/Report/Tickets/Entry.pm b/rt/lib/RT/Report/Tickets/Entry.pm deleted file mode 100644 index f6ee22c0a..000000000 --- a/rt/lib/RT/Report/Tickets/Entry.pm +++ /dev/null @@ -1,55 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -package RT::Report::Tickets::Entry; -use base qw/RT::Record/; - -# XXX TODO: how the heck do we acl a report? -sub CurrentUserHasRight {1} - - -1; diff --git a/rt/lib/RT/SavedSearch.pm b/rt/lib/RT/SavedSearch.pm deleted file mode 100644 index 9cebe33e3..000000000 --- a/rt/lib/RT/SavedSearch.pm +++ /dev/null @@ -1,348 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::SavedSearch - an API for saving and retrieving search form values. - -=head1 SYNOPSIS - - use RT::SavedSearch - -=head1 DESCRIPTION - - SavedSearch is an object that can belong to either an RT::User or an - RT::Group. It consists of an ID, a description, and a number of - search parameters. - -=head1 METHODS - -=begin testing - -use_ok(RT::SavedSearch); - -# Real tests are in lib/t/20savedsearch.t - -=end testing - -=cut - -package RT::SavedSearch; - -use RT::Base; -use RT::Attribute; - -use strict; -use warnings; -use base qw/RT::Base/; - -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - $self->{'Id'} = 0; - bless ($self, $class); - $self->CurrentUser(@_); - return $self; -} - -=head2 Load - -Takes a privacy specification, an object ID, and a search ID. Loads -the given search ID if it belongs to the stated user or group. -Returns a tuple of status and message, where status is true on -success. - -=cut - -sub Load { - my $self = shift; - my ($privacy, $id) = @_; - my $object = $self->_GetObject($privacy); - - if ($object) { - $self->{'Attribute'} = $object->Attributes->WithId($id); - if ($self->{'Attribute'}->Id) { - $self->{'Id'} = $self->{'Attribute'}->Id; - $self->{'Privacy'} = $privacy; - $self->{'Type'} = $self->{'Attribute'}->SubValue('SearchType'); - return (1, $self->loc("Loaded search [_1]", $self->Name)); - } else { - $RT::Logger->error("Could not load attribute " . $id - . " for object " . $privacy); - return (0, $self->loc("Search attribute load failure")); - } - } else { - $RT::Logger->warning("Could not load object $privacy when loading search"); - return (0, $self->loc("Could not load object for [_1]", $privacy)); - } - -} - -=head2 Save - -Takes a privacy, an optional type, a name, and a hashref containing the -search parameters. Saves the given parameters to the appropriate user/ -group object, and loads the resulting search. Returns a tuple of status -and message, where status is true on success. Defaults are: - Privacy: undef - Type: Ticket - Name: "new search" - SearchParams: (empty hash) - -=cut - -sub Save { - my $self = shift; - my %args = ('Privacy' => 'RT::User-' . $self->CurrentUser->Id, - 'Type' => 'Ticket', - 'Name' => 'new search', - 'SearchParams' => {}, - @_); - my $privacy = $args{'Privacy'}; - my $type = $args{'Type'}; - my $name = $args{'Name'}; - my %params = %{$args{'SearchParams'}}; - - $params{'SearchType'} = $type; - my $object = $self->_GetObject($privacy); - - return (0, $self->loc("Failed to load object for [_1]", $privacy)) - unless $object; - - if ( $object->isa('RT::System') ) { - return ( 0, $self->loc("No permission to save system-wide searches") ) - unless $self->CurrentUser->HasRight( - Object => $RT::System, - Right => 'SuperUser' - ); - } - - my ( $att_id, $att_msg ) = $object->AddAttribute( - 'Name' => 'SavedSearch', - 'Description' => $name, - 'Content' => \%params - ); - if ($att_id) { - $self->{'Attribute'} = $object->Attributes->WithId($att_id); - $self->{'Id'} = $att_id; - $self->{'Privacy'} = $privacy; - $self->{'Type'} = $type; - return ( 1, $self->loc( "Saved search [_1]", $name ) ); - } - else { - $RT::Logger->error("SavedSearch save failure: $att_msg"); - return ( 0, $self->loc("Failed to create search attribute") ); - } -} - -=head2 Update - -Updates the parameters of an existing search. Takes the arguments -"Name" and "SearchParams"; SearchParams should be a hashref containing -the new parameters of the search. If Name is not specified, the name -will not be changed. - -=cut - -sub Update { - my $self = shift; - my %args = ('Name' => '', - 'SearchParams' => {}, - @_); - - return(0, $self->loc("No search loaded")) unless $self->Id; - return(0, $self->loc("Could not load search attribute")) - unless $self->{'Attribute'}->Id; - my ($status, $msg) = $self->{'Attribute'}->SetSubValues(%{$args{'SearchParams'}}); - if ($status && $args{'Name'}) { - ($status, $msg) = $self->{'Attribute'}->SetDescription($args{'Name'}); - } - return ($status, $self->loc("Search update: [_1]", $msg)); -} - -=head2 Delete - -Deletes the existing search. Returns a tuple of status and message, -where status is true upon success. - -=cut - -sub Delete { - my $self = shift; - - my ($status, $msg) = $self->{'Attribute'}->Delete; - if ($status) { - return (1, $self->loc("Deleted search")); - } else { - return (0, $self->loc("Delete failed: [_1]", $msg)); - } -} - - -### Accessor methods - -=head2 Name - -Returns the name of the search. - -=cut - -sub Name { - my $self = shift; - return unless ref($self->{'Attribute'}) eq 'RT::Attribute'; - return $self->{'Attribute'}->Description(); -} - -=head2 GetParameter - -Returns the given named parameter of the search, e.g. 'Query', 'Format'. - -=cut - -sub GetParameter { - my $self = shift; - my $param = shift; - return unless ref($self->{'Attribute'}) eq 'RT::Attribute'; - return $self->{'Attribute'}->SubValue($param); -} - -=head2 Id - -Returns the numerical id of this search. - -=cut - -sub Id { - my $self = shift; - return $self->{'Id'}; -} - -=head2 Privacy - -Returns the principal object to whom this search belongs, in a string -"-", e.g. "RT::Group-16". - -=cut - -sub Privacy { - my $self = shift; - return $self->{'Privacy'}; -} - -=head2 Type - -Returns the type of this search, e.g. 'Ticket'. Useful for denoting the -saved searches that are relevant to a particular search page. - -=cut - -sub Type { - my $self = shift; - return $self->{'Type'}; -} - -### Internal methods - -sub _load_privacy_object { - my ($self, $obj_type, $obj_id) = @_; - if ( $obj_type eq 'RT::User' && $obj_id == $self->CurrentUser->Id) { - return $self->CurrentUser->UserObj; - } - elsif ($obj_type eq 'RT::Group') { - my $group = RT::Group->new($self->CurrentUser); - $group->Load($obj_id); - return $group; - } - elsif ($obj_type eq 'RT::System') { - return RT::System->new($self->CurrentUser); - } - - $RT::Logger->error("Tried to load a search belonging to an $obj_type, which is neither a user nor a group"); - return undef; -} - -# _GetObject: helper routine to load the correct object whose parameters -# have been passed. - -sub _GetObject { - my $self = shift; - my $privacy = shift; - - my ($obj_type, $obj_id) = split(/\-/, $privacy); - - my $object = $self->_load_privacy_object($obj_type, $obj_id); - - unless (ref($object) eq $obj_type) { - $RT::Logger->error("Could not load object of type $obj_type with ID $obj_id"); - return undef; - } - - # Do not allow the loading of a user object other than the current - # user, or of a group object of which the current user is not a member. - - if ($obj_type eq 'RT::User' - && $object->Id != $self->CurrentUser->UserObj->Id()) { - $RT::Logger->debug("Permission denied for user other than self"); - return undef; - } - if ($obj_type eq 'RT::Group' && - !$object->HasMemberRecursively($self->CurrentUser->PrincipalObj)) { - $RT::Logger->debug("Permission denied, ".$self->CurrentUser->Name. - " is not a member of group"); - return undef; - } - - return $object; -} - -eval "require RT::SavedSearch_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearch_Vendor.pm}); -eval "require RT::SavedSearch_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearch_Local.pm}); - -1; diff --git a/rt/lib/RT/SavedSearches.pm b/rt/lib/RT/SavedSearches.pm deleted file mode 100644 index 0b5ac9787..000000000 --- a/rt/lib/RT/SavedSearches.pm +++ /dev/null @@ -1,190 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::SavedSearches - a pseudo-collection for SavedSearch objects. - -=head1 SYNOPSIS - - use RT::SavedSearch - -=head1 DESCRIPTION - - SavedSearches is an object consisting of a number of SavedSearch objects. - It works more or less like a DBIx::SearchBuilder collection, although it - is not. - -=head1 METHODS - -=begin testing - -use_ok(RT::SavedSearches); - -# The real tests are in lib/t/20savedsearch.t - -=end testing - -=cut - -package RT::SavedSearches; - -use RT::Base; -use RT::SavedSearch; - -use strict; -use vars qw/@ISA/; -@ISA = qw/RT::Base/; - -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); - $self->CurrentUser(@_); - $self->{'idx'} = 0; - $self->{'objects'} = []; - return $self; -} - -=head2 LimitToPrivacy - -Takes two argumets: a privacy string, of the format "-", as -produced by RT::SavedSearch::Privacy(); and a type string, as produced -by RT::SavedSearch::Type(). The SavedSearches object will load the -searches belonging to that user or group that are of the type -specified. If no type is specified, all the searches belonging to the -user/group will be loaded. Repeated calls to the same object should DTRT. - -=cut - -sub LimitToPrivacy { - my $self = shift; - my $privacy = shift; - my $type = shift; - - my $object = $self->_GetObject($privacy); - - if ($object) { - $self->{'objects'} = []; - my @search_atts = $object->Attributes->Named('SavedSearch'); - foreach my $att (@search_atts) { - my $search = RT::SavedSearch->new($self->CurrentUser); - $search->Load($privacy, $att->Id); - next if $type && $search->Type ne $type; - push(@{$self->{'objects'}}, $search); - } - } else { - $RT::Logger->error("Could not load object $privacy"); - } -} - -### Accessor methods - -=head2 Next - -Returns the next object in the collection. - -=cut - -sub Next { - my $self = shift; - my $search = $self->{'objects'}->[$self->{'idx'}]; - if ($search) { - $self->{'idx'}++; - } else { - # We have run out of objects; reset the counter. - $self->{'idx'} = 0; - } - return $search; -} - -=head2 Count - -Returns the number of search objects found. - -=cut - -sub Count { - my $self = shift; - return scalar @{$self->{'objects'}}; -} - -### Internal methods - -# _GetObject: helper routine to load the correct object whose parameters -# have been passed. - -sub _GetObject { - my $self = shift; - my $privacy = shift; - - return RT::SavedSearch->new($self->CurrentUser)->_GetObject($privacy); -} - -### Internal methods - -# _PrivacyObjects: returns a list of objects that can be used to load saved searches from. - -sub _PrivacyObjects { - my $self = shift; - my $CurrentUser = $self->CurrentUser; - - my $groups = RT::Groups->new($CurrentUser); - $groups->LimitToUserDefinedGroups; - $groups->WithMember( PrincipalId => $CurrentUser->Id, - Recursively => 1 ); - - return ( $CurrentUser->UserObj, @{ $groups->ItemsArrayRef() } ); -} - -eval "require RT::SavedSearches_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearches_Vendor.pm}); -eval "require RT::SavedSearches_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearches_Local.pm}); - -1; diff --git a/rt/lib/RT/Scrip.pm b/rt/lib/RT/Scrip.pm deleted file mode 100755 index a69dde04e..000000000 --- a/rt/lib/RT/Scrip.pm +++ /dev/null @@ -1,500 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::Scrip - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::Scrip; -use RT::Record; -use RT::Queue; -use RT::Template; -use RT::ScripCondition; -use RT::ScripAction; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('Scrips'); - $self->SUPER::_Init(@_); -} - - - - - -=item Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(255) 'Description'. - int(11) 'ScripCondition'. - int(11) 'ScripAction'. - text 'ConditionRules'. - text 'ActionRules'. - text 'CustomIsApplicableCode'. - text 'CustomPrepareCode'. - text 'CustomCommitCode'. - varchar(32) 'Stage'. - int(11) 'Queue'. - int(11) 'Template'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Description => '', - ScripCondition => '0', - ScripAction => '0', - ConditionRules => '', - ActionRules => '', - CustomIsApplicableCode => '', - CustomPrepareCode => '', - CustomCommitCode => '', - Stage => '', - Queue => '0', - Template => '0', - - @_); - $self->SUPER::Create( - Description => $args{'Description'}, - ScripCondition => $args{'ScripCondition'}, - ScripAction => $args{'ScripAction'}, - ConditionRules => $args{'ConditionRules'}, - ActionRules => $args{'ActionRules'}, - CustomIsApplicableCode => $args{'CustomIsApplicableCode'}, - CustomPrepareCode => $args{'CustomPrepareCode'}, - CustomCommitCode => $args{'CustomCommitCode'}, - Stage => $args{'Stage'}, - Queue => $args{'Queue'}, - Template => $args{'Template'}, -); - -} - - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item Description - -Returns the current value of Description. -(In the database, Description is stored as varchar(255).) - - - -=item SetDescription VALUE - - -Set Description to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Description will be stored as a varchar(255).) - - -=cut - - -=item ScripCondition - -Returns the current value of ScripCondition. -(In the database, ScripCondition is stored as int(11).) - - - -=item SetScripCondition VALUE - - -Set ScripCondition to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ScripCondition will be stored as a int(11).) - - -=cut - - -=item ScripConditionObj - -Returns the ScripCondition Object which has the id returned by ScripCondition - - -=cut - -sub ScripConditionObj { - my $self = shift; - my $ScripCondition = RT::ScripCondition->new($self->CurrentUser); - $ScripCondition->Load($self->__Value('ScripCondition')); - return($ScripCondition); -} - -=item ScripAction - -Returns the current value of ScripAction. -(In the database, ScripAction is stored as int(11).) - - - -=item SetScripAction VALUE - - -Set ScripAction to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ScripAction will be stored as a int(11).) - - -=cut - - -=item ScripActionObj - -Returns the ScripAction Object which has the id returned by ScripAction - - -=cut - -sub ScripActionObj { - my $self = shift; - my $ScripAction = RT::ScripAction->new($self->CurrentUser); - $ScripAction->Load($self->__Value('ScripAction')); - return($ScripAction); -} - -=item ConditionRules - -Returns the current value of ConditionRules. -(In the database, ConditionRules is stored as text.) - - - -=item SetConditionRules VALUE - - -Set ConditionRules to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ConditionRules will be stored as a text.) - - -=cut - - -=item ActionRules - -Returns the current value of ActionRules. -(In the database, ActionRules is stored as text.) - - - -=item SetActionRules VALUE - - -Set ActionRules to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ActionRules will be stored as a text.) - - -=cut - - -=item CustomIsApplicableCode - -Returns the current value of CustomIsApplicableCode. -(In the database, CustomIsApplicableCode is stored as text.) - - - -=item SetCustomIsApplicableCode VALUE - - -Set CustomIsApplicableCode to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CustomIsApplicableCode will be stored as a text.) - - -=cut - - -=item CustomPrepareCode - -Returns the current value of CustomPrepareCode. -(In the database, CustomPrepareCode is stored as text.) - - - -=item SetCustomPrepareCode VALUE - - -Set CustomPrepareCode to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CustomPrepareCode will be stored as a text.) - - -=cut - - -=item CustomCommitCode - -Returns the current value of CustomCommitCode. -(In the database, CustomCommitCode is stored as text.) - - - -=item SetCustomCommitCode VALUE - - -Set CustomCommitCode to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CustomCommitCode will be stored as a text.) - - -=cut - - -=item Stage - -Returns the current value of Stage. -(In the database, Stage is stored as varchar(32).) - - - -=item SetStage VALUE - - -Set Stage to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Stage will be stored as a varchar(32).) - - -=cut - - -=item Queue - -Returns the current value of Queue. -(In the database, Queue is stored as int(11).) - - - -=item SetQueue VALUE - - -Set Queue to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Queue will be stored as a int(11).) - - -=cut - - -=item QueueObj - -Returns the Queue Object which has the id returned by Queue - - -=cut - -sub QueueObj { - my $self = shift; - my $Queue = RT::Queue->new($self->CurrentUser); - $Queue->Load($self->__Value('Queue')); - return($Queue); -} - -=item Template - -Returns the current value of Template. -(In the database, Template is stored as int(11).) - - - -=item SetTemplate VALUE - - -Set Template to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Template will be stored as a int(11).) - - -=cut - - -=item TemplateObj - -Returns the Template Object which has the id returned by Template - - -=cut - -sub TemplateObj { - my $self = shift; - my $Template = RT::Template->new($self->CurrentUser); - $Template->Load($self->__Value('Template')); - return($Template); -} - -=item Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=item Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - -=item LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=item LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - - -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - ScripCondition => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - ScripAction => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - ConditionRules => - {read => 1, write => 1, type => 'text', default => ''}, - ActionRules => - {read => 1, write => 1, type => 'text', default => ''}, - CustomIsApplicableCode => - {read => 1, write => 1, type => 'text', default => ''}, - CustomPrepareCode => - {read => 1, write => 1, type => 'text', default => ''}, - CustomCommitCode => - {read => 1, write => 1, type => 'text', default => ''}, - Stage => - {read => 1, write => 1, type => 'varchar(32)', default => ''}, - Queue => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - Template => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, - - } -}; - - - eval "require RT::Scrip_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Scrip_Overlay.pm}) { - die $@; - }; - - eval "require RT::Scrip_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Scrip_Vendor.pm}) { - die $@; - }; - - eval "require RT::Scrip_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Scrip_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Scrip_Overlay, RT::Scrip_Vendor, RT::Scrip_Local - -=cut - - -1; diff --git a/rt/lib/RT/ScripAction.pm b/rt/lib/RT/ScripAction.pm deleted file mode 100755 index 26824df5d..000000000 --- a/rt/lib/RT/ScripAction.pm +++ /dev/null @@ -1,279 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::ScripAction - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::ScripAction; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('ScripActions'); - $self->SUPER::_Init(@_); -} - - - - - -=item Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(200) 'Name'. - varchar(255) 'Description'. - varchar(60) 'ExecModule'. - varchar(255) 'Argument'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Name => '', - Description => '', - ExecModule => '', - Argument => '', - - @_); - $self->SUPER::Create( - Name => $args{'Name'}, - Description => $args{'Description'}, - ExecModule => $args{'ExecModule'}, - Argument => $args{'Argument'}, -); - -} - - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item Name - -Returns the current value of Name. -(In the database, Name is stored as varchar(200).) - - - -=item SetName VALUE - - -Set Name to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Name will be stored as a varchar(200).) - - -=cut - - -=item Description - -Returns the current value of Description. -(In the database, Description is stored as varchar(255).) - - - -=item SetDescription VALUE - - -Set Description to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Description will be stored as a varchar(255).) - - -=cut - - -=item ExecModule - -Returns the current value of ExecModule. -(In the database, ExecModule is stored as varchar(60).) - - - -=item SetExecModule VALUE - - -Set ExecModule to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ExecModule will be stored as a varchar(60).) - - -=cut - - -=item Argument - -Returns the current value of Argument. -(In the database, Argument is stored as varchar(255).) - - - -=item SetArgument VALUE - - -Set Argument to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Argument will be stored as a varchar(255).) - - -=cut - - -=item Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=item Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - -=item LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=item LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - - -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, - Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - ExecModule => - {read => 1, write => 1, type => 'varchar(60)', default => ''}, - Argument => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, - - } -}; - - - eval "require RT::ScripAction_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripAction_Overlay.pm}) { - die $@; - }; - - eval "require RT::ScripAction_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripAction_Vendor.pm}) { - die $@; - }; - - eval "require RT::ScripAction_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripAction_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::ScripAction_Overlay, RT::ScripAction_Vendor, RT::ScripAction_Local - -=cut - - -1; diff --git a/rt/lib/RT/ScripAction_Overlay.pm b/rt/lib/RT/ScripAction_Overlay.pm deleted file mode 100644 index 4b93c6c54..000000000 --- a/rt/lib/RT/ScripAction_Overlay.pm +++ /dev/null @@ -1,285 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::ScripAction - RT Action object - -=head1 SYNOPSIS - - use RT::ScripAction; - - -=head1 DESCRIPTION - -This module should never be called directly by client code. it's an internal module which -should only be accessed through exported APIs in other modules. - - -=begin testing - -ok (require RT::ScripAction); - -=end testing - -=head1 METHODS - -=cut - - -package RT::ScripAction; - -use strict; -no warnings qw(redefine); -use RT::Template; - -# {{{ sub _Accessible -sub _Accessible { - my $self = shift; - my %Cols = ( Name => 'read', - Description => 'read', - ExecModule => 'read', - Argument => 'read', - Creator => 'read/auto', - Created => 'read/auto', - LastUpdatedBy => 'read/auto', - LastUpdated => 'read/auto' - ); - return($self->SUPER::_Accessible(@_, %Cols)); -} -# }}} - -# {{{ sub Create - -=head2 Create - -Takes a hash. Creates a new Action entry. should be better -documented. - -=cut - -sub Create { - my $self = shift; - #TODO check these args and do smart things. - return($self->SUPER::Create(@_)); -} -# }}} - -# {{{ sub Delete -sub Delete { - my $self = shift; - - return (0, "ScripAction->Delete not implemented"); -} -# }}} - -# {{{ sub Load - -=head2 Load IDENTIFIER - -Loads an action by its Name. - -Returns: Id, Error Message - -=cut - -sub Load { - my $self = shift; - my $identifier = shift; - - if (!$identifier) { - return (0, $self->loc('Input error')); - } - - if ($identifier !~ /\D/) { - $self->SUPER::Load($identifier); - } - else { - $self->LoadByCol('Name', $identifier); - - } - - if (@_) { - # Set the template Id to the passed in template - my $template = shift; - - $self->{'Template'} = $template; - } - return ($self->Id, ($self->loc('[_1] ScripAction loaded', $self->Id))); -} -# }}} - -# {{{ sub LoadAction - -=head2 LoadAction HASH - - Takes a hash consisting of TicketObj and TransactionObj. Loads an RT::Action:: module. - -=cut - -sub LoadAction { - my $self = shift; - my %args = ( TransactionObj => undef, - TicketObj => undef, - @_ ); - - $self->{_TicketObj} = $args{TicketObj}; - - #TODO: Put this in an eval - $self->ExecModule =~ /^(\w+)$/; - my $module = $1; - my $type = "RT::Action::". $module; - - eval "require $type" || die "Require of $type failed.\n$@\n"; - - $self->{'Action'} = $type->new ( Argument => $self->Argument, - CurrentUser => $self->CurrentUser, - ScripActionObj => $self, - ScripObj => $args{'ScripObj'}, - TemplateObj => $self->TemplateObj, - TicketObj => $args{'TicketObj'}, - TransactionObj => $args{'TransactionObj'}, - ); -} -# }}} - -# {{{ sub TemplateObj - -=head2 TemplateObj - -Return this action's template object - -TODO: Why are we not using the Scrip's template object? - - -=cut - -sub TemplateObj { - my $self = shift; - return undef unless $self->{Template}; - if ( !$self->{'TemplateObj'} ) { - $self->{'TemplateObj'} = RT::Template->new( $self->CurrentUser ); - $self->{'TemplateObj'}->LoadById( $self->{'Template'} ); - - if ( ( $self->{'TemplateObj'}->__Value('Queue') == 0 ) - && $self->{'_TicketObj'} ) { - my $tmptemplate = RT::Template->new( $self->CurrentUser ); - my ( $ok, $err ) = $tmptemplate->LoadQueueTemplate( - Queue => $self->{'_TicketObj'}->QueueObj->id, - Name => $self->{'TemplateObj'}->Name); - - if ( $tmptemplate->id ) { - # found the queue-specific template with the same name - $self->{'TemplateObj'} = $tmptemplate; - } - } - - } - - return ( $self->{'TemplateObj'} ); -} -# }}} - -# The following methods call the action object - -# {{{ sub Prepare - -sub Prepare { - my $self = shift; - $self->{_Message_ID} = 0; - return ($self->Action->Prepare()); - -} -# }}} - -# {{{ sub Commit -sub Commit { - my $self = shift; - return($self->Action->Commit()); - - -} -# }}} - -# {{{ sub Describe -sub Describe { - my $self = shift; - return ($self->Action->Describe()); - -} -# }}} - -=head2 Action - -Return the actual RT::Action object for this scrip. - -=cut - -sub Action { - my $self = shift; - return ($self->{'Action'}); -} - -# {{{ sub DESTROY -sub DESTROY { - my $self=shift; - $self->{'_TicketObj'} = undef; - $self->{'Action'} = undef; - $self->{'TemplateObj'} = undef; -} -# }}} - -=head2 TODO - -Between this, RT::Scrip and RT::Action::*, we need to be able to get rid of a -class. This just reeks of too much complexity -- jesse - -=cut - -1; - - diff --git a/rt/lib/RT/ScripActions.pm b/rt/lib/RT/ScripActions.pm deleted file mode 100755 index 614ff374f..000000000 --- a/rt/lib/RT/ScripActions.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::ScripActions -- Class Description - -=head1 SYNOPSIS - - use RT::ScripActions - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::ScripActions; - -use RT::SearchBuilder; -use RT::ScripAction; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'ScripActions'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=item NewItem - -Returns an empty new RT::ScripAction item - -=cut - -sub NewItem { - my $self = shift; - return(RT::ScripAction->new($self->CurrentUser)); -} - - eval "require RT::ScripActions_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripActions_Overlay.pm}) { - die $@; - }; - - eval "require RT::ScripActions_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripActions_Vendor.pm}) { - die $@; - }; - - eval "require RT::ScripActions_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripActions_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::ScripActions_Overlay, RT::ScripActions_Vendor, RT::ScripActions_Local - -=cut - - -1; diff --git a/rt/lib/RT/ScripActions_Overlay.pm b/rt/lib/RT/ScripActions_Overlay.pm deleted file mode 100644 index fd69e937d..000000000 --- a/rt/lib/RT/ScripActions_Overlay.pm +++ /dev/null @@ -1,114 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::ScripActions - Collection of Action objects - -=head1 SYNOPSIS - - use RT::ScripActions; - - -=head1 DESCRIPTION - - -=begin testing - -ok (require RT::ScripActions); - -=end testing - -=head1 METHODS - -=cut - - -package RT::ScripActions; - -use strict; -no warnings qw(redefine); - -# {{{ sub _Init -sub _Init { - my $self = shift; - $self->{'table'} = "ScripActions"; - $self->{'primary_key'} = "id"; - return ( $self->SUPER::_Init(@_)); -} -# }}} - -# {{{ sub LimitToType -sub LimitToType { - my $self = shift; - my $type = shift; - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Type', - VALUE => "$type") - if defined $type; - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Type', - VALUE => "Correspond") - if $type eq "Create"; - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Type', - VALUE => 'any'); - -} -# }}} - -# {{{ sub NewItem -sub NewItem { - my $self = shift; - return(RT::ScripAction->new($self->CurrentUser)); - -} -# }}} - - -1; - diff --git a/rt/lib/RT/ScripCondition.pm b/rt/lib/RT/ScripCondition.pm deleted file mode 100755 index fe0aa2d5a..000000000 --- a/rt/lib/RT/ScripCondition.pm +++ /dev/null @@ -1,302 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::ScripCondition - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::ScripCondition; -use RT::Record; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('ScripConditions'); - $self->SUPER::_Init(@_); -} - - - - - -=item Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - varchar(200) 'Name'. - varchar(255) 'Description'. - varchar(60) 'ExecModule'. - varchar(255) 'Argument'. - varchar(60) 'ApplicableTransTypes'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Name => '', - Description => '', - ExecModule => '', - Argument => '', - ApplicableTransTypes => '', - - @_); - $self->SUPER::Create( - Name => $args{'Name'}, - Description => $args{'Description'}, - ExecModule => $args{'ExecModule'}, - Argument => $args{'Argument'}, - ApplicableTransTypes => $args{'ApplicableTransTypes'}, -); - -} - - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item Name - -Returns the current value of Name. -(In the database, Name is stored as varchar(200).) - - - -=item SetName VALUE - - -Set Name to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Name will be stored as a varchar(200).) - - -=cut - - -=item Description - -Returns the current value of Description. -(In the database, Description is stored as varchar(255).) - - - -=item SetDescription VALUE - - -Set Description to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Description will be stored as a varchar(255).) - - -=cut - - -=item ExecModule - -Returns the current value of ExecModule. -(In the database, ExecModule is stored as varchar(60).) - - - -=item SetExecModule VALUE - - -Set ExecModule to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ExecModule will be stored as a varchar(60).) - - -=cut - - -=item Argument - -Returns the current value of Argument. -(In the database, Argument is stored as varchar(255).) - - - -=item SetArgument VALUE - - -Set Argument to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Argument will be stored as a varchar(255).) - - -=cut - - -=item ApplicableTransTypes - -Returns the current value of ApplicableTransTypes. -(In the database, ApplicableTransTypes is stored as varchar(60).) - - - -=item SetApplicableTransTypes VALUE - - -Set ApplicableTransTypes to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, ApplicableTransTypes will be stored as a varchar(60).) - - -=cut - - -=item Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=item Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - -=item LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=item LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - - -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, - Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - ExecModule => - {read => 1, write => 1, type => 'varchar(60)', default => ''}, - Argument => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - ApplicableTransTypes => - {read => 1, write => 1, type => 'varchar(60)', default => ''}, - Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, - - } -}; - - - eval "require RT::ScripCondition_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripCondition_Overlay.pm}) { - die $@; - }; - - eval "require RT::ScripCondition_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripCondition_Vendor.pm}) { - die $@; - }; - - eval "require RT::ScripCondition_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripCondition_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::ScripCondition_Overlay, RT::ScripCondition_Vendor, RT::ScripCondition_Local - -=cut - - -1; diff --git a/rt/lib/RT/ScripCondition_Overlay.pm b/rt/lib/RT/ScripCondition_Overlay.pm deleted file mode 100644 index 8032c3b55..000000000 --- a/rt/lib/RT/ScripCondition_Overlay.pm +++ /dev/null @@ -1,238 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::ScripCondition - RT scrip conditional - -=head1 SYNOPSIS - - use RT::ScripCondition; - - -=head1 DESCRIPTION - -This module should never be called directly by client code. it's an internal module which -should only be accessed through exported APIs in other modules. - - -=begin testing - -ok (require RT::ScripCondition); - -=end testing - -=head1 METHODS - -=cut - - -package RT::ScripCondition; - -use strict; -no warnings qw(redefine); - - -# {{{ sub _Init -sub _Init { - my $self = shift; - $self->{'table'} = "ScripConditions"; - return ($self->SUPER::_Init(@_)); -} -# }}} - -# {{{ sub _Accessible -sub _Accessible { - my $self = shift; - my %Cols = ( Name => 'read', - Description => 'read', - ApplicableTransTypes => 'read', - ExecModule => 'read', - Argument => 'read', - Creator => 'read/auto', - Created => 'read/auto', - LastUpdatedBy => 'read/auto', - LastUpdated => 'read/auto' - ); - return($self->SUPER::_Accessible(@_, %Cols)); -} -# }}} - -# {{{ sub Create - -=head2 Create - - Takes a hash. Creates a new Condition entry. - should be better documented. - -=cut - -sub Create { - my $self = shift; - return($self->SUPER::Create(@_)); -} -# }}} - -# {{{ sub Delete - -=head2 Delete - -No API available for deleting things just yet. - -=cut - -sub Delete { - my $self = shift; - return(0, $self->loc('Unimplemented')); -} -# }}} - -# {{{ sub Load - -=head2 Load IDENTIFIER - -Loads a condition takes a name or ScripCondition id. - -=cut - -sub Load { - my $self = shift; - my $identifier = shift; - - unless (defined $identifier) { - return (undef); - } - - if ($identifier !~ /\D/) { - return ($self->SUPER::LoadById($identifier)); - } - else { - return ($self->LoadByCol('Name', $identifier)); - } -} -# }}} - -# {{{ sub LoadCondition - -=head2 LoadCondition HASH - -takes a hash which has the following elements: TransactionObj and TicketObj. -Loads the Condition module in question. - -=cut - - -sub LoadCondition { - my $self = shift; - my %args = ( TransactionObj => undef, - TicketObj => undef, - @_ ); - - #TODO: Put this in an eval - $self->ExecModule =~ /^(\w+)$/; - my $module = $1; - my $type = "RT::Condition::". $module; - - eval "require $type" || die "Require of $type failed.\n$@\n"; - - $self->{'Condition'} = $type->new ( 'ScripConditionObj' => $self, - 'TicketObj' => $args{'TicketObj'}, - 'ScripObj' => $args{'ScripObj'}, - 'TransactionObj' => $args{'TransactionObj'}, - 'Argument' => $self->Argument, - 'ApplicableTransTypes' => $self->ApplicableTransTypes, - CurrentUser => $self->CurrentUser - ); -} -# }}} - -# {{{ The following methods call the Condition object - - -# {{{ sub Describe - -=head2 Describe - -Helper method to call the condition module\'s Describe method. - -=cut - -sub Describe { - my $self = shift; - return ($self->{'Condition'}->Describe()); - -} -# }}} - -# {{{ sub IsApplicable - -=head2 IsApplicable - -Helper method to call the condition module\'s IsApplicable method. - -=cut - -sub IsApplicable { - my $self = shift; - return ($self->{'Condition'}->IsApplicable()); - -} -# }}} - -# }}} - -# {{{ sub DESTROY -sub DESTROY { - my $self=shift; - $self->{'Condition'} = undef; -} -# }}} - - -1; - - diff --git a/rt/lib/RT/ScripConditions.pm b/rt/lib/RT/ScripConditions.pm deleted file mode 100755 index 34f788d9c..000000000 --- a/rt/lib/RT/ScripConditions.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::ScripConditions -- Class Description - -=head1 SYNOPSIS - - use RT::ScripConditions - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::ScripConditions; - -use RT::SearchBuilder; -use RT::ScripCondition; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'ScripConditions'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=item NewItem - -Returns an empty new RT::ScripCondition item - -=cut - -sub NewItem { - my $self = shift; - return(RT::ScripCondition->new($self->CurrentUser)); -} - - eval "require RT::ScripConditions_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripConditions_Overlay.pm}) { - die $@; - }; - - eval "require RT::ScripConditions_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripConditions_Vendor.pm}) { - die $@; - }; - - eval "require RT::ScripConditions_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/ScripConditions_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::ScripConditions_Overlay, RT::ScripConditions_Vendor, RT::ScripConditions_Local - -=cut - - -1; diff --git a/rt/lib/RT/ScripConditions_Overlay.pm b/rt/lib/RT/ScripConditions_Overlay.pm deleted file mode 100644 index 53cabd048..000000000 --- a/rt/lib/RT/ScripConditions_Overlay.pm +++ /dev/null @@ -1,114 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::ScripConditions - Collection of Action objects - -=head1 SYNOPSIS - - use RT::ScripConditions; - - -=head1 DESCRIPTION - - - -=begin testing - -ok (require RT::ScripConditions); - -=end testing - -=head1 METHODS - -=cut - - -package RT::ScripConditions; - -use strict; -no warnings qw(redefine); - -# {{{ sub _Init -sub _Init { - my $self = shift; - $self->{'table'} = "ScripConditions"; - $self->{'primary_key'} = "id"; - return ( $self->SUPER::_Init(@_)); -} -# }}} - -# {{{ sub LimitToType -sub LimitToType { - my $self = shift; - my $type = shift; - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Type', - VALUE => "$type") - if defined $type; - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Type', - VALUE => "Correspond") - if $type eq "Create"; - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Type', - VALUE => 'any'); - -} -# }}} - -# {{{ sub NewItem -sub NewItem { - my $self = shift; - return(RT::ScripCondition->new($self->CurrentUser)); -} -# }}} - - -1; - diff --git a/rt/lib/RT/Scrip_Overlay.pm b/rt/lib/RT/Scrip_Overlay.pm deleted file mode 100644 index 7d1a6979f..000000000 --- a/rt/lib/RT/Scrip_Overlay.pm +++ /dev/null @@ -1,618 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Scrip - an RT Scrip object - -=head1 SYNOPSIS - - use RT::Scrip; - -=head1 DESCRIPTION - - -=head1 METHODS - -=begin testing - -ok (require RT::Scrip); - - -my $q = RT::Queue->new($RT::SystemUser); -$q->Create(Name => 'ScripTest'); -ok($q->Id, "Created a scriptest queue"); - -my $s1 = RT::Scrip->new($RT::SystemUser); -my ($val, $msg) =$s1->Create( Queue => $q->Id, - ScripAction => 'User Defined', - ScripCondition => 'User Defined', - CustomIsApplicableCode => 'if ($self->TicketObj->Subject =~ /fire/) { return (1);} else { return(0)}', - CustomPrepareCode => 'return 1', - CustomCommitCode => '$self->TicketObj->SetPriority("87");', - Template => 'Blank' - ); -ok($val,$msg); - -my $ticket = RT::Ticket->new($RT::SystemUser); -my ($tv,$ttv,$tm) = $ticket->Create(Queue => $q->Id, - Subject => "hair on fire", - ); -ok($tv, $tm); - -ok ($ticket->Priority == '87', "Ticket priority is set right"); - - -my $ticket2 = RT::Ticket->new($RT::SystemUser); -my ($t2v,$t2tv,$t2m) = $ticket2->Create(Queue => $q->Id, - Subject => "hair in water", - ); -ok($t2v, $t2m); - -ok ($ticket2->Priority != '87', "Ticket priority is set right"); - - -=end testing - -=cut - - -package RT::Scrip; - -use strict; -no warnings qw(redefine); - -# {{{ sub Create - -=head2 Create - -Creates a new entry in the Scrips table. Takes a paramhash with: - - Queue => 0, - Description => undef, - Template => undef, - ScripAction => undef, - ScripCondition => undef, - CustomPrepareCode => undef, - CustomCommitCode => undef, - CustomIsApplicableCode => undef, - - - - -Returns (retval, msg); -retval is 0 for failure or scrip id. msg is a textual description of what happened. - -=cut - -sub Create { - my $self = shift; - my %args = ( - Queue => 0, - Template => 0, # name or id - ScripAction => 0, # name or id - ScripCondition => 0, # name or id - Stage => 'TransactionCreate', - Description => undef, - CustomPrepareCode => undef, - CustomCommitCode => undef, - CustomIsApplicableCode => undef, - @_ - ); - - unless ( $args{'Queue'} ) { - unless ( $self->CurrentUser->HasRight( Object => $RT::System, - Right => 'ModifyScrips' ) - ) { - return ( 0, $self->loc('Permission Denied') ); - } - $args{'Queue'} = 0; # avoid undef sneaking in - } - else { - my $QueueObj = RT::Queue->new( $self->CurrentUser ); - $QueueObj->Load( $args{'Queue'} ); - unless ( $QueueObj->id ) { - return ( 0, $self->loc('Invalid queue') ); - } - unless ( $QueueObj->CurrentUserHasRight('ModifyScrips') ) { - return ( 0, $self->loc('Permission Denied') ); - } - $args{'Queue'} = $QueueObj->id(); - } - - #TODO +++ validate input - - require RT::ScripAction; - return ( 0, $self->loc("Action is mandatory argument") ) - unless $args{'ScripAction'}; - my $action = RT::ScripAction->new( $self->CurrentUser ); - $action->Load( $args{'ScripAction'} ); - return ( 0, $self->loc( "Action [_1] not found", $args{'ScripAction'} ) ) - unless $action->Id; - - require RT::Template; - return ( 0, $self->loc("Template is mandatory argument") ) - unless $args{'Template'}; - my $template = RT::Template->new( $self->CurrentUser ); - $template->Load( $args{'Template'} ); - return ( 0, $self->loc('Template not found') ) - unless $template->Id; - - require RT::ScripCondition; - return ( 0, $self->loc("Condition is mandatory argument") ) - unless $args{'ScripCondition'}; - my $condition = RT::ScripCondition->new( $self->CurrentUser ); - $condition->Load( $args{'ScripCondition'} ); - return ( 0, $self->loc('Condition not found') ) - unless $condition->Id; - - my ( $id, $msg ) = $self->SUPER::Create( - Queue => $args{'Queue'}, - Template => $template->Id, - ScripCondition => $condition->id, - Stage => $args{'Stage'}, - ScripAction => $action->Id, - Description => $args{'Description'}, - CustomPrepareCode => $args{'CustomPrepareCode'}, - CustomCommitCode => $args{'CustomCommitCode'}, - CustomIsApplicableCode => $args{'CustomIsApplicableCode'}, - ); - if ( $id ) { - return ( $id, $self->loc('Scrip Created') ); - } - else { - return ( $id, $msg ); - } -} - -# }}} - -# {{{ sub Delete - -=head2 Delete - -Delete this object - -=cut - -sub Delete { - my $self = shift; - - unless ( $self->CurrentUserHasRight('ModifyScrips') ) { - return ( 0, $self->loc('Permission Denied') ); - } - - return ( $self->SUPER::Delete(@_) ); -} - -# }}} - -# {{{ sub QueueObj - -=head2 QueueObj - -Retuns an RT::Queue object with this Scrip\'s queue - -=cut - -sub QueueObj { - my $self = shift; - - if ( !$self->{'QueueObj'} ) { - require RT::Queue; - $self->{'QueueObj'} = RT::Queue->new( $self->CurrentUser ); - $self->{'QueueObj'}->Load( $self->__Value('Queue') ); - } - return ( $self->{'QueueObj'} ); -} - -# }}} - -# {{{ sub ActionObj - -=head2 ActionObj - -Retuns an RT::Action object with this Scrip\'s Action - -=cut - -sub ActionObj { - my $self = shift; - - unless ( defined $self->{'ScripActionObj'} ) { - require RT::ScripAction; - - $self->{'ScripActionObj'} = RT::ScripAction->new( $self->CurrentUser ); - - #TODO: why are we loading Actions with templates like this. - # two separate methods might make more sense - $self->{'ScripActionObj'}->Load( $self->ScripAction, $self->Template ); - } - return ( $self->{'ScripActionObj'} ); -} - -# }}} - -# {{{ sub ConditionObj - -=head2 ConditionObj - -Retuns an RT::ScripCondition object with this Scrip's IsApplicable - -=cut - -sub ConditionObj { - my $self = shift; - - unless ( defined $self->{'ScripConditionObj'} ) { - require RT::ScripCondition; - $self->{'ScripConditionObj'} = - RT::ScripCondition->new( $self->CurrentUser ); - if ( $self->ScripCondition ) { - $self->{'ScripConditionObj'}->Load( $self->ScripCondition ); - } - } - return ( $self->{'ScripConditionObj'} ); -} - -# }}} - -# {{{ sub TemplateObj - -=head2 TemplateObj - -Retuns an RT::Template object with this Scrip\'s Template - -=cut - -sub TemplateObj { - my $self = shift; - - unless ( defined $self->{'TemplateObj'} ) { - require RT::Template; - $self->{'TemplateObj'} = RT::Template->new( $self->CurrentUser ); - $self->{'TemplateObj'}->Load( $self->Template ); - } - return ( $self->{'TemplateObj'} ); -} - -# }}} - -# {{{ Dealing with this instance of a scrip - -# {{{ sub Apply - -=head2 Apply { TicketObj => undef, TransactionObj => undef} - -This method instantiates the ScripCondition and ScripAction objects for a -single execution of this scrip. it then calls the IsApplicable method of the -ScripCondition. -If that succeeds, it calls the Prepare method of the -ScripAction. If that succeeds, it calls the Commit method of the ScripAction. - -Usually, the ticket and transaction objects passed to this method -should be loaded by the SuperUser role - -=cut - - -# XXX TODO : This code appears to be obsoleted in favor of similar code in Scrips->Apply. -# Why is this here? Is it still called? - -sub Apply { - my $self = shift; - my %args = ( TicketObj => undef, - TransactionObj => undef, - @_ ); - - $RT::Logger->debug("Now applying scrip ".$self->Id . " for transaction ".$args{'TransactionObj'}->id); - - my $ApplicableTransactionObj = $self->IsApplicable( TicketObj => $args{'TicketObj'}, - TransactionObj => $args{'TransactionObj'} ); - unless ( $ApplicableTransactionObj ) { - return undef; - } - - if ( $ApplicableTransactionObj->id != $args{'TransactionObj'}->id ) { - $RT::Logger->debug("Found an applicable transaction ".$ApplicableTransactionObj->Id . " in the same batch with transaction ".$args{'TransactionObj'}->id); - } - - #If it's applicable, prepare and commit it - $RT::Logger->debug("Now preparing scrip ".$self->Id . " for transaction ".$ApplicableTransactionObj->id); - unless ( $self->Prepare( TicketObj => $args{'TicketObj'}, - TransactionObj => $ApplicableTransactionObj ) - ) { - return undef; - } - - $RT::Logger->debug("Now commiting scrip ".$self->Id . " for transaction ".$ApplicableTransactionObj->id); - unless ( $self->Commit( TicketObj => $args{'TicketObj'}, - TransactionObj => $ApplicableTransactionObj) - ) { - return undef; - } - - $RT::Logger->debug("We actually finished scrip ".$self->Id . " for transaction ".$ApplicableTransactionObj->id); - return (1); - -} - -# }}} - -# {{{ sub IsApplicable - -=head2 IsApplicable - -Calls the Condition object\'s IsApplicable method - -Upon success, returns the applicable Transaction object. -Otherwise, undef is returned. - -If the Scrip is in the TransactionCreate Stage (the usual case), only test -the associated Transaction object to see if it is applicable. - -For Scrips in the TransactionBatch Stage, test all Transaction objects -created during the Ticket object's lifetime, and returns the first one -that is applicable. - -=cut - -sub IsApplicable { - my $self = shift; - my %args = ( TicketObj => undef, - TransactionObj => undef, - @_ ); - - my $return; - eval { - - my @Transactions; - - if ( $self->Stage eq 'TransactionCreate') { - # Only look at our current Transaction - @Transactions = ( $args{'TransactionObj'} ); - } - elsif ( $self->Stage eq 'TransactionBatch') { - # Look at all Transactions in this Batch - @Transactions = @{ $args{'TicketObj'}->TransactionBatch || [] }; - } - else { - $RT::Logger->error( "Unknown Scrip stage:" . $self->Stage ); - return (undef); - } - my $ConditionObj = $self->ConditionObj; - foreach my $TransactionObj ( @Transactions ) { - # in TxnBatch stage we can select scrips that are not applicable to all txns - my $txn_type = $TransactionObj->Type; - next unless( $ConditionObj->ApplicableTransTypes =~ /(?:^|,)(?:Any|\Q$txn_type\E)(?:,|$)/i ); - # Load the scrip's Condition object - $ConditionObj->LoadCondition( - ScripObj => $self, - TicketObj => $args{'TicketObj'}, - TransactionObj => $TransactionObj, - ); - - if ( $ConditionObj->IsApplicable() ) { - # We found an application Transaction -- return it - $return = $TransactionObj; - last; - } - } - }; - if ($@) { - $RT::Logger->error( "Scrip IsApplicable " . $self->Id . " died. - " . $@ ); - return (undef); - } - - return ($return); - -} - -# }}} - -# {{{ SUb Prepare - -=head2 Prepare - -Calls the action object's prepare method - -=cut - -sub Prepare { - my $self = shift; - my %args = ( TicketObj => undef, - TransactionObj => undef, - @_ ); - - my $return; - eval { - $self->ActionObj->LoadAction( ScripObj => $self, - TicketObj => $args{'TicketObj'}, - TransactionObj => $args{'TransactionObj'}, - ); - - $return = $self->ActionObj->Prepare(); - }; - if ($@) { - $RT::Logger->error( "Scrip Prepare " . $self->Id . " died. - " . $@ ); - return (undef); - } - unless ($return) { - } - return ($return); -} - -# }}} - -# {{{ sub Commit - -=head2 Commit - -Calls the action object's commit method - -=cut - -sub Commit { - my $self = shift; - my %args = ( TicketObj => undef, - TransactionObj => undef, - @_ ); - - my $return; - eval { - $return = $self->ActionObj->Commit(); - }; - -#Searchbuilder caching isn't perfectly coherent. got to reload the ticket object, since it -# may have changed - $args{'TicketObj'}->Load( $args{'TicketObj'}->Id ); - - if ($@) { - $RT::Logger->error( "Scrip Commit " . $self->Id . " died. - " . $@ ); - return (undef); - } - - # Not destroying or weakening hte Action and Condition here could cause a - # leak - - return ($return); -} - -# }}} - -# }}} - -# {{{ ACL related methods - -# {{{ sub _Set - -# does an acl check and then passes off the call -sub _Set { - my $self = shift; - - unless ( $self->CurrentUserHasRight('ModifyScrips') ) { - $RT::Logger->debug( - "CurrentUser can't modify Scrips for " . $self->Queue . "\n" ); - return ( 0, $self->loc('Permission Denied') ); - } - return $self->__Set(@_); -} - -# }}} - -# {{{ sub _Value -# does an acl check and then passes off the call -sub _Value { - my $self = shift; - - unless ( $self->CurrentUserHasRight('ShowScrips') ) { - $RT::Logger->debug( "CurrentUser can't modify Scrips for " - . $self->__Value('Queue') - . "\n" ); - return (undef); - } - - return $self->__Value(@_); -} - -# }}} - -# {{{ sub CurrentUserHasRight - -=head2 CurrentUserHasRight - -Helper menthod for HasRight. Presets Principal to CurrentUser then -calls HasRight. - -=cut - -sub CurrentUserHasRight { - my $self = shift; - my $right = shift; - return ( $self->HasRight( Principal => $self->CurrentUser->UserObj, - Right => $right ) ); - -} - -# }}} - -# {{{ sub HasRight - -=head2 HasRight - -Takes a param-hash consisting of "Right" and "Principal" Principal is -an RT::User object or an RT::CurrentUser object. "Right" is a textual -Right string that applies to Scrips. - -=cut - -sub HasRight { - my $self = shift; - my %args = ( Right => undef, - Principal => undef, - @_ ); - - if ( $self->SUPER::_Value('Queue') ) { - return $args{'Principal'}->HasRight( - Right => $args{'Right'}, - Object => $self->QueueObj - ); - } - else { - return $args{'Principal'}->HasRight( - Object => $RT::System, - Right => $args{'Right'}, - ); - } -} - -# }}} - -# }}} - -1; - diff --git a/rt/lib/RT/Scrips.pm b/rt/lib/RT/Scrips.pm deleted file mode 100755 index a39443136..000000000 --- a/rt/lib/RT/Scrips.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent -# -# (Except where explictly superceded by other copyright notices) -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by ) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::Scrips -- Class Description - -=head1 SYNOPSIS - - use RT::Scrips - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::Scrips; - -use RT::SearchBuilder; -use RT::Scrip; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'Scrips'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=item NewItem - -Returns an empty new RT::Scrip item - -=cut - -sub NewItem { - my $self = shift; - return(RT::Scrip->new($self->CurrentUser)); -} - - eval "require RT::Scrips_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/Scrips_Overlay.pm}) { - die $@; - }; - - eval "require RT::Scrips_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/Scrips_Vendor.pm}) { - die $@; - }; - - eval "require RT::Scrips_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/Scrips_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::Scrips_Overlay, RT::Scrips_Vendor, RT::Scrips_Local - -=cut - - -1; diff --git a/rt/lib/RT/Scrips_Overlay.pm b/rt/lib/RT/Scrips_Overlay.pm deleted file mode 100644 index 64a8437a0..000000000 --- a/rt/lib/RT/Scrips_Overlay.pm +++ /dev/null @@ -1,371 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Scrips - a collection of RT Scrip objects - -=head1 SYNOPSIS - - use RT::Scrips; - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::Scrips); - -=end testing - -=cut - - -package RT::Scrips; - -use strict; -no warnings qw(redefine); - -# {{{ sub LimitToQueue - -=head2 LimitToQueue - -Takes a queue id (numerical) as its only argument. Makes sure that -Scopes it pulls out apply to this queue (or another that you've selected with -another call to this method - -=cut - -sub LimitToQueue { - my $self = shift; - my $queue = shift; - - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Queue', - VALUE => "$queue") - if defined $queue; - -} -# }}} - -# {{{ sub LimitToGlobal - -=head2 LimitToGlobal - -Makes sure that -Scopes it pulls out apply to all queues (or another that you've selected with -another call to this method or LimitToQueue - -=cut - - -sub LimitToGlobal { - my $self = shift; - - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Queue', - VALUE => 0); - -} -# }}} - -# {{{ sub NewItem -sub NewItem { - my $self = shift; - - return(new RT::Scrip($self->CurrentUser)); -} -# }}} - -# {{{ sub Next - -=head2 Next - -Returns the next scrip that this user can see. - -=cut - -sub Next { - my $self = shift; - - - my $Scrip = $self->SUPER::Next(); - if ((defined($Scrip)) and (ref($Scrip))) { - - if ($Scrip->CurrentUserHasRight('ShowScrips')) { - return($Scrip); - } - - #If the user doesn't have the right to show this scrip - else { - return($self->Next()); - } - } - #if there never was any scrip - else { - return(undef); - } - -} -# }}} - -=head2 Apply - -Run through the relevant scrips. Scrips will run in order based on -description. (Most common use case is to prepend a number to the description, -forcing the scrips to run in ascending alphanumerical order.) - -=cut - -sub Apply { - my $self = shift; - - my %args = ( TicketObj => undef, - Ticket => undef, - Transaction => undef, - TransactionObj => undef, - Stage => undef, - Type => undef, - @_ ); - - $self->Prepare(%args); - $self->Commit(); - -} - -=head2 Commit - -Commit all of this object's prepared scrips - -=cut - -sub Commit { - my $self = shift; - - - foreach my $scrip (@{$self->Prepared}) { - - $scrip->Commit( TicketObj => $self->{'TicketObj'}, - TransactionObj => $self->{'TransactionObj'} ); - } -} - - -=head2 Prepare - -Only prepare the scrips, returning an array of the scrips we're interested in -in order of preparation, not execution - -=cut - -sub Prepare { - my $self = shift; - my %args = ( TicketObj => undef, - Ticket => undef, - Transaction => undef, - TransactionObj => undef, - Stage => undef, - Type => undef, - @_ ); - - #We're really going to need a non-acled ticket for the scrips to work - $self->_SetupSourceObjects( TicketObj => $args{'TicketObj'}, - Ticket => $args{'Ticket'}, - TransactionObj => $args{'TransactionObj'}, - Transaction => $args{'Transaction'} ); - - - $self->_FindScrips( Stage => $args{'Stage'}, Type => $args{'Type'} ); - - - #Iterate through each script and check it's applicability. - while ( my $scrip = $self->Next() ) { - - next - unless ( $scrip->IsApplicable( - TicketObj => $self->{'TicketObj'}, - TransactionObj => $self->{'TransactionObj'} - ) ); - - #If it's applicable, prepare and commit it - next - unless ( $scrip->Prepare( TicketObj => $self->{'TicketObj'}, - TransactionObj => $self->{'TransactionObj'} - ) ); - push @{$self->{'prepared_scrips'}}, $scrip; - - } - - return (@{$self->Prepared}); - -}; - -=head2 Prepared - -Returns an arrayref of the scrips this object has prepared - - -=cut - -sub Prepared { - my $self = shift; - return ($self->{'prepared_scrips'} || []); -} - - -# {{{ sup _SetupSourceObjects - -=head2 _SetupSourceObjects { TicketObj , Ticket, Transaction, TransactionObj } - -Setup a ticket and transaction for this Scrip collection to work with as it runs through the -relevant scrips. (Also to figure out which scrips apply) - -Returns: nothing - -=cut - - -sub _SetupSourceObjects { - - my $self = shift; - my %args = ( - TicketObj => undef, - Ticket => undef, - Transaction => undef, - TransactionObj => undef, - @_ ); - - if ( ( $self->{'TicketObj'} = $args{'TicketObj'} ) ) { - $self->{'TicketObj'}->CurrentUser( $self->CurrentUser ); - } - else { - $self->{'TicketObj'} = RT::Ticket->new( $self->CurrentUser ); - $self->{'TicketObj'}->Load( $args{'Ticket'} ) - || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}\n"); - } - - if ( ( $self->{'TransactionObj'} = $args{'TransactionObj'} ) ) { - $self->{'TransactionObj'}->CurrentUser( $self->CurrentUser ); - } - else { - $self->{'TransactionObj'} = RT::Transaction->new( $self->CurrentUser ); - $self->{'TransactionObj'}->Load( $args{'Transaction'} ) - || $RT::Logger->err( "$self couldn't load transaction $args{'Transaction'}\n"); - } -} - -# }}} - -# {{{ sub _FindScrips; - -=head2 _FindScrips - -Find only the apropriate scrips for whatever we're doing now. Order them -by their description. (Most common use case is to prepend a number to the -description, forcing the scrips to display and run in ascending alphanumerical -order.) - -=cut - -sub _FindScrips { - my $self = shift; - my %args = ( - Stage => undef, - Type => undef, - @_ ); - - - $self->LimitToQueue( $self->{'TicketObj'}->QueueObj->Id ) - ; #Limit it to $Ticket->QueueObj->Id - $self->LimitToGlobal(); - # or to "global" - - $self->Limit( FIELD => "Stage", VALUE => $args{'Stage'} ); - - my $ConditionsAlias = $self->NewAlias('ScripConditions'); - - $self->Join( - ALIAS1 => 'main', - FIELD1 => 'ScripCondition', - ALIAS2 => $ConditionsAlias, - FIELD2 => 'id' - ); - - #We only want things where the scrip applies to this sort of transaction - # TransactionBatch stage can define list of transaction - foreach( split /\s*,\s*/, ($args{'Type'} || '') ) { - $self->Limit( - ALIAS => $ConditionsAlias, - FIELD => 'ApplicableTransTypes', - OPERATOR => 'LIKE', - VALUE => $_, - ENTRYAGGREGATOR => 'OR', - ) - } - - # Or where the scrip applies to any transaction - $self->Limit( - ALIAS => $ConditionsAlias, - FIELD => 'ApplicableTransTypes', - OPERATOR => 'LIKE', - VALUE => "Any", - ENTRYAGGREGATOR => 'OR', - ); - - # Promise some kind of ordering - $self->OrderBy( FIELD => 'description' ); - - $RT::Logger->debug("Found ".$self->Count. " scrips"); -} - -# }}} - -1; - diff --git a/rt/lib/RT/Search/ActiveTicketsInQueue.pm b/rt/lib/RT/Search/ActiveTicketsInQueue.pm deleted file mode 100644 index d75cd1f2c..000000000 --- a/rt/lib/RT/Search/ActiveTicketsInQueue.pm +++ /dev/null @@ -1,102 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Search::ActiveTicketsInQueue - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -Find all active tickets in the queue named in the argument passed in - -=head1 METHODS - - -=begin testing - -ok (require RT::Search::Generic); - -=end testing - - -=cut - -package RT::Search::ActiveTicketsInQueue; - -use strict; -use base qw(RT::Search::Generic); - - -# {{{ sub Describe -sub Describe { - my $self = shift; - return ($self->loc("No description for [_1]", ref $self)); -} -# }}} - -# {{{ sub Prepare -sub Prepare { - my $self = shift; - - $self->TicketsObj->LimitQueue(VALUE => $self->Argument); - - foreach my $status (RT::Queue->ActiveStatusArray()) { - $self->TicketsObj->LimitStatus(VALUE => $status); - } - - return(1); -} -# }}} - -eval "require RT::Search::ActiveTicketsInQueue_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/ActiveTicketsInQueue_Vendor.pm}); -eval "require RT::Search::ActiveTicketsInQueue_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/ActiveTicketsInQueue_Local.pm}); - -1; diff --git a/rt/lib/RT/Search/FromSQL.pm b/rt/lib/RT/Search/FromSQL.pm deleted file mode 100644 index e3a126416..000000000 --- a/rt/lib/RT/Search/FromSQL.pm +++ /dev/null @@ -1,110 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Search::FromSQL - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -Find all tickets described by the SQL statement passed as an argument - -=head1 METHODS - - -=begin testing - -ok (require RT::Search::Generic); - -=end testing - - -=cut - -package RT::Search::FromSQL; - -use strict; -use base qw(RT::Search::Generic); - -=head2 Describe - -Returns a localized string describing the module's function. - -=cut - -# {{{ sub Describe -sub Describe { - my $self = shift; - return ($self->loc("TicketSQL search module", ref $self)); -} -# }}} - -=head2 Prepare - -The meat of the module. Runs a search on its Tickets object, using -the SQL string described in its Argument object. The Tickets object -is reduced to those tickets matching the SQL query. - -=cut - -# {{{ sub Prepare -sub Prepare { - my $self = shift; - - $self->TicketsObj->FromSQL($self->Argument); - return(1); -} -# }}} - -eval "require RT::Search::FromSQL_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/FromSQL_Vendor.pm}); -eval "require RT::Search::FromSQL_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/FromSQL_Local.pm}); - -1; diff --git a/rt/lib/RT/Search/Generic.pm b/rt/lib/RT/Search/Generic.pm deleted file mode 100644 index 15e5e9630..000000000 --- a/rt/lib/RT/Search/Generic.pm +++ /dev/null @@ -1,152 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Search::Generic - ; - -=head1 SYNOPSIS - - use RT::Search::Generic; - my $tickets = RT::Tickets->new($CurrentUser); - my $foo = RT::Search::Generic->new(Argument => $arg, - TicketsObj => $tickets); - $foo->Prepare(); - while ( my $ticket = $foo->Next ) { - # Do something with each ticket we've found - } - - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::Search::Generic); - -=end testing - - -=cut - -package RT::Search::Generic; - -use strict; - -# {{{ sub new -sub new { - my $proto = shift; - my $class = ref($proto) || $proto; - my $self = {}; - bless ($self, $class); - $self->_Init(@_); - return $self; -} -# }}} - -# {{{ sub _Init -sub _Init { - my $self = shift; - my %args = ( - TicketsObj => undef, - Argument => undef, - @_ ); - - $self->{'TicketsObj'} = $args{'TicketsObj'}; - $self->{'Argument'} = $args{'Argument'}; -} -# }}} - -# {{{ sub Argument - -=head2 Argument - -Return the optional argument associated with this Search - -=cut - -sub Argument { - my $self = shift; - return($self->{'Argument'}); -} -# }}} - - -=head2 TicketsObj - -Return the Tickets object passed into this search - -=cut - -sub TicketsObj { - my $self = shift; - return($self->{'TicketsObj'}); -} - -# {{{ sub Describe -sub Describe { - my $self = shift; - return ($self->loc("No description for [_1]", ref $self)); -} -# }}} - -# {{{ sub Prepare -sub Prepare { - my $self = shift; - return(1); -} -# }}} - -eval "require RT::Search::Generic_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/Generic_Vendor.pm}); -eval "require RT::Search::Generic_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/Generic_Local.pm}); - -1; diff --git a/rt/lib/RT/Search/Googleish.pm b/rt/lib/RT/Search/Googleish.pm deleted file mode 100644 index a2a887377..000000000 --- a/rt/lib/RT/Search/Googleish.pm +++ /dev/null @@ -1,188 +0,0 @@ - -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::Search::Googlish - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -Use the argument passed in as a "Google-style" set of keywords - -=head1 METHODS - - -=begin testing - -ok (require RT::Search::Generic); - -=end testing - - -=cut - -package RT::Search::Googleish; - -use strict; -use base qw(RT::Search::Generic); - - -# sub _Init {{{ -sub _Init { - my $self = shift; - my %args = @_; - - $self->{'Queues'} = delete($args{'Queues'}) || []; - $self->SUPER::_Init(%args); -} -# }}} - -# {{{ sub Describe -sub Describe { - my $self = shift; - return ($self->loc("No description for [_1]", ref $self)); -} -# }}} - -# {{{ sub QueryToSQL -sub QueryToSQL { - my $self = shift; - my $query = shift || $self->Argument; - my @keywords = split /\s+/, $query; - my ( - @tql_clauses, @owner_clauses, @queue_clauses, - @user_clauses, @id_clauses, @status_clauses - ); - my ( $Queue, $User ); - for my $key (@keywords) { - - # Is this a ticket number? If so, go to it. - if ( $key =~ m/^\d+$/ ) { - push @id_clauses, "id = '$key'"; - } - - elsif ( $key =~ /\w+\@\w+/ ) { - push @user_clauses, "Requestor LIKE '$key'"; - } - - # Is there a status with this name? - elsif ( - $Queue = RT::Queue->new( $self->TicketsObj->CurrentUser ) - and $Queue->IsValidStatus($key) - ) - { - push @status_clauses, "Status = '" . $key . "'"; - } - - # Is there a owner named $key? - # Is there a queue named $key? - elsif ( $Queue = RT::Queue->new( $self->TicketsObj->CurrentUser ) - and $Queue->Load($key) ) - { - push @queue_clauses, "Queue = '" . $Queue->Name . "'"; - } - - # Is there a owner named $key? - elsif ( $User = RT::User->new( $self->TicketsObj->CurrentUser ) - and $User->Load($key) - and $User->Privileged ) - { - push @owner_clauses, "Owner = '" . $User->Name . "'"; - } - - elsif ($key =~ /^fulltext:(.*?)$/i) { - $key = $1; - $key =~ s/['\\].*//g; - push @tql_clauses, "Content LIKE '$key'"; - - } - - # Else, subject must contain $key - else { - $key =~ s/['\\].*//g; - push @tql_clauses, "Subject LIKE '$key'"; - } - } - - # restrict to any queues requested by the caller - for my $queue (@{ $self->{'Queues'} }) { - my $QueueObj = RT::Queue->new($self->TicketsObj->CurrentUser); - $QueueObj->Load($queue) or next; - push @queue_clauses, "Queue = '" . $QueueObj->Name . "'"; - } - - push @tql_clauses, join( " OR ", sort @id_clauses ); - push @tql_clauses, join( " OR ", sort @owner_clauses ); - push @tql_clauses, join( " OR ", sort @status_clauses ); - push @tql_clauses, join( " OR ", sort @user_clauses ); - push @tql_clauses, join( " OR ", sort @queue_clauses ); - @tql_clauses = grep { $_ ? $_ = "( $_ )" : undef } @tql_clauses; - return join " AND ", sort @tql_clauses; -} -# }}} - -# {{{ sub Prepare -sub Prepare { - my $self = shift; - my $tql = $self->QueryToSQL($self->Argument); - - $RT::Logger->crit($tql); - - $self->TicketsObj->FromSQL($tql); - return(1); -} -# }}} - -eval "require RT::Search::Googleish_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/Googleish_Vendor.pm}); -eval "require RT::Search::Googleish_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/Googleish_Local.pm}); - -1; diff --git a/rt/lib/RT/SearchBuilder.pm b/rt/lib/RT/SearchBuilder.pm deleted file mode 100644 index 42ec5a7ff..000000000 --- a/rt/lib/RT/SearchBuilder.pm +++ /dev/null @@ -1,389 +0,0 @@ -# BEGIN BPS TAGGED BLOCK {{{ -# -# COPYRIGHT: -# -# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC -# -# -# (Except where explicitly superseded by other copyright notices) -# -# -# LICENSE: -# -# This work is made available to you under the terms of Version 2 of -# the GNU General Public License. A copy of that license should have -# been provided with this software, but in any event can be snarfed -# from www.gnu.org. -# -# This work is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301 or visit their web page on the internet at -# http://www.gnu.org/copyleft/gpl.html. -# -# -# CONTRIBUTION SUBMISSION POLICY: -# -# (The following paragraph is not intended to limit the rights granted -# to you to modify and distribute this software under the terms of -# the GNU General Public License and is only of importance to you if -# you choose to contribute your changes and enhancements to the -# community by submitting them to Best Practical Solutions, LLC.) -# -# By intentionally submitting any modifications, corrections or -# derivatives to this work, or any other work intended for use with -# Request Tracker, to Best Practical Solutions, LLC, you confirm that -# you are the copyright holder for those contributions and you grant -# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, -# royalty-free, perpetual, license to use, copy, create derivative -# works based on those contributions, and sublicense and distribute -# those contributions and any derivatives thereof. -# -# END BPS TAGGED BLOCK }}} -=head1 NAME - - RT::SearchBuilder - a baseclass for RT collection objects - -=head1 SYNOPSIS - -=head1 DESCRIPTION - - -=head1 METHODS - - -=begin testing - -ok (require RT::SearchBuilder); - -=end testing - - -=cut - -package RT::SearchBuilder; - -use RT::Base; -use DBIx::SearchBuilder "1.48"; - -use strict; -use vars qw(@ISA); -@ISA = qw(DBIx::SearchBuilder RT::Base); - -# {{{ sub _Init -sub _Init { - my $self = shift; - - $self->{'user'} = shift; - unless(defined($self->CurrentUser)) { - use Carp; - Carp::confess("$self was created without a CurrentUser"); - $RT::Logger->err("$self was created without a CurrentUser"); - return(0); - } - $self->SUPER::_Init( 'Handle' => $RT::Handle); -} -# }}} - -# {{{ sub LimitToEnabled - -=head2 LimitToEnabled - -Only find items that haven\'t been disabled - -=cut - -sub LimitToEnabled { - my $self = shift; - - $self->Limit( FIELD => 'Disabled', - VALUE => '0', - OPERATOR => '=' ); -} -# }}} - -# {{{ sub LimitToDisabled - -=head2 LimitToDeleted - -Only find items that have been deleted. - -=cut - -sub LimitToDeleted { - my $self = shift; - - $self->{'find_disabled_rows'} = 1; - $self->Limit( FIELD => 'Disabled', - OPERATOR => '=', - VALUE => '1' - ); -} -# }}} - -# {{{ sub LimitAttribute - -=head2 LimitAttribute PARAMHASH - -Takes NAME, OPERATOR and VALUE to find records that has the -matching Attribute. - -If EMPTY is set, also select rows with an empty string as -Attribute's Content. - -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 -); - -sub LimitAttribute { - my ($self, %args) = @_; - my $clause = 'ALIAS'; - my $operator = ($args{OPERATOR} || '='); - - if ($args{NULL} and exists $args{VALUE}) { - $clause = 'LEFTJOIN'; - $operator = $Negate{$operator}; - } - elsif ($args{NEGATE}) { - $operator = $Negate{$operator}; - } - - my $alias = $self->Join( - TYPE => 'left', - ALIAS1 => $args{ALIAS} || 'main', - FIELD1 => 'id', - TABLE2 => 'Attributes', - FIELD2 => 'ObjectId' - ); - - my $type = ref($self); - $type =~ s/(?:s|Collection)$//; # XXX - Hack! - - $self->Limit( - $clause => $alias, - FIELD => 'ObjectType', - OPERATOR => '=', - VALUE => $type, - ); - $self->Limit( - $clause => $alias, - FIELD => 'Name', - OPERATOR => '=', - VALUE => $args{NAME}, - ) if exists $args{NAME}; - - return unless exists $args{VALUE}; - - $self->Limit( - $clause => $alias, - FIELD => 'Content', - OPERATOR => $operator, - VALUE => $args{VALUE}, - ); - - # Capture rows with the attribute defined as an empty string. - $self->Limit( - $clause => $alias, - FIELD => 'Content', - OPERATOR => '=', - VALUE => '', - ENTRYAGGREGATOR => $args{NULL} ? 'AND' : 'OR', - ) if $args{EMPTY}; - - # Capture rows without the attribute defined - $self->Limit( - %args, - ALIAS => $alias, - FIELD => 'id', - OPERATOR => ($args{NEGATE} ? 'IS NOT' : 'IS'), - VALUE => 'NULL', - ) if $args{NULL}; -} -# }}} - -# {{{ sub LimitCustomField - -=head2 LimitCustomField - -Takes a paramhash of key/value pairs with the following keys: - -=over 4 - -=item CUSTOMFIELD - CustomField id. Optional - -=item OPERATOR - The usual Limit operators - -=item VALUE - The value to compare against - -=back - -=cut - -sub _SingularClass { - my $self = shift; - my $class = ref($self); - $class =~ s/s$// or die "Cannot deduce SingularClass for $class"; - return $class; -} - -sub LimitCustomField { - my $self = shift; - my %args = ( VALUE => undef, - CUSTOMFIELD => undef, - OPERATOR => '=', - @_ ); - - my $alias = $self->Join( - TYPE => 'left', - ALIAS1 => 'main', - FIELD1 => 'id', - TABLE2 => 'ObjectCustomFieldValues', - FIELD2 => 'ObjectId' - ); - $self->Limit( - ALIAS => $alias, - FIELD => 'CustomField', - OPERATOR => '=', - VALUE => $args{'CUSTOMFIELD'}, - ) if ($args{'CUSTOMFIELD'}); - $self->Limit( - ALIAS => $alias, - FIELD => 'ObjectType', - OPERATOR => '=', - VALUE => $self->_SingularClass, - ); - $self->Limit( - ALIAS => $alias, - FIELD => 'Content', - OPERATOR => $args{'OPERATOR'}, - VALUE => $args{'VALUE'}, - ); -} - -# {{{ sub FindAllRows - -=head2 FindAllRows - -Find all matching rows, regardless of whether they are disabled or not - -=cut - -sub FindAllRows { - shift->{'find_disabled_rows'} = 1; -} - -# {{{ sub Limit - -=head2 Limit PARAMHASH - -This Limit sub calls SUPER::Limit, but defaults "CASESENSITIVE" to 1, thus -making sure that by default lots of things don't do extra work trying to -match lower(colname) agaist lc($val); - -=cut - -sub Limit { - my $self = shift; - my %args = ( CASESENSITIVE => 1, - @_ ); - - return $self->SUPER::Limit(%args); -} - -# }}} - -# {{{ sub ItemsOrderBy - -=head2 ItemsOrderBy - -If it has a SortOrder attribute, sort the array by SortOrder. -Otherwise, if it has a "Name" attribute, sort alphabetically by Name -Otherwise, just give up and return it in the order it came from the -db. - -=cut - -sub ItemsOrderBy { - my $self = shift; - my $items = shift; - - if ($self->NewItem()->_Accessible('SortOrder','read')) { - $items = [ sort { $a->SortOrder <=> $b->SortOrder } @{$items} ]; - } - elsif ($self->NewItem()->_Accessible('Name','read')) { - $items = [ sort { lc($a->Name) cmp lc($b->Name) } @{$items} ]; - } - - 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/StyleGuide.pod b/rt/lib/RT/StyleGuide.pod deleted file mode 100644 index ff9a1b5d0..000000000 --- a/rt/lib/RT/StyleGuide.pod +++ /dev/null @@ -1,920 +0,0 @@ -=head1 NAME - -RT::StyleGuide - RT Style Guide - -=head1 INTRODUCTION - -All code and documentation that is submitted to be included in the RT -distribution should follow the style in this document. This is not to -try to stifle your creativity, but to make life easier for everybody who -has to work with your code, and to aid those who are not quite sure how -to do something. - -These conventions below apply to perl modules, web programs, and -command-line programs, specifically, but also might apply to some -degree to any Perl code written for use in RT. - -Note that these are all guidelines, not unbreakable rules. If you have -a really good need to break one of the rules herein, however, then it is -best to ask on the B mailing list first. - -Note that with much of this document, it is not so much the Right Way as -it is Our Way. We need to have conventions in order to make life easier -for everyone. So don't gripe, and just follow it, because you didn't -get a good grade in "Plays Well With Others" in kindergarten and you -want to make up for it now. - -If you have any questions, please ask us on the B mailing list: - - http://www.bestpractical.com/rt/lists.html - -We don't always follow this guide. We are making changes throughout -our code to be in line with it. But just because we didn't do -it yet, that is no excuse. Do it anyway. :-) - -This document is subject to change at the whims of the core RT team. -We hope to add any significant changes at the bottom of the document. - - -=head1 CODING PRINCIPLES - -=head2 Perl Version - -We code everything to perl 5.8.3 or higher. Complete unicode support -requires bugfixes found in 5.8.3. - -=head2 Documentation - -All modules will be documented using the POD examples in the module -boilerplate. The function, purpose, use of the module will be -explained, and each public API will be documented with name, -description, inputs, outputs, side effects, etc. - -If an array or hash reference is returned, document the size of the -array (including what each element is, as appropriate) and name each key -in the hash. For complex data structures, map out the structure as -appropriate (e.g., name each field returned for each column from a DB -call; yes, this means you shouldn't use "SELECT *", which you shouldn't -use anyway). - -Also document what kind of data returned values are. Is it an integer, -a block of HTML, a boolean? - -All command-line program options will be documented using the -boilerplate code for command-line programs, which doesn't yet exist. -Each available function, switch, etc. should be documented, along -with a statement of function, purpose, use of the program. Do not -use the same options as another program, for a different purpose. - -All web templates should be documented with a statement of function, -purpose, and use in a mason comment block. - -Any external documents, and documentation for command-line programs and -modules, should be written in POD, where appropriate. From there, they -can be translated to many formats with the various pod2* translators. -Read the perlpod manpage before writing any POD, because although POD is -not difficult, it is not what most people are used to. It is not a -regular markup language; it is just a way to make easy documentation -for translating to other formats. Read, and understand, the perlpod -manpage, and ask us or someone else who knows if you have any questions. - - -=head2 Version - -Our distribution versions use tuples, where the first number is the -major revision, the second number is the version, and third -number is the subversion. Odd-numbered versions are development -versions. Examples: - - 1.0.0 First release of RT 1 - 1.0.1 Second release of RT 1.0 - 1.0.10 etc. - 1.1.0 First development release of RT 1.2 (or 2.0) - 2.0.0 First release of RT 2 - -Versions can be modified with a hyphen followed by some text, for -special versions, or to give extra information. Examples: - - 2.0.0-pre1 Notes that this is not final, but preview - -In perl 5.6.0, you can have versions like C, but this is not -allowed in previous versions of perl. So to convert a tuple version -string to a string to use with $VERSION, use a regular integer for -the revision, and three digits for version and subversion. Examples: - - 1.1.6 -> 1.001006 - 2.0.0 -> 2.000000 - -This way, perl can use the version strings in greater-than and -less-than comparisons. - - -=head2 Comments - -All code should be self-documenting as much as possible. Only include -necessary comments. Use names like "$ticket_count", so you don't need to -do something like: - - # ticket count - my $tc = 0; - -Include any comments that are, or might be, necessary in order for -someone else to understand the code. Sometimes a simple one-line -comment is good to explain what the purpose of the following code is -for. Sometimes each line needs to be commented because of a complex -algorithm. Read Kernighan & Pike's I about -commenting. Good stuff, Maynard. - - -=head2 Warnings and Strict - -All code must compile and run cleanly with "use strict" enabled and the -perl "-w" (warnings) option on. If you must do something that -w or -strict complains about, there are workarounds, but the chances that you -really need to do it that way are remote. - -=head2 Lexical Variables - -Use only lexical variables, except for special global variables -($VERSION, %ENV, @ISA, $!, etc.) or very special circumstances (see -%HTML::Mason::Commands::session ). Global variables -for regular use are never appropriate. When necessary, "declare" -globals with "use vars" or "our()". - -A lexical variable is created with my(). A global variable is -pre-existing (if it is a special variable), or it pops into existence -when it is used. local() is used to tell perl to assign a temporary -value to a variable. This should only be used with special variables, -like $/, or in special circumstances. If you must assign to any global -variable, consider whether or not you should use local(). - -local() may also be used on elements of arrays and hashes, though there -is seldom a need to do it, and you shouldn't. - - -=head2 Exporting - -Do not export anything from a module by default. Feel free to put -anything you want to in @EXPORT_OK, so users of your modules can -explicitly ask for symbols (e.g., "use Something::Something qw(getFoo -setFoo)"), but do not export them by default. - - -=head2 Pass by Reference - -Arrays and hashes should be passed to and from functions by reference -only. Note that a list and an array are NOT the same thing. This -is perfectly fine: - - return($user, $form, $constants); - -An exception might be a temporary array of discrete arguments: - - my @return = ($user, $form); - push @return, $constants if $flag; - return @return; - -Although, usually, this is better (faster, easier to read, etc.): - - if ($flag) { - return($user, $form, $constants); - } else { - return($user, $form); - } - -We need to talk about Class::ReturnValue here. - - -=head2 Garbage Collection - -Perl does pretty good garbage collection for you. It will automatically -clean up lexical variables that have gone out of scope and objects whose -references have gone away. Normally you don't need to worry about -cleaning up after yourself, if using lexicals. - -However, some glue code, code compiled in C and linked to Perl, might -not automatically clean up for you. In such cases, clean up for -yourself. If there is a method in that glue to dispose or destruct, -then use it as appropriate. - -Also, if you have a long-running function that has a large data -structure in it, it is polite to free up the memory as soon as you are -done with it, if possible. - - my $huge_data_structure = get_huge_data_structure(); - do_something_with($huge_data_structure); - undef $huge_data_structure; - -=head2 DESTROY - -All object classes must provide a DESTROY method. If it won't do -anything, provide it anyway: - - sub DESTROY { } - - - -=head2 die() and exit() - -Don't do it. Do not die() or exit() from a web template or module. Do -not call C. Don't do it. - -In command-line programs, do as you please. - - -=head2 shift and @_ - -Do not use @_. Use shift. shift may take more lines, but Jesse thinks it -leads to cleaner code. - - my $var = shift; # right - my($var) = @_; # ick. no - sub foo { uc $_[0] } # icky. sometimes ok. - - - my($var1, $var2) = (shift, shift); # Um, no. - - my $var1 = shift; # right - my $var2 = shift; - -=head2 Method parameters - -If a method takes exactly one mandatory argument, the argument should be -passed in a straightforward manner: - - my $self = shift; - my $id = shift; - -In all other cases, the method needs to take named parameters, usually -using a C<%args> hash to store them: - - my $self = shift; - my %args = ( Name => undef, - Description => undef, - @_ ); - -You may specify defaults to those named parameters instead of using -C above, as long as it is documented as such. - -It is worth noting that the existing RT codebase had not followed this -style perfectly; we are trying to fix it without breaking exsiting APIs. - -=head2 Tests - -Modules should provide test code, with documentation on how to use -it. Test::Inline allows tests to be embedded in code. Test::More makes it -easy to create tests. Any code you write should have a testsuite. -Any code you alter should have a test suite. If a patch comes in without -tests, there is something wrong. - -When altering code, you must run the test harness before submitting a patch -or committing code to the repository. - -"make regression" will extract inline tests, blow away the system database -and run the test suite. - -"make regression-quiet" will do all that and not print the "ok" lines. - - - -=head2 STDIN/STDOUT - -Always report errors using $RT::Logger. It's a Log::Dispatch object. -Unlike message meant for the user, log messages are not to be -internationalized. - -There are several different levels ($RT::Logger methods) of logging: - -=over 4 - -=item debug - -Used for messages only needed during system debugging. - -=item info - -Should be used to describe "system-critical" events which aren't errors. -Examples: creating users, deleting users, creating tickets, creating queues, -sending email (message id, time, recipients), recieving mail, changing -passwords, changing access control, superuser logins) - -=item error - -Used for RT-generated failures during execution. - -=item crit - -Should be used for messages when an action can not be completed due to some -error condition beyond our control. - -=back - -In the web UI and modules, never print directly to STDERR. Do not print -directly to STDOUT, unless you need to print directly to the user's console. - -In command-line programs, feel free to print to STDERR and STDOUT as -needed for direct console communication. But for actual error reporting, -use the logging API. - - -=head2 System Calls - -Always check return values from system calls, including open(), -close(), mkdir(), or anything else that talks directly to the system. -Perl built-in system calls return the error in $!; some functions in -modules might return an error in $@ or some other way, so read the module's -documentation if you don't know. Always do something, even if it is -just calling $RT::Logger->warning(), when the return value is not what you'd expect. - - - -=head1 STYLE - -Much of the style section is taken from the perlsyle manpage. We make -some changes to it here, but it wouldn't be a bad idea to read that -document, too. - -=head2 Terminology - -=over 4 - -=item RT the name - -"RT" is the name of the project. "RT" is, optionally, the -specific name for the actual file distribution. That's it. - -While we sometimes use "RT2" or "RT3", that's shortand that's really -not recommended. The name of the project is "RT". - -To specify a major version, use "RT 3.0". -To specify a specific release, use "RT 3.0.12" - -=item function vs. sub(routine) vs. method - -Just because it is the Perl Way (not necessarily right for all -languages, but the documented terminology in the perl documentation), -"method" should be used only to refer to a subroutine that are object -methods or class methods; that is, these are functions that are used -with OOP that always take either an object or a class as the first -argument. Regular subroutines, ones that are not object or class -methods, are functions. Class methods that create and return an object -are optionally called constructors. - -=item Users - -"users" are normally users of RT, the ones hitting the site; if using -it in any other context, specify. -"system users" are user -names on the operating system. "database users" are the user names in -the database server. None of these needs to be capitalized. - -=back - - -=head2 Names - -Don't use single-character variables, except as iterator variables. - -Don't use two-character variables just to spite us over the above rule. - -Constants are in all caps; these are variables whose value will I -change during the course of the program. - - $Minimum = 10; # wrong - $MAXIMUM = 50; # right - -Other variables are lowercase, with underscores separating the words. -They words used should, in general, form a noun (usually singular), -unless the variable is a flag used to denote some action that should be -taken, in which case they should be verbs (or gerunds, as appropriate) -describing that action. - - $thisVar = 'foo'; # wrong - $this_var = 'foo'; # right - $work_hard = 1; # right, verb, boolean flag - $running_fast = 0; # right, gerund, boolean flag - -Arrays and hashes should be plural nouns, whether as regular arrays and -hashes or array and hash references. Do not name references with "ref" -or the data type in the name. - - @stories = (1, 2, 3); # right - $comment_ref = [4, 5, 6]; # wrong - $comments = [4, 5, 6]; # right - $comment = $comments->[0]; # right - -Make the name descriptive. Don't use variables like "$sc" when you -could call it "$story_count". See L<"Comments">. - -There are several variables in RT that are used throughout the code, -that you should use in your code. Do not use these variable names for -anything other than how they are normally used, and do not use any -other variable names in their place. Some of these are: - - $self # first named argument in object method - -Subroutines (except for special cases, like AUTOLOAD and simple accessors) -begin with a verb, with words following to complete the action. Accessors -don't start with "Get" if they're just the name of the attribute. - -Accessors which return an object should end with the suffix Obj. - -This section needs clarification for RT. - -Words begin with a capital letter. They -should as clearly as possible describe the activity to be peformed, and -the data to be returned. - - - - Load(); # good - LoadByName(); # good - LoadById(); # good - -Subroutines beginning with C<_> are special: they are not to be used -outside the current object. There is not to be enforced by the code -itself, but by someone very big and very scary. - -For large for() loops, do not use $_, but name the variable. -Do not use $_ (or assume it) except for when it is absolutely -clear what is going on, or when it is required (such as with -map() and grep()). - - for (@list) { - print; # OK; everyone knows this one - print uc; # wrong; few people know this - print uc $_; # better - } - -Note that the special variable C<_> I be used when possible. -It is a placeholder that can be passed to stat() and the file test -operators, that saves perl a trip to re-stat the file. In the -example below, using C<$file> over for each file test, instead of -C<_> for subsequent uses, is a performance hit. You should be -careful that the last-tested file is what you think it is, though. - - if (-d $file) { # $file is a directory - # ... - } elsif (-l _) { # $file is a symlink - # ... - } - -Package names begin with a capital letter in each word, followed by -lower case letters (for the most part). Multiple words should be StudlyCapped. - - RT::User # good - RT::Database::MySQL # proper name - RT::Display::Provider # good - RT::CustomField # not so good, but OK - -Plugin modules should begin with "RTx::", followed by the name -of the plugin. - -=head1 Code formatting - -Use perltidy. Anything we say here is wrong if it conflicts with what -perltidy does. Your perltidyrc should read: - --lp -vt=2 -vtc=2 -nsfs -bar - -=head2 Indents and Blank Space - -All indents should be tabs. Set your tab stops whatever you want them -to be; I use 8 spaces per tabs. - -No space before a semicolon that closes a statement. - - foo(@bar) ; # wrong - foo(@bar); # right - -Line up corresponding items vertically. - - my $foo = 1; - my $bar = 2; - my $xyzzy = 3; - - open(FILE, $fh) or die $!; - open(FILE2, $fh2) or die $!; - - $rot13 =~ tr[abcedfghijklmnopqrstuvwxyz] - [nopqrstuvwxyzabcdefghijklm]; - - # note we use a-mn-z instead of a-z, - # for readability - $rot13 =~ tr[a-mn-z] - [n-za-m]; - -Put blank lines between groups of code that do different things. Put -blank lines after your variable declarations. Put a blank line before a -final return() statement. Put a blank line following a block (and -before, with the exception of comment lines). - -An example: - - # this is my function! - sub foo { - my $val = shift; - my $obj = new Constructor; - my($var1, $var2); - - $obj->SetFoo($val); - $var1 = $obj->Foo(); - - - return($val); - } - - print 1; - - -=head2 Parentheses - -For control structures, there is a space between the keyword and opening -parenthesis. For functions, there is not. - - for(@list) # wrong - for (@list) # right - - my ($ref) # wrong - my($ref) # right - -Be careful about list vs. scalar context with parentheses! - - my @array = ('a', 'b', 'c'); - my($first_element) = @array; # a - my($first_element) = ('a', 'b', 'c'); # a - my $element_count = @array; # 3 - my $last_element = ('a', 'b', 'c'); # c - -Always include parentheses after functions, even if there are no arguments. -There are some exceptions, such as list operators (like print) and unary -operators (like undef, delete, uc). - -There is no space inside the parentheses, unless it is needed for -readability. - - for ( map { [ $_, 1 ] } @list ) # OK - for ( @list ) # not really OK, not horrible - -On multi-line expressions, match up the closing parenthesis with either -the opening statement, or the opening parenthesis, whichever works best. -Examples: - - @list = qw( - bar - baz - ); # right - - if ($foo && $bar && $baz - && $buz && $xyzzy - ) { - print $foo; - } - -Whether or not there is space following a closing parenthesis is -dependent on what it is that follows. - - print foo(@bar), baz(@buz) if $xyzzy; - -Note also that parentheses around single-statement control expressions, -as in C, are optional (and discouraged) C it is I -clear -- to a programmer -- what is going on. There is absolutely no -need for parentheses around C<$xyzzy> above, so leaving them out enhances -readability. Use your best discretion. Better to include them, if -there is any question. - -The same essentially goes for perl's built-in functions, when there is -nothing confusing about what is going on (for example, there is only one -function call in the statement, or the function call is separated by a -flow control operator). User-supplied functions must always include -parentheses. - - print 1, 2, 3; # good - delete $hash{key} if isAnon($uid); # good - - -However, if there is any possible confusion at all, then include the -parentheses. Remember the words of Larry Wall in the perlstyle manpage: - - When in doubt, parenthesize. At the very least it will - let some poor schmuck bounce on the % key in vi. - - Even if you aren't in doubt, consider the mental welfare - of the person who has to maintain the code after you, and - who will probably put parens in the wrong place. - -So leave them out when it is absoutely clear to a programmer, but if -there is any question, leave them in. - - -=head2 Braces - -(This is about control braces, not hash/data structure braces.) - -There is always a space befor the opening brace. - - while (<$fh>){ # wrong - while (<$fh>) { # right - -A one-line block may be put on one line, and the semicolon may be -omitted. - - for (@list) { print } - -Otherwise, finish each statement with a semicolon, put the keyword and -opening curly on the first line, and the ending curly lined up with the -keyword at the end. - - for (@list) { - print; - smell(); - } - -Generally, we prefer "uncuddled elses": - - if ($foo) { - print; - } - else { - die; - } - -_If_ the if statement is very brief, sometimes "cuddling" the else makes code more readable. Feel free to cuddle them in that case: - - - if ($foo) { - print; - } else { - die; - } - -=head2 Operators - -Put space around most operators. The primary exception is the for -aesthetics; e.g., sometimes the space around "**" is ommitted, -and there is never a space before a ",", but always after. - - print $x , $y; # wrong - print $x, $y; # right - - $x = 2 >> 1; # good - $y = 2**2; # ok - -Note that "&&" and "||" have a higher precedence than "and" and "or". -Other than that, they are exactly the same. It is best to use the lower -precedence version for control, and the higher for testing/returning -values. Examples: - - $bool = $flag1 or $flag2; # WRONG (doesn't work) - $value = $foo || $bar; # right - open(FILE, $file) or die $!; - - $true = foo($bar) && baz($buz); - foo($bar) and baz($buz); - -Note that "and" is seldom ever used, because the statement above is -better written using "if": - - baz($buz) if foo($bar); - -Most of the time, the confusion between and/&&, or/|| can be alleviated -by using parentheses. If you want to leave off the parentheses then you -I use the proper operator. But if you use parentheses -- and -normally, you should, if there is any question at all -- then it doesn't -matter which you use. Use whichever is most readable and aesthetically -pleasing to you at the time, and be consistent within your block of code. - -Break long lines AFTER operators, except for "and", "or", "&&", "||". -Try to keep the two parts to a binary operator (an operator that -has two operands) together when possible. - - print "foo" . "bar" . "baz" - . "buz"; # wrong - - print "foo" . "bar" . "baz" . - "buz"; # right - - print $foo unless $x == 3 && $y == - 4 && $z == 5; # wrong - - print $foo unless $x == 3 && $y == 4 - && $z == 5; # right - - -=head2 Other - -Put space around a complex subscript inside the brackets or braces. - - $foo{$bar{baz}{buz}}; # OK - $foo{ $bar{baz}{buz} }; # better - -In general, use single-quotes around literals, and double-quotes -when the text needs to be interpolated. - -It is OK to omit quotes around names in braces and when using -the => operator, but be careful not to use a name that doubles as -a function; in that case, quote. - - $what{'time'}{it}{is} = time(); - -When making compound statements, put the primary action first. - - open(FILE, $fh) or die $!; # right - die $! unless open(FILE, $fh); # wrong - - print "Starting\n" if $verbose; # right - $verbose && print "Starting\n"; # wrong - - -Use here-docs instead of repeated print statements. - - print <Foo! - -All newlines should be removed from localized strings, to make it easy to -grep the codebase for strings to be localized - -The string Foo - Bar - Baz - -Should become <&|/l&>Foo Bar Baz - - -Variable subsititutions should be moved to Locale::MakeText format - -The string Hello, <%$name %> - -should become <&|/l, $name &>Hello, [_1] - - -Multiple variables work just like single variables - -The string You found <%$num%> tickets in queue <%$queue%> - -should become <&|/l, $num, $queue &>You found [_1] tickets in queue [_2] - -When subcomponents are called in the middle of a phrase, they need to be escaped -too: - -The string  <& /Elements/SelectNewTicketQueue&> - -should become <&|/l, $m->scomp('/Elements/SelectNewTicketQueue')&> [_1] - - - - -The string <& /Elements/TitleBoxStart, width=> "40%", titleright => "RT $RT::VERSION for $RT::rtname", title => 'Login' &> - -should become <& /Elements/TitleBoxStart, - width=> "40%", - titleright => loc("RT [_1] for [_2]",$RT::VERSION, $RT::rtname), - title => loc('Login'), - &> - - -=item Library code - - - -Within RT's core code, every module has a localization handle available through the 'loc' method: - -The code return ( $id, "Queue created" ); - -should become return ( $id, $self->loc("Queue created") ); - -When returning or localizing a single string, the "extra" set of parenthesis () should be omitted. - -The code return ("Subject changed to ". $self->Data ); - -should become return $self->loc( "Subject changed to [_1]", $self->Data ); - - -It is important not to localize the names of rights or statuses within RT's core, as there is logic that depends on them as string identifiers. The proper place to localize these values is when they're presented for display in the web or commandline interfaces. - - -=back 4 - -=head1 CODING PRCEDURE - -This is for new programs, modules, specific APIs, or anything else. - -=over 4 - -=item Present idea to rt-devel - -We may know of a better way to approach the problem, or know of an -existing way to deal with it, or know someone else is working on it. -This is mostly informal, but a fairly complete explanation for the need -and use of the code should be provided. - - -=item Present complete specs to rt-devel - -The complete proposed API should be submitted for -approval and discussion. For web and command-line programs, present the -functionality and interface (op codes, command-lin switches, etc.). - -The best way to do this is to take the documentation portion of the -boilerplate and fill it in. You can make changes later if necessary, -but fill it in as much as you can. - - - -=item Prepare for code review - -When you are done, the code will undergo a code review by a member of -the core team, or someone picked by the core team. This is not to -belittle you (that's just a nice side effect), it is to make sure that -you understand your code, that we understand your code, that it won't -break other code, that it follows the documentation and existing -proposal. It is to check for possible optimizations or better ways of -doing it. - -Note that all code is expected to follow the coding principles and style -guide contained in this document. - - -=item Finish it up - -After the code is done (possibly going through multiple code reviews), -if you do not have repository access, submit it to rt--bugs@fsck.com as a unified diff. From that point on, it'll be handled by someone with repository access. - -=back - - -=head1 BUG REPORTS, PATCHES - -Use rt--bugs@fsck.com for I bug that is not -being fixed immediately. If it is not in RT, there -is a good chance it will not be dealt with. - -Send patches to rt--bugs@fsck.com, too. Use C for patches. - -=head1 SCHEMA DESIGN - -RT uses a convention to denote the foreign key status in its tables. -The rule of thumb is: - -=over 4 - -=item When it references to another table, always use the table name - -For example, the C