From 33beebf4cb42eba3e1dd868ad5e0af102de961da Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Sat, 29 Sep 2012 16:36:46 -0700 Subject: [PATCH] update address standardization for cust_location changes --- FS/FS.pm | 46 +- FS/FS/AccessRight.pm | 43 +- FS/FS/ClientAPI/MasonComponent.pm | 26 +- FS/FS/ClientAPI/MyAccount.pm | 265 +- FS/FS/ClientAPI/SGNG.pm | 277 - FS/FS/ClientAPI/Signup.pm | 49 +- FS/FS/ClientAPI_XMLRPC.pm | 17 +- FS/FS/Conf.pm | 446 +- FS/FS/Conf_compat17.pm | 7 + FS/FS/Cron/agent_email.pm | 79 + FS/FS/Cron/bill.pm | 6 +- FS/FS/Cron/check.pm | 74 - FS/FS/Cron/pay_batch.pm | 129 + FS/FS/Cron/upload.pm | 362 +- FS/FS/Mason.pm | 53 +- FS/FS/Mason/Request.pm | 37 + FS/FS/Misc/Geo.pm | 2 +- FS/FS/Misc/Invoicing.pm | 26 + FS/FS/PagedSearch.pm | 189 + FS/FS/Quotable_Mixin.pm | 13 + FS/FS/Record.pm | 58 +- FS/FS/Report/FCC_477.pm | 4 +- FS/FS/Report/Table.pm | 59 +- FS/FS/Report/Table/Monthly.pm | 5 + FS/FS/Schema.pm | 443 +- FS/FS/Setup.pm | 15 +- FS/FS/TemplateItem_Mixin.pm | 317 + FS/FS/Template_Mixin.pm | 2560 +++ FS/FS/TicketSystem/RT_External.pm | 53 +- FS/FS/TicketSystem/RT_Internal.pm | 66 +- FS/FS/Trace.pm | 35 + FS/FS/UI/Web/small_custview.pm | 58 +- FS/FS/Upgrade.pm | 31 +- FS/FS/access_groupsales.pm | 153 + FS/FS/access_right.pm | 79 +- FS/FS/access_user.pm | 36 + FS/FS/addr_block.pm | 32 +- FS/FS/agent_pkg_class.pm | 117 + FS/FS/cdr/cia.pm | 5 +- FS/FS/cdr/infinite.pm | 46 +- FS/FS/cdr/taqua.pm | 2 +- FS/FS/cdr/taqua62.pm | 178 + FS/FS/cdr/troop.pm | 2 +- FS/FS/cdr/troop2.pm | 94 + FS/FS/cust_bill.pm | 2888 +--- FS/FS/cust_bill_ApplicationCommon.pm | 5 + FS/FS/cust_bill_pkg.pm | 998 +- FS/FS/cust_bill_pkg_detail_void.pm | 168 + FS/FS/cust_bill_pkg_discount.pm | 4 +- FS/FS/cust_bill_pkg_discount_void.pm | 129 + FS/FS/cust_bill_pkg_display_void.pm | 132 + FS/FS/cust_bill_pkg_tax_location_void.pm | 139 + FS/FS/cust_bill_pkg_tax_rate_location_void.pm | 139 + FS/FS/cust_bill_pkg_void.pm | 272 + FS/FS/cust_bill_void.pm | 286 + FS/FS/cust_class.pm | 15 + FS/FS/cust_credit_bill_pkg.pm | 62 +- FS/FS/cust_location.pm | 210 +- FS/FS/cust_main.pm | 553 +- FS/FS/cust_main/Billing.pm | 196 +- FS/FS/cust_main/Import.pm | 61 +- FS/FS/cust_main/Location.pm | 252 + FS/FS/cust_main/NationalID.pm | 64 + FS/FS/cust_main/Packages.pm | 24 +- FS/FS/cust_main/Search.pm | 227 +- FS/FS/cust_main_county.pm | 243 +- FS/FS/cust_main_exemption.pm | 10 + FS/FS/cust_pay.pm | 204 +- FS/FS/cust_pay_batch.pm | 88 + FS/FS/cust_pkg.pm | 386 +- FS/FS/cust_pkg_discount.pm | 3 +- FS/FS/cust_pkg_reason.pm | 24 +- FS/FS/cust_statement.pm | 50 +- FS/FS/cust_svc.pm | 142 +- FS/FS/cust_tax_exempt_pkg.pm | 85 +- FS/FS/cust_tax_exempt_pkg_void.pm | 143 + FS/FS/cust_tax_location.pm | 2 +- FS/FS/detail_format/sum_duration_prefix.pm | 2 +- FS/FS/discount.pm | 1 + FS/FS/domain_record.pm | 3 +- FS/FS/ftp_target.pm | 194 + FS/FS/h_cust_main_exemption.pm | 19 + FS/FS/h_part_pkg.pm | 37 + FS/FS/h_radius_usergroup.pm | 24 + FS/FS/h_svc_Radius_Mixin.pm | 17 + FS/FS/h_svc_acct.pm | 5 +- FS/FS/h_svc_broadband.pm | 5 +- FS/FS/inventory_item.pm | 1 + FS/FS/msg_template.pm | 29 +- FS/FS/option_Common.pm | 32 +- FS/FS/part_event.pm | 4 +- .../Action/Mixin/credit_agent_pkg_class.pm | 25 + FS/FS/part_event/Action/Mixin/credit_pkg.pm | 7 +- FS/FS/part_event/Action/cust_bill_email.pm | 2 +- .../cust_bill_fee_greater_percent_or_flat.pm | 41 + .../Action/cust_bill_send_csv_ftp.pm | 6 +- .../part_event/Action/cust_bill_spool_csv.pm | 14 +- FS/FS/part_event/Action/pkg_agent_credit.pm | 3 +- .../Action/pkg_agent_credit_pkg_class.pm | 9 + FS/FS/part_event/Condition/after_event.pm | 81 + .../part_event/Condition/balance_age_under.pm | 52 + .../Condition/has_referral_custnum.pm | 33 +- .../Condition/once_percust_every.pm | 58 + FS/FS/part_event/Condition/pkg_dundate_age.pm | 43 + FS/FS/part_export.pm | 206 +- FS/FS/part_export/acct_google.pm | 10 +- FS/FS/part_export/acct_http.pm | 1 + FS/FS/part_export/acct_plesk.pm | 8 +- FS/FS/part_export/acct_sql.pm | 12 +- FS/FS/part_export/acct_sql_status.pm | 1 + FS/FS/part_export/acct_xmlrpc.pm | 269 + FS/FS/part_export/amazon_ec2.pm | 1 + FS/FS/part_export/artera_turbo.pm | 1 + FS/FS/part_export/broadband_http.pm | 1 + FS/FS/part_export/broadband_nas.pm | 1 + FS/FS/part_export/broadband_shellcommands.pm | 1 + FS/FS/part_export/broadband_snmp.pm | 1 + FS/FS/part_export/broadband_sql.pm | 1 + FS/FS/part_export/broadband_sqlradius.pm | 66 +- FS/FS/part_export/communigate_pro.pm | 1 + .../communigate_pro_singledomain.pm | 1 + FS/FS/part_export/cp.pm | 1 + FS/FS/part_export/cpanel.pm | 2 + FS/FS/part_export/cust_http.pm | 1 + FS/FS/part_export/cyrus.pm | 2 + FS/FS/part_export/dashcs_e911.pm | 1 + FS/FS/part_export/dma_radiusmanager.pm | 336 + FS/FS/part_export/domain_sql.pm | 1 + FS/FS/part_export/everyone_net.pm | 2 + FS/FS/part_export/ez_prepaid.pm | 184 + FS/FS/part_export/forward_sql.pm | 1 + FS/FS/part_export/freeswitch.pm | 192 + FS/FS/part_export/globalpops_voip.pm | 1 + FS/FS/part_export/http.pm | 1 + FS/FS/part_export/http_status.pm | 1 + FS/FS/part_export/ikano.pm | 1 + FS/FS/part_export/indosoft.pm | 1 + FS/FS/part_export/infostreet.pm | 1 + FS/FS/part_export/internal_diddb.pm | 1 + FS/FS/part_export/ldap.pm | 1 + FS/FS/part_export/netsapiens.pm | 91 +- FS/FS/part_export/null.pm | 1 + FS/FS/part_export/phone_shellcommands.pm | 1 + FS/FS/part_export/phone_sqlopensips.pm | 10 +- FS/FS/part_export/phone_sqlradius.pm | 9 +- FS/FS/part_export/postfix.pm | 1 + FS/FS/part_export/prizm.pm | 11 +- FS/FS/part_export/radiator.pm | 2 + FS/FS/part_export/router.pm | 1 + FS/FS/part_export/rt_ticket.pm | 1 + FS/FS/part_export/send_email.pm | 1 + FS/FS/part_export/shellcommands.pm | 47 +- FS/FS/part_export/shellcommands_withdomain.pm | 9 +- FS/FS/part_export/sqlmail.pm | 1 + FS/FS/part_export/sqlradius.pm | 175 +- FS/FS/part_export/sqlradius_withdomain.pm | 11 +- FS/FS/part_export/textradius.pm | 1 + FS/FS/part_export/trango.pm | 1 + FS/FS/part_export/vitelity.pm | 1 + FS/FS/part_export/vpopmail.pm | 1 + FS/FS/part_export/www_plesk.pm | 9 +- FS/FS/part_export/www_shellcommands.pm | 1 + FS/FS/part_export_machine.pm | 155 + FS/FS/part_pkg.pm | 81 + FS/FS/part_pkg/delayed_Mixin.pm | 3 +- FS/FS/part_pkg/flat.pm | 10 +- FS/FS/part_pkg/flat_introrate.pm | 4 +- FS/FS/part_pkg/prepaid.pm | 2 +- FS/FS/part_pkg/prorate.pm | 10 +- FS/FS/part_pkg/prorate_Mixin.pm | 36 +- FS/FS/part_pkg/recur_Common.pm | 23 +- FS/FS/part_pkg/voip_cdr.pm | 22 +- FS/FS/part_pkg/voip_inbound.pm | 11 +- FS/FS/part_pkg/voip_tiered.pm | 19 +- FS/FS/part_pkg_taxrate.pm | 2 +- FS/FS/part_referral.pm | 8 +- FS/FS/part_svc.pm | 6 +- FS/FS/part_svc_class.pm | 126 + FS/FS/pay_batch.pm | 616 +- FS/FS/pay_batch/BoM.pm | 10 +- FS/FS/pay_batch/eft_canada.pm | 61 +- FS/FS/pay_batch/paymentech.pm | 13 + FS/FS/pay_batch/td_eft1464.pm | 9 + FS/FS/payment_gateway.pm | 75 +- FS/FS/prospect_main.pm | 20 +- FS/FS/quotation.pm | 318 + FS/FS/quotation_pkg.pm | 166 + FS/FS/quotation_pkg_discount.pm | 128 + FS/FS/radius_group.pm | 4 + FS/FS/rate.pm | 2 +- FS/FS/reason.pm | 27 +- FS/FS/sales.pm | 142 + FS/FS/svc_Common.pm | 96 +- FS/FS/svc_Radius_Mixin.pm | 105 +- FS/FS/svc_Tower_Mixin.pm | 1 - FS/FS/svc_acct.pm | 26 +- FS/FS/svc_broadband.pm | 12 +- FS/FS/svc_export_machine.pm | 124 + FS/FS/svc_pbx.pm | 32 +- FS/FS/svc_phone.pm | 41 +- FS/FS/tax_class.pm | 2 +- FS/FS/tax_rate.pm | 45 +- FS/FS/tax_rate_location.pm | 2 +- FS/MANIFEST | 41 +- FS/bin/freeside-cdrd | 2 +- FS/bin/freeside-check | 7 - FS/bin/freeside-daily | 28 +- FS/bin/freeside-eftca-upload | 2 +- FS/bin/freeside-paymentech-upload | 2 +- FS/bin/freeside-prepaidd | 2 +- FS/t/Quotable_Mixin.t | 5 + FS/t/access_groupsales.t | 5 + FS/t/agent_pkg_class.t | 5 + FS/t/cust_bill_pkg_detail_void.t | 5 + FS/t/cust_bill_pkg_discount_void.t | 5 + FS/t/cust_bill_pkg_display_void.t | 5 + FS/t/cust_bill_pkg_tax_location_void.t | 5 + FS/t/cust_bill_pkg_tax_rate_location_void.t | 5 + FS/t/cust_bill_pkg_void.t | 5 + FS/t/cust_bill_void.t | 5 + FS/t/ftp_target.t | 5 + FS/t/part_export_machine.t | 5 + FS/t/part_svc_class.t | 5 + FS/t/quotation.t | 5 + FS/t/quotation_pkg.t | 5 + FS/t/quotation_pkg_discount.t | 5 + FS/t/sales.t | 5 + FS/t/svc_export_machine.t | 5 + Makefile | 33 +- bin/231commit | 4 +- bin/23commit | 2 +- bin/23diff | 3 +- bin/agent_email | 30 + bin/cdr.import | 0 bin/cust_bill.export | 49 + bin/cust_main-bill_now | 4 +- bin/cust_main.export | 109 + bin/cust_pkg-revert | 118 + bin/cust_pkg.export | 61 + bin/part_pkg-bulk_change | 2 +- bin/pod2x | 8 +- bin/svc_acct.export | 54 + bin/svc_broadband.export | 59 + bin/svc_phone.export | 55 + bin/tax_location.upgrade | 31 + bin/v-rate-reimport | 172 + .../blank.html => conf/invoice-unitprice | 0 conf/invoice_latex | 2 +- conf/quotation_html | 266 + conf/quotation_latex | 362 + conf/quotation_latexnotes | 8 + etc/fslongtable.sty | 438 - etc/longtable.sty | 438 + fs_selfservice/DEPLOY | 2 +- fs_selfservice/FS-SelfService/SelfService.pm | 17 +- fs_selfservice/FS-SelfService/cgi/agent.cgi | 0 .../FS-SelfService/cgi/cust_bill-logo.cgi | 0 .../FS-SelfService/cgi/make_payment.html | 24 +- .../FS-SelfService/cgi/myaccount.html | 20 +- .../FS-SelfService/cgi/provision_list.html | 1 - .../FS-SelfService/cgi/selfservice.cgi | 16 +- .../FS-SelfService/cgi/small_custview.html | 69 + .../FS-SelfService/cgi/ticket_summary.html | 26 +- fs_selfservice/FS-SelfService/cgi/xmlrpc.cgi | 0 fs_selfservice/php/freeside.class.new.php | 71 + htetc/handler.pl | 69 +- httemplate/browse/agent.cgi | 28 + httemplate/browse/cust_class.html | 7 + httemplate/browse/cust_note_class.html | 2 +- httemplate/browse/ftp_target.html | 56 + httemplate/browse/msg_template.html | 33 +- httemplate/browse/part_event.html | 2 +- httemplate/browse/part_export.cgi | 7 +- httemplate/browse/part_pkg.cgi | 2 +- httemplate/browse/part_referral.html | 35 +- httemplate/browse/part_svc.cgi | 11 +- httemplate/browse/part_svc_class.html | 34 + httemplate/browse/payment_gateway.html | 4 +- httemplate/browse/radius_group.html | 19 +- httemplate/browse/reason.html | 17 + httemplate/browse/sales.cgi | 100 + httemplate/browse/tower.html | 16 +- httemplate/config/config-process.cgi | 4 +- httemplate/config/config-view.cgi | 2 +- httemplate/config/config.cgi | 40 +- httemplate/docs/about.html | 6 +- httemplate/docs/license.html | 2 +- httemplate/docs/part_svc-table.html | 63 + httemplate/edit/agent.cgi | 46 +- httemplate/edit/cust_class.html | 23 +- httemplate/edit/cust_main.cgi | 217 +- .../edit/cust_main/after_bill_location.html | 12 + .../edit/cust_main/before_bill_location.html | 10 + httemplate/edit/cust_main/billing.html | 95 +- httemplate/edit/cust_main/birthdate.html | 78 +- httemplate/edit/cust_main/bottomfixup.js | 17 +- httemplate/edit/cust_main/company.html | 7 + httemplate/edit/cust_main/fax.html | 5 + httemplate/edit/cust_main/name.html | 53 + httemplate/edit/cust_main/phones.html | 29 + httemplate/edit/cust_main/stateid.html | 39 + httemplate/edit/cust_main/top_misc.html | 27 +- httemplate/edit/cust_pay.cgi | 10 + httemplate/edit/cust_refund.cgi | 2 +- httemplate/edit/discount.html | 14 + httemplate/edit/elements/class_Common.html | 9 +- httemplate/edit/elements/edit.html | 22 +- httemplate/edit/elements/svc_Common.html | 14 +- httemplate/edit/ftp_target.html | 46 + httemplate/edit/invoice_template.html | 3 +- httemplate/edit/msg_template.html | 129 +- httemplate/edit/nas.html | 2 +- httemplate/edit/part_export.cgi | 77 +- httemplate/edit/part_pkg.cgi | 4 + httemplate/edit/part_referral.html | 5 +- httemplate/edit/part_svc.cgi | 138 +- httemplate/edit/part_svc_class.html | 6 + httemplate/edit/payment_gateway.html | 58 +- httemplate/edit/pkg_class.html | 2 +- httemplate/edit/prepay_credit.cgi | 11 +- httemplate/edit/process/agent.cgi | 41 +- httemplate/edit/process/cust_location.cgi | 6 +- httemplate/edit/process/cust_main.cgi | 61 +- httemplate/edit/process/cust_pay.cgi | 8 +- .../edit/process/cust_pkg_discount.html | 3 +- httemplate/edit/process/cust_refund.cgi | 2 +- httemplate/edit/process/elements/process.html | 2 - httemplate/edit/process/ftp_target.html | 12 + httemplate/edit/process/msg_template.html | 4 +- httemplate/edit/process/part_export.cgi | 5 + httemplate/edit/process/part_svc_class.html | 11 + httemplate/edit/process/quick-cust_pkg.cgi | 153 +- httemplate/edit/process/quotation.html | 11 + httemplate/edit/process/sales.cgi | 23 + httemplate/edit/process/svc_acct.cgi | 27 +- httemplate/edit/process/svc_broadband.cgi | 7 +- httemplate/edit/prospect_main.html | 3 + httemplate/edit/quick-charge.html | 106 +- httemplate/edit/quotation.html | 30 + httemplate/edit/radius_group.html | 13 + httemplate/edit/reason.html | 116 +- httemplate/edit/sales.cgi | 79 + httemplate/edit/svc_acct.cgi | 6 + httemplate/edit/svc_broadband.cgi | 16 +- httemplate/edit/svc_dsl.cgi | 24 +- httemplate/edit/tower.html | 4 + httemplate/elements/coord-links.html | 12 +- httemplate/elements/customer-table.html | 105 +- httemplate/elements/dashboard-toplist.html | 103 +- httemplate/elements/form-create_ticket.html | 38 + httemplate/elements/freeside.css | 20 +- httemplate/elements/header.html | 6 + httemplate/elements/init_overlib.html | 11 +- httemplate/elements/location.html | 109 +- httemplate/elements/menu.html | 134 +- httemplate/elements/order_pkg_link.html | 26 + httemplate/elements/popup_link-cust_main.html | 23 +- httemplate/elements/progress-init.html | 6 - httemplate/elements/searchbar-ticket.html | 2 +- httemplate/elements/select-cust-part_pkg.html | 6 +- .../elements/select-cust_pkg-status.html | 2 + .../elements/select-part_svc_class.html | 22 + .../elements/select-rt-customfield.html | 3 - httemplate/elements/select-table.html | 46 +- httemplate/elements/standardize_locations.js | 5 +- httemplate/elements/table-tickets.html | 159 + httemplate/elements/tr-amount_fee.html | 100 + httemplate/elements/tr-cust_svc.html | 2 +- httemplate/elements/tr-fixed-cust_main.html | 15 + httemplate/elements/tr-fixed-date.html | 13 + .../elements/tr-fixed-prospect_main.html | 15 + httemplate/elements/tr-fixed.html | 16 +- httemplate/elements/tr-select-agent.html | 19 +- .../elements/tr-select-cust-part_pkg.html | 27 +- .../elements/tr-select-cust_location.html | 63 +- httemplate/elements/tr-select-discount.html | 26 +- .../elements/tr-select-part_referral.html | 8 +- .../elements/tr-select-part_svc_class.html | 27 + httemplate/elements/tr-select-reason.html | 57 +- httemplate/elements/tr-select-voip_class.html | 24 + .../elements/tr-svc_export_machine.html | 37 + httemplate/elements/xmenu.css | 2 +- httemplate/elements/xmenu.top.css | 2 +- httemplate/graph/cust_bill_pkg.cgi | 140 +- httemplate/graph/elements/monthly.html | 38 +- httemplate/graph/elements/report.html | 31 +- httemplate/graph/money_time.cgi | 31 +- httemplate/graph/report_cust_bill_pkg.html | 59 +- httemplate/graph/report_money_time.html | 7 + httemplate/index.html | 10 + httemplate/loginout/logout.html | 4 +- httemplate/misc/batch-cust_pay.html | 357 +- httemplate/misc/cancel_pkg.html | 93 +- httemplate/misc/cust-part_pkg.cgi | 18 +- httemplate/misc/cust_main-cancel.cgi | 2 +- httemplate/misc/cust_main-import.cgi | 10 + httemplate/misc/cust_main-suspend.cgi | 75 + httemplate/misc/cust_main-unsuspend.cgi | 56 + httemplate/misc/delete-ftp_target.html | 18 + httemplate/misc/download-batch.cgi | 13 +- httemplate/misc/order_pkg.html | 78 +- httemplate/misc/payment.cgi | 115 +- httemplate/misc/process/batch-cust_pay.cgi | 115 +- httemplate/misc/process/cancel_pkg.html | 51 +- httemplate/misc/process/void-cust_bill.html | 26 + httemplate/misc/suspend_cust.html | 79 + httemplate/misc/timeworked.html | 2 - httemplate/misc/unsuspend_cust.html | 68 + httemplate/misc/unvoid-cust_bill_void.html | 25 + httemplate/misc/unvoid-cust_pay_void.cgi | 2 +- httemplate/misc/void-cust_bill.html | 45 + httemplate/misc/void-cust_pay.cgi | 2 +- httemplate/misc/xmlhttp-cust_bill-search.html | 18 + httemplate/misc/xmlhttp-cust_main-search.cgi | 86 +- httemplate/pref/pref-process.html | 6 +- httemplate/pref/pref.html | 33 +- httemplate/search/477.html | 54 +- httemplate/search/477partIA_detail.html | 3 +- httemplate/search/477partIA_summary.html | 3 +- httemplate/search/477partIIA.html | 3 +- httemplate/search/477partIIB.html | 194 +- httemplate/search/477partV.html | 13 +- httemplate/search/477partVI_census.html | 11 +- httemplate/search/cust_bill.html | 4 + httemplate/search/cust_bill_pay.html | 7 + httemplate/search/cust_bill_pkg.cgi | 877 +- httemplate/search/cust_bill_pkg_referral.html | 304 + httemplate/search/cust_credit.html | 7 + httemplate/search/cust_credit_bill.html | 7 + httemplate/search/cust_credit_bill_pkg.html | 4 +- httemplate/search/cust_credit_refund.html | 7 + httemplate/search/cust_main-zip.html | 48 +- httemplate/search/cust_main.cgi | 35 +- httemplate/search/cust_main.html | 23 +- httemplate/search/cust_pay_pending.html | 1 - httemplate/search/cust_pkg_summary.html | 2 +- httemplate/search/cust_svc.html | 123 +- httemplate/search/cust_tax_exempt_pkg.cgi | 8 +- .../search/customer_accounting_summary.html | 14 + .../search/elements/cust_main_dayranges.html | 26 +- .../search/elements/cust_pay_batch_top.html | 36 +- .../search/elements/cust_pay_or_refund.html | 16 + httemplate/search/elements/search-csv.html | 13 +- httemplate/search/elements/search-html.html | 12 +- httemplate/search/elements/search-xls.html | 53 +- httemplate/search/elements/search.html | 6 +- httemplate/search/pay_batch.cgi | 88 +- httemplate/search/prepaid_income.html | 240 + httemplate/search/quotation.html | 268 + httemplate/search/report_477.html | 18 + httemplate/search/report_cdr.html | 7 +- .../search/report_cust_bill_pkg_referral.html | 66 + httemplate/search/report_cust_main-zip.html | 4 +- httemplate/search/report_cust_main.html | 69 +- .../report_customer_accounting_summary.html | 8 + httemplate/search/report_prepaid_income.cgi | 231 - httemplate/search/report_prepaid_income.html | 19 +- httemplate/search/report_quotation.html | 75 + httemplate/search/report_receivables.html | 2 +- httemplate/search/report_rt_ticket.html | 1 - httemplate/search/report_sqlradius_usage.html | 40 + httemplate/search/report_svc_acct.html | 2 +- httemplate/search/report_svc_broadband.html | 2 +- httemplate/search/report_svc_hardware.html | 2 +- httemplate/search/report_tax-xls.cgi | 29 +- httemplate/search/report_tax.cgi | 779 +- httemplate/search/sqlradius_usage.html | 201 + httemplate/search/unearned_detail.html | 257 + httemplate/view/cust_bill.cgi | 2 - httemplate/view/cust_bill_void.html | 79 + httemplate/view/cust_main.cgi | 45 +- httemplate/view/cust_main/billing.html | 48 +- httemplate/view/cust_main/contacts.html | 153 +- httemplate/view/cust_main/custom_content.html | 31 + .../cust_main/custom_content/birthdate.html | 15 + .../custom_content/small_custview.html | 4 + .../custom_content/spouse_birthdate.html | 15 + .../cust_main/custom_content/svc_Common.html | 40 + .../cust_main/custom_content/svc_acct.html | 7 + .../custom_content/svc_hardware.html | 7 + .../cust_main/custom_content/svc_phone.html | 7 + httemplate/view/cust_main/locations.html | 22 +- httemplate/view/cust_main/misc.html | 54 +- httemplate/view/cust_main/order_pkg_link.html | 22 - httemplate/view/cust_main/packages.html | 2 +- .../view/cust_main/packages/services.html | 2 +- .../view/cust_main/packages/status.html | 41 +- .../view/cust_main/payment_history.html | 15 +- .../cust_main/payment_history/invoice.html | 14 +- .../cust_main/payment_history/payment.html | 2 +- .../payment_history/voided_invoice.html | 57 + .../payment_history/voided_payment.html | 2 +- httemplate/view/cust_main/tickets.html | 166 +- httemplate/view/cust_main_statement-pdf.cgi | 6 +- httemplate/view/cust_msg.html | 2 +- httemplate/view/directions.html | 1 - httemplate/view/elements/svc_Common.html | 4 + .../view/elements/tr-svc_export_machine.html | 27 + httemplate/view/prospect_main.html | 38 + httemplate/view/qual.cgi | 6 +- httemplate/view/quotation.html | 91 + httemplate/view/svc_acct.cgi | 6 + httemplate/view/svc_acct/basics.html | 8 + httemplate/view/svc_domain.cgi | 4 + httemplate/view/svc_external.cgi | 5 + httemplate/view/svc_forward.cgi | 4 + httemplate/view/svc_www.cgi | 4 + init.d/insserv-override-apache2 | 11 + rt/.perlcriticrc | 51 +- rt/FREESIDE_MODIFIED | 22 +- rt/Makefile | 536 - rt/Makefile.in | 244 +- rt/README | 427 +- rt/README.Oracle | 33 +- rt/UPGRADING | 417 - rt/UPGRADING.mysql | 86 - rt/aclocal.m4 | 6 +- rt/autom4te.cache/output.0 | 5138 ------ rt/autom4te.cache/requests | 68 - rt/autom4te.cache/traces.0 | 727 - rt/bin/fastcgi_server | 263 - rt/bin/fastcgi_server.in | 263 - rt/bin/mason_handler.fcgi | 99 - rt/bin/mason_handler.fcgi.in | 99 - rt/bin/mason_handler.scgi | 80 - rt/bin/mason_handler.scgi.in | 80 - rt/bin/mason_handler.svc | 276 - rt/bin/mason_handler.svc.in | 276 - rt/bin/rt | 2611 ++++ rt/bin/rt-crontool | 400 - rt/bin/rt-crontool.in | 159 +- rt/bin/rt-mailgate | 409 - rt/bin/rt-mailgate.in | 331 +- rt/bin/rt.in | 138 +- rt/bin/standalone_httpd | 186 - rt/bin/standalone_httpd.in | 186 - rt/bin/webmux.pl.in | 205 - rt/config.layout.in | 143 +- rt/config.log | 395 - rt/config.status | 1091 -- rt/configure | 369 +- rt/configure.ac | 96 +- rt/devel/tools/apache.conf | 173 + rt/devel/tools/change-loc-msgstr | 92 + rt/devel/tools/extract-message-catalog | 385 + rt/devel/tools/factory | 372 + rt/devel/tools/license_tag | 262 + rt/devel/tools/merge-rosetta.pl | 49 + rt/devel/tools/rt-attributes-editor | 130 + rt/devel/tools/tweak-template-locstring | 55 + rt/docs/README.docs | 2 - rt/docs/Security | 12 - rt/docs/UPGRADING-2.0 | 7 + rt/docs/UPGRADING-3.0 | 18 + rt/docs/UPGRADING-3.2 | 11 + rt/docs/UPGRADING-3.4 | 12 + rt/docs/UPGRADING-3.6 | 49 + rt/docs/UPGRADING-3.8 | 192 + rt/docs/UPGRADING-4.0 | 131 + rt/docs/UPGRADING.mysql | 85 + rt/docs/creating_external_custom_fields.pod | 97 - rt/docs/customizing/articles_introduction.pod | 155 + rt/docs/customizing/templates.pod | 132 + rt/docs/customizing/timezones_in_charts.pod | 88 + 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 - .../gnupg_details_on_output_formats | 1253 -- 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 - .../design_docs/rql_parser_machine.graphviz | 35 - rt/docs/design_docs/rt-mvc | 32 - rt/docs/design_docs/ruleset-workflow.txt | 158 - .../design_docs/subscription-definitions.txt | 113 - rt/docs/design_docs/ticket_templates | 16 - rt/docs/design_docs/users | 14 - rt/docs/extending/clickable_links.pod | 184 + rt/docs/extending/external_custom_fields.pod | 90 + .../{ => extending}/using_forms_widgets.pod | 0 rt/docs/extending_clickable_links.pod | 157 - rt/docs/full_text_indexing.pod | 174 + rt/docs/glossary.pod | 30 + rt/docs/gnupg_integration.pod | 1 - rt/docs/hacking.pod | 301 + rt/docs/network-diagram.svg | 6095 ++++++++ rt/docs/perlcritic.pod | 8 - rt/docs/porting.windows | 24 - rt/docs/queue_subject_tag.pod | 79 - rt/docs/rt3-schema-relationships.dot | 89 - rt/docs/schema.dot | 99 + rt/docs/security.pod | 92 + rt/docs/templates.pod | 65 - rt/docs/timezones_in_charts.pod | 84 - rt/docs/web_deployment.pod | 246 + rt/etc/RT_Config.pm | 1898 --- rt/etc/RT_Config.pm.in | 2786 ++-- rt/etc/RT_SiteConfig.pm | 5 +- rt/etc/acl.Informix | 6 - rt/etc/acl.Pg | 10 + rt/etc/acl.Sybase | 10 - rt/etc/constraints.mysql | 85 - rt/etc/drop.Informix | 19 - rt/etc/initialdata | 31 +- rt/etc/schema.Informix | 364 - rt/etc/schema.Pg | 170 +- rt/etc/schema.SQLite | 186 +- rt/etc/schema.Sybase | 444 - rt/etc/schema.mysql | 499 + rt/etc/schema.mysql-4.0 | 464 - rt/etc/upgrade/3.1.0/acl.Informix | 4 - rt/etc/upgrade/3.1.0/schema.Informix | 17 - rt/etc/upgrade/3.1.0/schema.Pg | 4 +- rt/etc/upgrade/3.1.0/schema.mysql | 4 +- rt/etc/upgrade/3.3.0/acl.Informix | 4 - rt/etc/upgrade/3.3.0/schema.mysql | 55 +- rt/etc/upgrade/3.3.11/schema.mysql | 4 +- rt/etc/upgrade/3.7.19/content | 2 +- rt/etc/upgrade/3.7.86/content | 4 +- rt/etc/upgrade/3.8-branded-queues-extension | 95 - .../upgrade/3.8-branded-queues-extension.in | 4 +- rt/etc/upgrade/3.8-ical-extension | 96 - rt/etc/upgrade/3.8-ical-extension.in | 6 +- rt/etc/upgrade/3.8.0/content | 4 +- rt/etc/upgrade/3.8.1/content | 4 +- rt/etc/upgrade/3.8.2/content | 12 +- rt/etc/upgrade/3.8.3/content | 6 +- rt/etc/upgrade/3.8.4/content | 6 +- rt/etc/upgrade/3.8.8/content | 4 +- rt/etc/upgrade/3.8.9/content | 2 +- rt/etc/upgrade/3.9.1/content | 68 + rt/etc/upgrade/3.9.2/content | 48 + rt/etc/upgrade/3.9.3/schema.Oracle | 2 + rt/etc/upgrade/3.9.3/schema.Pg | 2 + rt/etc/upgrade/3.9.3/schema.mysql | 2 + rt/etc/upgrade/3.9.5/backcompat | 1 + rt/etc/upgrade/3.9.5/schema.Oracle | 20 + rt/etc/upgrade/3.9.5/schema.Pg | 20 + rt/etc/upgrade/3.9.5/schema.SQLite | 19 + rt/etc/upgrade/3.9.5/schema.mysql | 20 + rt/etc/upgrade/3.9.6/schema.Oracle | 1 + rt/etc/upgrade/3.9.6/schema.Pg | 1 + rt/etc/upgrade/3.9.6/schema.SQLite | 69 + rt/etc/upgrade/3.9.6/schema.mysql | 1 + rt/etc/upgrade/3.9.7/content | 82 + rt/etc/upgrade/3.9.7/schema.Oracle | 6 + rt/etc/upgrade/3.9.7/schema.Pg | 6 + rt/etc/upgrade/3.9.7/schema.SQLite | 6 + rt/etc/upgrade/3.9.7/schema.mysql | 6 + rt/etc/upgrade/3.9.8/content | 24 + rt/etc/upgrade/3.9.8/schema.Oracle | 65 + rt/etc/upgrade/3.9.8/schema.Pg | 62 + rt/etc/upgrade/3.9.8/schema.SQLite | 55 + rt/etc/upgrade/3.9.8/schema.mysql | 58 + rt/etc/upgrade/4.0.0rc2/schema.mysql | 10 + rt/etc/upgrade/4.0.0rc4/schema.Oracle | 1 + rt/etc/upgrade/4.0.0rc4/schema.Pg | 1 + rt/etc/upgrade/4.0.0rc4/schema.mysql | 1 + rt/etc/upgrade/4.0.0rc7/content | 21 + rt/etc/upgrade/4.0.1/acl.Pg | 39 + rt/etc/upgrade/4.0.1/content | 83 + rt/etc/upgrade/4.0.3/content | 23 + rt/etc/upgrade/4.0.4/content | 16 + rt/etc/upgrade/4.0.6/content | 17 + rt/etc/upgrade/4.0.6/schema.mysql | 1 + rt/etc/upgrade/generate-rtaddressregexp | 87 - rt/etc/upgrade/generate-rtaddressregexp.in | 42 +- rt/etc/upgrade/sanity-check-stylesheets.pl | 87 + rt/etc/upgrade/shrink_cgm_table.pl | 6 +- rt/etc/upgrade/shrink_transactions_table.pl | 6 +- rt/etc/upgrade/split-out-cf-categories | 171 - rt/etc/upgrade/split-out-cf-categories.in | 18 +- rt/etc/upgrade/upgrade-articles | 264 + rt/etc/upgrade/upgrade-articles.in | 264 + rt/etc/upgrade/upgrade-mysql-schema.pl | 41 +- rt/etc/upgrade/vulnerable-passwords | 139 - rt/etc/upgrade/vulnerable-passwords.in | 5 +- rt/lib/RT.pm | 351 +- rt/lib/RT.pm.in | 719 - rt/lib/RT/ACE.pm | 649 +- rt/lib/RT/ACE_Overlay.pm | 743 - rt/lib/RT/ACL.pm | 281 +- rt/lib/RT/ACL_Overlay.pm | 377 - rt/lib/RT/Action.pm | 31 +- rt/lib/RT/Action/Accumulate.pm | 3 +- rt/lib/RT/Action/AutoOpen.pm | 57 +- rt/lib/RT/Action/Autoreply.pm | 8 +- rt/lib/RT/Action/CreateTickets.pm | 67 +- rt/lib/RT/Action/EscalatePriority.pm | 9 +- rt/lib/RT/Action/EscalateQueue.pm | 21 +- rt/lib/RT/Action/ExtractSubjectTag.pm | 8 +- rt/lib/RT/Action/Generic.pm | 73 - rt/lib/RT/Action/LinearEscalate.pm | 2 +- rt/lib/RT/Action/Notify.pm | 29 +- rt/lib/RT/Action/NotifyAsComment.pm | 2 +- rt/lib/RT/Action/NotifyGroup.pm | 2 +- rt/lib/RT/Action/NotifyGroupAsComment.pm | 2 +- rt/lib/RT/Action/RecordComment.pm | 2 +- rt/lib/RT/Action/RecordCorrespondence.pm | 2 +- rt/lib/RT/Action/ResolveMembers.pm | 108 - rt/lib/RT/Action/SendEmail.pm | 166 +- rt/lib/RT/Action/SetPriority.pm | 6 +- rt/lib/RT/Action/SetStatus.pm | 152 + rt/lib/RT/Action/UserDefined.pm | 2 +- rt/lib/RT/Approval.pm | 3 +- rt/lib/RT/Approval/Rule.pm | 8 +- rt/lib/RT/Approval/Rule/Created.pm | 2 +- rt/lib/RT/Approval/Rule/NewPending.pm | 2 +- rt/lib/RT/Approval/Rule/Passed.pm | 7 +- rt/lib/RT/Approval/Rule/Rejected.pm | 4 +- rt/lib/RT/Article.pm | 881 ++ rt/lib/RT/Articles.pm | 928 ++ rt/lib/RT/Attachment.pm | 880 +- rt/lib/RT/Attachment_Overlay.pm | 764 - rt/lib/RT/Attachments.pm | 197 +- rt/lib/RT/Attachments_Overlay.pm | 242 - rt/lib/RT/Attribute.pm | 452 +- rt/lib/RT/Attribute_Overlay.pm | 435 - rt/lib/RT/Attributes.pm | 177 +- rt/lib/RT/Attributes_Overlay.pm | 214 - rt/lib/RT/Base.pm | 16 +- rt/lib/RT/CachedGroupMember.pm | 324 +- rt/lib/RT/CachedGroupMember_Overlay.pm | 369 - rt/lib/RT/CachedGroupMembers.pm | 133 +- rt/lib/RT/CachedGroupMembers_Overlay.pm | 173 - rt/lib/RT/Class.pm | 621 + rt/lib/RT/Classes.pm | 104 + rt/lib/RT/Condition.pm | 23 +- rt/lib/RT/Condition/AnyTransaction.pm | 2 +- rt/lib/RT/Condition/BeforeDue.pm | 4 +- rt/lib/RT/Condition/CloseTicket.pm | 2 +- rt/lib/RT/Condition/Generic.pm | 74 - rt/lib/RT/Condition/Overdue.pm | 2 +- rt/lib/RT/Condition/OwnerChange.pm | 2 +- rt/lib/RT/Condition/PriorityChange.pm | 2 +- rt/lib/RT/Condition/PriorityExceeds.pm | 2 +- rt/lib/RT/Condition/QueueChange.pm | 2 +- rt/lib/RT/Condition/ReopenTicket.pm | 2 +- rt/lib/RT/Condition/StatusChange.pm | 85 +- rt/lib/RT/Condition/UserDefined.pm | 2 +- rt/lib/RT/Config.pm | 568 +- rt/lib/RT/Crypt/GnuPG.pm | 64 +- rt/lib/RT/CurrentUser.pm | 15 +- rt/lib/RT/CustomField.pm | 1900 ++- rt/lib/RT/CustomFieldValue.pm | 184 +- rt/lib/RT/CustomFieldValue_Overlay.pm | 195 - rt/lib/RT/CustomFieldValues.pm | 92 +- rt/lib/RT/CustomFieldValues/External.pm | 10 +- rt/lib/RT/CustomFieldValues/Groups.pm | 2 +- rt/lib/RT/CustomFieldValues_Overlay.pm | 75 - rt/lib/RT/CustomField_Overlay.pm | 1476 -- rt/lib/RT/CustomFields.pm | 334 +- rt/lib/RT/CustomFields_Overlay.pm | 347 - rt/lib/RT/Dashboard.pm | 188 +- rt/lib/RT/Dashboard/Mailer.pm | 580 + rt/lib/RT/Dashboards.pm | 112 + rt/lib/RT/Date.pm | 103 +- rt/lib/RT/EmailParser.pm | 34 +- rt/lib/RT/Generated.pm | 81 + rt/lib/RT/Generated.pm.in | 81 + rt/lib/RT/Graph/Tickets.pm | 16 +- rt/lib/RT/Group.pm | 1297 +- rt/lib/RT/GroupMember.pm | 409 +- rt/lib/RT/GroupMember_Overlay.pm | 396 - rt/lib/RT/GroupMembers.pm | 109 +- rt/lib/RT/GroupMembers_Overlay.pm | 149 - rt/lib/RT/Group_Overlay.pm | 1398 -- rt/lib/RT/Groups.pm | 421 +- rt/lib/RT/Groups_Overlay.pm | 447 - rt/lib/RT/Handle.pm | 270 +- rt/lib/RT/I18N.pm | 341 +- rt/lib/RT/I18N/ar.po | 7750 --------- rt/lib/RT/I18N/bg.po | 7758 --------- rt/lib/RT/I18N/cs.pm | 11 +- rt/lib/RT/I18N/cs.po | 7894 ---------- rt/lib/RT/I18N/da.po | 9389 ----------- rt/lib/RT/I18N/de.po | 8613 ---------- rt/lib/RT/I18N/el.po | 7726 --------- rt/lib/RT/I18N/en.po | 27 - rt/lib/RT/I18N/en_GB.po | 7638 --------- rt/lib/RT/I18N/es.po | 9634 ------------ rt/lib/RT/I18N/et.po | 7762 --------- rt/lib/RT/I18N/fi.po | 9011 ----------- rt/lib/RT/I18N/fr.po | 8194 ---------- rt/lib/RT/I18N/he.po | 8150 ---------- rt/lib/RT/I18N/hr.po | 9007 ----------- rt/lib/RT/I18N/hu.po | 8060 ---------- rt/lib/RT/I18N/i_default.pm | 6 +- rt/lib/RT/I18N/id.po | 8459 ---------- rt/lib/RT/I18N/is.po | 7694 --------- rt/lib/RT/I18N/it.po | 9490 ----------- rt/lib/RT/I18N/ja.po | 7968 ---------- rt/lib/RT/I18N/lt.po | 9330 ----------- rt/lib/RT/I18N/lv.po | 7755 --------- rt/lib/RT/I18N/mk.po | 8070 ---------- rt/lib/RT/I18N/nb.po | 9410 ----------- rt/lib/RT/I18N/nl.po | 9174 ----------- rt/lib/RT/I18N/nn.po | 7847 ---------- rt/lib/RT/I18N/pl.po | 9529 ----------- rt/lib/RT/I18N/pt.po | 8142 ---------- rt/lib/RT/I18N/pt_BR.po | 9546 ----------- rt/lib/RT/I18N/pt_PT.po | 7726 --------- rt/lib/RT/I18N/rt.pot | 7689 --------- rt/lib/RT/I18N/ru.pm | 11 +- rt/lib/RT/I18N/ru.po | 8008 ---------- rt/lib/RT/I18N/sl.po | 7715 --------- rt/lib/RT/I18N/sv.po | 8217 ---------- rt/lib/RT/I18N/tr.po | 8171 ---------- rt/lib/RT/I18N/zh_CN.po | 12669 --------------- rt/lib/RT/I18N/zh_TW.po | 12710 --------------- rt/lib/RT/Installer.pm | 62 +- rt/lib/RT/Interface/CLI.pm | 48 +- rt/lib/RT/Interface/Email.pm | 211 +- rt/lib/RT/Interface/Email/Auth/GnuPG.pm | 12 +- rt/lib/RT/Interface/Email/Auth/MailFrom.pm | 13 +- .../RT/Interface/Email/Filter/SpamAssassin.pm | 97 - rt/lib/RT/Interface/REST.pm | 21 +- rt/lib/RT/Interface/Web.pm | 1183 +- rt/lib/RT/Interface/Web/Handler.pm | 230 +- rt/lib/RT/Interface/Web/Menu.pm | 259 +- rt/lib/RT/Interface/Web/Menu/Item.pm | 88 - rt/lib/RT/Interface/Web/QueryBuilder.pm | 2 +- rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm | 24 +- rt/lib/RT/Interface/Web/Request.pm | 51 +- rt/lib/RT/Interface/Web/Session.pm | 2 +- rt/lib/RT/Interface/Web/Standalone.pm | 126 - rt/lib/RT/Interface/Web/Standalone/PreFork.pm | 103 - rt/lib/RT/Interface/Web_Vendor.pm | 26 +- rt/lib/RT/Lifecycle.pm | 692 + rt/lib/RT/Link.pm | 313 +- rt/lib/RT/Link_Overlay.pm | 295 - rt/lib/RT/Links.pm | 127 +- rt/lib/RT/Links_Overlay.pm | 164 - rt/lib/RT/ObjectClass.pm | 222 + rt/lib/RT/ObjectClasses.pm | 87 + rt/lib/RT/ObjectCustomField.pm | 331 +- rt/lib/RT/ObjectCustomFieldValue.pm | 587 +- rt/lib/RT/ObjectCustomFieldValue_Overlay.pm | 310 - rt/lib/RT/ObjectCustomFieldValues.pm | 129 +- rt/lib/RT/ObjectCustomFieldValues_Overlay.pm | 142 - rt/lib/RT/ObjectCustomField_Overlay.pm | 268 - rt/lib/RT/ObjectCustomFields.pm | 115 +- rt/lib/RT/ObjectCustomFields_Overlay.pm | 118 - rt/lib/RT/ObjectTopic.pm | 214 + rt/lib/RT/ObjectTopics.pm | 115 + rt/lib/RT/Plugin.pm | 4 +- rt/lib/RT/Principal.pm | 730 +- rt/lib/RT/Principal_Overlay.pm | 650 - rt/lib/RT/Principals.pm | 52 +- rt/lib/RT/Principals_Overlay.pm | 75 - rt/lib/RT/Queue.pm | 1345 +- rt/lib/RT/Queue_Overlay.pm | 1246 -- rt/lib/RT/Queues.pm | 82 +- rt/lib/RT/Queues_Overlay.pm | 117 - rt/lib/RT/Record.pm | 329 +- rt/lib/RT/Reminders.pm | 86 +- rt/lib/RT/Report/Tickets.pm | 14 +- rt/lib/RT/Report/Tickets/Entry.pm | 10 +- rt/lib/RT/Rule.pm | 15 +- rt/lib/RT/Ruleset.pm | 5 +- rt/lib/RT/SQL.pm | 18 +- rt/lib/RT/SavedSearch.pm | 45 +- rt/lib/RT/SavedSearches.pm | 95 +- rt/lib/RT/Scrip.pm | 817 +- rt/lib/RT/ScripAction.pm | 293 +- rt/lib/RT/ScripAction_Overlay.pm | 281 - rt/lib/RT/ScripActions.pm | 75 +- rt/lib/RT/ScripActions_Overlay.pm | 110 - rt/lib/RT/ScripCondition.pm | 254 +- rt/lib/RT/ScripCondition_Overlay.pm | 234 - rt/lib/RT/ScripConditions.pm | 73 +- rt/lib/RT/ScripConditions_Overlay.pm | 110 - rt/lib/RT/Scrip_Overlay.pm | 652 - rt/lib/RT/Scrips.pm | 345 +- rt/lib/RT/Scrips_Overlay.pm | 388 - rt/lib/RT/Search.pm | 74 +- rt/lib/RT/Search/ActiveTicketsInQueue.pm | 6 +- rt/lib/RT/Search/FromSQL.pm | 6 +- rt/lib/RT/Search/Generic.pm | 74 - rt/lib/RT/Search/Googleish.pm | 278 +- rt/lib/RT/SearchBuilder.pm | 199 +- rt/lib/RT/SharedSetting.pm | 73 +- rt/lib/RT/SharedSettings.pm | 155 + rt/lib/RT/Shredder.pm | 45 +- rt/lib/RT/Shredder/ACE.pm | 2 +- rt/lib/RT/Shredder/Attachment.pm | 2 +- rt/lib/RT/Shredder/CachedGroupMember.pm | 10 +- rt/lib/RT/Shredder/Constants.pm | 5 +- rt/lib/RT/Shredder/CustomField.pm | 2 +- rt/lib/RT/Shredder/CustomFieldValue.pm | 2 +- rt/lib/RT/Shredder/Dependencies.pm | 2 +- rt/lib/RT/Shredder/Dependency.pm | 2 +- rt/lib/RT/Shredder/Exceptions.pm | 2 +- rt/lib/RT/Shredder/Group.pm | 2 +- rt/lib/RT/Shredder/GroupMember.pm | 8 +- rt/lib/RT/Shredder/Link.pm | 2 +- rt/lib/RT/Shredder/ObjectCustomFieldValue.pm | 2 +- rt/lib/RT/Shredder/POD.pm | 11 +- rt/lib/RT/Shredder/Plugin.pm | 7 +- rt/lib/RT/Shredder/Plugin/Attachments.pm | 2 +- rt/lib/RT/Shredder/Plugin/Base.pm | 2 +- rt/lib/RT/Shredder/Plugin/Base/Dump.pm | 2 +- rt/lib/RT/Shredder/Plugin/Base/Search.pm | 2 +- rt/lib/RT/Shredder/Plugin/Objects.pm | 2 +- rt/lib/RT/Shredder/Plugin/SQLDump.pm | 2 +- rt/lib/RT/Shredder/Plugin/Summary.pm | 2 +- rt/lib/RT/Shredder/Plugin/Tickets.pm | 6 +- rt/lib/RT/Shredder/Plugin/Users.pm | 10 +- rt/lib/RT/Shredder/Principal.pm | 2 +- rt/lib/RT/Shredder/Queue.pm | 3 +- rt/lib/RT/Shredder/Record.pm | 4 +- rt/lib/RT/Shredder/Scrip.pm | 2 +- rt/lib/RT/Shredder/ScripAction.pm | 2 +- rt/lib/RT/Shredder/ScripCondition.pm | 2 +- rt/lib/RT/Shredder/Template.pm | 2 +- rt/lib/RT/Shredder/Ticket.pm | 2 +- rt/lib/RT/Shredder/Transaction.pm | 2 +- rt/lib/RT/Shredder/User.pm | 4 +- rt/lib/RT/Squish.pm | 122 + rt/lib/RT/Squish/CSS.pm | 105 + rt/lib/RT/Squish/JS.pm | 127 + rt/lib/RT/StyleGuide.pod | 16 + rt/lib/RT/System.pm | 106 +- rt/lib/RT/Template.pm | 801 +- rt/lib/RT/Template_Overlay.pm | 475 - rt/lib/RT/Templates.pm | 122 +- rt/lib/RT/Templates_Overlay.pm | 199 - rt/lib/RT/Test.pm | 939 +- rt/lib/RT/Test/Apache.pm | 270 + rt/lib/RT/Test/Email.pm | 7 +- rt/lib/RT/Test/GnuPG.pm | 360 + rt/lib/RT/Test/Web.pm | 203 +- rt/lib/RT/Ticket.pm | 4107 ++++- rt/lib/RT/Ticket_Overlay.pm | 3748 ----- rt/lib/RT/Tickets.pm | 3794 ++++- rt/lib/RT/Tickets_Overlay.pm | 3641 ----- rt/lib/RT/Tickets_Overlay_SQL.pm | 422 - rt/lib/RT/Tickets_SQL.pm | 423 + rt/lib/RT/Topic.pm | 376 + rt/lib/RT/Topics.pm | 119 + rt/lib/RT/Transaction.pm | 1424 +- rt/lib/RT/Transaction_Overlay.pm | 1311 -- rt/lib/RT/Transaction_Vendor.pm | 29 - rt/lib/RT/Transactions.pm | 123 +- rt/lib/RT/Transactions_Overlay.pm | 157 - rt/lib/RT/URI.pm | 41 +- rt/lib/RT/URI/a.pm | 92 + rt/lib/RT/URI/base.pm | 2 +- rt/lib/RT/URI/freeside/Internal.pm | 81 +- rt/lib/RT/URI/fsck_com_article.pm | 216 + rt/lib/RT/URI/fsck_com_rt.pm | 2 +- rt/lib/RT/URI/t.pm | 26 +- rt/lib/RT/User.pm | 1981 ++- rt/lib/RT/User_Overlay.pm | 2084 --- rt/lib/RT/Users.pm | 529 +- rt/lib/RT/Users_Overlay.pm | 561 - rt/lib/RT/Util.pm | 66 +- rt/lib/RTx/Calendar.pm | 61 +- rt/m4/rt_enable_layout.m4 | 36 - rt/m4/rt_expand_var.m4 | 18 - rt/m4/rt_layout.m4 | 77 - rt/m4/rt_subst_expanded_arg.m4 | 14 - rt/sbin/extract-message-catalog | 382 - rt/sbin/factory | 520 - rt/sbin/license_tag | 261 - rt/sbin/merge-rosetta.pl | 49 - rt/sbin/rt-attributes-viewer | 110 - rt/sbin/rt-attributes-viewer.in | 42 +- rt/sbin/rt-clean-sessions | 190 - rt/sbin/rt-clean-sessions.in | 24 +- rt/sbin/rt-dump-database | 199 - rt/sbin/rt-dump-database.in | 199 - rt/sbin/rt-dump-metadata.in | 251 + rt/sbin/rt-email-dashboards | 568 - rt/sbin/rt-email-dashboards.in | 457 +- rt/sbin/rt-email-digest | 337 - rt/sbin/rt-email-digest.in | 57 +- rt/sbin/rt-email-group-admin | 508 - rt/sbin/rt-email-group-admin.in | 55 +- rt/sbin/rt-fulltext-indexer | 453 + rt/sbin/rt-fulltext-indexer.in | 453 + rt/sbin/rt-message-catalog | 25 +- rt/sbin/rt-preferences-viewer.in | 149 + rt/sbin/rt-server | 129 - rt/sbin/rt-server.fcgi.in | 283 + rt/sbin/rt-server.in | 192 +- rt/sbin/rt-session-viewer | 0 rt/sbin/rt-setup-database.in | 280 +- rt/sbin/rt-setup-fulltext-index | 714 + rt/sbin/rt-setup-fulltext-index.in | 714 + rt/sbin/rt-shredder | 323 - rt/sbin/rt-shredder.in | 8 +- rt/sbin/rt-test-dependencies.in | 256 +- rt/sbin/rt-validator | 1119 -- rt/sbin/rt-validator.in | 185 +- rt/sbin/standalone_httpd | 283 + rt/sbin/standalone_httpd.in | 283 + rt/sbin/tweak-template-locstring | 55 - .../Admin/Articles/Classes/CustomFields.html | 64 + .../Admin/Articles/Classes/GroupRights.html | 73 + .../html/Admin/Articles/Classes/Modify.html | 199 + .../html/Admin/Articles/Classes/Objects.html | 154 + .../html/Admin/Articles/Classes/Topics.html | 68 + .../Admin/Articles/Classes/UserRights.html | 72 + .../html/Admin/Articles/Classes/index.html | 91 + rt/share/html/Admin/Articles/Elements/Topics | 215 + rt/share/html/Admin/Articles/index.html | 50 + .../html/Admin/CustomFields/GroupRights.html | 58 +- rt/share/html/Admin/CustomFields/Modify.html | 115 +- rt/share/html/Admin/CustomFields/Objects.html | 13 +- .../html/Admin/CustomFields/UserRights.html | 54 +- rt/share/html/Admin/CustomFields/index.html | 11 +- .../html/Admin/Elements/AddCustomFieldValue | 10 +- rt/share/html/Admin/Elements/ConfigureMyRT | 2 +- rt/share/html/Admin/Elements/CreateUserCalled | 2 +- rt/share/html/Admin/Elements/CustomFieldTabs | 121 - rt/share/html/Admin/Elements/EditCustomField | 2 +- .../html/Admin/Elements/EditCustomFieldValues | 11 +- .../Elements/EditCustomFieldValuesSource | 2 +- rt/share/html/Admin/Elements/EditCustomFields | 5 +- .../html/Admin/Elements/EditQueueWatcherGroup | 56 + .../html/Admin/Elements/EditQueueWatchers | 2 +- rt/share/html/Admin/Elements/EditRights | 175 + .../Admin/Elements/EditRightsCategoryTabs | 129 + rt/share/html/Admin/Elements/EditScrip | 29 +- rt/share/html/Admin/Elements/EditScrips | 10 +- rt/share/html/Admin/Elements/EditTemplates | 2 +- rt/share/html/Admin/Elements/EditUserComments | 2 +- .../html/Admin/Elements/GlobalCustomFieldTabs | 105 - rt/share/html/Admin/Elements/GroupTabs | 102 - rt/share/html/Admin/Elements/Header | 2 +- .../Admin/Elements/ListGlobalCustomFields | 4 +- rt/share/html/Admin/Elements/ListGlobalScrips | 7 +- rt/share/html/Admin/Elements/ModifyTemplate | 41 +- .../html/Admin/Elements/ObjectCustomFields | 111 - rt/share/html/Admin/Elements/PickCustomFields | 2 +- rt/share/html/Admin/Elements/PickObjects | 2 +- rt/share/html/Admin/Elements/Portal | 52 + .../html/Admin/Elements/QueueRightsForUser | 4 +- rt/share/html/Admin/Elements/QueueTabs | 123 - .../html/Admin/Elements/SelectCustomField | 2 +- .../Elements/SelectCustomFieldLookupType | 2 +- .../Elements/SelectCustomFieldRenderType | 70 + .../html/Admin/Elements/SelectCustomFieldType | 4 +- rt/share/html/Admin/Elements/SelectGroups | 4 +- .../html/Admin/Elements/SelectModifyGroup | 4 +- .../html/Admin/Elements/SelectModifyQueue | 4 +- rt/share/html/Admin/Elements/SelectModifyUser | 6 +- .../html/Admin/Elements/SelectNewGroupMembers | 79 +- rt/share/html/Admin/Elements/SelectRights | 17 +- rt/share/html/Admin/Elements/SelectScrip | 2 +- .../html/Admin/Elements/SelectScripAction | 15 +- .../html/Admin/Elements/SelectScripCondition | 16 +- .../Admin/Elements/SelectSingleOrMultiple | 2 +- rt/share/html/Admin/Elements/SelectStage | 2 +- rt/share/html/Admin/Elements/SelectTemplate | 20 +- rt/share/html/Admin/Elements/SelectUsers | 8 +- rt/share/html/Admin/Elements/ShowKeyInfo | 3 +- rt/share/html/Admin/Elements/SystemTabs | 99 - rt/share/html/Admin/Elements/Tabs | 95 - rt/share/html/Admin/Elements/ToolTabs | 82 - rt/share/html/Admin/Elements/UserTabs | 116 - .../Global/CustomFields/Class-Article.html | 54 + .../Admin/Global/CustomFields/Groups.html | 7 +- .../Global/CustomFields/Queue-Tickets.html | 7 +- .../CustomFields/Queue-Transactions.html | 7 +- .../Admin/Global/CustomFields/Queues.html | 7 +- .../html/Admin/Global/CustomFields/Users.html | 7 +- .../html/Admin/Global/CustomFields/index.html | 9 +- rt/share/html/Admin/Global/GroupRights.html | 80 +- rt/share/html/Admin/Global/MyRT.html | 7 +- rt/share/html/Admin/Global/Scrip.html | 29 +- rt/share/html/Admin/Global/Scrips.html | 23 +- rt/share/html/Admin/Global/Template.html | 50 +- rt/share/html/Admin/Global/Templates.html | 23 +- rt/share/html/Admin/Global/Topics.html | 63 + rt/share/html/Admin/Global/UserRights.html | 54 +- rt/share/html/Admin/Global/index.html | 42 +- rt/share/html/Admin/Groups/CustomFields.html | 48 - rt/share/html/Admin/Groups/GroupRights.html | 62 +- rt/share/html/Admin/Groups/History.html | 11 +- rt/share/html/Admin/Groups/Members.html | 42 +- rt/share/html/Admin/Groups/Modify.html | 72 +- rt/share/html/Admin/Groups/UserRights.html | 56 +- rt/share/html/Admin/Groups/index.html | 53 +- rt/share/html/Admin/Queues/CustomField.html | 21 +- rt/share/html/Admin/Queues/CustomFields.html | 11 +- rt/share/html/Admin/Queues/GroupRights.html | 88 +- rt/share/html/Admin/Queues/History.html | 11 +- rt/share/html/Admin/Queues/Modify.html | 79 +- rt/share/html/Admin/Queues/People.html | 108 +- rt/share/html/Admin/Queues/Scrip.html | 28 +- rt/share/html/Admin/Queues/Scrips.html | 21 +- rt/share/html/Admin/Queues/Template.html | 98 +- rt/share/html/Admin/Queues/Templates.html | 26 +- rt/share/html/Admin/Queues/UserRights.html | 58 +- rt/share/html/Admin/Queues/index.html | 10 +- rt/share/html/Admin/Tools/Configuration.html | 68 +- rt/share/html/Admin/Tools/Queries.html | 129 + .../html/Admin/Tools/Shredder/Dumps/dhandler | 7 +- .../Tools/Shredder/Elements/DumpFileLink | 2 +- .../Tools/Shredder/Elements/Error/NoRights | 8 +- .../Tools/Shredder/Elements/Error/NoStorage | 11 +- .../Shredder/Elements/Object/RT--Attachment | 7 +- .../Tools/Shredder/Elements/Object/RT--Ticket | 4 +- .../Tools/Shredder/Elements/Object/RT--User | 4 +- .../Tools/Shredder/Elements/ObjectCheckBox | 2 +- .../Tools/Shredder/Elements/PluginArguments | 4 +- .../Admin/Tools/Shredder/Elements/PluginHelp | 4 +- .../Tools/Shredder/Elements/SelectObjects | 2 +- .../Tools/Shredder/Elements/SelectPlugin | 4 +- .../html/Admin/Tools/Shredder/autohandler | 2 +- rt/share/html/Admin/Tools/Shredder/index.html | 16 +- rt/share/html/Admin/Tools/Theme.html | 309 + rt/share/html/Admin/Tools/index.html | 13 +- rt/share/html/Admin/Users/CustomFields.html | 9 +- rt/share/html/Admin/Users/GnuPG.html | 9 +- rt/share/html/Admin/Users/History.html | 11 +- rt/share/html/Admin/Users/Memberships.html | 15 +- rt/share/html/Admin/Users/Modify.html | 74 +- rt/share/html/Admin/Users/MyRT.html | 14 +- rt/share/html/Admin/Users/index.html | 94 +- rt/share/html/Admin/autohandler | 2 +- rt/share/html/Admin/index.html | 56 +- rt/share/html/Approvals/Display.html | 7 +- rt/share/html/Approvals/Elements/Approve | 18 +- .../html/Approvals/Elements/PendingMyApproval | 74 +- .../html/Approvals/Elements/ShowDependency | 2 +- rt/share/html/Approvals/Elements/Tabs | 58 - rt/share/html/Approvals/autohandler | 11 +- rt/share/html/Approvals/index.html | 14 +- rt/share/html/Articles/Article/Delete.html | 106 + rt/share/html/Articles/Article/Display.html | 92 + rt/share/html/Articles/Article/Edit.html | 334 + .../html/Articles/Article/Elements/EditBasics | 73 + .../Article/Elements/EditCustomFields | 83 + .../html/Articles/Article/Elements/EditLinks | 113 + .../html/Articles/Article/Elements/EditTopics | 144 + .../Article/Elements/LinkEntryInstructions | 49 + .../Articles/Article/Elements/Preformatted | 127 + .../Article/Elements/SearchByCustomField | 70 + .../Article/Elements/SelectSavedSearches | 76 + .../Article/Elements/SelectSearchPrivacy | 62 + .../Articles/Article/Elements/ShowHistory | 76 + .../html/Articles/Article/Elements/ShowLinks | 92 + .../Article/Elements/ShowSavedSearches | 85 + .../Article/Elements/ShowSearchCriteria | 171 + .../html/Articles/Article/Elements/ShowTopics | 58 + .../Articles/Article/ExtractFromTicket.html | 105 + .../Articles/Article/ExtractIntoClass.html | 76 + .../Articles/Article/ExtractIntoTopic.html | 72 + rt/share/html/Articles/Article/History.html | 57 + rt/share/html/Articles/Article/PreCreate.html | 62 + rt/share/html/Articles/Article/Search.html | 269 + .../html/Articles/Elements/BeforeMessageBox | 239 + .../html/Articles/Elements/CheckSkipCreate | 76 + rt/share/html/Articles/Elements/CreateArticle | 59 + rt/share/html/Articles/Elements/GotoArticle | 73 + .../html/Articles/Elements/IncludeArticle | 99 + .../html/Articles/Elements/NewestArticles | 80 + rt/share/html/Articles/Elements/QuickSearch | 59 + rt/share/html/Articles/Elements/SelectClass | 95 + rt/share/html/Articles/Elements/ShowTopic | 64 + rt/share/html/Articles/Elements/ShowTopicLink | 27 + .../html/Articles/Elements/UpdatedArticles | 81 + rt/share/html/Articles/Topics.html | 203 + rt/share/html/Articles/index.html | 63 + .../RTx-Calendar/Elements/Header/Head | 3 + .../RTx-Calendar/Elements/Tabs/Privileged | 73 + .../RTx-Calendar/Ticket/Elements/Tabs/Default | 2 +- .../Dashboards/Elements/DashboardsForObject | 2 +- .../Dashboards/Elements/DashboardsForObjects | 81 - rt/share/html/Dashboards/Elements/Deleted | 2 +- .../html/Dashboards/Elements/HiddenSearches | 2 +- .../html/Dashboards/Elements/ListOfDashboards | 30 +- .../html/Dashboards/Elements/SelectPrivacy | 2 +- .../html/Dashboards/Elements/ShowDashboards | 85 +- .../Dashboards/Elements/ShowPortlet/component | 2 +- .../Dashboards/Elements/ShowPortlet/dashboard | 2 +- .../Dashboards/Elements/ShowPortlet/search | 2 +- .../html/Dashboards/Elements/ShowSubscription | 75 - rt/share/html/Dashboards/Elements/Tabs | 113 - rt/share/html/Dashboards/Modify.html | 70 +- rt/share/html/Dashboards/Queries.html | 22 +- rt/share/html/Dashboards/Render.html | 43 +- rt/share/html/Dashboards/Subscription.html | 168 +- rt/share/html/Dashboards/dhandler | 2 +- rt/share/html/Dashboards/index.html | 64 +- .../html/Download/CustomFieldValue/dhandler | 2 +- rt/share/html/Download/Tabular/dhandler | 76 - rt/share/html/Elements/AddCustomers | 2 +- rt/share/html/Elements/BevelBoxRaisedEnd | 2 +- rt/share/html/Elements/BevelBoxRaisedStart | 2 +- rt/share/html/Elements/CSRF | 74 + rt/share/html/Elements/CalendarEvent | 8 +- rt/share/html/Elements/Callback | 2 +- rt/share/html/Elements/Checkbox | 2 +- .../html/Elements/CollectionAsTable/Header | 8 +- .../Elements/CollectionAsTable/ParseFormat | 3 +- rt/share/html/Elements/CollectionAsTable/Row | 7 +- rt/share/html/Elements/CollectionList | 20 +- rt/share/html/Elements/CollectionListPaging | 14 +- rt/share/html/Elements/ColumnMap | 24 +- rt/share/html/Elements/CreateTicket | 12 +- rt/share/html/Elements/CustomerFields | 16 +- rt/share/html/Elements/DashboardTabs | 99 - rt/share/html/Elements/Dashboards | 19 +- rt/share/html/Elements/EditCustomField | 6 +- .../html/Elements/EditCustomFieldAutocomplete | 47 +- rt/share/html/Elements/EditCustomFieldBinary | 2 +- .../html/Elements/EditCustomFieldCombobox | 2 +- rt/share/html/Elements/EditCustomFieldDate | 38 +- .../html/Elements/EditCustomFieldDateTime | 62 + .../html/Elements/EditCustomFieldFreeform | 2 +- .../html/Elements/EditCustomFieldIPAddress | 50 + .../Elements/EditCustomFieldIPAddressRange | 50 + rt/share/html/Elements/EditCustomFieldImage | 2 +- rt/share/html/Elements/EditCustomFieldSelect | 53 +- rt/share/html/Elements/EditCustomFieldText | 2 +- .../html/Elements/EditCustomFieldWikitext | 2 +- rt/share/html/Elements/EditLinks | 3 +- rt/share/html/Elements/EditPassword | 2 +- rt/share/html/Elements/EditTimeValue | 6 +- rt/share/html/Elements/EmailInput | 4 +- rt/share/html/Elements/Error | 6 +- rt/share/html/Elements/Footer | 4 +- rt/share/html/Elements/Framekiller | 67 + rt/share/html/Elements/GnuPG/KeyIssues | 2 +- .../Elements/GnuPG/SelectKeyForEncryption | 2 +- .../html/Elements/GnuPG/SelectKeyForSigning | 2 +- .../html/Elements/GnuPG/SignEncryptWidget | 33 +- rt/share/html/Elements/GotoTicket | 2 +- rt/share/html/Elements/Header | 56 +- rt/share/html/Elements/HeaderJavascript | 90 +- rt/share/html/Elements/ListActions | 4 +- rt/share/html/Elements/ListMenu | 46 +- rt/share/html/Elements/Login | 17 +- rt/share/html/Elements/Logo | 30 +- rt/share/html/Elements/Logout | 62 - rt/share/html/Elements/MakeClicky | 14 +- rt/share/html/Elements/Menu | 123 +- rt/share/html/Elements/MessageBox | 21 +- rt/share/html/Elements/MyAdminQueues | 8 +- rt/share/html/Elements/MyRT | 4 +- rt/share/html/Elements/MyReminders | 34 +- rt/share/html/Elements/MyRequests | 2 +- rt/share/html/Elements/MySupportQueues | 12 +- rt/share/html/Elements/MyTickets | 2 +- rt/share/html/Elements/PageLayout | 203 +- rt/share/html/Elements/PersonalQuickbar | 12 +- rt/share/html/Elements/QueriesAsComment | 58 + rt/share/html/Elements/QueryString | 2 +- rt/share/html/Elements/QueueSummary | 108 - .../html/Elements/QueueSummaryByLifecycle | 145 + rt/share/html/Elements/QueueSummaryByStatus | 143 + rt/share/html/Elements/QuickCreate | 10 +- rt/share/html/Elements/Quicksearch | 24 +- rt/share/html/Elements/RT__Article/ColumnMap | 107 + rt/share/html/Elements/RT__Class/ColumnMap | 76 + .../html/Elements/RT__CustomField/ColumnMap | 14 +- .../html/Elements/RT__Dashboard/ColumnMap | 134 + rt/share/html/Elements/RT__Group/ColumnMap | 2 +- rt/share/html/Elements/RT__Queue/ColumnMap | 7 +- .../html/Elements/RT__SavedSearch/ColumnMap | 6 +- rt/share/html/Elements/RT__Scrip/ColumnMap | 2 +- rt/share/html/Elements/RT__Template/ColumnMap | 2 +- rt/share/html/Elements/RT__Ticket/ColumnMap | 7 +- rt/share/html/Elements/RT__User/ColumnMap | 90 +- rt/share/html/Elements/Refresh | 2 +- rt/share/html/Elements/RefreshHomepage | 2 +- rt/share/html/Elements/SavedSearches | 116 +- rt/share/html/Elements/ScrubHTML | 28 +- rt/share/html/Elements/Section | 2 +- rt/share/html/Elements/SelectAttachmentField | 4 +- rt/share/html/Elements/SelectBoolean | 2 +- .../html/Elements/SelectCustomFieldOperator | 2 +- rt/share/html/Elements/SelectCustomFieldValue | 2 +- rt/share/html/Elements/SelectDate | 6 +- rt/share/html/Elements/SelectDateRelation | 2 +- rt/share/html/Elements/SelectDateType | 2 +- rt/share/html/Elements/SelectEqualityOperator | 2 +- rt/share/html/Elements/SelectGroups | 2 +- rt/share/html/Elements/SelectIPRelation | 64 + rt/share/html/Elements/SelectLang | 2 +- rt/share/html/Elements/SelectLinkType | 2 +- rt/share/html/Elements/SelectMatch | 2 +- rt/share/html/Elements/SelectNewTicketQueue | 9 +- rt/share/html/Elements/SelectOwner | 84 +- .../html/Elements/SelectOwnerAutocomplete | 102 + rt/share/html/Elements/SelectOwnerDropdown | 99 + rt/share/html/Elements/SelectPriority | 2 +- rt/share/html/Elements/SelectQueue | 36 +- rt/share/html/Elements/SelectResultsPerPage | 2 +- rt/share/html/Elements/SelectSortOrder | 2 +- rt/share/html/Elements/SelectStatus | 67 +- rt/share/html/Elements/SelectTicketSortBy | 4 +- rt/share/html/Elements/SelectTicketTypes | 2 +- rt/share/html/Elements/SelectTimeUnits | 4 +- rt/share/html/Elements/SelectTimezone | 25 +- rt/share/html/Elements/SelectUsers | 17 +- rt/share/html/Elements/SelectWatcherType | 6 +- rt/share/html/Elements/ServiceFields | 161 + rt/share/html/Elements/SetupSessionCookie | 2 +- rt/share/html/Elements/ShowCustomFieldBinary | 4 +- rt/share/html/Elements/ShowCustomFieldDate | 36 +- .../html/Elements/ShowCustomFieldDateTime | 57 + rt/share/html/Elements/ShowCustomFieldImage | 4 +- rt/share/html/Elements/ShowCustomFieldText | 2 +- .../html/Elements/ShowCustomFieldWikitext | 2 +- rt/share/html/Elements/ShowCustomFields | 19 +- rt/share/html/Elements/ShowLink | 19 +- rt/share/html/Elements/ShowLinks | 53 +- rt/share/html/Elements/ShowMemberships | 6 +- rt/share/html/Elements/ShowRelationLabel | 2 +- rt/share/html/Elements/ShowReminders | 101 + rt/share/html/Elements/ShowSearch | 21 +- rt/share/html/Elements/ShowUser | 9 +- rt/share/html/Elements/ShowUserConcise | 7 +- rt/share/html/Elements/ShowUserEmailFrequency | 2 +- rt/share/html/Elements/ShowUserVerbose | 28 +- rt/share/html/Elements/SimpleSearch | 2 +- rt/share/html/Elements/Submit | 40 +- rt/share/html/Elements/Tabs | 909 +- rt/share/html/Elements/TicketList | 2 +- rt/share/html/Elements/TitleBox | 2 +- rt/share/html/Elements/TitleBoxEnd | 2 +- rt/share/html/Elements/TitleBoxStart | 2 +- rt/share/html/Elements/ValidateCustomFields | 29 +- rt/share/html/Elements/WidgetBar | 58 + .../Helpers/Autocomplete/CustomFieldValues | 87 +- rt/share/html/Helpers/Autocomplete/Groups | 88 + rt/share/html/Helpers/Autocomplete/Owners | 150 + rt/share/html/Helpers/Autocomplete/Users | 133 + rt/share/html/Helpers/CalPopup.html | 143 - rt/share/html/Helpers/TicketHistory | 67 + rt/share/html/Helpers/Toggle/ShowRequestor | 65 + rt/share/html/Helpers/Toggle/TicketBookmark | 2 +- rt/share/html/Install/Basics.html | 11 +- rt/share/html/Install/DatabaseDetails.html | 2 +- rt/share/html/Install/DatabaseType.html | 4 +- rt/share/html/Install/Elements/Errors | 2 +- rt/share/html/Install/Elements/Wrapper | 9 +- rt/share/html/Install/Finish.html | 11 +- rt/share/html/Install/Global.html | 5 +- rt/share/html/Install/Initialize.html | 13 +- rt/share/html/Install/Sendmail.html | 2 +- rt/share/html/Install/autohandler | 2 +- rt/share/html/Install/index.html | 15 +- rt/share/html/NoAuth/Calendar/dhandler | 6 +- .../html/NoAuth/Helpers/CustomLogo/dhandler | 61 + rt/share/html/NoAuth/Login.html | 2 +- rt/share/html/NoAuth/Logout.html | 4 +- rt/share/html/NoAuth/Reminder.html | 2 +- .../editor/_source/classes/fckcontextmenu.js | 223 - .../_source/classes/fckdataprocessor.js | 119 - .../classes/fckdocumentfragment_gecko.js | 53 - .../_source/classes/fckdocumentfragment_ie.js | 58 - .../editor/_source/classes/fckdomrange.js | 935 -- .../_source/classes/fckdomrange_gecko.js | 104 - .../editor/_source/classes/fckdomrange_ie.js | 199 - .../_source/classes/fckdomrangeiterator.js | 327 - .../editor/_source/classes/fckeditingarea.js | 368 - .../editor/_source/classes/fckelementpath.js | 89 - .../editor/_source/classes/fckenterkey.js | 708 - .../editor/_source/classes/fckevents.js | 71 - .../editor/_source/classes/fckhtmliterator.js | 142 - .../editor/_source/classes/fckicon.js | 103 - .../editor/_source/classes/fckiecleanup.js | 68 - .../_source/classes/fckimagepreloader.js | 64 - .../_source/classes/fckkeystrokehandler.js | 141 - .../editor/_source/classes/fckmenublock.js | 153 - .../_source/classes/fckmenublockpanel.js | 54 - .../editor/_source/classes/fckmenuitem.js | 161 - .../editor/_source/classes/fckpanel.js | 463 - .../editor/_source/classes/fckplugin.js | 56 - .../editor/_source/classes/fckspecialcombo.js | 376 - .../editor/_source/classes/fckstyle.js | 1500 -- .../editor/_source/classes/fcktoolbar.js | 103 - .../_source/classes/fcktoolbarbreak_gecko.js | 36 - .../_source/classes/fcktoolbarbreak_ie.js | 38 - .../_source/classes/fcktoolbarbutton.js | 81 - .../_source/classes/fcktoolbarbuttonui.js | 198 - .../classes/fcktoolbarfontformatcombo.js | 139 - .../_source/classes/fcktoolbarfontscombo.js | 98 - .../classes/fcktoolbarfontsizecombo.js | 76 - .../_source/classes/fcktoolbarpanelbutton.js | 103 - .../_source/classes/fcktoolbarspecialcombo.js | 146 - .../_source/classes/fcktoolbarstylecombo.js | 200 - .../editor/_source/classes/fckw3crange.js | 451 - .../editor/_source/classes/fckxml.js | 108 - .../editor/_source/classes/fckxml_gecko.js | 106 - .../editor/_source/classes/fckxml_ie.js | 93 - .../commandclasses/fck_othercommands.js | 634 - .../commandclasses/fckblockquotecommand.js | 281 - .../commandclasses/fckcorestylecommand.js | 61 - .../_source/commandclasses/fckfitwindow.js | 213 - .../commandclasses/fckindentcommands.js | 282 - .../commandclasses/fckjustifycommands.js | 173 - .../_source/commandclasses/fcklistcommands.js | 382 - .../_source/commandclasses/fcknamedcommand.js | 39 - .../fckpasteplaintextcommand.js | 40 - .../commandclasses/fckpastewordcommand.js | 40 - .../commandclasses/fckremoveformatcommand.js | 45 - .../_source/commandclasses/fckshowblocks.js | 94 - .../fckspellcheckcommand_gecko.js | 49 - .../commandclasses/fckspellcheckcommand_ie.js | 72 - .../_source/commandclasses/fckstylecommand.js | 60 - .../_source/commandclasses/fcktablecommand.js | 106 - .../commandclasses/fcktextcolorcommand.js | 201 - .../FCKeditor/editor/_source/fckconstants.js | 56 - .../FCKeditor/editor/_source/fckeditorapi.js | 179 - .../editor/_source/fckjscoreextensions.js | 159 - .../editor/_source/fckscriptloader.js | 122 - .../FCKeditor/editor/_source/internals/fck.js | 1256 -- .../_source/internals/fck_contextmenu.js | 345 - .../editor/_source/internals/fck_gecko.js | 497 - .../editor/_source/internals/fck_ie.js | 456 - .../_source/internals/fckbrowserinfo.js | 61 - .../_source/internals/fckcodeformatter.js | 100 - .../editor/_source/internals/fckcommands.js | 172 - .../editor/_source/internals/fckconfig.js | 237 - .../editor/_source/internals/fckdebug.js | 59 - .../_source/internals/fckdebug_empty.js | 31 - .../editor/_source/internals/fckdialog.js | 239 - .../_source/internals/fckdocumentprocessor.js | 270 - .../editor/_source/internals/fckdomtools.js | 1057 -- .../_source/internals/fcklanguagemanager.js | 165 - .../_source/internals/fcklisthandler.js | 152 - .../editor/_source/internals/fcklistslib.js | 63 - .../editor/_source/internals/fckplugins.js | 46 - .../editor/_source/internals/fckregexlib.js | 100 - .../editor/_source/internals/fckselection.js | 42 - .../_source/internals/fckselection_gecko.js | 228 - .../_source/internals/fckselection_ie.js | 287 - .../editor/_source/internals/fckstyles.js | 381 - .../_source/internals/fcktablehandler.js | 863 - .../internals/fcktablehandler_gecko.js | 56 - .../_source/internals/fcktablehandler_ie.js | 64 - .../_source/internals/fcktoolbaritems.js | 124 - .../editor/_source/internals/fcktoolbarset.js | 399 - .../editor/_source/internals/fcktools.js | 749 - .../_source/internals/fcktools_gecko.js | 282 - .../editor/_source/internals/fcktools_ie.js | 234 - .../editor/_source/internals/fckundo.js | 223 - .../editor/_source/internals/fckurlparams.js | 39 - .../editor/_source/internals/fckxhtml.js | 534 - .../_source/internals/fckxhtml_gecko.js | 114 - .../editor/_source/internals/fckxhtml_ie.js | 213 - .../_source/internals/fckxhtmlentities.js | 357 - .../editor/css/behaviors/disablehandles.htc | 15 - .../editor/css/behaviors/showtableborders.htc | 36 - .../FCKeditor/editor/css/fck_editorarea.css | 110 - .../FCKeditor/editor/css/fck_internal.css | 199 - .../editor/css/fck_showtableborders_gecko.css | 49 - .../editor/css/images/block_address.png | Bin 288 -> 0 bytes .../editor/css/images/block_blockquote.png | Bin 293 -> 0 bytes .../FCKeditor/editor/css/images/block_div.png | Bin 229 -> 0 bytes .../FCKeditor/editor/css/images/block_h1.png | Bin 218 -> 0 bytes .../FCKeditor/editor/css/images/block_h2.png | Bin 220 -> 0 bytes .../FCKeditor/editor/css/images/block_h3.png | Bin 219 -> 0 bytes .../FCKeditor/editor/css/images/block_h4.png | Bin 229 -> 0 bytes .../FCKeditor/editor/css/images/block_h5.png | Bin 236 -> 0 bytes .../FCKeditor/editor/css/images/block_h6.png | Bin 216 -> 0 bytes .../FCKeditor/editor/css/images/block_p.png | Bin 205 -> 0 bytes .../FCKeditor/editor/css/images/block_pre.png | Bin 223 -> 0 bytes .../editor/css/images/fck_anchor.gif | Bin 184 -> 0 bytes .../editor/css/images/fck_flashlogo.gif | Bin 599 -> 0 bytes .../editor/css/images/fck_hiddenfield.gif | Bin 105 -> 0 bytes .../editor/css/images/fck_pagebreak.gif | Bin 54 -> 0 bytes .../editor/css/images/fck_plugin.gif | Bin 1709 -> 0 bytes .../dialog/common/fck_dialog_common.css | 85 - .../editor/dialog/common/fck_dialog_common.js | 347 - .../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 .../FCKeditor/editor/dialog/fck_about.html | 161 - .../dialog/fck_about/logo_fckeditor.gif | Bin 2044 -> 0 bytes .../editor/dialog/fck_about/logo_fredck.gif | Bin 920 -> 0 bytes .../fck_about/sponsors/spellchecker_net.gif | Bin 1447 -> 0 bytes .../FCKeditor/editor/dialog/fck_anchor.html | 220 - .../FCKeditor/editor/dialog/fck_button.html | 104 - .../FCKeditor/editor/dialog/fck_checkbox.html | 104 - .../editor/dialog/fck_colorselector.html | 172 - .../FCKeditor/editor/dialog/fck_div.html | 396 - .../FCKeditor/editor/dialog/fck_docprops.html | 600 - .../fck_docprops/fck_document_preview.html | 113 - .../FCKeditor/editor/dialog/fck_flash.html | 152 - .../editor/dialog/fck_flash/fck_flash.js | 300 - .../dialog/fck_flash/fck_flash_preview.html | 50 - .../FCKeditor/editor/dialog/fck_form.html | 109 - .../editor/dialog/fck_hiddenfield.html | 115 - .../FCKeditor/editor/dialog/fck_image.html | 258 - .../editor/dialog/fck_image/fck_image.js | 512 - .../dialog/fck_image/fck_image_preview.html | 72 - .../FCKeditor/editor/dialog/fck_link.html | 295 - .../editor/dialog/fck_link/fck_link.js | 893 -- .../FCKeditor/editor/dialog/fck_listprop.html | 120 - .../FCKeditor/editor/dialog/fck_paste.html | 347 - .../editor/dialog/fck_radiobutton.html | 104 - .../FCKeditor/editor/dialog/fck_replace.html | 650 - .../FCKeditor/editor/dialog/fck_select.html | 180 - .../editor/dialog/fck_select/fck_select.js | 194 - .../FCKeditor/editor/dialog/fck_smiley.html | 111 - .../FCKeditor/editor/dialog/fck_source.html | 68 - .../editor/dialog/fck_specialchar.html | 121 - .../editor/dialog/fck_spellerpages.html | 70 - .../spellerpages/controlWindow.js | 87 - .../spellerpages/controls.html | 153 - .../server-scripts/spellchecker.cfm | 148 - .../server-scripts/spellchecker.php | 199 - .../server-scripts/spellchecker.pl | 181 - .../spellerpages/spellChecker.js | 461 - .../spellerpages/spellchecker.html | 71 - .../spellerpages/spellerStyle.css | 49 - .../spellerpages/wordWindow.js | 272 - .../FCKeditor/editor/dialog/fck_table.html | 439 - .../editor/dialog/fck_tablecell.html | 293 - .../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 - .../editor/dialog/fck_textfield.html | 136 - .../FCKeditor/editor/dtd/fck_dtd_test.html | 41 - .../FCKeditor/editor/dtd/fck_xhtml10strict.js | 116 - .../editor/dtd/fck_xhtml10transitional.js | 140 - .../RichText/FCKeditor/editor/fckdebug.html | 153 - .../RichText/FCKeditor/editor/fckdialog.html | 819 - .../RichText/FCKeditor/editor/fckeditor.html | 317 - .../FCKeditor/editor/fckeditor.original.html | 424 - .../FCKeditor/editor/images/anchor.gif | Bin 184 -> 0 bytes .../FCKeditor/editor/images/arrow_ltr.gif | Bin 49 -> 0 bytes .../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 .../editor/images/smiley/msn/cake.gif | Bin 453 -> 0 bytes .../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 .../images/smiley/msn/embaressed_smile.gif | Bin 1077 -> 0 bytes .../editor/images/smiley/msn/envelope.gif | Bin 1030 -> 0 bytes .../editor/images/smiley/msn/heart.gif | Bin 1012 -> 0 bytes .../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 .../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 .../FCKeditor/editor/js/fckadobeair.js | 176 - .../editor/js/fckeditorcode_gecko.js | 108 - .../FCKeditor/editor/js/fckeditorcode_ie.js | 109 - .../editor/lang/_translationstatus.txt | 79 - .../RichText/FCKeditor/editor/lang/af.js | 534 - .../RichText/FCKeditor/editor/lang/ar.js | 534 - .../RichText/FCKeditor/editor/lang/bg.js | 534 - .../RichText/FCKeditor/editor/lang/bn.js | 534 - .../RichText/FCKeditor/editor/lang/bs.js | 534 - .../RichText/FCKeditor/editor/lang/ca.js | 534 - .../RichText/FCKeditor/editor/lang/cs.js | 534 - .../RichText/FCKeditor/editor/lang/da.js | 534 - .../RichText/FCKeditor/editor/lang/de.js | 534 - .../RichText/FCKeditor/editor/lang/el.js | 534 - .../RichText/FCKeditor/editor/lang/en-au.js | 534 - .../RichText/FCKeditor/editor/lang/en-ca.js | 534 - .../RichText/FCKeditor/editor/lang/en-uk.js | 534 - .../RichText/FCKeditor/editor/lang/en.js | 534 - .../RichText/FCKeditor/editor/lang/eo.js | 534 - .../RichText/FCKeditor/editor/lang/es.js | 534 - .../RichText/FCKeditor/editor/lang/et.js | 534 - .../RichText/FCKeditor/editor/lang/eu.js | 535 - .../RichText/FCKeditor/editor/lang/fa.js | 534 - .../RichText/FCKeditor/editor/lang/fi.js | 534 - .../RichText/FCKeditor/editor/lang/fo.js | 534 - .../RichText/FCKeditor/editor/lang/fr-ca.js | 534 - .../RichText/FCKeditor/editor/lang/fr.js | 534 - .../RichText/FCKeditor/editor/lang/gl.js | 534 - .../RichText/FCKeditor/editor/lang/gu.js | 534 - .../RichText/FCKeditor/editor/lang/he.js | 534 - .../RichText/FCKeditor/editor/lang/hi.js | 534 - .../RichText/FCKeditor/editor/lang/hr.js | 534 - .../RichText/FCKeditor/editor/lang/hu.js | 534 - .../RichText/FCKeditor/editor/lang/is.js | 534 - .../RichText/FCKeditor/editor/lang/it.js | 534 - .../RichText/FCKeditor/editor/lang/ja.js | 534 - .../RichText/FCKeditor/editor/lang/km.js | 534 - .../RichText/FCKeditor/editor/lang/ko.js | 534 - .../RichText/FCKeditor/editor/lang/lt.js | 534 - .../RichText/FCKeditor/editor/lang/lv.js | 534 - .../RichText/FCKeditor/editor/lang/mn.js | 534 - .../RichText/FCKeditor/editor/lang/ms.js | 534 - .../RichText/FCKeditor/editor/lang/nb.js | 534 - .../RichText/FCKeditor/editor/lang/nl.js | 534 - .../RichText/FCKeditor/editor/lang/no.js | 534 - .../RichText/FCKeditor/editor/lang/pl.js | 534 - .../RichText/FCKeditor/editor/lang/pt-br.js | 534 - .../RichText/FCKeditor/editor/lang/pt.js | 534 - .../RichText/FCKeditor/editor/lang/ro.js | 534 - .../RichText/FCKeditor/editor/lang/ru.js | 534 - .../RichText/FCKeditor/editor/lang/sk.js | 534 - .../RichText/FCKeditor/editor/lang/sl.js | 534 - .../RichText/FCKeditor/editor/lang/sr-latn.js | 534 - .../RichText/FCKeditor/editor/lang/sr.js | 534 - .../RichText/FCKeditor/editor/lang/sv.js | 534 - .../RichText/FCKeditor/editor/lang/th.js | 534 - .../RichText/FCKeditor/editor/lang/tr.js | 534 - .../RichText/FCKeditor/editor/lang/uk.js | 534 - .../RichText/FCKeditor/editor/lang/vi.js | 534 - .../RichText/FCKeditor/editor/lang/zh-cn.js | 534 - .../RichText/FCKeditor/editor/lang/zh.js | 534 - .../editor/plugins/autogrow/fckplugin.js | 111 - .../plugins/bbcode/_sample/sample.config.js | 26 - .../editor/plugins/bbcode/_sample/sample.html | 67 - .../editor/plugins/bbcode/fckplugin.js | 123 - .../plugins/dragresizetable/fckplugin.js | 529 - .../plugins/placeholder/fck_placeholder.html | 105 - .../editor/plugins/placeholder/fckplugin.js | 187 - .../editor/plugins/placeholder/lang/de.js | 27 - .../editor/plugins/placeholder/lang/en.js | 27 - .../editor/plugins/placeholder/lang/es.js | 27 - .../editor/plugins/placeholder/lang/fr.js | 27 - .../editor/plugins/placeholder/lang/it.js | 27 - .../editor/plugins/placeholder/lang/pl.js | 27 - .../plugins/placeholder/placeholder.gif | Bin 96 -> 0 bytes .../plugins/simplecommands/fckplugin.js | 29 - .../editor/plugins/tablecommands/fckplugin.js | 33 - .../editor/skins/_fckviewstrips.html | 121 - .../editor/skins/default/fck_dialog.css | 402 - .../editor/skins/default/fck_dialog_ie6.js | 110 - .../editor/skins/default/fck_editor.css | 464 - .../editor/skins/default/fck_strip.gif | Bin 5175 -> 0 bytes .../editor/skins/default/images/sprites.gif | Bin 959 -> 0 bytes .../editor/skins/default/images/sprites.png | Bin 3250 -> 0 bytes .../default/images/toolbar.arrowright.gif | Bin 53 -> 0 bytes .../default/images/toolbar.buttonarrow.gif | Bin 46 -> 0 bytes .../skins/default/images/toolbar.collapse.gif | Bin 152 -> 0 bytes .../skins/default/images/toolbar.end.gif | Bin 43 -> 0 bytes .../skins/default/images/toolbar.expand.gif | Bin 152 -> 0 bytes .../default/images/toolbar.separator.gif | Bin 58 -> 0 bytes .../editor/skins/office2003/fck_dialog.css | 402 - .../editor/skins/office2003/fck_dialog_ie6.js | 110 - .../editor/skins/office2003/fck_editor.css | 476 - .../editor/skins/office2003/fck_strip.gif | Bin 9668 -> 0 bytes .../skins/office2003/images/dialog.sides.gif | Bin 48 -> 0 bytes .../skins/office2003/images/dialog.sides.png | Bin 203 -> 0 bytes .../office2003/images/dialog.sides.rtl.png | Bin 205 -> 0 bytes .../skins/office2003/images/sprites.gif | Bin 959 -> 0 bytes .../skins/office2003/images/sprites.png | Bin 3305 -> 0 bytes .../office2003/images/toolbar.arrowright.gif | Bin 53 -> 0 bytes .../skins/office2003/images/toolbar.bg.gif | Bin 73 -> 0 bytes .../office2003/images/toolbar.buttonarrow.gif | Bin 46 -> 0 bytes .../office2003/images/toolbar.collapse.gif | Bin 152 -> 0 bytes .../skins/office2003/images/toolbar.end.gif | Bin 124 -> 0 bytes .../office2003/images/toolbar.expand.gif | Bin 152 -> 0 bytes .../office2003/images/toolbar.separator.gif | Bin 67 -> 0 bytes .../skins/office2003/images/toolbar.start.gif | Bin 99 -> 0 bytes .../editor/skins/silver/fck_dialog.css | 402 - .../editor/skins/silver/fck_dialog_ie6.js | 110 - .../editor/skins/silver/fck_editor.css | 473 - .../editor/skins/silver/fck_strip.gif | Bin 5175 -> 0 bytes .../skins/silver/images/dialog.sides.gif | Bin 48 -> 0 bytes .../skins/silver/images/dialog.sides.png | Bin 198 -> 0 bytes .../skins/silver/images/dialog.sides.rtl.png | Bin 200 -> 0 bytes .../editor/skins/silver/images/sprites.gif | Bin 959 -> 0 bytes .../editor/skins/silver/images/sprites.png | Bin 3278 -> 0 bytes .../silver/images/toolbar.arrowright.gif | Bin 53 -> 0 bytes .../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 .../skins/silver/images/toolbar.end.gif | Bin 43 -> 0 bytes .../skins/silver/images/toolbar.expand.gif | Bin 152 -> 0 bytes .../skins/silver/images/toolbar.separator.gif | Bin 58 -> 0 bytes .../FCKeditor/editor/wsc/ciframe.html | 65 - .../FCKeditor/editor/wsc/tmpFrameset.html | 67 - .../RichText/FCKeditor/editor/wsc/w.html | 227 - .../NoAuth/RichText/FCKeditor/fckconfig.js | 327 - .../NoAuth/RichText/FCKeditor/fckeditor.js | 330 - .../NoAuth/RichText/FCKeditor/fckpackager.xml | 262 - .../NoAuth/RichText/FCKeditor/fckstyles.xml | 111 - .../RichText/FCKeditor/fcktemplates.xml | 103 - .../NoAuth/RichText/FCKeditor/license.txt | 1246 -- rt/share/html/NoAuth/RichText/autohandler | 4 +- .../NoAuth/RichText/ckeditor/LICENSE.html | 1334 ++ .../RichText/ckeditor/adapters/jquery.js | 6 + .../html/NoAuth/RichText/ckeditor/ckeditor.js | 135 + .../html/NoAuth/RichText/ckeditor/config.js | 47 + .../NoAuth/RichText/ckeditor/contents.css | 35 + .../editor => ckeditor}/images/spacer.gif | Bin .../RichText/ckeditor/lang/_languages.js | 6 + .../ckeditor/lang/_translationstatus.txt | 60 + .../html/NoAuth/RichText/ckeditor/lang/af.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/ar.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/bg.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/bn.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/bs.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/ca.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/cs.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/cy.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/da.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/de.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/el.js | 6 + .../NoAuth/RichText/ckeditor/lang/en-au.js | 6 + .../NoAuth/RichText/ckeditor/lang/en-ca.js | 6 + .../NoAuth/RichText/ckeditor/lang/en-gb.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/en.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/eo.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/es.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/et.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/eu.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/fa.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/fi.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/fo.js | 6 + .../NoAuth/RichText/ckeditor/lang/fr-ca.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/fr.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/gl.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/gu.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/he.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/hi.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/hr.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/hu.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/is.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/it.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/ja.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/km.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/ko.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/lt.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/lv.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/mn.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/ms.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/nb.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/nl.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/no.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/pl.js | 6 + .../NoAuth/RichText/ckeditor/lang/pt-br.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/pt.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/ro.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/ru.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/sk.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/sl.js | 6 + .../NoAuth/RichText/ckeditor/lang/sr-latn.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/sr.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/sv.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/th.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/tr.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/uk.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/vi.js | 6 + .../NoAuth/RichText/ckeditor/lang/zh-cn.js | 6 + .../html/NoAuth/RichText/ckeditor/lang/zh.js | 6 + .../plugins/a11yhelp/dialogs/a11yhelp.js | 7 + .../ckeditor/plugins/a11yhelp/lang/en.js | 6 + .../ckeditor/plugins/a11yhelp/lang/he.js | 6 + .../ckeditor/plugins/about/dialogs/about.js | 6 + .../ckeditor/plugins/autogrow/plugin.js | 6 + .../plugins/clipboard/dialogs/paste.js | 7 + .../colordialog/dialogs/colordialog.js | 7 + .../plugins/dialog/dialogDefinition.js | 4 + .../ckeditor/plugins/div/dialogs/div.js | 8 + .../ckeditor/plugins/find/dialogs/find.js | 9 + .../ckeditor/plugins/flash/dialogs/flash.js | 9 + .../ckeditor/plugins/forms/dialogs/button.js | 6 + .../plugins/forms/dialogs/checkbox.js | 6 + .../ckeditor/plugins/forms/dialogs/form.js | 6 + .../plugins/forms/dialogs/hiddenfield.js | 6 + .../ckeditor/plugins/forms/dialogs/radio.js | 6 + .../ckeditor/plugins/forms/dialogs/select.js | 9 + .../plugins/forms/dialogs/textarea.js | 6 + .../plugins/forms/dialogs/textfield.js | 7 + .../ckeditor/plugins/iframedialog/plugin.js | 6 + .../ckeditor/plugins/image/dialogs/image.js | 13 + .../ckeditor/plugins/link/dialogs/anchor.js | 6 + .../ckeditor/plugins/link/dialogs/link.js | 11 + .../plugins/liststyle/dialogs/liststyle.js | 7 + .../plugins/pastefromword/filter/default.js | 10 + .../plugins/pastetext/dialogs/pastetext.js | 6 + .../ckeditor/plugins/scayt/dialogs/options.js | 8 + .../plugins/scayt/dialogs/toolbar.css | 6 + .../ckeditor/plugins/smiley/dialogs/smiley.js | 7 + .../specialchar/dialogs/specialchar.js | 7 + .../ckeditor/plugins/styles/styles/default.js | 6 + .../ckeditor/plugins/table/dialogs/table.js | 9 + .../ckeditor/plugins/tableresize/plugin.js | 7 + .../plugins/tabletools/dialogs/tableCell.js | 8 + .../plugins/templates/dialogs/templates.js | 7 + .../plugins/templates/templates/default.js | 6 + .../plugins/uicolor/dialogs/uicolor.js | 7 + .../ckeditor/plugins/uicolor/lang/en.js | 6 + .../ckeditor/plugins/uicolor/plugin.js | 6 + .../plugins/uicolor/yui/assets/yui.css | 6 + .../ckeditor/plugins/uicolor/yui/yui.js | 76 + .../ckeditor/plugins/wsc/dialogs/ciframe.html | 49 + .../plugins/wsc/dialogs/tmpFrameset.html | 52 + .../ckeditor/plugins/wsc/dialogs/wsc.css | 6 + .../ckeditor/plugins/wsc/dialogs/wsc.js | 7 + .../RichText/ckeditor/skins/kama/dialog.css | 9 + .../RichText/ckeditor/skins/kama/editor.css | 12 + .../RichText/ckeditor/skins/kama/icons.png | Bin 0 -> 4918 bytes .../ckeditor/skins/kama/icons_rtl.png | Bin 0 -> 4935 bytes .../skins/kama/images/dialog_sides.gif} | Bin .../skins/kama/images/dialog_sides.png} | Bin .../skins/kama/images/dialog_sides_rtl.png} | Bin .../ckeditor/skins/kama/images/mini.gif | Bin 0 -> 183 bytes .../ckeditor/skins/kama/images/noimage.png | Bin 0 -> 2115 bytes .../ckeditor/skins/kama/images/sprites.png | Bin 0 -> 7086 bytes .../skins/kama/images/sprites_ie6.png | Bin 0 -> 2724 bytes .../skins/kama/images/toolbar_start.gif} | Bin .../RichText/ckeditor/skins/kama/skin.js | 7 + .../ckeditor/skins/kama/templates.css | 6 + .../ckeditor/skins/office2003/dialog.css | 9 + .../ckeditor/skins/office2003/editor.css | 13 + .../ckeditor/skins/office2003/icons.png | Bin 0 -> 4918 bytes .../ckeditor/skins/office2003/icons_rtl.png | Bin 0 -> 4935 bytes .../skins/office2003/images/dialog_sides.gif | Bin 0 -> 48 bytes .../skins/office2003/images/dialog_sides.png | Bin 0 -> 178 bytes .../office2003/images/dialog_sides_rtl.png | Bin 0 -> 181 bytes .../ckeditor/skins/office2003/images/mini.gif | Bin 0 -> 183 bytes .../skins/office2003/images/noimage.png | Bin 0 -> 2115 bytes .../skins/office2003/images/sprites.png | Bin 0 -> 6119 bytes .../skins/office2003/images/sprites_ie6.png | Bin 0 -> 2715 bytes .../ckeditor/skins/office2003/skin.js | 6 + .../ckeditor/skins/office2003/templates.css | 6 + .../RichText/ckeditor/skins/v2/dialog.css | 8 + .../RichText/ckeditor/skins/v2/editor.css | 12 + .../RichText/ckeditor/skins/v2/icons.png | Bin 0 -> 4918 bytes .../RichText/ckeditor/skins/v2/icons_rtl.png | Bin 0 -> 4935 bytes .../ckeditor/skins/v2/images/dialog_sides.gif | Bin 0 -> 48 bytes .../ckeditor/skins/v2/images/dialog_sides.png | Bin 0 -> 178 bytes .../skins/v2/images/dialog_sides_rtl.png | Bin 0 -> 181 bytes .../ckeditor/skins/v2/images/mini.gif | Bin 0 -> 183 bytes .../ckeditor/skins/v2/images/noimage.png | Bin 0 -> 2115 bytes .../ckeditor/skins/v2/images/sprites.png | Bin 0 -> 5389 bytes .../ckeditor/skins/v2/images/sprites_ie6.png | Bin 0 -> 492 bytes .../skins/v2/images/toolbar_start.gif} | Bin .../NoAuth/RichText/ckeditor/skins/v2/skin.js | 6 + .../RichText/ckeditor/skins/v2/templates.css | 6 + .../RichText/ckeditor/themes/default/theme.js | 8 + rt/share/html/NoAuth/RichText/dhandler | 4 +- rt/share/html/NoAuth/css/3.4-compat/body.css | 75 - .../html/NoAuth/css/3.4-compat/footer.css | 61 - rt/share/html/NoAuth/css/3.4-compat/forms.css | 110 - .../html/NoAuth/css/3.4-compat/header.css | 88 - rt/share/html/NoAuth/css/3.4-compat/login.css | 54 - rt/share/html/NoAuth/css/3.4-compat/main.css | 75 - rt/share/html/NoAuth/css/3.4-compat/misc.css | 80 - rt/share/html/NoAuth/css/3.4-compat/nav.css | 106 - .../html/NoAuth/css/3.4-compat/quickbar.css | 82 - .../html/NoAuth/css/3.4-compat/ticket.css | 50 - .../html/NoAuth/css/3.4-compat/titlebox.css | 99 - .../NoAuth/css/3.4-compat/transactions.css | 83 - .../html/NoAuth/css/3.5-default/approvals.css | 97 - rt/share/html/NoAuth/css/3.5-default/body.css | 81 - .../html/NoAuth/css/3.5-default/footer.css | 91 - .../html/NoAuth/css/3.5-default/forms.css | 148 - .../html/NoAuth/css/3.5-default/header.css | 152 - .../html/NoAuth/css/3.5-default/local.css | 50 - .../html/NoAuth/css/3.5-default/login.css | 85 - rt/share/html/NoAuth/css/3.5-default/logo.css | 60 - rt/share/html/NoAuth/css/3.5-default/main.css | 67 - rt/share/html/NoAuth/css/3.5-default/misc.css | 99 - .../html/NoAuth/css/3.5-default/nav-left.css | 86 - rt/share/html/NoAuth/css/3.5-default/nav.css | 163 - .../html/NoAuth/css/3.5-default/quickbar.css | 98 - .../NoAuth/css/3.5-default/ticket-search.css | 86 - .../html/NoAuth/css/3.5-default/ticket.css | 57 - .../html/NoAuth/css/3.5-default/titlebox.css | 158 - .../NoAuth/css/3.5-default/transactions.css | 146 - rt/share/html/NoAuth/css/aileron/InHeader | 64 + rt/share/html/NoAuth/css/aileron/base.css | 62 + rt/share/html/NoAuth/css/aileron/boxes.css | 180 + rt/share/html/NoAuth/css/aileron/forms.css | 79 + .../html/NoAuth/css/aileron/images/dhandler | 8 + rt/share/html/NoAuth/css/aileron/layout.css | 174 + rt/share/html/NoAuth/css/aileron/login.css | 50 + rt/share/html/NoAuth/css/aileron/main.css | 63 + rt/share/html/NoAuth/css/aileron/misc.css | 58 + rt/share/html/NoAuth/css/aileron/msie.css | 188 + rt/share/html/NoAuth/css/aileron/msie6.css | 86 + rt/share/html/NoAuth/css/aileron/nav.css | 164 + .../html/NoAuth/css/aileron/ticket-lists.css | 236 + .../html/NoAuth/css/aileron/ticket-search.css | 242 + rt/share/html/NoAuth/css/aileron/ticket.css | 298 + rt/share/html/NoAuth/css/autohandler | 10 +- rt/share/html/NoAuth/css/ballard/InHeader | 54 + rt/share/html/NoAuth/css/ballard/base.css | 62 + rt/share/html/NoAuth/css/ballard/boxes.css | 189 + .../html/NoAuth/css/ballard/images/dhandler | 8 + rt/share/html/NoAuth/css/ballard/layout.css | 177 + rt/share/html/NoAuth/css/ballard/main.css | 62 + rt/share/html/NoAuth/css/ballard/misc.css | 58 + rt/share/html/NoAuth/css/ballard/msie.css | 242 + rt/share/html/NoAuth/css/ballard/msie6.css | 88 + rt/share/html/NoAuth/css/ballard/nav.css | 192 + .../html/NoAuth/css/ballard/ticket-lists.css | 236 + .../html/NoAuth/css/ballard/ticket-search.css | 244 + rt/share/html/NoAuth/css/ballard/ticket.css | 278 + rt/share/html/NoAuth/css/base/admin.css | 97 + rt/share/html/NoAuth/css/base/articles.css | 54 + rt/share/html/NoAuth/css/base/collection.css | 50 + rt/share/html/NoAuth/css/base/farbtastic.css | 98 + rt/share/html/NoAuth/css/base/forms.css | 271 + .../html/NoAuth/css/base/history-folding.css | 91 + .../css/base/jquery-ui-timepicker-addon.css | 7 + rt/share/html/NoAuth/css/base/jquery-ui.css | 48 + .../css/base/jquery-ui.custom.modified.css | 478 + rt/share/html/NoAuth/css/base/login.css | 102 + rt/share/html/NoAuth/css/base/main.css | 74 + rt/share/html/NoAuth/css/base/misc.css | 60 +- rt/share/html/NoAuth/css/base/nav.css | 64 + rt/share/html/NoAuth/css/base/portlets.css | 64 + .../html/NoAuth/css/base/rights-editor.css | 177 + .../html/NoAuth/css/base/superfish-navbar.css | 95 + .../NoAuth/css/base/superfish-vertical.css | 23 + rt/share/html/NoAuth/css/base/superfish.css | 138 + rt/share/html/NoAuth/css/base/tablesorter.css | 52 + .../html/NoAuth/css/base/theme-editor.css | 111 + rt/share/html/NoAuth/css/base/ticket-form.css | 122 + rt/share/html/NoAuth/css/base/ticket.css | 146 + rt/share/html/NoAuth/css/base/tools.css | 54 + .../NoAuth/css/{web2 => base}/yui-fonts.css | 0 rt/share/html/NoAuth/css/calendar.css | 10 +- rt/share/html/NoAuth/css/dhandler | 27 +- rt/share/html/NoAuth/css/freeside3/InHeader | 67 + rt/share/html/NoAuth/css/freeside3/base.css | 62 + rt/share/html/NoAuth/css/freeside3/boxes.css | 180 + rt/share/html/NoAuth/css/freeside3/forms.css | 79 + .../html/NoAuth/css/freeside3/images/dhandler | 8 + rt/share/html/NoAuth/css/freeside3/layout.css | 181 + rt/share/html/NoAuth/css/freeside3/login.css | 50 + rt/share/html/NoAuth/css/freeside3/main.css | 63 + rt/share/html/NoAuth/css/freeside3/misc.css | 58 + .../html/NoAuth/css/freeside3/msie-pie.css | 58 + rt/share/html/NoAuth/css/freeside3/msie.css | 188 + rt/share/html/NoAuth/css/freeside3/msie6.css | 86 + rt/share/html/NoAuth/css/freeside3/nav.css | 171 + .../NoAuth/css/freeside3/ticket-lists.css | 236 + .../NoAuth/css/freeside3/ticket-search.css | 242 + rt/share/html/NoAuth/css/freeside3/ticket.css | 289 + .../NoAuth/css/images/arrow.down.black.png | Bin 0 -> 168 bytes .../html/NoAuth/css/images/arrows-ffffff.gif | Bin 0 -> 114 bytes .../html/NoAuth/css/images/arrows-ffffff.png | Bin 0 -> 244 bytes .../html/NoAuth/css/images/arrows-grey.gif | Bin 0 -> 114 bytes .../html/NoAuth/css/images/arrows-grey.png | Bin 0 -> 256 bytes rt/share/html/NoAuth/css/images/shadow.gif | Bin 0 -> 807 bytes rt/share/html/NoAuth/css/images/shadow.png | Bin 0 -> 1698 bytes rt/share/html/NoAuth/css/print.css | 149 +- rt/share/html/NoAuth/css/web2/InHeader | 23 +- rt/share/html/NoAuth/css/web2/admin.css | 60 - rt/share/html/NoAuth/css/web2/base.css | 5 +- rt/share/html/NoAuth/css/web2/boxes.css | 27 +- rt/share/html/NoAuth/css/web2/collection.css | 51 - rt/share/html/NoAuth/css/web2/forms.css | 243 - rt/share/html/NoAuth/css/web2/layout.css | 148 +- rt/share/html/NoAuth/css/web2/login.css | 86 - rt/share/html/NoAuth/css/web2/main.css | 13 +- rt/share/html/NoAuth/css/web2/misc.css | 30 +- rt/share/html/NoAuth/css/web2/msie.css | 46 +- rt/share/html/NoAuth/css/web2/msie6.css | 14 +- rt/share/html/NoAuth/css/web2/nav.css | 289 +- rt/share/html/NoAuth/css/web2/portlets.css | 71 - .../html/NoAuth/css/web2/ticket-lists.css | 80 +- .../html/NoAuth/css/web2/ticket-search.css | 67 +- rt/share/html/NoAuth/css/web2/ticket.css | 74 +- rt/share/html/NoAuth/css/web2/tools.css | 56 - rt/share/html/NoAuth/iCal/dhandler | 4 +- .../html/NoAuth/images/css/rollup-arrow.gif | Bin 82 -> 97 bytes .../html/NoAuth/images/farbtastic/marker.png | Bin 0 -> 652 bytes .../html/NoAuth/images/farbtastic/mask.png | Bin 0 -> 2020 bytes .../html/NoAuth/images/farbtastic/wheel.png | Bin 0 -> 11733 bytes .../images/jquery_ui/ui-anim_basic_16x16.gif | Bin 0 -> 1553 bytes .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 384 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../jquery_ui/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../jquery_ui/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../jquery_ui/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../jquery_ui/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../jquery_ui/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../jquery_ui/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../jquery_ui/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../jquery_ui/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../jquery_ui/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../jquery_ui/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../jquery_ui/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../jquery_ui/ui-icons_4488cc_256x240.png | Bin 0 -> 1936 bytes .../jquery_ui/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../jquery_ui/ui-icons_888888_256x240.png | Bin 0 -> 5355 bytes .../jquery_ui/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../jquery_ui/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../jquery_ui/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../jquery_ui/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../html/NoAuth/images/tablesorter/asc.gif | Bin 0 -> 54 bytes .../html/NoAuth/images/tablesorter/bg.gif | Bin 0 -> 64 bytes .../html/NoAuth/images/tablesorter/desc.gif | Bin 0 -> 54 bytes rt/share/html/NoAuth/js/IE7/IE7.js | 2 - rt/share/html/NoAuth/js/IE7/IE8.js | 2 - rt/share/html/NoAuth/js/IE7/ie7-recalc.js | 2 - rt/share/html/NoAuth/js/IE7/ie7-squish.js | 36 - rt/share/html/NoAuth/js/ahah.js | 51 - rt/share/html/NoAuth/js/autohandler | 2 +- rt/share/html/NoAuth/js/cascaded.js | 4 +- rt/share/html/NoAuth/js/combobox.js | 2 +- rt/share/html/NoAuth/js/dhandler | 65 + rt/share/html/NoAuth/js/farbtastic.js | 347 + rt/share/html/NoAuth/js/history-folding.js | 73 + rt/share/html/NoAuth/js/jquery-1.4.2.min.js | 154 + .../NoAuth/js/jquery-ui-1.8.4.custom.min.js | 274 + .../NoAuth/js/jquery-ui-patch-datepicker.js | 92 + .../NoAuth/js/jquery-ui-timepicker-addon.js | 1326 ++ .../html/NoAuth/js/jquery.event.hover-1.0.js | 85 + rt/share/html/NoAuth/js/jquery.supposition.js | 83 + .../html/NoAuth/js/jquery.tablesorter.min.js | 16 + rt/share/html/NoAuth/js/jquery_noconflict.js | 51 + rt/share/html/NoAuth/js/late.js | 49 + .../html/NoAuth/js/prototype/prototype.js | 4320 ----- .../html/NoAuth/js/scriptaculous/controls.js | 971 -- .../html/NoAuth/js/scriptaculous/effects.js | 1130 -- .../NoAuth/js/scriptaculous/scriptaculous.js | 60 - rt/share/html/NoAuth/js/superfish.js | 121 + rt/share/html/NoAuth/js/supersubs.js | 90 + rt/share/html/NoAuth/js/titlebox-state.js | 4 +- rt/share/html/NoAuth/js/userautocomplete.js | 110 + rt/share/html/NoAuth/js/util.js | 405 +- rt/share/html/NoAuth/rss/dhandler | 2 +- rt/share/html/Prefs/Calendar.html | 15 +- rt/share/html/Prefs/Elements/Tabs | 76 - rt/share/html/Prefs/MyRT.html | 20 +- rt/share/html/Prefs/Other.html | 15 +- rt/share/html/Prefs/Quicksearch.html | 13 +- rt/share/html/Prefs/Search.html | 10 +- rt/share/html/Prefs/SearchOptions.html | 10 +- .../html/REST/1.0/Forms/attachment/default | 4 +- .../html/REST/1.0/Forms/group/customfields | 4 +- rt/share/html/REST/1.0/Forms/group/default | 4 +- rt/share/html/REST/1.0/Forms/group/ns | 4 +- .../html/REST/1.0/Forms/queue/customfields | 4 +- rt/share/html/REST/1.0/Forms/queue/default | 4 +- rt/share/html/REST/1.0/Forms/queue/ns | 4 +- .../REST/1.0/Forms/queue/ticketcustomfields | 6 +- .../html/REST/1.0/Forms/ticket/attachments | 9 +- rt/share/html/REST/1.0/Forms/ticket/comment | 4 +- rt/share/html/REST/1.0/Forms/ticket/default | 81 +- rt/share/html/REST/1.0/Forms/ticket/history | 11 +- rt/share/html/REST/1.0/Forms/ticket/links | 11 +- rt/share/html/REST/1.0/Forms/ticket/merge | 6 +- rt/share/html/REST/1.0/Forms/ticket/take | 4 +- .../html/REST/1.0/Forms/transaction/default | 14 +- rt/share/html/REST/1.0/Forms/user/default | 4 +- rt/share/html/REST/1.0/Forms/user/ns | 4 +- rt/share/html/REST/1.0/NoAuth/mail-gateway | 2 +- rt/share/html/REST/1.0/autohandler | 2 +- rt/share/html/REST/1.0/dhandler | 2 +- rt/share/html/REST/1.0/logout | 2 +- rt/share/html/REST/1.0/search/dhandler | 2 +- rt/share/html/REST/1.0/search/ticket | 42 +- rt/share/html/REST/1.0/ticket/comment | 4 +- rt/share/html/REST/1.0/ticket/link | 9 +- rt/share/html/REST/1.0/ticket/merge | 4 +- rt/share/html/Search/Article.html | 52 + rt/share/html/Search/Build.html | 90 +- rt/share/html/Search/Bulk.html | 44 +- rt/share/html/Search/Calendar.html | 9 +- rt/share/html/Search/Chart | 8 +- rt/share/html/Search/Chart.html | 61 +- rt/share/html/Search/Edit.html | 16 +- rt/share/html/Search/Elements/Article | 64 + .../html/Search/Elements/BuildFormatString | 16 +- rt/share/html/Search/Elements/Chart | 82 +- rt/share/html/Search/Elements/ConditionRow | 2 +- rt/share/html/Search/Elements/DisplayOptions | 87 +- rt/share/html/Search/Elements/EditFormat | 31 +- rt/share/html/Search/Elements/EditQuery | 2 +- rt/share/html/Search/Elements/EditSearches | 21 +- rt/share/html/Search/Elements/EditSort | 142 + rt/share/html/Search/Elements/Graph | 2 +- rt/share/html/Search/Elements/NewListActions | 2 +- rt/share/html/Search/Elements/PickBasics | 10 +- rt/share/html/Search/Elements/PickCFs | 36 +- rt/share/html/Search/Elements/PickCriteria | 7 +- .../html/Search/Elements/PickCustomerFields | 8 + rt/share/html/Search/Elements/ResultsRSSView | 6 +- rt/share/html/Search/Elements/SearchPrivacy | 2 +- .../html/Search/Elements/SearchesForObject | 2 +- rt/share/html/Search/Elements/SelectAndOr | 2 +- rt/share/html/Search/Elements/SelectChartType | 2 +- rt/share/html/Search/Elements/SelectGroup | 4 +- rt/share/html/Search/Elements/SelectGroupBy | 2 +- rt/share/html/Search/Elements/SelectLinks | 2 +- .../html/Search/Elements/SelectPersonType | 4 +- .../html/Search/Elements/SelectSearchObject | 2 +- .../Search/Elements/SelectSearchesForObjects | 8 +- rt/share/html/Search/Graph.html | 2 +- rt/share/html/Search/Results.html | 64 +- rt/share/html/Search/Results.rdf | 2 +- rt/share/html/Search/Results.tsv | 156 +- rt/share/html/Search/Results.xls | 1 + rt/share/html/Search/Simple.html | 47 +- .../html/SelfService/Article/Display.html | 73 + rt/share/html/SelfService/Article/Search.html | 114 + rt/share/html/SelfService/Article/autohandler | 58 + rt/share/html/SelfService/Attachment/dhandler | 2 +- rt/share/html/SelfService/Closed.html | 4 +- rt/share/html/SelfService/Create.html | 6 +- .../html/SelfService/CreateTicketInQueue.html | 2 +- rt/share/html/SelfService/Display.html | 18 +- rt/share/html/SelfService/Elements/GotoTicket | 6 +- rt/share/html/SelfService/Elements/Header | 6 +- rt/share/html/SelfService/Elements/MyRequests | 24 +- .../html/SelfService/Elements/SearchArticle | 51 + rt/share/html/SelfService/Elements/Tabs | 113 - rt/share/html/SelfService/Error.html | 2 +- rt/share/html/SelfService/Prefs.html | 2 +- rt/share/html/SelfService/Update.html | 31 +- rt/share/html/SelfService/index.html | 4 +- .../Ticket/Attachment/WithHeaders/dhandler | 4 +- rt/share/html/Ticket/Attachment/dhandler | 15 +- rt/share/html/Ticket/Create.html | 240 +- rt/share/html/Ticket/Display.html | 185 +- rt/share/html/Ticket/Elements/AddAttachments | 61 + rt/share/html/Ticket/Elements/AddCustomers | 39 +- rt/share/html/Ticket/Elements/AddWatchers | 2 +- rt/share/html/Ticket/Elements/Bookmark | 6 +- rt/share/html/Ticket/Elements/BulkLinks | 2 +- .../html/Ticket/Elements/ClickToShowHistory | 60 + rt/share/html/Ticket/Elements/EditBasics | 172 +- .../html/Ticket/Elements/EditCustomFields | 56 +- rt/share/html/Ticket/Elements/EditCustomers | 45 +- rt/share/html/Ticket/Elements/EditDates | 2 +- rt/share/html/Ticket/Elements/EditPeople | 2 +- .../Elements/EditTransactionCustomFields | 42 +- rt/share/html/Ticket/Elements/EditWatchers | 23 +- rt/share/html/Ticket/Elements/FindAttachments | 2 +- .../html/Ticket/Elements/FindTransactions | 72 + rt/share/html/Ticket/Elements/FoldStanzaJS | 50 + .../html/Ticket/Elements/LoadTextAttachments | 2 +- rt/share/html/Ticket/Elements/PreviewScrips | 268 +- rt/share/html/Ticket/Elements/Reminders | 170 +- rt/share/html/Ticket/Elements/ShowAttachments | 6 +- rt/share/html/Ticket/Elements/ShowBasics | 47 +- .../html/Ticket/Elements/ShowCustomFields | 2 +- rt/share/html/Ticket/Elements/ShowCustomers | 17 +- rt/share/html/Ticket/Elements/ShowDates | 49 +- .../html/Ticket/Elements/ShowDependencies | 2 +- rt/share/html/Ticket/Elements/ShowGnuPGStatus | 2 +- .../html/Ticket/Elements/ShowGroupMembers | 2 +- rt/share/html/Ticket/Elements/ShowHistory | 62 +- rt/share/html/Ticket/Elements/ShowMembers | 9 +- .../html/Ticket/Elements/ShowMessageHeaders | 2 +- .../html/Ticket/Elements/ShowMessageStanza | 149 +- rt/share/html/Ticket/Elements/ShowParents | 2 +- rt/share/html/Ticket/Elements/ShowPeople | 2 +- rt/share/html/Ticket/Elements/ShowPriority | 2 +- rt/share/html/Ticket/Elements/ShowQueue | 12 +- rt/share/html/Ticket/Elements/ShowRequestor | 166 +- .../Ticket/Elements/ShowRequestorExtraInfo | 89 + .../html/Ticket/Elements/ShowRequestorTickets | 79 + .../Elements/ShowRequestorTicketsActive | 60 + .../Ticket/Elements/ShowRequestorTicketsAll | 53 + .../Elements/ShowRequestorTicketsInactive | 60 + .../Ticket/Elements/ShowSimplifiedRecipients | 100 + rt/share/html/Ticket/Elements/ShowSummary | 68 +- rt/share/html/Ticket/Elements/ShowTime | 2 +- rt/share/html/Ticket/Elements/ShowTransaction | 62 +- .../Elements/ShowTransactionAttachments | 106 +- .../html/Ticket/Elements/ShowUpdateStatus | 4 +- rt/share/html/Ticket/Elements/ShowUserEntry | 2 +- rt/share/html/Ticket/Elements/UpdateCc | 26 +- rt/share/html/Ticket/Forward.html | 30 +- rt/share/html/Ticket/GnuPG.html | 10 +- .../Graphs/Elements/EditGraphProperties | 4 +- .../html/Ticket/Graphs/Elements/ShowGraph | 3 +- .../html/Ticket/Graphs/Elements/ShowLegends | 2 +- rt/share/html/Ticket/Graphs/dhandler | 3 +- rt/share/html/Ticket/Graphs/index.html | 8 +- rt/share/html/Ticket/History.html | 8 +- rt/share/html/Ticket/Modify.html | 9 +- rt/share/html/Ticket/ModifyAll.html | 61 +- rt/share/html/Ticket/ModifyDates.html | 7 +- rt/share/html/Ticket/ModifyLinks.html | 9 +- rt/share/html/Ticket/ModifyPeople.html | 55 +- rt/share/html/Ticket/Reminders.html | 18 +- rt/share/html/Ticket/ShowEmailRecord.html | 4 +- rt/share/html/Ticket/Update.html | 245 +- rt/share/html/Ticket/autohandler | 20 + rt/share/html/Tools/Elements/Tabs | 90 - rt/share/html/Tools/MyDay.html | 11 +- rt/share/html/Tools/MyReminders.html | 55 + rt/share/html/Tools/Offline.html | 6 +- .../html/Tools/Reports/CreatedByDates.html | 94 - rt/share/html/Tools/Reports/Elements/Tabs | 89 - .../html/Tools/Reports/ResolvedByDates.html | 95 - .../html/Tools/Reports/ResolvedByOwner.html | 70 - rt/share/html/Tools/Reports/index.html | 76 - rt/share/html/Tools/index.html | 37 +- rt/share/html/User/Delegation.html | 107 - rt/share/html/User/Elements/DelegateRights | 110 - rt/share/html/User/Elements/GroupTabs | 84 - rt/share/html/User/Elements/Tabs | 97 - rt/share/html/User/Groups/Members.html | 160 - rt/share/html/User/Groups/Modify.html | 157 - rt/share/html/User/Groups/index.html | 67 - rt/share/html/User/Prefs.html | 95 +- rt/share/html/Widgets/BulkEdit | 2 +- rt/share/html/Widgets/BulkProcess | 2 +- rt/share/html/Widgets/ComboBox | 6 +- rt/share/html/Widgets/FinalizeWidgetArguments | 9 +- rt/share/html/Widgets/Form/Boolean | 4 +- rt/share/html/Widgets/Form/Integer | 13 +- rt/share/html/Widgets/Form/Select | 6 +- rt/share/html/Widgets/Form/String | 4 +- rt/share/html/Widgets/SavedSearch | 10 +- rt/share/html/Widgets/SelectionBox | 2 +- rt/share/html/Widgets/TitleBox | 10 +- rt/share/html/Widgets/TitleBoxEnd | 2 +- rt/share/html/Widgets/TitleBoxStart | 27 +- rt/share/html/autohandler | 7 +- rt/share/html/dhandler | 4 +- rt/share/html/index.html | 37 +- rt/share/html/l | 4 +- rt/share/html/l_unsafe | 52 + rt/share/html/m/_elements/footer | 10 - rt/share/html/m/_elements/raw_style | 4 + rt/share/html/m/_elements/wrapper | 2 +- rt/share/html/m/ticket/autohandler | 8 + rt/share/html/m/ticket/create | 58 +- rt/share/html/m/ticket/show | 12 +- rt/share/html/m/tickets/search | 2 +- rt/share/po/bg.po | 9473 +++++++++++ rt/share/po/cs.po | 9541 +++++++++++ rt/share/po/da.po | 11032 +++++++++++++ rt/share/po/de.po | 10152 ++++++++++++ rt/share/po/el.po | 9449 +++++++++++ rt/share/po/en.po | 23 + rt/share/po/en_GB.po | 7654 +++++++++ rt/share/po/es.po | 11165 +++++++++++++ rt/share/po/et.po | 9225 +++++++++++ rt/share/po/fi.po | 10534 +++++++++++++ rt/share/po/fr.po | 9949 ++++++++++++ rt/share/po/he.po | 9241 +++++++++++ rt/share/po/hr.po | 10514 +++++++++++++ rt/share/po/hu.po | 9443 +++++++++++ rt/share/po/id.po | 9870 ++++++++++++ rt/share/po/is.po | 8873 +++++++++++ rt/share/po/it.po | 11177 +++++++++++++ rt/share/po/ja.po | 9295 +++++++++++ rt/share/po/lt.po | 9665 ++++++++++++ rt/share/po/lv.po | 9446 +++++++++++ rt/share/po/mk.po | 8721 +++++++++++ rt/share/po/nb.po | 11105 +++++++++++++ rt/share/po/nl.po | 10517 +++++++++++++ rt/share/po/nn.po | 9562 +++++++++++ rt/share/po/pl.po | 10816 +++++++++++++ rt/share/po/pt.po | 9633 ++++++++++++ rt/share/po/pt_BR.po | 11233 +++++++++++++ rt/share/po/pt_PT.po | 9053 +++++++++++ rt/share/po/rt.pot | 8696 ++++++++++ rt/share/po/ru.po | 9611 ++++++++++++ rt/share/po/sl.po | 9438 +++++++++++ rt/share/po/sv.po | 9792 ++++++++++++ rt/share/po/tr.po | 9634 ++++++++++++ rt/share/po/zh_CN.po | 13016 +++++++++++++++ rt/share/po/zh_TW.po | 13049 ++++++++++++++++ rt/t/00-compile.t | 25 +- rt/t/00-mason-syntax.t | 12 +- rt/t/api/ace.t | 238 - rt/t/api/action-createtickets.t | 44 +- rt/t/api/attachment.t | 2 - rt/t/api/attachment_filename.t | 26 +- rt/t/api/attribute-tests.t | 7 +- rt/t/api/attribute.t | 11 +- rt/t/api/bookmarks.t | 24 + rt/t/api/canonical_charset.t | 30 + rt/t/api/cf.t | 224 - rt/t/api/cf_combo_casacade.t | 46 - rt/t/api/cf_external.t | 56 - rt/t/api/cf_pattern.t | 53 - rt/t/api/cf_render_type.t | 49 + rt/t/api/cf_single_values.t | 38 - rt/t/api/cf_transaction.t | 60 - rt/t/api/condition-ownerchange.t | 7 +- rt/t/api/condition-reject.t | 7 +- rt/t/api/config.t | 43 + rt/t/api/cron.t | 89 + rt/t/api/currentuser.t | 3 +- rt/t/api/customfield.t | 11 +- rt/t/api/date.t | 106 +- rt/t/api/emailparser.t | 23 +- rt/t/api/execute-code.t | 108 + rt/t/api/group-rights.t | 137 + rt/t/api/group.t | 19 +- rt/t/api/groups.t | 111 +- rt/t/api/has_rights.t | 43 + rt/t/api/i18n.t | 3 +- rt/t/api/i18n_guess.t | 71 + rt/t/api/link.t | 61 +- rt/t/api/password-types.t | 20 +- rt/t/api/queue.t | 21 +- rt/t/api/record.t | 23 +- rt/t/api/reminders.t | 10 +- rt/t/api/report_tickets.t | 15 + rt/t/api/rights.t | 18 +- rt/t/api/rights_show_ticket.t | 28 +- rt/t/api/rt.t | 11 +- rt/t/{ => api}/rtname.t | 0 rt/t/api/safe-run-child-util.t | 201 + rt/t/api/savedsearch.t | 181 + rt/t/api/scrip.t | 10 +- rt/t/api/scrip_order.t | 11 +- rt/t/api/searchbuilder.t | 3 +- rt/t/api/squish.t | 16 + rt/t/api/system.t | 5 +- rt/t/api/template-insert.t | 26 - rt/t/api/template.t | 46 +- rt/t/api/ticket.t | 53 +- rt/t/api/tickets.t | 44 +- rt/t/api/tickets_overlay_sql.t | 31 +- rt/t/api/txn_content.t | 2 +- rt/t/api/uri-fsck_com_rt.t | 7 +- rt/t/api/uri-t.t | 5 +- rt/t/api/user.t | 58 +- rt/t/api/users.t | 37 +- rt/t/api/versions_sorter.t | 22 + rt/t/api/web-config.t | 163 + rt/t/approval/admincc.t | 18 +- rt/t/approval/basic.t | 26 +- rt/t/articles/article.t | 230 + rt/t/articles/articles.t | 137 + rt/t/articles/basic-api.t | 114 + rt/t/articles/cfsearch.t | 94 + rt/t/articles/class.t | 76 + rt/t/articles/interface.t | 221 + rt/t/articles/queue-specific-class.t | 218 + rt/t/articles/search-interface.t | 164 + rt/t/articles/upload-customfields.t | 90 + rt/t/articles/uri-a.t | 64 + rt/t/articles/uri-articles.t | 31 + rt/t/clicky.t | 119 - rt/t/cron.t | 90 - rt/t/customfields/access_via_queue.t | 30 +- rt/t/customfields/api.t | 221 + rt/t/customfields/combo_cascade.t | 37 + rt/t/customfields/date_search.t | 119 + rt/t/customfields/datetime_search.t | 141 + rt/t/customfields/external.t | 56 + rt/t/customfields/ip.t | 285 + rt/t/customfields/iprange.t | 469 + rt/t/customfields/iprangev6.t | 474 + rt/t/customfields/ipv6.t | 252 + rt/t/customfields/pattern.t | 44 + rt/t/customfields/single_values.t | 37 + rt/t/customfields/sort_order.t | 20 +- rt/t/customfields/transaction.t | 60 + rt/t/data/configs/apache2.2+fastcgi.conf | 44 - rt/t/data/configs/apache2.2+fastcgi.conf.in | 14 +- rt/t/data/configs/apache2.2+mod_perl.conf | 41 - rt/t/data/configs/apache2.2+mod_perl.conf.in | 40 +- rt/t/data/configs/passwords | 2 + .../emails/10-encrypted-inline-plain.txt | 2 +- .../emails/11-encrypted-inline-attachment.txt | 2 +- .../emails/12-encrypted-inline-binary.txt | 2 +- .../emails/13-signed-encrypted-MIME-plain.txt | 2 +- .../14-signed-encrypted-MIME-attachment.txt | 2 +- .../15-signed-encrypted-MIME-binary.txt | 2 +- .../16-signed-encrypted-inline-plain.txt | 2 +- .../18-signed-encrypted-inline-binary.txt | 2 +- .../emails/19-signed-inline-plain-nested.txt | 2 +- .../2-signed-MIME-plain-with-attachment.txt | 2 +- .../3-signed-MIME-plain-with-binary.txt | 2 +- .../gnupg/emails/4-signed-inline-plain.txt | 2 +- .../5-signed-inline-with-attachment.txt | 2 +- .../emails/6-signed-inline-with-binary.txt | 2 +- .../gnupg/emails/7-encrypted-MIME-plain.txt | 2 +- .../8-encrypted-MIME-with-attachment.txt | 2 +- .../emails/9-encrypted-MIME-with-binary.txt | 2 +- .../special/quoted_inline_signature.txt | 2 +- rt/t/delegation/cleanup_stalled.t | 458 - rt/t/delegation/revocation.t | 135 - rt/t/fts/indexed_mysql.t | 134 + rt/t/fts/indexed_oracle.t | 82 + rt/t/fts/indexed_pg.t | 119 + rt/t/fts/not_indexed.t | 61 + rt/t/i18n/caching.t | 33 + rt/t/i18n/default.t | 9 +- rt/t/i18n/footer.t | 29 + rt/t/lifecycles/basics.t | 247 + rt/t/lifecycles/dates.t | 317 + rt/t/lifecycles/moving.t | 97 + rt/t/lifecycles/unresolved-deps.t | 45 + rt/t/lifecycles/utils.pl | 73 + rt/t/mail/bounce.t | 42 + rt/t/mail/charsets-outgoing.t | 67 +- rt/t/mail/crypt-gnupg.t | 114 +- rt/t/mail/dashboard-chart-with-utf8.t | 92 + rt/t/mail/dashboards.t | 371 + rt/t/mail/digest-attributes.t | 168 + rt/t/mail/disposition-outgoing.t | 69 + rt/t/mail/extractsubjecttag.t | 22 +- rt/t/mail/fake-sendmail | 27 + rt/t/mail/gateway.t | 230 +- rt/t/mail/gnupg-bad.t | 58 +- rt/t/mail/gnupg-incoming.t | 64 +- rt/t/mail/gnupg-outgoing-encrypted.t | 27 + rt/t/mail/gnupg-outgoing-plain.t | 25 + rt/t/mail/gnupg-outgoing-signed.t | 27 + rt/t/mail/gnupg-outgoing-signed_encrypted.t | 28 + rt/t/mail/gnupg-realmail.t | 36 +- rt/t/mail/gnupg-reverification.t | 77 +- rt/t/mail/gnupg-special.t | 33 +- rt/t/mail/mime_decoding.t | 54 +- rt/t/mail/multipart.t | 10 +- rt/t/mail/one-time-recipients.t | 209 + rt/t/mail/outlook.t | 15 +- rt/t/mail/rfc2231-attachment.t | 28 + rt/t/mail/rfc822-attachment.t | 137 + rt/t/mail/sendmail.t | 179 +- rt/t/mail/specials-in-encodedwords.t | 40 + rt/t/mail/threading.t | 90 + rt/t/mail/verp.t | 2 +- rt/t/mail/wrong_mime_charset.t | 21 +- rt/t/maildigest/attributes.t | 168 - rt/t/savedsearch.t | 185 - rt/t/shredder/00load.t | 2 +- rt/t/shredder/01basics.t | 4 +- rt/t/shredder/01ticket.t | 18 +- rt/t/shredder/02group_member.t | 22 +- rt/t/shredder/02queue.t | 28 +- rt/t/shredder/02template.t | 14 +- rt/t/shredder/02user.t | 10 +- rt/t/shredder/03plugin.t | 6 +- rt/t/shredder/03plugin_summary.t | 4 +- rt/t/shredder/03plugin_tickets.t | 36 +- rt/t/shredder/03plugin_users.t | 62 +- rt/t/shredder/utils.pl | 119 +- rt/t/ticket/action_linear_escalate.t | 9 +- rt/t/ticket/add-watchers.t | 13 +- rt/t/ticket/badlinks.t | 4 +- rt/t/ticket/batch-upload-csv.t | 7 +- rt/t/ticket/cfsort-freeform-multiple.t | 61 +- rt/t/ticket/cfsort-freeform-single.t | 72 +- rt/t/ticket/clicky.t | 142 + rt/t/ticket/deferred_owner.t | 21 +- rt/t/ticket/googleish_search.t | 43 + rt/t/ticket/link_search.t | 14 +- rt/t/ticket/linking.t | 78 +- rt/t/ticket/merge.t | 12 +- rt/t/ticket/quicksearch.t | 41 - rt/t/ticket/requestor-order.t | 26 +- rt/t/ticket/scrips_batch.t | 24 +- rt/t/ticket/search.t | 88 +- rt/t/ticket/search_by_cf_freeform_multiple.t | 55 +- rt/t/ticket/search_by_cf_freeform_single.t | 41 +- rt/t/ticket/search_by_links.t | 39 +- rt/t/ticket/search_by_txn.t | 4 +- rt/t/ticket/search_by_watcher.t | 362 +- rt/t/ticket/search_long_cf_values.t | 22 +- rt/t/ticket/sort-by-custom-ownership.t | 20 +- rt/t/ticket/sort-by-queue.t | 29 +- rt/t/ticket/sort-by-user.t | 45 +- rt/t/ticket/sort_by_cf.t | 34 +- rt/t/validator/group_members.t | 2 +- rt/t/web/admin_groups.t | 59 + rt/t/web/admin_user.t | 21 + rt/t/web/articles-links.t | 52 + rt/t/web/attachment-with-name-0.t | 23 + rt/t/web/attachment_encoding.t | 15 +- rt/t/web/attachments.t | 67 +- rt/t/web/basic.t | 35 +- rt/t/web/case-sensitivity.t | 85 + rt/t/web/cf_access.t | 129 +- rt/t/web/cf_date.t | 187 + rt/t/web/cf_datetime.t | 235 + rt/t/web/cf_onqueue.t | 24 +- rt/t/web/cf_render_type.t | 50 + rt/t/web/cf_select_one.t | 81 +- rt/t/web/charting.t | 25 +- rt/t/web/class_create.t | 75 + rt/t/web/clickjacking-preventions.t | 30 + rt/t/web/command_line.t | 67 +- rt/t/web/command_line_link_to_articles.t | 48 + rt/t/web/command_line_with_unknown_field.t | 16 +- rt/t/web/compilation_errors.t | 38 +- rt/t/web/config_tab_right.t | 8 +- rt/t/web/crypt-gnupg.t | 81 +- rt/t/web/csrf-rest.t | 77 + rt/t/web/csrf.t | 181 + rt/t/web/custom_frontpage.t | 39 +- rt/t/web/custom_search.t | 6 +- .../web/dashboard_with_deleted_saved_search.t | 89 - rt/t/web/dashboards-basics.t | 268 + rt/t/web/dashboards-deleted-saved-search.t | 89 + rt/t/web/dashboards-groups.t | 139 +- rt/t/web/dashboards-permissions.t | 10 +- rt/t/web/dashboards-search-cache.t | 73 + rt/t/web/dashboards.t | 250 - rt/t/web/gnupg-headers.t | 53 + rt/t/web/gnupg-outgoing.t | 363 - rt/t/web/gnupg-select-keys-on-create.t | 183 +- rt/t/web/gnupg-select-keys-on-update.t | 197 +- rt/t/web/gnupg-tickyboxes.t | 84 + rt/t/web/googleish_search.t | 223 + rt/t/web/group_create.t | 75 + .../logout.t/NoAuth/Logout.html/Default | 6 + rt/t/web/html/NoAuth/js/not-by-default.js | 3 + rt/t/web/html/delete-article-name-method.html | 15 + rt/t/web/html_template.t | 12 +- rt/t/web/installer.t | 95 + rt/t/web/logout.t | 39 + rt/t/web/offline.t | 78 + rt/t/web/offline_messages_utf8.t | 3 +- rt/t/web/offline_utf8.t | 15 +- rt/t/web/owner_disabled_group_19221.t | 190 + rt/t/web/passthrough-jsmin | 5 + rt/t/web/path-traversal.t | 12 +- rt/t/web/private-components.t | 6 +- rt/t/web/query_builder.t | 131 +- rt/t/web/query_builder_queue_limits.t | 183 + rt/t/web/query_log.t | 20 + rt/t/web/queue_caching.t | 90 + rt/t/web/queue_create.t | 75 + rt/t/web/quickcreate.t | 37 + rt/t/web/quicksearch.t | 6 +- rt/t/web/redirect-after-login.t | 32 +- rt/t/web/redirect.t | 106 + rt/t/web/reminders.t | 88 + rt/t/web/remote_user.t | 36 + rt/t/web/requestor_groups_edit_link.t | 56 + rt/t/web/requestor_groups_limit.t | 36 + rt/t/web/rest-non-ascii-subject.t | 6 +- rt/t/web/rest-sort.t | 46 + rt/t/web/rest.t | 85 +- rt/t/web/rest_cfs_with_same_name.t | 88 + rt/t/web/richtext-autohandler.t | 10 +- rt/t/web/rights.t | 38 +- rt/t/web/rights1.t | 33 +- rt/t/web/saved_search_chart.t | 82 +- rt/t/web/saved_search_context.t | 69 + rt/t/web/saved_search_permissions.t | 6 +- rt/t/web/saved_search_update.t | 2 +- rt/t/web/scrips.t | 105 + rt/t/web/scrub.t | 46 + rt/t/web/search_bulk_update_links.t | 24 +- rt/t/web/search_cf_quotes.t | 53 + rt/t/web/search_rss.t | 11 +- rt/t/web/search_simple.t | 76 + rt/t/web/search_tabs.t | 86 + rt/t/web/self_service.t | 19 + rt/t/web/squish.t | 78 + rt/t/web/template.t | 62 + rt/t/web/ticket-create-utf8.t | 18 +- rt/t/web/ticket_display.t | 63 + rt/t/web/ticket_forward.t | 267 + rt/t/web/ticket_links.t | 173 + rt/t/web/ticket_modify_all.t | 83 + rt/t/web/ticket_modify_people.t | 113 + rt/t/web/ticket_owner.t | 147 +- rt/t/web/ticket_owner_autocomplete.t | 185 + rt/t/web/ticket_owner_issues_16656.t | 63 + rt/t/web/ticket_seen.t | 24 +- rt/t/web/ticket_txn_content.t | 71 +- rt/t/web/ticket_update_without_content.t | 14 +- rt/t/web/transaction_batch.t | 62 + rt/t/web/unlimited_search.t | 13 +- rt/t/web/user_update.t | 32 + rt/t/web/walk.t | 92 + 2582 files changed, 467905 insertions(+), 465540 deletions(-) delete mode 100644 FS/FS/ClientAPI/SGNG.pm create mode 100644 FS/FS/Cron/agent_email.pm create mode 100644 FS/FS/Cron/pay_batch.pm create mode 100644 FS/FS/Misc/Invoicing.pm create mode 100644 FS/FS/PagedSearch.pm create mode 100644 FS/FS/Quotable_Mixin.pm create mode 100644 FS/FS/TemplateItem_Mixin.pm create mode 100644 FS/FS/Template_Mixin.pm create mode 100644 FS/FS/Trace.pm create mode 100644 FS/FS/access_groupsales.pm create mode 100644 FS/FS/agent_pkg_class.pm create mode 100644 FS/FS/cdr/taqua62.pm create mode 100644 FS/FS/cdr/troop2.pm create mode 100644 FS/FS/cust_bill_pkg_detail_void.pm create mode 100644 FS/FS/cust_bill_pkg_discount_void.pm create mode 100644 FS/FS/cust_bill_pkg_display_void.pm create mode 100644 FS/FS/cust_bill_pkg_tax_location_void.pm create mode 100644 FS/FS/cust_bill_pkg_tax_rate_location_void.pm create mode 100644 FS/FS/cust_bill_pkg_void.pm create mode 100644 FS/FS/cust_bill_void.pm create mode 100644 FS/FS/cust_main/Location.pm create mode 100644 FS/FS/cust_main/NationalID.pm create mode 100644 FS/FS/cust_tax_exempt_pkg_void.pm create mode 100644 FS/FS/ftp_target.pm create mode 100644 FS/FS/h_cust_main_exemption.pm create mode 100644 FS/FS/h_part_pkg.pm create mode 100644 FS/FS/h_radius_usergroup.pm create mode 100644 FS/FS/h_svc_Radius_Mixin.pm create mode 100644 FS/FS/part_event/Action/Mixin/credit_agent_pkg_class.pm create mode 100644 FS/FS/part_event/Action/cust_bill_fee_greater_percent_or_flat.pm create mode 100644 FS/FS/part_event/Action/pkg_agent_credit_pkg_class.pm create mode 100644 FS/FS/part_event/Condition/after_event.pm create mode 100644 FS/FS/part_event/Condition/balance_age_under.pm create mode 100644 FS/FS/part_event/Condition/once_percust_every.pm create mode 100644 FS/FS/part_event/Condition/pkg_dundate_age.pm create mode 100644 FS/FS/part_export/acct_xmlrpc.pm create mode 100644 FS/FS/part_export/dma_radiusmanager.pm create mode 100644 FS/FS/part_export/ez_prepaid.pm create mode 100644 FS/FS/part_export/freeswitch.pm create mode 100644 FS/FS/part_export_machine.pm create mode 100644 FS/FS/part_svc_class.pm create mode 100644 FS/FS/quotation.pm create mode 100644 FS/FS/quotation_pkg.pm create mode 100644 FS/FS/quotation_pkg_discount.pm create mode 100644 FS/FS/sales.pm create mode 100644 FS/FS/svc_export_machine.pm create mode 100644 FS/t/Quotable_Mixin.t create mode 100644 FS/t/access_groupsales.t create mode 100644 FS/t/agent_pkg_class.t create mode 100644 FS/t/cust_bill_pkg_detail_void.t create mode 100644 FS/t/cust_bill_pkg_discount_void.t create mode 100644 FS/t/cust_bill_pkg_display_void.t create mode 100644 FS/t/cust_bill_pkg_tax_location_void.t create mode 100644 FS/t/cust_bill_pkg_tax_rate_location_void.t create mode 100644 FS/t/cust_bill_pkg_void.t create mode 100644 FS/t/cust_bill_void.t create mode 100644 FS/t/ftp_target.t create mode 100644 FS/t/part_export_machine.t create mode 100644 FS/t/part_svc_class.t create mode 100644 FS/t/quotation.t create mode 100644 FS/t/quotation_pkg.t create mode 100644 FS/t/quotation_pkg_discount.t create mode 100644 FS/t/sales.t create mode 100644 FS/t/svc_export_machine.t create mode 100755 bin/agent_email mode change 100644 => 100755 bin/cdr.import create mode 100755 bin/cust_bill.export mode change 100644 => 100755 bin/cust_main-bill_now create mode 100755 bin/cust_main.export create mode 100755 bin/cust_pkg-revert create mode 100755 bin/cust_pkg.export create mode 100755 bin/svc_acct.export create mode 100755 bin/svc_broadband.export create mode 100755 bin/svc_phone.export create mode 100755 bin/tax_location.upgrade create mode 100755 bin/v-rate-reimport rename rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html => conf/invoice-unitprice (100%) create mode 100644 conf/quotation_html create mode 100644 conf/quotation_latex create mode 100644 conf/quotation_latexnotes delete mode 100644 etc/fslongtable.sty create mode 100644 etc/longtable.sty mode change 100644 => 100755 fs_selfservice/FS-SelfService/cgi/agent.cgi mode change 100644 => 100755 fs_selfservice/FS-SelfService/cgi/cust_bill-logo.cgi mode change 100644 => 100755 fs_selfservice/FS-SelfService/cgi/selfservice.cgi create mode 100644 fs_selfservice/FS-SelfService/cgi/small_custview.html mode change 100644 => 100755 fs_selfservice/FS-SelfService/cgi/xmlrpc.cgi create mode 100644 fs_selfservice/php/freeside.class.new.php create mode 100644 httemplate/browse/ftp_target.html create mode 100644 httemplate/browse/part_svc_class.html create mode 100755 httemplate/browse/sales.cgi create mode 100644 httemplate/docs/part_svc-table.html create mode 100644 httemplate/edit/cust_main/after_bill_location.html create mode 100644 httemplate/edit/cust_main/before_bill_location.html create mode 100644 httemplate/edit/cust_main/company.html create mode 100644 httemplate/edit/cust_main/fax.html create mode 100644 httemplate/edit/cust_main/name.html create mode 100644 httemplate/edit/cust_main/phones.html create mode 100644 httemplate/edit/cust_main/stateid.html create mode 100755 httemplate/edit/ftp_target.html create mode 100644 httemplate/edit/part_svc_class.html create mode 100644 httemplate/edit/process/ftp_target.html create mode 100644 httemplate/edit/process/part_svc_class.html create mode 100644 httemplate/edit/process/quotation.html create mode 100644 httemplate/edit/process/sales.cgi create mode 100644 httemplate/edit/quotation.html create mode 100755 httemplate/edit/sales.cgi create mode 100644 httemplate/elements/form-create_ticket.html create mode 100644 httemplate/elements/order_pkg_link.html create mode 100644 httemplate/elements/select-part_svc_class.html create mode 100644 httemplate/elements/table-tickets.html create mode 100644 httemplate/elements/tr-amount_fee.html create mode 100644 httemplate/elements/tr-fixed-cust_main.html create mode 100644 httemplate/elements/tr-fixed-date.html create mode 100644 httemplate/elements/tr-fixed-prospect_main.html create mode 100644 httemplate/elements/tr-select-part_svc_class.html create mode 100644 httemplate/elements/tr-select-voip_class.html create mode 100644 httemplate/elements/tr-svc_export_machine.html create mode 100755 httemplate/misc/cust_main-suspend.cgi create mode 100755 httemplate/misc/cust_main-unsuspend.cgi create mode 100644 httemplate/misc/delete-ftp_target.html create mode 100755 httemplate/misc/process/void-cust_bill.html create mode 100644 httemplate/misc/suspend_cust.html create mode 100644 httemplate/misc/unsuspend_cust.html create mode 100755 httemplate/misc/unvoid-cust_bill_void.html create mode 100644 httemplate/misc/void-cust_bill.html create mode 100644 httemplate/misc/xmlhttp-cust_bill-search.html create mode 100644 httemplate/search/cust_bill_pkg_referral.html create mode 100644 httemplate/search/prepaid_income.html create mode 100755 httemplate/search/quotation.html create mode 100644 httemplate/search/report_cust_bill_pkg_referral.html delete mode 100644 httemplate/search/report_prepaid_income.cgi create mode 100644 httemplate/search/report_quotation.html create mode 100644 httemplate/search/report_sqlradius_usage.html create mode 100644 httemplate/search/sqlradius_usage.html create mode 100644 httemplate/search/unearned_detail.html create mode 100755 httemplate/view/cust_bill_void.html create mode 100644 httemplate/view/cust_main/custom_content.html create mode 100644 httemplate/view/cust_main/custom_content/birthdate.html create mode 100644 httemplate/view/cust_main/custom_content/small_custview.html create mode 100644 httemplate/view/cust_main/custom_content/spouse_birthdate.html create mode 100644 httemplate/view/cust_main/custom_content/svc_Common.html create mode 100644 httemplate/view/cust_main/custom_content/svc_acct.html create mode 100644 httemplate/view/cust_main/custom_content/svc_hardware.html create mode 100644 httemplate/view/cust_main/custom_content/svc_phone.html delete mode 100644 httemplate/view/cust_main/order_pkg_link.html create mode 100644 httemplate/view/cust_main/payment_history/voided_invoice.html create mode 100644 httemplate/view/elements/tr-svc_export_machine.html create mode 100755 httemplate/view/quotation.html create mode 100644 init.d/insserv-override-apache2 delete mode 100644 rt/Makefile delete mode 100644 rt/UPGRADING delete mode 100644 rt/UPGRADING.mysql 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/fastcgi_server delete mode 100644 rt/bin/fastcgi_server.in 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 create mode 100755 rt/bin/rt delete mode 100644 rt/bin/rt-crontool delete mode 100755 rt/bin/rt-mailgate delete mode 100755 rt/bin/standalone_httpd delete mode 100755 rt/bin/standalone_httpd.in delete mode 100644 rt/bin/webmux.pl.in delete mode 100644 rt/config.log delete mode 100755 rt/config.status create mode 100644 rt/devel/tools/apache.conf create mode 100644 rt/devel/tools/change-loc-msgstr create mode 100644 rt/devel/tools/extract-message-catalog create mode 100644 rt/devel/tools/factory create mode 100644 rt/devel/tools/license_tag create mode 100644 rt/devel/tools/merge-rosetta.pl create mode 100644 rt/devel/tools/rt-attributes-editor create mode 100644 rt/devel/tools/tweak-template-locstring delete mode 100755 rt/docs/README.docs delete mode 100644 rt/docs/Security create mode 100644 rt/docs/UPGRADING-2.0 create mode 100644 rt/docs/UPGRADING-3.0 create mode 100644 rt/docs/UPGRADING-3.2 create mode 100644 rt/docs/UPGRADING-3.4 create mode 100644 rt/docs/UPGRADING-3.6 create mode 100644 rt/docs/UPGRADING-3.8 create mode 100644 rt/docs/UPGRADING-4.0 create mode 100644 rt/docs/UPGRADING.mysql delete mode 100644 rt/docs/creating_external_custom_fields.pod create mode 100644 rt/docs/customizing/articles_introduction.pod create mode 100644 rt/docs/customizing/templates.pod create mode 100644 rt/docs/customizing/timezones_in_charts.pod 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/gnupg_details_on_output_formats 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 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 create mode 100644 rt/docs/extending/clickable_links.pod create mode 100644 rt/docs/extending/external_custom_fields.pod rename rt/docs/{ => extending}/using_forms_widgets.pod (100%) delete mode 100644 rt/docs/extending_clickable_links.pod create mode 100644 rt/docs/full_text_indexing.pod create mode 100644 rt/docs/glossary.pod delete mode 100644 rt/docs/gnupg_integration.pod create mode 100644 rt/docs/hacking.pod create mode 100644 rt/docs/network-diagram.svg delete mode 100644 rt/docs/perlcritic.pod delete mode 100644 rt/docs/porting.windows delete mode 100644 rt/docs/queue_subject_tag.pod delete mode 100644 rt/docs/rt3-schema-relationships.dot create mode 100644 rt/docs/schema.dot create mode 100644 rt/docs/security.pod delete mode 100644 rt/docs/templates.pod delete mode 100644 rt/docs/timezones_in_charts.pod create mode 100644 rt/docs/web_deployment.pod delete mode 100644 rt/etc/RT_Config.pm delete mode 100644 rt/etc/acl.Informix delete mode 100644 rt/etc/acl.Sybase delete mode 100644 rt/etc/constraints.mysql delete mode 100644 rt/etc/drop.Informix delete mode 100644 rt/etc/schema.Informix delete mode 100644 rt/etc/schema.Sybase create mode 100644 rt/etc/schema.mysql delete mode 100755 rt/etc/schema.mysql-4.0 delete mode 100644 rt/etc/upgrade/3.1.0/acl.Informix delete mode 100644 rt/etc/upgrade/3.1.0/schema.Informix delete mode 100644 rt/etc/upgrade/3.3.0/acl.Informix delete mode 100755 rt/etc/upgrade/3.8-branded-queues-extension delete mode 100755 rt/etc/upgrade/3.8-ical-extension create mode 100644 rt/etc/upgrade/3.9.1/content create mode 100644 rt/etc/upgrade/3.9.2/content create mode 100644 rt/etc/upgrade/3.9.3/schema.Oracle create mode 100644 rt/etc/upgrade/3.9.3/schema.Pg create mode 100644 rt/etc/upgrade/3.9.3/schema.mysql create mode 100644 rt/etc/upgrade/3.9.5/backcompat create mode 100644 rt/etc/upgrade/3.9.5/schema.Oracle create mode 100644 rt/etc/upgrade/3.9.5/schema.Pg create mode 100644 rt/etc/upgrade/3.9.5/schema.SQLite create mode 100644 rt/etc/upgrade/3.9.5/schema.mysql create mode 100644 rt/etc/upgrade/3.9.6/schema.Oracle create mode 100644 rt/etc/upgrade/3.9.6/schema.Pg create mode 100644 rt/etc/upgrade/3.9.6/schema.SQLite create mode 100644 rt/etc/upgrade/3.9.6/schema.mysql create mode 100644 rt/etc/upgrade/3.9.7/content create mode 100644 rt/etc/upgrade/3.9.7/schema.Oracle create mode 100644 rt/etc/upgrade/3.9.7/schema.Pg create mode 100644 rt/etc/upgrade/3.9.7/schema.SQLite create mode 100644 rt/etc/upgrade/3.9.7/schema.mysql create mode 100644 rt/etc/upgrade/3.9.8/content create mode 100644 rt/etc/upgrade/3.9.8/schema.Oracle create mode 100644 rt/etc/upgrade/3.9.8/schema.Pg create mode 100644 rt/etc/upgrade/3.9.8/schema.SQLite create mode 100644 rt/etc/upgrade/3.9.8/schema.mysql create mode 100644 rt/etc/upgrade/4.0.0rc2/schema.mysql create mode 100644 rt/etc/upgrade/4.0.0rc4/schema.Oracle create mode 100644 rt/etc/upgrade/4.0.0rc4/schema.Pg create mode 100644 rt/etc/upgrade/4.0.0rc4/schema.mysql create mode 100644 rt/etc/upgrade/4.0.0rc7/content create mode 100644 rt/etc/upgrade/4.0.1/acl.Pg create mode 100644 rt/etc/upgrade/4.0.1/content create mode 100644 rt/etc/upgrade/4.0.3/content create mode 100644 rt/etc/upgrade/4.0.4/content create mode 100644 rt/etc/upgrade/4.0.6/content create mode 100644 rt/etc/upgrade/4.0.6/schema.mysql delete mode 100755 rt/etc/upgrade/generate-rtaddressregexp create mode 100644 rt/etc/upgrade/sanity-check-stylesheets.pl delete mode 100755 rt/etc/upgrade/split-out-cf-categories create mode 100755 rt/etc/upgrade/upgrade-articles create mode 100644 rt/etc/upgrade/upgrade-articles.in delete mode 100755 rt/etc/upgrade/vulnerable-passwords delete mode 100644 rt/lib/RT.pm.in delete mode 100644 rt/lib/RT/ACE_Overlay.pm delete mode 100644 rt/lib/RT/ACL_Overlay.pm delete mode 100755 rt/lib/RT/Action/Generic.pm delete mode 100644 rt/lib/RT/Action/ResolveMembers.pm create mode 100644 rt/lib/RT/Action/SetStatus.pm create mode 100644 rt/lib/RT/Article.pm create mode 100644 rt/lib/RT/Articles.pm delete mode 100644 rt/lib/RT/Attachment_Overlay.pm delete mode 100644 rt/lib/RT/Attachments_Overlay.pm delete mode 100644 rt/lib/RT/Attribute_Overlay.pm delete mode 100644 rt/lib/RT/Attributes_Overlay.pm delete mode 100644 rt/lib/RT/CachedGroupMember_Overlay.pm delete mode 100644 rt/lib/RT/CachedGroupMembers_Overlay.pm create mode 100644 rt/lib/RT/Class.pm create mode 100644 rt/lib/RT/Classes.pm delete mode 100755 rt/lib/RT/Condition/Generic.pm delete mode 100644 rt/lib/RT/CustomFieldValue_Overlay.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_Overlay.pm create mode 100644 rt/lib/RT/Dashboard/Mailer.pm create mode 100644 rt/lib/RT/Dashboards.pm create mode 100644 rt/lib/RT/Generated.pm create mode 100644 rt/lib/RT/Generated.pm.in delete mode 100644 rt/lib/RT/GroupMember_Overlay.pm delete mode 100644 rt/lib/RT/GroupMembers_Overlay.pm delete mode 100644 rt/lib/RT/Group_Overlay.pm delete mode 100644 rt/lib/RT/Groups_Overlay.pm delete mode 100644 rt/lib/RT/I18N/ar.po delete mode 100644 rt/lib/RT/I18N/bg.po 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/el.po delete mode 100644 rt/lib/RT/I18N/en.po delete mode 100644 rt/lib/RT/I18N/en_GB.po delete mode 100644 rt/lib/RT/I18N/es.po delete mode 100644 rt/lib/RT/I18N/et.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/hr.po delete mode 100644 rt/lib/RT/I18N/hu.po delete mode 100644 rt/lib/RT/I18N/id.po delete mode 100644 rt/lib/RT/I18N/is.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/lt.po delete mode 100644 rt/lib/RT/I18N/lv.po delete mode 100644 rt/lib/RT/I18N/mk.po delete mode 100755 rt/lib/RT/I18N/nb.po delete mode 100644 rt/lib/RT/I18N/nl.po delete mode 100644 rt/lib/RT/I18N/nn.po delete mode 100644 rt/lib/RT/I18N/pl.po delete mode 100644 rt/lib/RT/I18N/pt.po delete mode 100755 rt/lib/RT/I18N/pt_BR.po delete mode 100644 rt/lib/RT/I18N/pt_PT.po delete mode 100644 rt/lib/RT/I18N/rt.pot delete mode 100644 rt/lib/RT/I18N/ru.po delete mode 100644 rt/lib/RT/I18N/sl.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/Email/Filter/SpamAssassin.pm delete mode 100644 rt/lib/RT/Interface/Web/Menu/Item.pm delete mode 100755 rt/lib/RT/Interface/Web/Standalone.pm delete mode 100644 rt/lib/RT/Interface/Web/Standalone/PreFork.pm create mode 100644 rt/lib/RT/Lifecycle.pm delete mode 100644 rt/lib/RT/Link_Overlay.pm delete mode 100644 rt/lib/RT/Links_Overlay.pm create mode 100644 rt/lib/RT/ObjectClass.pm create mode 100644 rt/lib/RT/ObjectClasses.pm delete mode 100644 rt/lib/RT/ObjectCustomFieldValue_Overlay.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_Overlay.pm create mode 100644 rt/lib/RT/ObjectTopic.pm create mode 100644 rt/lib/RT/ObjectTopics.pm delete mode 100644 rt/lib/RT/Principal_Overlay.pm delete mode 100644 rt/lib/RT/Principals_Overlay.pm delete mode 100644 rt/lib/RT/Queue_Overlay.pm delete mode 100644 rt/lib/RT/Queues_Overlay.pm delete mode 100644 rt/lib/RT/ScripAction_Overlay.pm delete mode 100644 rt/lib/RT/ScripActions_Overlay.pm delete mode 100644 rt/lib/RT/ScripCondition_Overlay.pm delete mode 100644 rt/lib/RT/ScripConditions_Overlay.pm delete mode 100644 rt/lib/RT/Scrip_Overlay.pm delete mode 100644 rt/lib/RT/Scrips_Overlay.pm delete mode 100644 rt/lib/RT/Search/Generic.pm create mode 100644 rt/lib/RT/SharedSettings.pm create mode 100644 rt/lib/RT/Squish.pm create mode 100644 rt/lib/RT/Squish/CSS.pm create mode 100644 rt/lib/RT/Squish/JS.pm delete mode 100644 rt/lib/RT/Template_Overlay.pm delete mode 100644 rt/lib/RT/Templates_Overlay.pm create mode 100644 rt/lib/RT/Test/Apache.pm create mode 100644 rt/lib/RT/Test/GnuPG.pm delete mode 100644 rt/lib/RT/Ticket_Overlay.pm delete mode 100644 rt/lib/RT/Tickets_Overlay.pm delete mode 100644 rt/lib/RT/Tickets_Overlay_SQL.pm create mode 100644 rt/lib/RT/Tickets_SQL.pm create mode 100644 rt/lib/RT/Topic.pm create mode 100644 rt/lib/RT/Topics.pm delete mode 100644 rt/lib/RT/Transaction_Overlay.pm delete mode 100644 rt/lib/RT/Transactions_Overlay.pm create mode 100644 rt/lib/RT/URI/a.pm create mode 100644 rt/lib/RT/URI/fsck_com_article.pm delete mode 100644 rt/lib/RT/User_Overlay.pm delete mode 100644 rt/lib/RT/Users_Overlay.pm 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/factory delete mode 100644 rt/sbin/license_tag delete mode 100644 rt/sbin/merge-rosetta.pl delete mode 100755 rt/sbin/rt-attributes-viewer delete mode 100755 rt/sbin/rt-clean-sessions delete mode 100755 rt/sbin/rt-dump-database delete mode 100755 rt/sbin/rt-dump-database.in create mode 100644 rt/sbin/rt-dump-metadata.in delete mode 100755 rt/sbin/rt-email-dashboards delete mode 100755 rt/sbin/rt-email-digest delete mode 100755 rt/sbin/rt-email-group-admin create mode 100755 rt/sbin/rt-fulltext-indexer create mode 100644 rt/sbin/rt-fulltext-indexer.in create mode 100644 rt/sbin/rt-preferences-viewer.in delete mode 100755 rt/sbin/rt-server create mode 100644 rt/sbin/rt-server.fcgi.in mode change 100644 => 100755 rt/sbin/rt-session-viewer create mode 100755 rt/sbin/rt-setup-fulltext-index create mode 100644 rt/sbin/rt-setup-fulltext-index.in delete mode 100755 rt/sbin/rt-shredder delete mode 100755 rt/sbin/rt-validator create mode 100755 rt/sbin/standalone_httpd create mode 100644 rt/sbin/standalone_httpd.in delete mode 100644 rt/sbin/tweak-template-locstring create mode 100644 rt/share/html/Admin/Articles/Classes/CustomFields.html create mode 100644 rt/share/html/Admin/Articles/Classes/GroupRights.html create mode 100644 rt/share/html/Admin/Articles/Classes/Modify.html create mode 100644 rt/share/html/Admin/Articles/Classes/Objects.html create mode 100644 rt/share/html/Admin/Articles/Classes/Topics.html create mode 100644 rt/share/html/Admin/Articles/Classes/UserRights.html create mode 100644 rt/share/html/Admin/Articles/Classes/index.html create mode 100644 rt/share/html/Admin/Articles/Elements/Topics create mode 100644 rt/share/html/Admin/Articles/index.html delete mode 100644 rt/share/html/Admin/Elements/CustomFieldTabs create mode 100644 rt/share/html/Admin/Elements/EditQueueWatcherGroup create mode 100644 rt/share/html/Admin/Elements/EditRights create mode 100644 rt/share/html/Admin/Elements/EditRightsCategoryTabs delete mode 100755 rt/share/html/Admin/Elements/GlobalCustomFieldTabs delete mode 100755 rt/share/html/Admin/Elements/GroupTabs delete mode 100644 rt/share/html/Admin/Elements/ObjectCustomFields create mode 100644 rt/share/html/Admin/Elements/Portal delete mode 100755 rt/share/html/Admin/Elements/QueueTabs create mode 100644 rt/share/html/Admin/Elements/SelectCustomFieldRenderType delete mode 100755 rt/share/html/Admin/Elements/SystemTabs delete mode 100755 rt/share/html/Admin/Elements/Tabs delete mode 100755 rt/share/html/Admin/Elements/ToolTabs delete mode 100755 rt/share/html/Admin/Elements/UserTabs create mode 100644 rt/share/html/Admin/Global/CustomFields/Class-Article.html create mode 100644 rt/share/html/Admin/Global/Topics.html delete mode 100644 rt/share/html/Admin/Groups/CustomFields.html create mode 100644 rt/share/html/Admin/Tools/Queries.html create mode 100644 rt/share/html/Admin/Tools/Theme.html delete mode 100755 rt/share/html/Approvals/Elements/Tabs create mode 100644 rt/share/html/Articles/Article/Delete.html create mode 100644 rt/share/html/Articles/Article/Display.html create mode 100644 rt/share/html/Articles/Article/Edit.html create mode 100644 rt/share/html/Articles/Article/Elements/EditBasics create mode 100644 rt/share/html/Articles/Article/Elements/EditCustomFields create mode 100644 rt/share/html/Articles/Article/Elements/EditLinks create mode 100644 rt/share/html/Articles/Article/Elements/EditTopics create mode 100644 rt/share/html/Articles/Article/Elements/LinkEntryInstructions create mode 100644 rt/share/html/Articles/Article/Elements/Preformatted create mode 100644 rt/share/html/Articles/Article/Elements/SearchByCustomField create mode 100644 rt/share/html/Articles/Article/Elements/SelectSavedSearches create mode 100644 rt/share/html/Articles/Article/Elements/SelectSearchPrivacy create mode 100644 rt/share/html/Articles/Article/Elements/ShowHistory create mode 100644 rt/share/html/Articles/Article/Elements/ShowLinks create mode 100644 rt/share/html/Articles/Article/Elements/ShowSavedSearches create mode 100644 rt/share/html/Articles/Article/Elements/ShowSearchCriteria create mode 100644 rt/share/html/Articles/Article/Elements/ShowTopics create mode 100644 rt/share/html/Articles/Article/ExtractFromTicket.html create mode 100644 rt/share/html/Articles/Article/ExtractIntoClass.html create mode 100644 rt/share/html/Articles/Article/ExtractIntoTopic.html create mode 100644 rt/share/html/Articles/Article/History.html create mode 100644 rt/share/html/Articles/Article/PreCreate.html create mode 100644 rt/share/html/Articles/Article/Search.html create mode 100644 rt/share/html/Articles/Elements/BeforeMessageBox create mode 100644 rt/share/html/Articles/Elements/CheckSkipCreate create mode 100644 rt/share/html/Articles/Elements/CreateArticle create mode 100644 rt/share/html/Articles/Elements/GotoArticle create mode 100644 rt/share/html/Articles/Elements/IncludeArticle create mode 100644 rt/share/html/Articles/Elements/NewestArticles create mode 100644 rt/share/html/Articles/Elements/QuickSearch create mode 100644 rt/share/html/Articles/Elements/SelectClass create mode 100644 rt/share/html/Articles/Elements/ShowTopic create mode 100644 rt/share/html/Articles/Elements/ShowTopicLink create mode 100644 rt/share/html/Articles/Elements/UpdatedArticles create mode 100644 rt/share/html/Articles/Topics.html create mode 100644 rt/share/html/Articles/index.html create mode 100644 rt/share/html/Callbacks/RTx-Calendar/Elements/Tabs/Privileged delete mode 100644 rt/share/html/Dashboards/Elements/DashboardsForObjects delete mode 100644 rt/share/html/Dashboards/Elements/ShowSubscription delete mode 100755 rt/share/html/Dashboards/Elements/Tabs delete mode 100644 rt/share/html/Download/Tabular/dhandler create mode 100644 rt/share/html/Elements/CSRF delete mode 100644 rt/share/html/Elements/DashboardTabs create mode 100644 rt/share/html/Elements/EditCustomFieldDateTime create mode 100644 rt/share/html/Elements/EditCustomFieldIPAddress create mode 100644 rt/share/html/Elements/EditCustomFieldIPAddressRange create mode 100644 rt/share/html/Elements/Framekiller delete mode 100644 rt/share/html/Elements/Logout create mode 100644 rt/share/html/Elements/QueriesAsComment delete mode 100644 rt/share/html/Elements/QueueSummary create mode 100644 rt/share/html/Elements/QueueSummaryByLifecycle create mode 100644 rt/share/html/Elements/QueueSummaryByStatus create mode 100644 rt/share/html/Elements/RT__Article/ColumnMap create mode 100644 rt/share/html/Elements/RT__Class/ColumnMap create mode 100644 rt/share/html/Elements/RT__Dashboard/ColumnMap create mode 100644 rt/share/html/Elements/SelectIPRelation create mode 100644 rt/share/html/Elements/SelectOwnerAutocomplete create mode 100644 rt/share/html/Elements/SelectOwnerDropdown create mode 100644 rt/share/html/Elements/ServiceFields create mode 100644 rt/share/html/Elements/ShowCustomFieldDateTime create mode 100644 rt/share/html/Elements/ShowReminders create mode 100644 rt/share/html/Elements/WidgetBar create mode 100644 rt/share/html/Helpers/Autocomplete/Groups create mode 100644 rt/share/html/Helpers/Autocomplete/Owners create mode 100644 rt/share/html/Helpers/Autocomplete/Users delete mode 100644 rt/share/html/Helpers/CalPopup.html create mode 100644 rt/share/html/Helpers/TicketHistory create mode 100644 rt/share/html/Helpers/Toggle/ShowRequestor create mode 100644 rt/share/html/NoAuth/Helpers/CustomLogo/dhandler delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckcontextmenu.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdataprocessor.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdocumentfragment_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdocumentfragment_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrange_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckdomrangeiterator.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckeditingarea.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckelementpath.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckenterkey.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckevents.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckhtmliterator.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckicon.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckiecleanup.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckimagepreloader.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckkeystrokehandler.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenublock.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenublockpanel.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckmenuitem.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckpanel.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckplugin.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckspecialcombo.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckstyle.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbar.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbreak_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbreak_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbutton.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarbuttonui.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontformatcombo.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontscombo.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarfontsizecombo.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarpanelbutton.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarspecialcombo.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fcktoolbarstylecombo.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckw3crange.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/classes/fckxml_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fck_othercommands.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckblockquotecommand.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckcorestylecommand.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckfitwindow.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckindentcommands.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckjustifycommands.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcklistcommands.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcknamedcommand.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckpastewordcommand.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckremoveformatcommand.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckshowblocks.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fckstylecommand.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcktablecommand.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcktextcolorcommand.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckconstants.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckeditorapi.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckjscoreextensions.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/fckscriptloader.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_contextmenu.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fck_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckbrowserinfo.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckcodeformatter.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckcommands.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckconfig.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdebug.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdebug_empty.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdialog.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdocumentprocessor.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckdomtools.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklanguagemanager.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklisthandler.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcklistslib.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckplugins.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckregexlib.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckselection_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckstyles.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktablehandler_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbaritems.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbarset.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktools_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckundo.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckurlparams.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtml_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fckxhtmlentities.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/behaviors/disablehandles.htc delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/behaviors/showtableborders.htc delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_editorarea.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_internal.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/fck_showtableborders_gecko.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_address.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_blockquote.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_div.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h1.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h2.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h3.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h4.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h5.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_h6.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_p.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/block_pre.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_anchor.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_flashlogo.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_hiddenfield.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_pagebreak.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/css/images/fck_plugin.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/fck_dialog_common.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/fck_dialog_common.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/locked.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/reset.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/common/images/unlocked.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/logo_fckeditor.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/logo_fredck.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_anchor.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_button.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_checkbox.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_colorselector.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_div.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_docprops.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_docprops/fck_document_preview.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash/fck_flash.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_flash/fck_flash_preview.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_form.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_hiddenfield.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image/fck_image.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_image/fck_image_preview.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_link.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_link/fck_link.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_listprop.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_paste.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_radiobutton.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_replace.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_select.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_select/fck_select.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_smiley.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_source.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_specialchar.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_table.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_tablecell.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template1.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template2.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_template/images/template3.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_textarea.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dialog/fck_textfield.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_dtd_test.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_xhtml10strict.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/dtd/fck_xhtml10transitional.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/fckdebug.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/fckdialog.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/fckeditor.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/fckeditor.original.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/anchor.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/arrow_ltr.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/arrow_rtl.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/angel_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/angry_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/broken_heart.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/cake.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/confused_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/cry_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/devil_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/embaressed_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/envelope.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/heart.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/kiss.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/lightbulb.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/omg_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/regular_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/sad_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/shades_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/teeth_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/thumbs_down.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/thumbs_up.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/tounge_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/images/smiley/msn/wink_smile.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckadobeair.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckeditorcode_gecko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/js/fckeditorcode_ie.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/_translationstatus.txt delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/af.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ar.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bg.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bn.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/bs.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ca.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/cs.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/da.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/de.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/el.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-au.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-ca.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en-uk.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/en.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/eo.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/es.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/et.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/eu.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fa.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fi.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fo.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fr-ca.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/fr.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/gl.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/gu.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/he.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hi.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hr.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/hu.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/is.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/it.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ja.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/km.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ko.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/lt.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/lv.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/mn.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ms.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/nb.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/nl.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/no.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pl.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pt-br.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/pt.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ro.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/ru.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sk.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sl.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sr-latn.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sr.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/sv.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/th.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/tr.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/uk.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/vi.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/zh-cn.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/lang/zh.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/autogrow/fckplugin.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/_sample/sample.config.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/_sample/sample.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/bbcode/fckplugin.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/dragresizetable/fckplugin.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/fck_placeholder.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/fckplugin.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/de.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/en.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/es.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/fr.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/it.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/lang/pl.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/placeholder/placeholder.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/simplecommands/fckplugin.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/plugins/tablecommands/fckplugin.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/_fckviewstrips.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_dialog.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_dialog_ie6.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_editor.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/fck_strip.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/sprites.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/sprites.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.arrowright.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.buttonarrow.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.collapse.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.end.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.expand.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/default/images/toolbar.separator.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_dialog.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_dialog_ie6.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_editor.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/fck_strip.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/dialog.sides.rtl.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/sprites.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/sprites.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.arrowright.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.bg.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.collapse.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.end.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.expand.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.separator.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/office2003/images/toolbar.start.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_dialog.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_dialog_ie6.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_editor.css delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/fck_strip.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/dialog.sides.rtl.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/sprites.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/sprites.png delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.arrowright.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.buttonarrow.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.buttonbg.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.collapse.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.end.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.expand.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/skins/silver/images/toolbar.separator.gif delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/ciframe.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/tmpFrameset.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/editor/wsc/w.html delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/fckconfig.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/fckeditor.js delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/fckpackager.xml delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/fckstyles.xml delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/fcktemplates.xml delete mode 100644 rt/share/html/NoAuth/RichText/FCKeditor/license.txt create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/LICENSE.html create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/adapters/jquery.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/ckeditor.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/config.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/contents.css rename rt/share/html/NoAuth/RichText/{FCKeditor/editor => ckeditor}/images/spacer.gif (100%) create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/_languages.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/_translationstatus.txt create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/af.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ar.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/bg.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/bn.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/bs.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ca.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/cs.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/cy.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/da.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/de.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/el.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/en-au.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/en-ca.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/en-gb.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/en.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/eo.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/es.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/et.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/eu.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/fa.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/fi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/fo.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/fr-ca.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/fr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/gl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/gu.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/he.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/hi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/hr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/hu.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/is.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/it.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ja.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/km.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ko.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/lt.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/lv.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/mn.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ms.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/nb.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/nl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/no.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/pl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/pt-br.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/pt.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ro.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ru.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/sk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/sl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/sr-latn.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/sr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/sv.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/th.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/tr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/uk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/vi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/zh-cn.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/zh.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/en.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/he.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/about/dialogs/about.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/autogrow/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/clipboard/dialogs/paste.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/colordialog/dialogs/colordialog.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/dialog/dialogDefinition.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/div/dialogs/div.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/find/dialogs/find.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/flash/dialogs/flash.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/button.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/checkbox.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/form.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/hiddenfield.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/radio.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/select.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/textarea.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/textfield.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/iframedialog/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/image/dialogs/image.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/link/dialogs/anchor.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/link/dialogs/link.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/liststyle/dialogs/liststyle.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/pastefromword/filter/default.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/pastetext/dialogs/pastetext.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/scayt/dialogs/options.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/scayt/dialogs/toolbar.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/smiley/dialogs/smiley.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/dialogs/specialchar.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/styles/styles/default.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/table/dialogs/table.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/tableresize/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/tabletools/dialogs/tableCell.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/templates/dialogs/templates.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/templates/templates/default.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/dialogs/uicolor.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/en.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/assets/yui.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/yui.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/ciframe.html create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/tmpFrameset.html create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/wsc.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/wsc.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/dialog.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/editor.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/icons.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/icons_rtl.png rename rt/share/html/NoAuth/RichText/{FCKeditor/editor/skins/default/images/dialog.sides.gif => ckeditor/skins/kama/images/dialog_sides.gif} (100%) rename rt/share/html/NoAuth/RichText/{FCKeditor/editor/skins/default/images/dialog.sides.png => ckeditor/skins/kama/images/dialog_sides.png} (100%) rename rt/share/html/NoAuth/RichText/{FCKeditor/editor/skins/default/images/dialog.sides.rtl.png => ckeditor/skins/kama/images/dialog_sides_rtl.png} (100%) create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/images/mini.gif create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/images/noimage.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/images/sprites.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/images/sprites_ie6.png rename rt/share/html/NoAuth/RichText/{FCKeditor/editor/skins/default/images/toolbar.start.gif => ckeditor/skins/kama/images/toolbar_start.gif} (100%) create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/skin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/templates.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/dialog.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/editor.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/icons.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/icons_rtl.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/images/dialog_sides.gif create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/images/dialog_sides.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/images/dialog_sides_rtl.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/images/mini.gif create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/images/noimage.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/images/sprites.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/images/sprites_ie6.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/skin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/templates.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/dialog.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/editor.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/icons.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/icons_rtl.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/images/dialog_sides.gif create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/images/dialog_sides.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/images/dialog_sides_rtl.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/images/mini.gif create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/images/noimage.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/images/sprites.png create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/images/sprites_ie6.png rename rt/share/html/NoAuth/RichText/{FCKeditor/editor/skins/silver/images/toolbar.start.gif => ckeditor/skins/v2/images/toolbar_start.gif} (100%) create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/skin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/templates.css create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/themes/default/theme.js delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/body.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/footer.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/forms.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/header.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/login.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/main.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/misc.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/nav.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/quickbar.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/ticket.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/titlebox.css delete mode 100644 rt/share/html/NoAuth/css/3.4-compat/transactions.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/approvals.css delete mode 100755 rt/share/html/NoAuth/css/3.5-default/body.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/footer.css delete mode 100755 rt/share/html/NoAuth/css/3.5-default/forms.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/header.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/local.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/login.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/logo.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/main.css delete mode 100755 rt/share/html/NoAuth/css/3.5-default/misc.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/nav-left.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/nav.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/quickbar.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/ticket-search.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/ticket.css delete mode 100644 rt/share/html/NoAuth/css/3.5-default/titlebox.css delete mode 100755 rt/share/html/NoAuth/css/3.5-default/transactions.css create mode 100644 rt/share/html/NoAuth/css/aileron/InHeader create mode 100644 rt/share/html/NoAuth/css/aileron/base.css create mode 100644 rt/share/html/NoAuth/css/aileron/boxes.css create mode 100644 rt/share/html/NoAuth/css/aileron/forms.css create mode 100644 rt/share/html/NoAuth/css/aileron/images/dhandler create mode 100644 rt/share/html/NoAuth/css/aileron/layout.css create mode 100644 rt/share/html/NoAuth/css/aileron/login.css create mode 100644 rt/share/html/NoAuth/css/aileron/main.css create mode 100644 rt/share/html/NoAuth/css/aileron/misc.css create mode 100644 rt/share/html/NoAuth/css/aileron/msie.css create mode 100644 rt/share/html/NoAuth/css/aileron/msie6.css create mode 100644 rt/share/html/NoAuth/css/aileron/nav.css create mode 100644 rt/share/html/NoAuth/css/aileron/ticket-lists.css create mode 100644 rt/share/html/NoAuth/css/aileron/ticket-search.css create mode 100644 rt/share/html/NoAuth/css/aileron/ticket.css create mode 100644 rt/share/html/NoAuth/css/ballard/InHeader create mode 100644 rt/share/html/NoAuth/css/ballard/base.css create mode 100644 rt/share/html/NoAuth/css/ballard/boxes.css create mode 100644 rt/share/html/NoAuth/css/ballard/images/dhandler create mode 100644 rt/share/html/NoAuth/css/ballard/layout.css create mode 100644 rt/share/html/NoAuth/css/ballard/main.css create mode 100644 rt/share/html/NoAuth/css/ballard/misc.css create mode 100644 rt/share/html/NoAuth/css/ballard/msie.css create mode 100644 rt/share/html/NoAuth/css/ballard/msie6.css create mode 100644 rt/share/html/NoAuth/css/ballard/nav.css create mode 100644 rt/share/html/NoAuth/css/ballard/ticket-lists.css create mode 100644 rt/share/html/NoAuth/css/ballard/ticket-search.css create mode 100644 rt/share/html/NoAuth/css/ballard/ticket.css create mode 100644 rt/share/html/NoAuth/css/base/admin.css create mode 100644 rt/share/html/NoAuth/css/base/articles.css create mode 100644 rt/share/html/NoAuth/css/base/collection.css create mode 100644 rt/share/html/NoAuth/css/base/farbtastic.css create mode 100644 rt/share/html/NoAuth/css/base/forms.css create mode 100644 rt/share/html/NoAuth/css/base/history-folding.css create mode 100644 rt/share/html/NoAuth/css/base/jquery-ui-timepicker-addon.css create mode 100644 rt/share/html/NoAuth/css/base/jquery-ui.css create mode 100644 rt/share/html/NoAuth/css/base/jquery-ui.custom.modified.css create mode 100644 rt/share/html/NoAuth/css/base/login.css create mode 100644 rt/share/html/NoAuth/css/base/main.css create mode 100644 rt/share/html/NoAuth/css/base/nav.css create mode 100644 rt/share/html/NoAuth/css/base/portlets.css create mode 100644 rt/share/html/NoAuth/css/base/rights-editor.css create mode 100644 rt/share/html/NoAuth/css/base/superfish-navbar.css create mode 100644 rt/share/html/NoAuth/css/base/superfish-vertical.css create mode 100644 rt/share/html/NoAuth/css/base/superfish.css create mode 100644 rt/share/html/NoAuth/css/base/tablesorter.css create mode 100644 rt/share/html/NoAuth/css/base/theme-editor.css create mode 100644 rt/share/html/NoAuth/css/base/ticket-form.css create mode 100644 rt/share/html/NoAuth/css/base/ticket.css create mode 100644 rt/share/html/NoAuth/css/base/tools.css rename rt/share/html/NoAuth/css/{web2 => base}/yui-fonts.css (100%) create mode 100644 rt/share/html/NoAuth/css/freeside3/InHeader create mode 100644 rt/share/html/NoAuth/css/freeside3/base.css create mode 100644 rt/share/html/NoAuth/css/freeside3/boxes.css create mode 100644 rt/share/html/NoAuth/css/freeside3/forms.css create mode 100644 rt/share/html/NoAuth/css/freeside3/images/dhandler create mode 100644 rt/share/html/NoAuth/css/freeside3/layout.css create mode 100644 rt/share/html/NoAuth/css/freeside3/login.css create mode 100644 rt/share/html/NoAuth/css/freeside3/main.css create mode 100644 rt/share/html/NoAuth/css/freeside3/misc.css create mode 100644 rt/share/html/NoAuth/css/freeside3/msie-pie.css create mode 100644 rt/share/html/NoAuth/css/freeside3/msie.css create mode 100644 rt/share/html/NoAuth/css/freeside3/msie6.css create mode 100644 rt/share/html/NoAuth/css/freeside3/nav.css create mode 100644 rt/share/html/NoAuth/css/freeside3/ticket-lists.css create mode 100644 rt/share/html/NoAuth/css/freeside3/ticket-search.css create mode 100644 rt/share/html/NoAuth/css/freeside3/ticket.css create mode 100644 rt/share/html/NoAuth/css/images/arrow.down.black.png create mode 100644 rt/share/html/NoAuth/css/images/arrows-ffffff.gif create mode 100644 rt/share/html/NoAuth/css/images/arrows-ffffff.png create mode 100644 rt/share/html/NoAuth/css/images/arrows-grey.gif create mode 100644 rt/share/html/NoAuth/css/images/arrows-grey.png create mode 100644 rt/share/html/NoAuth/css/images/shadow.gif create mode 100644 rt/share/html/NoAuth/css/images/shadow.png delete mode 100644 rt/share/html/NoAuth/css/web2/admin.css delete mode 100644 rt/share/html/NoAuth/css/web2/collection.css delete mode 100755 rt/share/html/NoAuth/css/web2/forms.css delete mode 100644 rt/share/html/NoAuth/css/web2/login.css delete mode 100644 rt/share/html/NoAuth/css/web2/portlets.css delete mode 100644 rt/share/html/NoAuth/css/web2/tools.css create mode 100755 rt/share/html/NoAuth/images/farbtastic/marker.png create mode 100644 rt/share/html/NoAuth/images/farbtastic/mask.png create mode 100644 rt/share/html/NoAuth/images/farbtastic/wheel.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-anim_basic_16x16.gif create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-bg_flat_10_000000_40x100.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-bg_flat_75_ffffff_40x100.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-bg_glass_100_f6f6f6_1x400.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-bg_glass_55_fbf9ee_1x400.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-bg_glass_65_ffffff_1x400.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-bg_glass_75_dadada_1x400.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-icons_222222_256x240.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-icons_228ef1_256x240.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-icons_2e83ff_256x240.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-icons_4488cc_256x240.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-icons_454545_256x240.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-icons_888888_256x240.png create mode 100644 rt/share/html/NoAuth/images/jquery_ui/ui-icons_cd0a0a_256x240.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-icons_ef8c08_256x240.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-icons_ffd27a_256x240.png create mode 100755 rt/share/html/NoAuth/images/jquery_ui/ui-icons_ffffff_256x240.png create mode 100644 rt/share/html/NoAuth/images/tablesorter/asc.gif create mode 100644 rt/share/html/NoAuth/images/tablesorter/bg.gif create mode 100644 rt/share/html/NoAuth/images/tablesorter/desc.gif delete mode 100644 rt/share/html/NoAuth/js/IE7/IE7.js delete mode 100644 rt/share/html/NoAuth/js/IE7/IE8.js delete mode 100644 rt/share/html/NoAuth/js/IE7/ie7-recalc.js delete mode 100644 rt/share/html/NoAuth/js/IE7/ie7-squish.js delete mode 100644 rt/share/html/NoAuth/js/ahah.js create mode 100644 rt/share/html/NoAuth/js/dhandler create mode 100644 rt/share/html/NoAuth/js/farbtastic.js create mode 100644 rt/share/html/NoAuth/js/history-folding.js create mode 100644 rt/share/html/NoAuth/js/jquery-1.4.2.min.js create mode 100644 rt/share/html/NoAuth/js/jquery-ui-1.8.4.custom.min.js create mode 100644 rt/share/html/NoAuth/js/jquery-ui-patch-datepicker.js create mode 100644 rt/share/html/NoAuth/js/jquery-ui-timepicker-addon.js create mode 100644 rt/share/html/NoAuth/js/jquery.event.hover-1.0.js create mode 100644 rt/share/html/NoAuth/js/jquery.supposition.js create mode 100644 rt/share/html/NoAuth/js/jquery.tablesorter.min.js create mode 100644 rt/share/html/NoAuth/js/jquery_noconflict.js create mode 100644 rt/share/html/NoAuth/js/late.js delete mode 100644 rt/share/html/NoAuth/js/prototype/prototype.js delete mode 100644 rt/share/html/NoAuth/js/scriptaculous/controls.js delete mode 100644 rt/share/html/NoAuth/js/scriptaculous/effects.js delete mode 100644 rt/share/html/NoAuth/js/scriptaculous/scriptaculous.js create mode 100644 rt/share/html/NoAuth/js/superfish.js create mode 100644 rt/share/html/NoAuth/js/supersubs.js create mode 100644 rt/share/html/NoAuth/js/userautocomplete.js delete mode 100644 rt/share/html/Prefs/Elements/Tabs create mode 100644 rt/share/html/Search/Article.html create mode 100644 rt/share/html/Search/Elements/Article create mode 100644 rt/share/html/Search/Elements/EditSort create mode 100644 rt/share/html/Search/Elements/PickCustomerFields create mode 100644 rt/share/html/SelfService/Article/Display.html create mode 100644 rt/share/html/SelfService/Article/Search.html create mode 100644 rt/share/html/SelfService/Article/autohandler create mode 100644 rt/share/html/SelfService/Elements/SearchArticle delete mode 100755 rt/share/html/SelfService/Elements/Tabs create mode 100644 rt/share/html/Ticket/Elements/AddAttachments create mode 100644 rt/share/html/Ticket/Elements/ClickToShowHistory create mode 100644 rt/share/html/Ticket/Elements/FindTransactions create mode 100644 rt/share/html/Ticket/Elements/FoldStanzaJS create mode 100644 rt/share/html/Ticket/Elements/ShowRequestorExtraInfo create mode 100644 rt/share/html/Ticket/Elements/ShowRequestorTickets create mode 100644 rt/share/html/Ticket/Elements/ShowRequestorTicketsActive create mode 100644 rt/share/html/Ticket/Elements/ShowRequestorTicketsAll create mode 100644 rt/share/html/Ticket/Elements/ShowRequestorTicketsInactive create mode 100644 rt/share/html/Ticket/Elements/ShowSimplifiedRecipients create mode 100644 rt/share/html/Ticket/autohandler delete mode 100644 rt/share/html/Tools/Elements/Tabs create mode 100644 rt/share/html/Tools/MyReminders.html delete mode 100644 rt/share/html/Tools/Reports/CreatedByDates.html delete mode 100644 rt/share/html/Tools/Reports/Elements/Tabs delete mode 100644 rt/share/html/Tools/Reports/ResolvedByDates.html delete mode 100644 rt/share/html/Tools/Reports/ResolvedByOwner.html delete mode 100644 rt/share/html/Tools/Reports/index.html delete mode 100755 rt/share/html/User/Delegation.html delete mode 100755 rt/share/html/User/Elements/DelegateRights delete mode 100755 rt/share/html/User/Elements/GroupTabs delete mode 100755 rt/share/html/User/Elements/Tabs delete mode 100755 rt/share/html/User/Groups/Members.html delete mode 100755 rt/share/html/User/Groups/Modify.html delete mode 100755 rt/share/html/User/Groups/index.html create mode 100644 rt/share/html/l_unsafe create mode 100644 rt/share/html/m/ticket/autohandler create mode 100644 rt/share/po/bg.po create mode 100644 rt/share/po/cs.po create mode 100644 rt/share/po/da.po create mode 100644 rt/share/po/de.po create mode 100644 rt/share/po/el.po create mode 100644 rt/share/po/en.po create mode 100644 rt/share/po/en_GB.po create mode 100644 rt/share/po/es.po create mode 100644 rt/share/po/et.po create mode 100644 rt/share/po/fi.po create mode 100644 rt/share/po/fr.po create mode 100644 rt/share/po/he.po create mode 100644 rt/share/po/hr.po create mode 100644 rt/share/po/hu.po create mode 100644 rt/share/po/id.po create mode 100644 rt/share/po/is.po create mode 100644 rt/share/po/it.po create mode 100644 rt/share/po/ja.po create mode 100644 rt/share/po/lt.po create mode 100644 rt/share/po/lv.po create mode 100644 rt/share/po/mk.po create mode 100644 rt/share/po/nb.po create mode 100644 rt/share/po/nl.po create mode 100644 rt/share/po/nn.po create mode 100644 rt/share/po/pl.po create mode 100644 rt/share/po/pt.po create mode 100644 rt/share/po/pt_BR.po create mode 100644 rt/share/po/pt_PT.po create mode 100644 rt/share/po/rt.pot create mode 100644 rt/share/po/ru.po create mode 100644 rt/share/po/sl.po create mode 100644 rt/share/po/sv.po create mode 100644 rt/share/po/tr.po create mode 100644 rt/share/po/zh_CN.po create mode 100644 rt/share/po/zh_TW.po delete mode 100644 rt/t/api/ace.t create mode 100644 rt/t/api/bookmarks.t create mode 100644 rt/t/api/canonical_charset.t delete mode 100644 rt/t/api/cf.t delete mode 100644 rt/t/api/cf_combo_casacade.t delete mode 100644 rt/t/api/cf_external.t delete mode 100644 rt/t/api/cf_pattern.t create mode 100644 rt/t/api/cf_render_type.t delete mode 100644 rt/t/api/cf_single_values.t delete mode 100644 rt/t/api/cf_transaction.t create mode 100644 rt/t/api/config.t create mode 100644 rt/t/api/cron.t create mode 100644 rt/t/api/execute-code.t create mode 100644 rt/t/api/group-rights.t create mode 100644 rt/t/api/has_rights.t create mode 100644 rt/t/api/i18n_guess.t create mode 100644 rt/t/api/report_tickets.t rename rt/t/{ => api}/rtname.t (100%) create mode 100644 rt/t/api/safe-run-child-util.t create mode 100644 rt/t/api/savedsearch.t create mode 100644 rt/t/api/squish.t delete mode 100644 rt/t/api/template-insert.t create mode 100644 rt/t/api/versions_sorter.t create mode 100644 rt/t/api/web-config.t create mode 100644 rt/t/articles/article.t create mode 100644 rt/t/articles/articles.t create mode 100644 rt/t/articles/basic-api.t create mode 100644 rt/t/articles/cfsearch.t create mode 100644 rt/t/articles/class.t create mode 100644 rt/t/articles/interface.t create mode 100644 rt/t/articles/queue-specific-class.t create mode 100644 rt/t/articles/search-interface.t create mode 100644 rt/t/articles/upload-customfields.t create mode 100644 rt/t/articles/uri-a.t create mode 100644 rt/t/articles/uri-articles.t delete mode 100644 rt/t/clicky.t delete mode 100644 rt/t/cron.t create mode 100644 rt/t/customfields/api.t create mode 100644 rt/t/customfields/combo_cascade.t create mode 100644 rt/t/customfields/date_search.t create mode 100644 rt/t/customfields/datetime_search.t create mode 100644 rt/t/customfields/external.t create mode 100644 rt/t/customfields/ip.t create mode 100644 rt/t/customfields/iprange.t create mode 100644 rt/t/customfields/iprangev6.t create mode 100644 rt/t/customfields/ipv6.t create mode 100644 rt/t/customfields/pattern.t create mode 100644 rt/t/customfields/single_values.t create mode 100644 rt/t/customfields/transaction.t delete mode 100644 rt/t/data/configs/apache2.2+fastcgi.conf delete mode 100644 rt/t/data/configs/apache2.2+mod_perl.conf create mode 100644 rt/t/data/configs/passwords delete mode 100644 rt/t/delegation/cleanup_stalled.t delete mode 100644 rt/t/delegation/revocation.t create mode 100644 rt/t/fts/indexed_mysql.t create mode 100644 rt/t/fts/indexed_oracle.t create mode 100644 rt/t/fts/indexed_pg.t create mode 100644 rt/t/fts/not_indexed.t create mode 100644 rt/t/i18n/caching.t create mode 100644 rt/t/i18n/footer.t create mode 100644 rt/t/lifecycles/basics.t create mode 100644 rt/t/lifecycles/dates.t create mode 100644 rt/t/lifecycles/moving.t create mode 100644 rt/t/lifecycles/unresolved-deps.t create mode 100644 rt/t/lifecycles/utils.pl create mode 100644 rt/t/mail/bounce.t create mode 100644 rt/t/mail/dashboard-chart-with-utf8.t create mode 100644 rt/t/mail/dashboards.t create mode 100644 rt/t/mail/digest-attributes.t create mode 100644 rt/t/mail/disposition-outgoing.t create mode 100644 rt/t/mail/fake-sendmail create mode 100644 rt/t/mail/gnupg-outgoing-encrypted.t create mode 100644 rt/t/mail/gnupg-outgoing-plain.t create mode 100644 rt/t/mail/gnupg-outgoing-signed.t create mode 100644 rt/t/mail/gnupg-outgoing-signed_encrypted.t create mode 100644 rt/t/mail/one-time-recipients.t create mode 100644 rt/t/mail/rfc2231-attachment.t create mode 100644 rt/t/mail/rfc822-attachment.t create mode 100644 rt/t/mail/specials-in-encodedwords.t create mode 100644 rt/t/mail/threading.t delete mode 100644 rt/t/maildigest/attributes.t delete mode 100644 rt/t/savedsearch.t create mode 100644 rt/t/ticket/clicky.t create mode 100644 rt/t/ticket/googleish_search.t delete mode 100644 rt/t/ticket/quicksearch.t create mode 100644 rt/t/web/admin_groups.t create mode 100644 rt/t/web/admin_user.t create mode 100644 rt/t/web/articles-links.t create mode 100644 rt/t/web/attachment-with-name-0.t create mode 100644 rt/t/web/case-sensitivity.t create mode 100644 rt/t/web/cf_date.t create mode 100644 rt/t/web/cf_datetime.t create mode 100644 rt/t/web/cf_render_type.t create mode 100644 rt/t/web/class_create.t create mode 100644 rt/t/web/clickjacking-preventions.t create mode 100644 rt/t/web/command_line_link_to_articles.t create mode 100644 rt/t/web/csrf-rest.t create mode 100644 rt/t/web/csrf.t delete mode 100644 rt/t/web/dashboard_with_deleted_saved_search.t create mode 100644 rt/t/web/dashboards-basics.t create mode 100644 rt/t/web/dashboards-deleted-saved-search.t create mode 100644 rt/t/web/dashboards-search-cache.t delete mode 100644 rt/t/web/dashboards.t create mode 100644 rt/t/web/gnupg-headers.t delete mode 100644 rt/t/web/gnupg-outgoing.t create mode 100644 rt/t/web/gnupg-tickyboxes.t create mode 100644 rt/t/web/googleish_search.t create mode 100644 rt/t/web/group_create.t create mode 100644 rt/t/web/html/Callbacks/logout.t/NoAuth/Logout.html/Default create mode 100644 rt/t/web/html/NoAuth/js/not-by-default.js create mode 100644 rt/t/web/html/delete-article-name-method.html create mode 100644 rt/t/web/installer.t create mode 100644 rt/t/web/logout.t create mode 100644 rt/t/web/offline.t create mode 100644 rt/t/web/owner_disabled_group_19221.t create mode 100644 rt/t/web/passthrough-jsmin create mode 100644 rt/t/web/query_builder_queue_limits.t create mode 100644 rt/t/web/query_log.t create mode 100644 rt/t/web/queue_caching.t create mode 100644 rt/t/web/queue_create.t create mode 100644 rt/t/web/quickcreate.t create mode 100644 rt/t/web/redirect.t create mode 100644 rt/t/web/reminders.t create mode 100644 rt/t/web/remote_user.t create mode 100644 rt/t/web/requestor_groups_edit_link.t create mode 100644 rt/t/web/requestor_groups_limit.t create mode 100644 rt/t/web/rest-sort.t create mode 100644 rt/t/web/rest_cfs_with_same_name.t create mode 100644 rt/t/web/saved_search_context.t create mode 100644 rt/t/web/scrips.t create mode 100644 rt/t/web/scrub.t create mode 100644 rt/t/web/search_cf_quotes.t create mode 100644 rt/t/web/search_simple.t create mode 100644 rt/t/web/search_tabs.t create mode 100644 rt/t/web/self_service.t create mode 100644 rt/t/web/squish.t create mode 100644 rt/t/web/template.t create mode 100644 rt/t/web/ticket_display.t create mode 100644 rt/t/web/ticket_forward.t create mode 100644 rt/t/web/ticket_links.t create mode 100644 rt/t/web/ticket_modify_all.t create mode 100644 rt/t/web/ticket_modify_people.t create mode 100644 rt/t/web/ticket_owner_autocomplete.t create mode 100644 rt/t/web/ticket_owner_issues_16656.t create mode 100644 rt/t/web/transaction_batch.t create mode 100644 rt/t/web/user_update.t create mode 100644 rt/t/web/walk.t diff --git a/FS/FS.pm b/FS/FS.pm index 830a4a450..2d963b54f 100644 --- a/FS/FS.pm +++ b/FS/FS.pm @@ -3,7 +3,7 @@ package FS; use strict; use vars qw($VERSION); -$VERSION = '%%%VERSION%%%'; +$VERSION = '3.0git'; #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 @@ -95,6 +95,8 @@ L - Employee group membership L - Group reseller access +L - Group sales access + L - Access rights L - POP (Point of Presence, not Post @@ -212,6 +214,8 @@ L - Inventory items L - Service definition class +L - Service class class + L - Column constraint class L - Class linking service definitions (see L) @@ -262,8 +266,12 @@ L - Rater tier details for call billing L - Usage class class +L - Sales person class + L - Agent (reseller) class +L - Agent (reseller) package class commission class + L - Agent type class L - Class linking agent types (see L) with package definitions (see L) @@ -276,6 +284,10 @@ L - Agent payment gateway class L - Service class +L - Export hostname choice class + +L - Customer export hostname class + L - Customer package class L - Customer package option class @@ -546,11 +558,35 @@ 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. +=head2 CORE TEAM + +Jeremy Davis + +Ivan Kohler + +Mark Wells + +=head2 CORE EMERITUS + +Peter Bowen + +Jeff Finucane + +Jason Hall + +Kristian Hoffman + +Erik Levinson + +Brian McCane + +Richard Siddall + +Matt Simerson + +=head2 CONTRIBUTORS -See the CREDITS file in the Freeside distribution for a (hopefully) complete -list and the individal files for details. +See httemplate/docs/credits.html =head1 SEE ALSO diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm index d2417f069..b38c2671d 100644 --- a/FS/FS/AccessRight.pm +++ b/FS/FS/AccessRight.pm @@ -98,6 +98,7 @@ tie my %rights, 'Tie::IxHash', #'New contact', #'View customer contacts', #'List contacts', + 'Generate quotation', ], ### @@ -111,9 +112,12 @@ tie my %rights, 'Tie::IxHash', 'Edit customer tags', 'Edit referring customer', 'View customer history', + 'Suspend customer', + 'Unsuspend customer', 'Cancel customer', 'Complimentary customer', #aka users-allow_comp 'Merge customer', + 'Merge customer across agents', { 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 'Bill customer now', #NEW 'Bulk send customer notices', #NEW @@ -138,6 +142,7 @@ tie my %rights, 'Tie::IxHash', 'Unsuspend customer package', 'Cancel customer package immediately', 'Cancel customer package later', + 'Un-cancel customer package', 'Delay suspension events', 'Add on-the-fly cancel reason', #NEW 'Add on-the-fly suspend reason', #NEW @@ -173,7 +178,9 @@ tie my %rights, 'Tie::IxHash', 'Customer invoice / financial info rights' => [ 'View invoices', 'Resend invoices', #NEWNEW - 'Delete invoices', #new, but no need to phase in + 'Void invoices', + 'Unvoid invoices', + 'Delete invoices', 'View customer tax exemptions', #yow 'Add customer tax adjustment', #new, but no need to phase in 'View customer batched payments', #NEW @@ -188,6 +195,7 @@ tie my %rights, 'Tie::IxHash', 'Customer payment rights' => [ 'View payments', { rightname=>'Post payment', desc=>'Make check or cash payments.' }, + { rightname=>'Backdate payment', desc=>'Enable payments to be posted for days other than today.' }, 'Post check payment', 'Post cash payment', 'Post payment batch', @@ -222,11 +230,11 @@ tie my %rights, 'Tie::IxHash', ### # customer voiding rights.. ### - 'Customer void rights' => [ + 'Customer payment 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 + 'Void payments', + { rightname=>'Unvoid payments', desc=>'Enable unvoiding of voided payments' }, #aka. unvoid ], @@ -254,7 +262,9 @@ tie my %rights, 'Tie::IxHash', 'Reporting/listing rights' => [ 'List customers', 'List all customers', + 'Advanced customer search', 'List zip codes', #NEW + 'List quotations', 'List invoices', 'List packages', 'Summarize packages', @@ -269,6 +279,27 @@ tie my %rights, 'Tie::IxHash', { rightname=>'View email logs', global=>1 }, 'Download report data', + 'Services: Accounts', + 'Services: Accounts: Advanced search', + 'Services: Domains', + 'Services: Certificates', + 'Services: Mail forwards', + 'Services: Virtual hosting services', + 'Services: Wireless broadband services', + 'Services: Wireless broadband services: Advanced search', + 'Services: DSLs', + 'Services: Dish services', + 'Services: Hardware', + 'Services: Hardware: Advanced search', + 'Services: Phone numbers', + 'Services: PBXs', + 'Services: Ports', + 'Services: Mailing lists', + 'Services: External services', + 'Usage: RADIUS sessions', + 'Usage: Call Detail Records (CDRs)', + 'Usage: Unrateable CDRs', + 'Usage: Time worked', #{ rightname => 'List customers of all agents', global=>1 }, ], @@ -310,6 +341,8 @@ tie my %rights, 'Tie::IxHash', 'Edit billing events', { rightname=>'Edit global billing events', global=>1 }, + 'View templates', + { rightname=>'View global templates', global=>1 }, 'Edit templates', { rightname=>'Edit global templates', global=>1 }, @@ -367,6 +400,7 @@ sub default_superuser_rights { 'Delete refund', #? 'Edit customer package dates', 'Time queue', + 'Usage: Time worked', 'Redownload resolved batches', 'Raw SQL', 'Configuration download', @@ -375,6 +409,7 @@ sub default_superuser_rights { 'Edit usage', 'Credit card void', 'Echeck void', + 'Edit customer package dates', ); no warnings 'uninitialized'; diff --git a/FS/FS/ClientAPI/MasonComponent.pm b/FS/FS/ClientAPI/MasonComponent.pm index 37cf7ef20..c4094ffe0 100644 --- a/FS/FS/ClientAPI/MasonComponent.pm +++ b/FS/FS/ClientAPI/MasonComponent.pm @@ -26,6 +26,7 @@ my %allowed_comps = map { $_=>1 } qw( my %session_comps = map { $_=>1 } qw( /elements/location.html + /elements/tr-amount_fee.html /edit/cust_main/first_pkg/select-part_pkg.html ); @@ -36,11 +37,34 @@ my %session_callbacks = ( my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) or return "unknown custnum $custnum"; my %args = @$argsref; - $args{object} = $cust_main; + $args{object} = $cust_main->bill_location; @$argsref = ( %args ); return ''; #no error }, + '/elements/tr-amount_fee.html' => sub { + my( $custnum, $argsref ) = @_; + + my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) + or return "unknown custnum $custnum"; + + my $conf = new FS::Conf; + + my %args = @$argsref; + %args = ( + %args, + 'process-pkgpart' => + scalar($conf->config('selfservice_process-pkgpart', $cust_main->agentnum)), + 'process-display' => scalar($conf->config('selfservice_process-display')), + 'process-skip_first' => $conf->exists('selfservice_process-skip_first'), + 'num_payments' => scalar($cust_main->cust_pay), + 'surcharge_percentage' => scalar($conf->config('credit-card-surcharge-percentage')), + ); + @$argsref = ( %args ); + + return ''; #no error + }, + '/edit/cust_main/first_pkg/select-part_pkg.html' => sub { my( $custnum, $argsref ) = @_; my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 7bc3011d2..3f7c00432 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -14,6 +14,7 @@ use Business::CreditCard; use HTML::Entities; use Text::CSV_XS; use Spreadsheet::WriteExcel; +use OLE::Storage_Lite; use FS::UI::Web::small_custview qw(small_custview); #less doh use FS::UI::Web; use FS::UI::bytecount qw( display_bytecount ); @@ -38,6 +39,7 @@ use FS::cust_main; use FS::cust_bill; use FS::legacy_cust_bill; use FS::cust_main_county; +use FS::part_pkg; use FS::cust_pkg; use FS::payby; use FS::acct_rt_transaction; @@ -46,18 +48,17 @@ use FS::msg_template; $DEBUG = 0; $me = '[FS::ClientAPI::MyAccount]'; -use vars qw( @cust_main_editable_fields ); +use vars qw( @cust_main_editable_fields @location_editable_fields ); @cust_main_editable_fields = qw( - first last company address1 address2 city - county state zip country - daytime night fax mobile - ship_first ship_last ship_company ship_address1 ship_address2 ship_city - ship_state ship_zip ship_country - ship_daytime ship_night ship_fax ship_mobile + first last daytime night fax mobile locale payby payinfo payname paystart_month paystart_year payissue payip ss paytype paystate stateid stateid_state ); +@location_editable_fields = qw( + address1 address2 city county state zip country +); + BEGIN { #preload to reduce time customer_info takes if ( $FS::TicketSystem::system ) { @@ -115,7 +116,7 @@ sub skin_info { ( map { $_ => scalar( $conf->config($_, $agentnum) ) } qw( company_name date_format ) ), ( map { $_ => scalar( $conf->config("selfservice-$_", $agentnum ) ) } - qw( body_bgcolor box_bgcolor + qw( body_bgcolor box_bgcolor stripe1_bgcolor stripe2_bgcolor text_color link_color vlink_color hlink_color alink_color font title_color title_align title_size menu_bgcolor menu_fontsize ) @@ -381,10 +382,16 @@ sub customer_info { my $cust_main = qsearchs('cust_main', $search ) or return { 'error' => "unknown custnum $custnum" }; + $return{display_custnum} = $cust_main->display_custnum; + if ( $session->{'pkgnum'} ) { $return{balance} = $cust_main->balance_pkgnum( $session->{'pkgnum'} ); + #next_bill_date from cust_pkg? } else { $return{balance} = $cust_main->balance; + $return{next_bill_date} = $cust_main->next_bill_date; + $return{next_bill_date_pretty} = + time2str('%m/%d/%Y', $return{next_bill_date} ); } my @tickets = $cust_main->tickets; @@ -416,21 +423,45 @@ sub customer_info { }; } $cust_main->open_cust_bill; $return{open_invoices} = \@open; + + my $sql = 'SELECT MAX(_date) FROM cust_bill WHERE custnum = ?'; + my $sth = dbh->prepare($sql) or die dbh->errstr; + $sth->execute($custnum) or die $sth->errstr; + $return{'last_invoice_date'} = $sth->fetchrow_arrayref->[0]; + $return{'last_invoice_date_pretty'} = + time2str('%m/%d/%Y', $return{'last_invoice_date'} ); } + $return{countrydefault} = scalar($conf->config('countrydefault')); + $return{small_custview} = small_custview( $cust_main, - scalar($conf->config('countrydefault')), + $return{countrydefault}, ( $session->{'pkgnum'} ? 1 : 0 ), #nobalance ); $return{name} = $cust_main->first. ' '. $cust_main->get('last'); - $return{ship_name} = $cust_main->ship_first. ' '. $cust_main->get('ship_last'); + + $return{has_ship_address} = $cust_main->has_ship_address; + $return{status} = $cust_main->status; + $return{statuscolor} = $cust_main->statuscolor; for (@cust_main_editable_fields) { $return{$_} = $cust_main->get($_); } + for (@location_editable_fields) { + $return{$_} = $cust_main->bill_location->get($_); + $return{'ship_'.$_} = $cust_main->ship_location->get($_); + } + $return{has_ship_address} = $cust_main->has_ship_address; + # compatibility: some places in selfservice use this to determine + # if there's a ship address + if ( $return{has_ship_address} ) { + $return{ship_last} = $cust_main->last; + $return{ship_first} = $cust_main->first; + } + if ( $cust_main->payby =~ /^(CARD|DCRD)$/ ) { $return{payinfo} = $cust_main->paymask; @return{'month', 'year'} = $cust_main->paydate_monthyear; @@ -444,7 +475,7 @@ sub customer_info { if (scalar($conf->config('support_packages'))) { my @support_services = (); foreach ($cust_main->support_services) { - my $seconds = $_->svc_x->seconds; + my $seconds = $_->svc_x->seconds || 0; my $time_remaining = (($seconds < 0) ? '-' : '' ). int(abs($seconds)/3600)."h". sprintf("%02d",(abs($seconds)%3600)/60)."m"; @@ -485,8 +516,8 @@ sub customer_info { } - return { 'error' => '', - 'custnum' => $custnum, + return { 'error' => '', + 'custnum' => $custnum, %return, }; @@ -509,14 +540,17 @@ sub customer_info_short { my $cust_main = qsearchs('cust_main', $search ) or return { 'error' => "unknown custnum $custnum" }; + $return{display_custnum} = $cust_main->display_custnum; + + $return{countrydefault} = scalar($conf->config('countrydefault')); + $return{small_custview} = small_custview( $cust_main, - scalar($conf->config('countrydefault')), + $return{countrydefault}, 1, ##nobalance ); $return{name} = $cust_main->first. ' '. $cust_main->get('last'); - $return{ship_name} = $cust_main->ship_first. ' '. $cust_main->get('ship_last'); $return{payby} = $cust_main->payby; @@ -524,7 +558,12 @@ sub customer_info_short { for (@cust_main_editable_fields) { $return{$_} = $cust_main->get($_); } - + #maybe a little more expensive, but it should be cached by now + for (@location_editable_fields) { + $return{$_} = $cust_main->bill_location->get($_); + $return{'ship_'.$_} = $cust_main->ship_location->get($_); + } + if ( $cust_main->payby =~ /^(CARD|DCRD)$/ ) { $return{payinfo} = $cust_main->paymask; @return{'month', 'year'} = $cust_main->paydate_monthyear; @@ -558,6 +597,103 @@ sub customer_info_short { }; } +sub billing_history { + my $p = shift; + + my($context, $session, $custnum) = _custoragent_session_custnum($p); + return { 'error' => $session } if $context eq 'error'; + + return { 'error' => 'No customer' } unless $custnum; + + 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 %return = (); + + if ( $session->{'pkgnum'} ) { + #$return{balance} = $cust_main->balance_pkgnum( $session->{'pkgnum'} ); + #next_bill_date from cust_pkg? + return { 'error' => 'No history for package' }; + } + + $return{balance} = $cust_main->balance; + $return{next_bill_date} = $cust_main->next_bill_date; + $return{next_bill_date_pretty} = + time2str('%m/%d/%Y', $return{next_bill_date} ); + + my @history = (); + + my $conf = new FS::Conf; + + if ( $conf->exists('selfservice-billing_history-line_items') ) { + + foreach my $cust_bill ( $cust_main->cust_bill ) { + + push @history, { + 'type' => 'Line item', + 'description' => $_->desc. ( $_->sdate && $_->edate + ? ' '. time2str('%d-%b-%Y', $_->sdate). + ' To '. time2str('%d-%b-%Y', $_->edate) + : '' + ), + 'amount' => sprintf('%.2f', $_->setup + $_->recur ), + 'date' => $cust_bill->_date, + 'date_pretty' => time2str('%m/%d/%Y', $cust_bill->_date ), + } + foreach $cust_bill->cust_bill_pkg; + + } + + } else { + + push @history, { + 'type' => 'Invoice', + 'description' => 'Invoice #'. $_->display_invnum, + 'amount' => sprintf('%.2f', $_->charged ), + 'date' => $_->_date, + 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + } + foreach $cust_main->cust_bill; + + } + + push @history, { + 'type' => 'Payment', + 'description' => 'Payment', #XXX type + 'amount' => sprintf('%.2f', 0 - $_->paid ), + 'date' => $_->_date, + 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + } + foreach $cust_main->cust_pay; + + push @history, { + 'type' => 'Credit', + 'description' => 'Credit', #more info? + 'amount' => sprintf('%.2f', 0 -$_->amount ), + 'date' => $_->_date, + 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + } + foreach $cust_main->cust_credit; + + push @history, { + 'type' => 'Refund', + 'description' => 'Refund', #more info? type, like payment? + 'amount' => $_->refund, + 'date' => $_->_date, + 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + } + foreach $cust_main->cust_refund; + + @history = sort { $b->{'date'} <=> $a->{'date'} } @history; + + $return{'history'} = \@history; + + return \%return; + +} + sub edit_info { my $p = shift; my $session = _cache->get($p->{'session_id'}) @@ -570,9 +706,32 @@ sub edit_info { 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; + if ( exists($p->{address1}) ) { + my $bill_location = FS::cust_location->new({ + map { $_ => $p->{$_} } @location_editable_fields + }); + # if this is unchanged from before, cust_main::replace will ignore it + $new->set('bill_location' => $bill_location); + } + + if ( exists($p->{ship_address1}) ) { + my $ship_location = FS::cust_location->new({ + map { $_ => $p->{"ship_$_"} } @location_editable_fields + }); + if ( !grep { length($p->{"ship_$_"}) } @location_editable_fields ) { + # Selfservice unfortunately tries to indicate "same as billing + # address" by sending all fields empty. Did this ever work? + $ship_location = $cust_main->bill_location; + } + $new->set('ship_location' => $ship_location); + } + # but if it hasn't been passed in at all, leave ship_location alone-- + # DON'T change it to match bill_location. + my $payby = ''; if (exists($p->{'payby'})) { $p->{'payby'} =~ /^([A-Z]{4})$/ @@ -710,7 +869,8 @@ sub payment_info { $return{payname} = $cust_main->payname || ( $cust_main->first. ' '. $cust_main->get('last') ); - $return{$_} = $cust_main->get($_) for qw(address1 address2 city state zip); + $return{$_} = $cust_main->bill_location->get($_) + for qw(address1 address2 city state zip); $return{payby} = $cust_main->payby; $return{stateid_state} = $cust_main->stateid_state; @@ -729,7 +889,7 @@ sub payment_info { $return{payinfo2} = $payinfo2; $return{paytype} = $cust_main->paytype; $return{paystate} = $cust_main->paystate; - + $return{payname} = $cust_main->payname; # override 'first/last name' default from above, if any. Is instution-name here. (#15819) } if ( $conf->config('prepayment_discounts-credit_type') ) { @@ -766,6 +926,21 @@ sub validate_payment { my $amount = $1; return { error => 'Amount must be greater than 0' } unless $amount > 0; + #false laziness w/tr-amount_fee.html, but we don't want selfservice users + #changing the hidden form values + my $conf = new FS::Conf; + my $fee_display = $conf->config('selfservice_process-display') || 'add'; + my $fee_pkgpart = $conf->config('selfservice_process-pkgpart', $cust_main->agentnum); + my $fee_skip_first = $conf->exists('selfservice_process-skip_first'); + if ( $fee_display eq 'add' + and $fee_pkgpart + and ! $fee_skip_first || scalar($cust_main->cust_pay) + ) + { + my $fee_pkg = qsearchs('part_pkg', { pkgpart=>$fee_pkgpart } ); + $amount = sprintf('%.2f', $amount + $fee_pkg->option('setup_fee') ); + } + $p->{'discount_term'} =~ /^\s*(\d*)\s*$/ or return { 'error' => gettext('illegal_discount_term'). ': '. $p->{'discount_term'} }; my $discount_term = $1; @@ -852,6 +1027,8 @@ sub validate_payment { 'card_type' => $card_type, 'paydate' => $p->{'year'}. '-'. $p->{'month'}. '-01', 'paydate_pretty' => $p->{'month'}. ' / '. $p->{'year'}, + 'month' => $p->{'month'}, + 'year' => $p->{'year'}, 'payname' => $payname, 'paybatch' => $paybatch, #this doesn't actually do anything 'paycvv' => $paycvv, @@ -876,7 +1053,9 @@ sub store_payment { _cache->set( 'payment_'.$p->{'session_id'}, $validate, $timeout ); +{ map { $_=>$validate->{$_} } - qw( card_type paymask payname paydate_pretty amount ) + qw( card_type paymask payname paydate_pretty month year amount + address1 address2 city state zip country + ) }; } @@ -921,15 +1100,42 @@ sub do_process_payment { ); return { 'error' => $error } if $error; + #no error, so order the fee package if applicable... + my $conf = new FS::Conf; + my $fee_pkgpart = $conf->config('selfservice_process-pkgpart', $cust_main->agentnum); + my $fee_skip_first = $conf->exists('selfservice_process-skip_first'); + + if ( $fee_pkgpart and ! $fee_skip_first || scalar($cust_main->cust_pay) ) { + + my $cust_pkg = new FS::cust_pkg { 'pkgpart' => $fee_pkgpart }; + + $error = $cust_main->order_pkg( 'cust_pkg' => $cust_pkg ); + return { 'error' => "payment processed successfully, but error ordering fee: $error" } + if $error; + + #and generate an invoice for it now too + $error = $cust_main->bill( 'pkg_list' => [ $cust_pkg ] ); + return { 'error' => "payment processed and fee ordered sucessfully, but error billing fee: $error" } + if $error; + + } + $cust_main->apply_payments; if ( $validate->{'save'} ) { my $new = new FS::cust_main { $cust_main->hash }; if ($payby eq 'CARD' || $payby eq 'DCRD') { $new->set( $_ => $validate->{$_} ) - foreach qw( payname paystart_month paystart_year payissue payip - address1 address2 city state zip country ); + foreach qw( payname paystart_month paystart_year payissue payip ); $new->set( 'payby' => $validate->{'auto'} ? 'CARD' : 'DCRD' ); + + my $bill_location = FS::cust_location->new({ + map { $_ => $validate->{$_} } + qw(address1 address2 city state country zip) + }); # county? + $new->set('bill_location' => $bill_location); + # but don't allow the service address to change this way. + } elsif ($payby eq 'CHEK' || $payby eq 'DCHK') { $new->set( $_ => $validate->{$_} ) foreach qw( payname payip paytype paystate @@ -1375,6 +1581,7 @@ sub list_pkgs { my $primary_cust_svc = $_->primary_cust_svc; +{ $_->hash, $_->part_pkg->hash, + pkg_label => $_->pkg_label, status => $_->status, part_svc => [ map $_->hashref, $_->available_part_svc ], @@ -1467,12 +1674,14 @@ sub list_svcs { my $part_pkg = $cust_pkg->part_pkg; my %hash = ( - 'svcnum' => $_->svcnum, - 'svcdb' => $svcdb, - 'label' => $label, - 'value' => $value, - 'pkg_status' => $cust_pkg->status, - 'readonly' => ( $part_svc->selfservice_access eq 'readonly' ), + 'svcnum' => $_->svcnum, + 'display_svcnum' => $_->display_svcnum, + 'svcdb' => $svcdb, + 'label' => $label, + 'value' => $value, + 'pkg_label' => $cust_pkg->pkg_label, + 'pkg_status' => $cust_pkg->status, + 'readonly' => ($part_svc->selfservice_access eq 'readonly'), ); if ( $svcdb eq 'svc_acct' ) { @@ -1770,6 +1979,8 @@ sub list_support_usage { sub _list_cdr_usage { # XXX CDR type support... + # XXX any way to do a paged search on this? + # we have to return the results all at once... my($svc_phone, $begin, $end, %opt) = @_; map [ $_->downstream_csv(%opt, 'keeparray' => 1) ], $svc_phone->get_cdrs( 'begin'=>$begin, 'end'=>$end, ); diff --git a/FS/FS/ClientAPI/SGNG.pm b/FS/FS/ClientAPI/SGNG.pm deleted file mode 100644 index 7f784dcd0..000000000 --- a/FS/FS/ClientAPI/SGNG.pm +++ /dev/null @@ -1,277 +0,0 @@ -#this stuff is SG-specific (i.e. multi-customer company username hack) - -package FS::ClientAPI::SGNG; - -use strict; -use vars qw( $cache $DEBUG ); -use Time::Local qw(timelocal timelocal_nocheck); -use Business::CreditCard; -use FS::Record qw( qsearch qsearchs ); -use FS::Conf; -use FS::cust_main; -use FS::cust_pkg; -use FS::ClientAPI::MyAccount; #qw( payment_info process_payment ) - -$DEBUG = 0; - -sub _cache { - $cache ||= new FS::ClientAPI_SessionCache( { - 'namespace' => 'FS::ClientAPI::MyAccount', #yes, share session_ids - } ); -} - -sub ping { - #my $p = shift; - - return { 'pong' => '1' }; - -} - -#this might almost be general-purpose -sub decompify_pkgs { - 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" }; - - return { 'error' => 'Not a complimentary customer' } - unless $cust_main->payby eq 'COMP'; - - my $paydate = - $cust_main->paydate =~ /^\S+$/ ? $cust_main->paydate : '2037-12-31'; - - my ($payyear,$paymonth,$payday) = split (/-/,$paydate); - - my $date = timelocal(0,0,0,$payday,--$paymonth,$payyear); - - foreach my $cust_pkg ( - qsearch({ 'table' => 'cust_pkg', - 'hashref' => { 'custnum' => $custnum, - 'bill' => '', - }, - 'extra_sql' => ' AND '. FS::cust_pkg->active_sql, - }) - ) { - $cust_pkg->set('bill', $date); - my $error = $cust_pkg->replace; - return { 'error' => $error } if $error; - } - - return { 'error' => '' }; - -} - -#find old payment info -# (should work just like MyAccount::payment_info, except returns previous info -# too) -# definitly sg-specific, no one else stores past customer records like this -sub previous_payment_info { - my $p = shift; - - my $session = _cache->get($p->{'session_id'}) - or return { 'error' => "Can't resume session" }; #better error message - - my $payment_info = FS::ClientAPI::MyAccount::payment_info($p); - - my $custnum = $session->{'custnum'}; - - my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ) - or return { 'error' => "unknown custnum $custnum" }; - - #? - return $payment_info if $cust_main->payby =~ /^(CARD|DCRD|CHEK|DCHK)$/; - - foreach my $prev_cust_main ( - reverse _previous_cust_main( 'custnum' => $custnum, - 'username' => $cust_main->company, - 'with_payments' => 1, - ) - ) { - - next unless $prev_cust_main->payby =~ /^(CARD|DCRD|CHEK|DCHK)$/; - - if ( $prev_cust_main->payby =~ /^(CARD|DCRD)$/ ) { - - #card expired? - my ($payyear,$paymonth,$payday) = split (/-/, $cust_main->paydate); - - my $expdate = timelocal_nocheck(0,0,0,1,$paymonth,$payyear); - - next if $expdate < time; - - } elsif ( $prev_cust_main->payby =~ /^(CHEK|DCHK)$/ ) { - - #any check? or just skip these in favor of cards? - - } - - return { %$payment_info, - #$prev_cust_main->payment_info - _cust_main_payment_info( $prev_cust_main ), - 'previous_custnum' => $prev_cust_main->custnum, - }; - - } - - #still nothing? return an error? - return $payment_info; - -} - -#this is really FS::cust_main::payment_info, but here for now -sub _cust_main_payment_info { - my $self = shift; - - my %return = (); - - $return{balance} = $self->balance; - - $return{payname} = $self->payname - || ( $self->first. ' '. $self->get('last') ); - - $return{$_} = $self->get($_) for qw(address1 address2 city state zip); - - $return{payby} = $self->payby; - $return{stateid_state} = $self->stateid_state; - - if ( $self->payby =~ /^(CARD|DCRD)$/ ) { - $return{card_type} = cardtype($self->payinfo); - $return{payinfo} = $self->paymask; - - @return{'month', 'year'} = $self->paydate_monthyear; - - } - - if ( $self->payby =~ /^(CHEK|DCHK)$/ ) { - my ($payinfo1, $payinfo2) = split '@', $self->paymask; - $return{payinfo1} = $payinfo1; - $return{payinfo2} = $payinfo2; - $return{paytype} = $self->paytype; - $return{paystate} = $self->paystate; - - } - - #doubleclick protection - my $_date = time; - $return{paybatch} = "webui-MyAccount-$_date-$$-". rand() * 2**32; - - %return; - -} - -#find old cust_main records (with payments) -sub _previous_cust_main { - - #safety check! return nothing unless we're enabled explicitly - return () unless FS::Conf->new->exists('sg-multicustomer_hack'); - - my %opt = @_; - my $custnum = $opt{'custnum'}; - my $username = $opt{'username'}; - - my %search = (); - if ( $opt{'with_payments'} ) { - $search{'extra_sql'} = - ' AND 0 < ( SELECT COUNT(*) FROM cust_pay - WHERE cust_pay.custnum = cust_main.custnum - ) - '; - } - - qsearch( { - 'table' => 'cust_main', - 'hashref' => { 'company' => { op => 'ILIKE', value => $opt{'username'} }, - 'custnum' => { op => '!=', value => $opt{'custnum'} }, - }, - 'order_by' => 'ORDER BY custnum', - %search, - } ); - -} - -#since we could be passing masked old CC data, need to look that up and -#replace it (like regular process_payment does) w/info from old customer record -sub previous_process_payment { - my $p = shift; - - return FS::ClientAPI::MyAccount::process_payment($p) - unless $p->{'previous_custnum'} - && ( ( $p->{'payby'} =~ /^(CARD|DCRD)$/ && $p->{'payinfo'} =~ /x/i ) - || ( $p->{'payby'} =~ /^(CHEK|DCHK)$/ && $p->{'payinfo1'} =~ /x/i ) - ); - - 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" }; - - #make sure this is really a previous custnum of this customer - my @previous_cust_main = - grep { $_->custnum == $p->{'previous_custnum'} } - _previous_cust_main( 'custnum' => $custnum, - 'username' => $cust_main->company, - 'with_payments' => 1, - ); - - my $previous_cust_main = $previous_cust_main[0]; - - #causes problems with old data w/old masking method - #if $previous_cust_main->paymask eq $payinfo; - - if ( $p->{'payby'} =~ /^(CHEK|DCHK)$/ && $p->{'payinfo1'} =~ /x/i ) { - ( $p->{'payinfo1'}, $p->{'payinfo2'} ) = - split('@', $previous_cust_main->payinfo); - } elsif ( $p->{'payby'} =~ /^(CARD|DCRD)$/ && $p->{'payinfo'} =~ /x/i ) { - $p->{'payinfo'} = $previous_cust_main->payinfo; - } - - FS::ClientAPI::MyAccount::process_payment($p); - -} - -sub previous_payment_info_renew_info { - my $p = shift; - my $renew_info = renew_info($p); - my $payment_info = previous_payment_info($p); - return { %$renew_info, - %$payment_info, - }; -} - -sub previous_process_payment_order_pkg { - my $p = shift; - - my $hr = previous_process_payment($p); - return $hr if $hr->{'error'}; - - order_pkg($p); -} - -sub previous_process_payment_change_pkg { - my $p = shift; - - my $hr = previous_process_payment($p); - return $hr if $hr->{'error'}; - - change_pkg($p); -} - -sub previous_process_payment_order_renew { - my $p = shift; - - my $hr = previous_process_payment($p); - return $hr if $hr->{'error'}; - - order_renew($p); -} - -1; - diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm index f17752a45..b7dcdbb64 100644 --- a/FS/FS/ClientAPI/Signup.pm +++ b/FS/FS/ClientAPI/Signup.pm @@ -405,8 +405,8 @@ sub signup_info { && $agent->agent_cust_main ) { my $cust_main = $agent->agent_cust_main; - my $prefix = length($cust_main->ship_last) ? 'ship_' : ''; - $signup_info_cache_agent->{"ship_$_"} = $cust_main->get("$prefix$_") + my $location = $cust_main->ship_location; + $signup_info_cache_agent->{"ship_$_"} = $location->get($_) foreach qw( address1 city county state zip country ); } @@ -509,6 +509,13 @@ sub new_customer { || $conf->config('signup_server-default_agentnum'); } + my ($bill_hash, $ship_hash); + foreach my $f (FS::cust_main->location_fields) { + # avoid having to change this in front-end code + $bill_hash->{$f} = $packet->{"bill_$f"} || $packet->{$f}; + $ship_hash->{$f} = $packet->{"ship_$f"}; + } + #shares some stuff with htdocs/edit/process/cust_main.cgi... take any # common that are still here and library them. my $template_custnum = $conf->config('signup_server-prepaid-template-custnum'); @@ -517,6 +524,7 @@ sub new_customer { my $template_cust = qsearchs('cust_main', { 'custnum' => $template_custnum } ); return { 'error' => 'Configuration error' } unless $template_cust; + #XXX Copy template customer's locations $cust_main = new FS::cust_main ( { 'agentnum' => $agentnum, 'refnum' => $packet->{refnum} @@ -556,41 +564,48 @@ sub new_customer { || $conf->config('signup_server-default_refnum'), map { $_ => $packet->{$_} } qw( - - last first ss company address1 address2 - city county state zip country + last first ss company 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 override_ban_warn - referral_custnum comments - ) + ), } ); } + my $bill_location = FS::cust_location->new($bill_hash); + my $ship_location; my $agent = qsearchs('agent', { 'agentnum' => $agentnum } ); if ( $conf->exists('agent-ship_address', $agentnum) && $agent->agent_custnum ) { my $agent_cust_main = $agent->agent_cust_main; my $prefix = length($agent_cust_main->ship_last) ? 'ship_' : ''; - $cust_main->set("ship_$_", $agent_cust_main->get("$prefix$_") ) - foreach qw( address1 city county state zip country ); - - $cust_main->set("ship_$_", $cust_main->get($_)) - foreach qw( last first ); + $ship_location = FS::cust_location->new({ + $agent_cust_main->ship_location->location_hash + }); } + # we don't have an equivalent of the "same" checkbox in selfservice + # so is there a ship address, and if so, is it different from the billing + # address? + elsif ( length($ship_hash->{address1}) > 0 and + grep { $bill_hash->{$_} ne $ship_hash->{$_} } keys(%$ship_hash) + ) { + + $ship_location = FS::cust_location->new( $ship_hash ); + + } + else { + $ship_location = $bill_location; + } + $cust_main->set('bill_location' => $bill_location); + $cust_main->set('ship_location' => $ship_location); return { 'error' => "Illegal payment type" } unless grep { $_ eq $packet->{'payby'} } diff --git a/FS/FS/ClientAPI_XMLRPC.pm b/FS/FS/ClientAPI_XMLRPC.pm index 98e1910c3..7dd20c652 100644 --- a/FS/FS/ClientAPI_XMLRPC.pm +++ b/FS/FS/ClientAPI_XMLRPC.pm @@ -104,6 +104,7 @@ sub ss2clientapi { 'switch_acct' => 'MyAccount/switch_acct', 'customer_info' => 'MyAccount/customer_info', 'customer_info_short' => 'MyAccount/customer_info_short', + 'billing_history' => 'MyAccount/billing_history', 'edit_info' => 'MyAccount/edit_info', #add to ss cgi! 'invoice' => 'MyAccount/invoice', 'invoice_pdf' => 'MyAccount/invoice_pdf', @@ -176,22 +177,6 @@ sub ss2clientapi { 'call_time' => 'PrepaidPhone/call_time', 'call_time_nanpa' => 'PrepaidPhone/call_time_nanpa', 'phonenum_balance' => 'PrepaidPhone/phonenum_balance', - #izoom - #'bulk_processrow' => 'Bulk/processrow', - #conflicts w/Agentone# 'check_username' => 'Bulk/check_username', - #sg - 'ping' => 'SGNG/ping', - 'decompify_pkgs' => 'SGNG/decompify_pkgs', - 'previous_payment_info' => 'SGNG/previous_payment_info', - 'previous_payment_info_renew_info' - => 'SGNG/previous_payment_info_renew_info', - 'previous_process_payment' => 'SGNG/previous_process_payment', - 'previous_process_payment_order_pkg' - => 'SGNG/previous_process_payment_order_pkg', - 'previous_process_payment_change_pkg' - => 'SGNG/previous_process_payment_change_pkg', - 'previous_process_payment_order_renew' - => 'SGNG/previous_process_payment_order_renew', }; } diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 63fc8869c..43521ce19 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -13,6 +13,7 @@ use FS::payby; use FS::conf; use FS::Record qw(qsearch qsearchs); use FS::UID qw(dbh datasrc use_confcompat); +use FS::Misc::Invoicing qw( spool_formats ); use FS::Misc::Geo; $base_dir = '%%%FREESIDE_CONF%%%'; @@ -183,7 +184,7 @@ sub exists { my $self = shift; return $self->_usecompat('exists', @_) if use_confcompat; - my($name, $agentnum)=@_; + #my($name, $agentnum)=@_; carp "FS::Conf->exists(". join(', ', @_). ") called" if $DEBUG > 1; @@ -191,6 +192,54 @@ sub exists { defined($self->_config(@_)); } +#maybe this should just be the new exists instead of getting a method of its +#own, but i wanted to avoid possible fallout + +sub config_bool { + my $self = shift; + return $self->_usecompat('exists', @_) if use_confcompat; + + my($name,$agentnum,$agentonly) = @_; + + carp "FS::Conf->config_bool(". join(', ', @_). ") called" + if $DEBUG > 1; + + #defined($self->_config(@_)); + + #false laziness w/_config + my $hashref = { 'name' => $name }; + local $FS::Record::conf = undef; # XXX evil hack prevents recursion + my $cv; + my @a = ( + ($agentnum || ()), + ($agentonly && $agentnum ? () : '') + ); + my @l = ( + ($self->{locale} || ()), + ($self->{localeonly} && $self->{locale} ? () : '') + ); + # try with the agentnum first, then fall back to no agentnum if allowed + foreach my $a (@a) { + $hashref->{agentnum} = $a; + foreach my $l (@l) { + $hashref->{locale} = $l; + $cv = FS::Record::qsearchs('conf', $hashref); + if ( $cv ) { + if ( $cv->value eq '0' + && ($hashref->{agentnum} || $hashref->{locale} ) + ) + { + return 0; #an explicit false override, don't continue looking + } else { + return 1; + } + } + } + } + return 0; + +} + =item config_orbase KEY SUFFIX Returns the configuration value or values (depending on context) for @@ -269,8 +318,13 @@ sub touch { return $self->_usecompat('touch', @_) if use_confcompat; my($name, $agentnum) = @_; - unless ( $self->exists($name, $agentnum) ) { - $self->set($name, '', $agentnum); + #unless ( $self->exists($name, $agentnum) ) { + unless ( $self->config_bool($name, $agentnum) ) { + if ( $agentnum && $self->exists($name) && $self->config($name,$agentnum) eq '0' ) { + $self->delete($name, $agentnum); + } else { + $self->set($name, '', $agentnum); + } } } @@ -357,6 +411,31 @@ sub delete { } } +#maybe this should just be the new delete instead of getting a method of its +#own, but i wanted to avoid possible fallout + +sub delete_bool { + my $self = shift; + return $self->_usecompat('delete', @_) if use_confcompat; + + my($name, $agentnum) = @_; + + warn "[FS::Conf] DELETE $name\n" if $DEBUG; + + my $cv = FS::Record::qsearchs('conf', { name => $name, + agentnum => $agentnum, + locale => $self->{locale}, + }); + + if ( $cv ) { + my $error = $cv->delete; + die $error if $error; + } elsif ( $agentnum ) { + $self->set($name, '0', $agentnum); + } + +} + =item import_config_item CONFITEM DIR Imports the item specified by the CONFITEM (see L) into @@ -611,12 +690,6 @@ my %msg_template_options = ( 'per_agent' => 1, ); -my $_gateway_name = sub { - my $g = shift; - return '' if !$g; - ($g->gateway_username . '@' . $g->gateway_module); -}; - my %payment_gateway_options = ( 'type' => 'select-sub', 'options_sub' => sub { @@ -624,11 +697,24 @@ my %payment_gateway_options = ( 'table' => 'payment_gateway', 'hashref' => { 'disabled' => '' }, }); - map { $_->gatewaynum, $_gateway_name->($_) } @gateways; + map { $_->gatewaynum, $_->label } @gateways; }, 'option_sub' => sub { my $gateway = FS::payment_gateway->by_key(shift); - $_gateway_name->($gateway); + $gateway ? $gateway->label : '' + }, +); + +my %batch_gateway_options = ( + %payment_gateway_options, + 'options_sub' => sub { + my @gateways = qsearch('payment_gateway', + { + 'disabled' => '', + 'gateway_namespace' => 'Business::BatchPayment', + } + ); + map { $_->gatewaynum, $_->label } @gateways; }, ); @@ -752,6 +838,13 @@ sub reason_type_options { 'type' => 'checkbox', }, + { + 'key' => 'cust_main-select-prorate_day', + 'section' => 'billing', + 'description' => 'When used with prorate or anniversary packages, allows the selection of the prorate day of month, on a per-customer basis', + 'type' => 'checkbox', + }, + { 'key' => 'encryption', 'section' => 'billing', @@ -883,6 +976,13 @@ sub reason_type_options { 'select_enum' => [ '', qw( USD AUD CAD DKK EUR GBP ILS JPY NZD ) ], }, + { + 'key' => 'business-batchpayment-test_transaction', + 'section' => 'billing', + 'description' => 'Turns on the Business::BatchPayment test_mode flag. Note that not all gateway modules support this flag; if yours does not, using the batch gateway will fail.', + 'type' => 'checkbox', + }, + { 'key' => 'countrydefault', 'section' => 'UI', @@ -1104,7 +1204,15 @@ sub reason_type_options { { 'key' => 'invoice_html', 'section' => 'invoicing', - 'description' => 'Optional HTML template for invoices. See the billing documentation for details.', + 'description' => 'HTML template for invoices. See the billing documentation for details.', + + 'type' => 'textarea', + }, + + { + 'key' => 'quotation_html', + 'section' => '', + 'description' => 'HTML template for quotations.', 'type' => 'textarea', }, @@ -1151,6 +1259,13 @@ sub reason_type_options { 'type' => 'textarea', }, + { + 'key' => 'quotation_latex', + 'section' => '', + 'description' => 'LaTeX template for typeset PostScript quotations.', + 'type' => 'textarea', + }, + { 'key' => 'invoice_latextopmargin', 'section' => 'invoicing', @@ -1209,6 +1324,15 @@ and customer address. Include units.', 'per_locale' => 1, }, + { + 'key' => 'quotation_latexnotes', + 'section' => '', + 'description' => 'Notes section for LaTeX typeset PostScript quotations.', + 'type' => 'textarea', + 'per_agent' => 1, + 'per_locale' => 1, + }, + { 'key' => 'invoice_latexfooter', 'section' => 'invoicing', @@ -1239,7 +1363,7 @@ and customer address. Include units.', { 'key' => 'invoice_latexextracouponspace', 'section' => 'invoicing', - 'description' => 'Optional LaTeX invoice textheight space to reserve for a tear off coupon. Include units.', + 'description' => 'Optional LaTeX invoice textheight space to reserve for a tear off coupon. Include units. Default is 3.6cm', 'type' => 'text', 'per_agent' => 1, 'validate' => sub { shift =~ @@ -1420,6 +1544,7 @@ and customer address. Include units.', 'description' => 'Send payment receipts.', 'type' => 'checkbox', 'per_agent' => 1, + 'agent_bool' => 1, }, { @@ -1845,6 +1970,13 @@ and customer address. Include units.', 'type' => 'checkbox', }, + { + 'key' => 'unmask_ss', + 'section' => 'UI', + 'description' => "Don't mask social security numbers in the web interface.", + 'type' => 'checkbox', + }, + { 'key' => 'show_stateid', 'section' => 'UI', @@ -1852,6 +1984,14 @@ and customer address. Include units.', 'type' => 'checkbox', }, + { + 'key' => 'national_id-country', + 'section' => 'UI', + 'description' => 'Track a national identification number, for specific countries.', + 'type' => 'select', + 'select_enum' => [ '', 'MY' ], + }, + { 'key' => 'show_bankstate', 'section' => 'UI', @@ -2413,8 +2553,9 @@ and customer address. Include units.', { 'key' => 'manual_process-pkgpart', 'section' => 'billing', - 'description' => 'Package to add to each manual credit card and ACH payments entered from the backend. Enabling this option may be in violation of your merchant agreement(s), so please check them carefully before enabling this option.', + 'description' => 'Package to add to each manual credit card and ACH payment entered by employees from the backend. Enabling this option may be in violation of your merchant agreement(s), so please check it(/them) carefully before enabling this option.', 'type' => 'select-part_pkg', + 'per_agent' => 1, }, { @@ -2435,6 +2576,57 @@ and customer address. Include units.', 'type' => 'checkbox', }, + { + 'key' => 'selfservice_process-pkgpart', + 'section' => 'billing', + 'description' => 'Package to add to each manual credit card and ACH payment entered by the customer themselves in the self-service interface. Enabling this option may be in violation of your merchant agreement(s), so please check it(/them) carefully before enabling this option.', + 'type' => 'select-part_pkg', + 'per_agent' => 1, + }, + + { + 'key' => 'selfservice_process-display', + 'section' => 'billing', + 'description' => 'When using selfservice_process-pkgpart, add the fee to the amount entered (default), or subtract the fee from the amount entered.', + 'type' => 'select', + 'select_hash' => [ + 'add' => 'Add fee to amount entered', + 'subtract' => 'Subtract fee from amount entered', + ], + }, + + { + 'key' => 'selfservice_process-skip_first', + 'section' => 'billing', + 'description' => "When using selfservice_process-pkgpart, omit the fee if it is the customer's first payment.", + 'type' => 'checkbox', + }, + +# { +# 'key' => 'auto_process-pkgpart', +# 'section' => 'billing', +# 'description' => 'Package to add to each automatic credit card and ACH payment processed by billing events. Enabling this option may be in violation of your merchant agreement(s), so please check them carefully before enabling this option.', +# 'type' => 'select-part_pkg', +# }, +# +## { +## 'key' => 'auto_process-display', +## 'section' => 'billing', +## 'description' => 'When using auto_process-pkgpart, add the fee to the amount entered (default), or subtract the fee from the amount entered.', +## 'type' => 'select', +## 'select_hash' => [ +## 'add' => 'Add fee to amount entered', +## 'subtract' => 'Subtract fee from amount entered', +## ], +## }, +# +# { +# 'key' => 'auto_process-skip_first', +# 'section' => 'billing', +# 'description' => "When using auto_process-pkgpart, omit the fee if it is the customer's first payment.", +# 'type' => 'checkbox', +# }, + { 'key' => 'allow_negative_charges', 'section' => 'billing', @@ -2955,7 +3147,7 @@ and customer address. Include units.', 'section' => 'invoicing', 'description' => 'Enable FTP of raw invoice data - format.', 'type' => 'select', - 'select_enum' => [ '', 'default', 'oneline', 'billco', ], + 'options' => [ spool_formats() ], }, { @@ -2991,7 +3183,7 @@ and customer address. Include units.', 'section' => 'invoicing', 'description' => 'Enable spooling of raw invoice data - format.', 'type' => 'select', - 'select_enum' => [ '', 'default', 'oneline', 'billco', ], + 'options' => [ spool_formats() ], }, { @@ -3001,6 +3193,32 @@ and customer address. Include units.', 'type' => 'checkbox', }, + { + 'key' => 'bridgestone-batch_counter', + 'section' => '', + 'description' => 'Batch counter for spool files. Increments every time a spool file is uploaded.', + 'type' => 'text', + 'per_agent' => 1, + }, + + { + 'key' => 'bridgestone-prefix', + 'section' => '', + 'description' => 'Agent identifier for uploading to BABT printing service.', + 'type' => 'text', + 'per_agent' => 1, + }, + + { + 'key' => 'bridgestone-confirm_template', + 'section' => '', + 'description' => 'Confirmation email template for uploading to BABT service. Text::Template format, with variables "$zipfile" (name of the zipped file), "$seq" (sequence number), "$prefix" (user ID string), and "$rows" (number of records in the file). Should include Subject: and To: headers, separated from the rest of the message by a blank line.', + # this could use a true message template, but it's hard to see how that + # would make the world a better place + 'type' => 'textarea', + 'per_agent' => 1, + }, + { 'key' => 'svc_acct-usage_suspend', 'section' => 'billing', @@ -3051,6 +3269,16 @@ and customer address. Include units.', 'select_hash' => [ FS::ConfDefaults->cust_fields_avail() ], }, + { + 'key' => 'cust_location-label_prefix', + 'section' => 'UI', + 'description' => 'Optional "site ID" to show in the location label', + 'type' => 'select', + 'select_hash' => [ '' => '', + 'CoStAg' => 'CoStAgXXXXX (country, state, agent name, locationnum)', + ], + }, + { 'key' => 'cust_pkg-display_times', 'section' => 'UI', @@ -3075,7 +3303,7 @@ and customer address. Include units.', { 'key' => 'cust_pkg-show_fcc_voice_grade_equivalent', 'section' => 'UI', - 'description' => "Show a field on package definitions for assigning a DS0 equivalency number suitable for use on FCC form 477.", + 'description' => "Show fields on package definitions for FCC Form 477 classification", 'type' => 'checkbox', }, @@ -3212,7 +3440,7 @@ and customer address. Include units.', { 'key' => 'invoice-unitprice', 'section' => 'invoicing', - 'description' => 'Enable unit pricing on invoices.', + 'description' => 'Enable unit pricing on invoices and quantities on packages.', 'type' => 'checkbox', }, @@ -3241,7 +3469,7 @@ and customer address. Include units.', { 'key' => 'postal_invoice-recurring_only', 'section' => 'billing', - 'description' => 'The postal invoice fee is omitted on invoices without reucrring charges when this is set.', + 'description' => 'The postal invoice fee is omitted on invoices without recurring charges when this is set.', 'type' => 'checkbox', }, @@ -3280,6 +3508,47 @@ and customer address. Include units.', ] }, + { 'key' => 'batch-gateway-CARD', + 'section' => 'billing', + 'description' => 'Business::BatchPayment gateway for credit card batches.', + %batch_gateway_options, + }, + + { 'key' => 'batch-gateway-CHEK', + 'section' => 'billing', + 'description' => 'Business::BatchPayment gateway for check batches.', + %batch_gateway_options, + }, + + { + 'key' => 'batch-reconsider', + 'section' => 'billing', + 'description' => 'Allow imported batch results to change the status of payments from previous imports. Enable this only if your gateway is known to send both positive and negative results for the same batch.', + 'type' => 'checkbox', + }, + + { + 'key' => 'batch-auto_resolve_days', + 'section' => 'billing', + 'description' => 'Automatically resolve payment batches this many days after they were first downloaded.', + 'type' => 'text', + }, + + { + 'key' => 'batch-auto_resolve_status', + 'section' => 'billing', + 'description' => 'When automatically resolving payment batches, take this action for payments of unknown status.', + 'type' => 'select', + 'select_enum' => [ 'approve', 'decline' ], + }, + + { + 'key' => 'batch-errors_to', + 'section' => 'billing', + 'description' => 'Email errors when processing batches to this address. If unspecified, batch processing will stop immediately on error.', + 'type' => 'text', + }, + #lists could be auto-generated from pay_batch info { 'key' => 'batch-fixed_format-CARD', @@ -3446,7 +3715,21 @@ and customer address. Include units.', { 'key' => 'cust_main-enable_birthdate', 'section' => 'UI', - 'descritpion' => 'Enable tracking of a birth date with each customer record', + 'description' => 'Enable tracking of a birth date with each customer record', + 'type' => 'checkbox', + }, + + { + 'key' => 'cust_main-enable_spouse_birthdate', + 'section' => 'UI', + 'description' => 'Enable tracking of a spouse birth date with each customer record', + 'type' => 'checkbox', + }, + + { + 'key' => 'cust_main-enable_anniversary_date', + 'section' => 'UI', + 'description' => 'Enable tracking of an anniversary date with each customer record', 'type' => 'checkbox', }, @@ -3726,7 +4009,7 @@ and customer address. Include units.', { 'key' => 'disable_previous_balance', 'section' => 'invoicing', - 'description' => 'Disable inclusion of previous balance, payment, and credit lines on invoices', + 'description' => 'Disable inclusion of previous balance, payment, and credit lines on invoices.', 'type' => 'checkbox', 'per_agent' => 1, }, @@ -3752,6 +4035,13 @@ and customer address. Include units.', 'type' => 'checkbox', }, + { + 'key' => 'previous_balance-show_on_statements', + 'section' => 'invoicing', + 'description' => 'Show previous invoices on statements, without itemized charges.', + 'type' => 'checkbox', + }, + { 'key' => 'balance_due_below_line', 'section' => 'invoicing', @@ -3983,6 +4273,13 @@ and customer address. Include units.', 'type' => 'text', }, + { + 'key' => 'unsuspend_email_admin', + 'section' => '', + 'description' => 'Destination admin email address to enable unsuspension notices', + 'type' => 'text', + }, + { 'key' => 'email_report-subject', 'section' => '', @@ -4032,6 +4329,22 @@ and customer address. Include units.', 'per_agent' => 1, }, + { + 'key' => 'selfservice-stripe1_bgcolor', + 'section' => 'self-service', + 'description' => 'HTML color for self-service interface lists (primary stripe), for example, #FFFFFF', + 'type' => 'text', + 'per_agent' => 1, + }, + + { + 'key' => 'selfservice-stripe2_bgcolor', + 'section' => 'self-service', + 'description' => 'HTML color for self-service interface lists (alternate stripe), for example, #DDDDDD', + 'type' => 'text', + 'per_agent' => 1, + }, + { 'key' => 'selfservice-text_color', 'section' => 'self-service', @@ -4392,34 +4705,6 @@ and customer address. Include units.', 'type' => 'checkbox', }, - { - 'key' => 'sg-multicustomer_hack', - 'section' => '', - 'description' => "Don't use this.", - 'type' => 'checkbox', - }, - - { - 'key' => 'sg-ping_username', - 'section' => '', - 'description' => "Don't use this.", - 'type' => 'text', - }, - - { - 'key' => 'sg-ping_password', - 'section' => '', - 'description' => "Don't use this.", - 'type' => 'text', - }, - - { - 'key' => 'sg-login_username', - 'section' => '', - 'description' => "Don't use this.", - 'type' => 'text', - }, - { 'key' => 'mc-outbound_packages', 'section' => '', @@ -4524,6 +4809,13 @@ and customer address. Include units.', 'type' => 'textarea', }, + { + 'key' => 'tax-cust_exempt-groups-require_individual_nums', + 'section' => '', + 'description' => 'When using tax-cust_exempt-groups, require an individual tax exemption number for each exemption from different taxes.', + 'type' => 'checkbox', + }, + { 'key' => 'cust_main-default_view', 'section' => 'UI', @@ -4572,14 +4864,14 @@ and customer address. Include units.', { 'key' => 'cust_main-edit_signupdate', 'section' => 'UI', - 'descritpion' => 'Enable manual editing of the signup date.', + 'description' => 'Enable manual editing of the signup date.', 'type' => 'checkbox', }, { 'key' => 'svc_acct-disable_access_number', 'section' => 'UI', - 'descritpion' => 'Disable access number selection.', + 'description' => 'Disable access number selection.', 'type' => 'checkbox', }, @@ -4681,6 +4973,13 @@ and customer address. Include units.', 'type' => 'textarea', }, + { + 'key' => 'cust_main-custom_content', + 'section' => 'UI', + 'description' => 'As an alternative to cust_main-custom_link (leave it blank), the contant to display on this customer page, one item per line. Available iems are: small_custview, birthdate, spouse_birthdate, svc_acct, svc_phone and svc_external.', + 'type' => 'textarea', + }, + { 'key' => 'cust_main-custom_title', 'section' => 'UI', @@ -4889,6 +5188,13 @@ and customer address. Include units.', }, 'option_sub' => sub { FS::Locales->description(shift) }, }, + + { + 'key' => 'cust_main-require_locale', + 'section' => 'UI', + 'description' => 'Require an explicit locale to be chosen for new customers.', + 'type' => 'checkbox', + }, { 'key' => 'translate-auto-insert', @@ -4941,6 +5247,44 @@ and customer address. Include units.', 'type' => 'select-agent', }, + { + 'key' => 'cust_class-tax_exempt', + 'section' => 'billing', + 'description' => 'Control the tax exemption flag per customer class rather than per indivual customer.', + 'type' => 'checkbox', + }, + + { + 'key' => 'selfservice-billing_history-line_items', + 'section' => 'self-service', + 'description' => 'Return line item billing detail for the self-service billing_history API call.', + 'type' => 'checkbox', + }, + + { + 'key' => 'logout-timeout', + 'section' => 'UI', + 'description' => 'If set, automatically log users out of the backoffice after this many minutes.', + 'type' => 'text', + }, + + { + 'key' => 'spreadsheet_format', + 'section' => 'UI', + 'description' => 'Default format for spreadsheet download.', + 'type' => 'select', + 'select_hash' => [ + 'XLS' => 'XLS (Excel 97/2000/XP)', + 'XLSX' => 'XLSX (Excel 2007+)', + ], + }, + + { + 'key' => 'agent-email_day', + 'section' => '', + 'description' => 'On this day of each month, agents with master customer records containing email addresses will be emailed a list of their customers and balances.', + 'type' => 'text', + }, { key => "apacheroot", section => "deprecated", description => "DEPRECATED", type => "text" }, { key => "apachemachine", section => "deprecated", description => "DEPRECATED", type => "text" }, diff --git a/FS/FS/Conf_compat17.pm b/FS/FS/Conf_compat17.pm index 6685935d3..2e4bb055f 100644 --- a/FS/FS/Conf_compat17.pm +++ b/FS/FS/Conf_compat17.pm @@ -2457,6 +2457,13 @@ httemplate/docs/config.html 'type' => 'text', }, + { + 'key' => 'unsuspend_email_admin', + 'section' => '', + 'description' => 'Destination admin email address to enable unsuspension notices', + 'type' => 'text', + }, + { 'key' => 'email_report-subject', 'section' => '', diff --git a/FS/FS/Cron/agent_email.pm b/FS/FS/Cron/agent_email.pm new file mode 100644 index 000000000..992aa35a2 --- /dev/null +++ b/FS/FS/Cron/agent_email.pm @@ -0,0 +1,79 @@ +package FS::Cron::agent_email; +use base qw( Exporter ); + +use strict; +use vars qw( @EXPORT_OK $DEBUG ); +use Date::Simple qw(today); +use URI::Escape; +use FS::Mason qw( mason_interps ); +use FS::Conf; +use FS::Misc qw(send_email); +use FS::Record qw(qsearch);# qsearchs); +use FS::agent; + +@EXPORT_OK = qw ( agent_email ); +$DEBUG = 0; + +sub agent_email { + my %opt = @_; + + my $conf = new FS::Conf; + + my $day = $conf->config('agent-email_day') or return; + return unless $day == today->day; + + if ( 1 ) { #XXX if ( %%%RT_ENABLED%%% ) { + require RT; + RT::LoadConfig(); + RT::Init(); + RT::ConnectToDatabase(); + } + + my $from = $conf->config('invoice_from'); + + my $outbuf = '';; + my( $fs_interp, $rt_interp ) = mason_interps('standalone', 'outbuf'=>\$outbuf); + + my $comp = '/search/cust_main.html'; + my %args = ( + 'cust_fields' => 'Cust# | Cust. Status | Customer | Current Balance', + '_type' => 'html-print', + ); + my $query = join('&', map "$_=".uri_escape($args{$_}), keys %args ); + + my $extra_sql = $opt{a} ? " AND agentnum IN ( $opt{a} ) " : ''; + + foreach my $agent ( qsearch({ + 'table' => 'agent', + 'hashref' => { + 'disabled' => '', + 'agent_custnum' => { op=>'!=', value=>'' }, + }, + 'extra_sql' => $extra_sql, + }) + ) + { + + $FS::Mason::Request::QUERY_STRING = $query. '&agentnum='. $agent->agentnum; + $fs_interp->exec($comp); + + my @email = $agent->agent_cust_main->invoicing_list or next; + + warn "emailing ". join(',',@email). " for agent ". $agent->agent. "\n" + if $DEBUG; + send_email( + 'from' => $from, + 'to' => \@email, + 'subject' => 'Customer report', + 'body' => $outbuf, + 'content-type' => 'text/html', + #'content-encoding' + ); + + $outbuf = ''; + + } + +} + +1; diff --git a/FS/FS/Cron/bill.pm b/FS/FS/Cron/bill.pm index 8d1223b80..a9df376dc 100644 --- a/FS/FS/Cron/bill.pm +++ b/FS/FS/Cron/bill.pm @@ -200,15 +200,15 @@ sub bill_where { # select * from cust_main where my $where_pkg = <<"END"; EXISTS( - SELECT 1 FROM cust_pkg + SELECT 1 FROM cust_pkg LEFT JOIN part_pkg USING ( pkgpart ) WHERE cust_main.custnum = cust_pkg.custnum AND ( cancel IS NULL OR cancel = 0 ) - AND ( ( ( setup IS NULL OR setup = 0 ) + AND ( ( ( cust_pkg.setup IS NULL OR cust_pkg.setup = 0 ) AND ( start_date IS NULL OR start_date = 0 OR ( start_date IS NOT NULL AND start_date <= $^T ) ) ) - OR bill IS NULL OR bill <= $billtime + OR ( freq != '0' AND ( bill IS NULL OR bill <= $billtime ) ) OR ( expire IS NOT NULL AND expire <= $^T ) OR ( adjourn IS NOT NULL AND adjourn <= $^T ) OR ( resume IS NOT NULL AND resume <= $^T ) diff --git a/FS/FS/Cron/check.pm b/FS/FS/Cron/check.pm index 9d3ffbdbd..75247fbaf 100644 --- a/FS/FS/Cron/check.pm +++ b/FS/FS/Cron/check.pm @@ -16,7 +16,6 @@ use FS::cust_pay_pending; @ISA = qw( Exporter ); @EXPORT_OK = qw( check_queued check_selfservice check_apache check_bop_failures - check_sg check_sg_login check_sgng alert error_msg ); @@ -48,79 +47,6 @@ sub check_selfservice { return 1; } -sub check_sg { - my $conf = new FS::Conf; - #different trigger if they ever stop using multicustomer_hack ? - return 1 unless $conf->exists('sg-multicustomer_hack'); - - my $ua = new LWP::UserAgent; - $ua->agent("FreesideCronCheck/0.1 " . $ua->agent); - - my $USER = $conf->config('sg-ping_username'); - my $PASS = $conf->config('sg-ping_password'); - my $req = new HTTP::Request GET=>"https://$USER:$PASS\@localhost/sg/ping.cgi"; - my $res = $ua->request($req); - - return 1 if $res->is_success - && $res->content =~ /OK/ - && $res->content !~ /error/i; #doh, the error message includes "OK" - - $error_msg = $res->is_success ? $res->content : $res->status_line; - return 0; -} - -sub check_sg_login { - my $conf = new FS::Conf; - #different trigger if they ever stop using multicustomer_hack ? - return 1 unless $conf->exists('sg-multicustomer_hack'); - - my $ua = new LWP::UserAgent; - $ua->agent("FreesideCronCheck/0.1 " . $ua->agent); - - my $USER = $conf->config('sg-ping_username'); - my $PASS = $conf->config('sg-ping_password'); - my $USERNAME = $conf->config('sg-login_username'); - my $req = new HTTP::Request - GET=>"https://$USER:$PASS\@localhost/sg/start.cgi?". - 'username='. uri_escape($USERNAME); - my $res = $ua->request($req); - - return 1 if $res->is_success - && $res->content =~ /[\da-f]{32}/i #session_id - && $res->content !~ /error/i; - - $error_msg = $res->is_success ? $res->content : $res->status_line; - return 0; -} - -sub check_sgng { - my $conf = new FS::Conf; - #different trigger if they ever stop using multicustomer_hack ? - return 1 unless $conf->exists('sg-multicustomer_hack'); - - eval 'use RPC::XML; use RPC::XML::Client;'; - if ($@) { $error_msg = $@; return 0; }; - - my $cli = RPC::XML::Client->new('https://localhost/selfservice/xmlrpc.cgi'); - my $resp = $cli->send_request('FS.SelfService.XMLRPC.ping'); - - return 1 if ref($resp) - && ! $resp->is_fault - && ref($resp->value) - && $resp->value->{'pong'} == 1; - - #hua - $error_msg = ref($resp) - ? ( $resp->is_fault - ? $resp->string - : ( ref($resp->value) ? $resp->value->{'error'} - : $resp->value - ) - ) - : $resp; - return 0; -} - sub _check_fsproc { my $arg = shift; _check_pidfile( "freeside-$arg.pid" ); diff --git a/FS/FS/Cron/pay_batch.pm b/FS/FS/Cron/pay_batch.pm new file mode 100644 index 000000000..0ab37dd13 --- /dev/null +++ b/FS/FS/Cron/pay_batch.pm @@ -0,0 +1,129 @@ +package FS::Cron::pay_batch; + +use strict; +use vars qw( @ISA @EXPORT_OK $me $DEBUG ); +use Exporter; +use Date::Format; +use FS::UID qw(dbh); +use FS::Record qw( qsearch qsearchs ); +use FS::Conf; +use FS::queue; +use FS::agent; + +@ISA = qw( Exporter ); +@EXPORT_OK = qw ( batch_submit batch_receive ); +$DEBUG = 0; +$me = '[FS::Cron::pay_batch]'; + +#freeside-daily %opt: +# -v: enable debugging +# -l: debugging level +# -m: Experimental multi-process mode uses the job queue for multi-process and/or multi-machine billing. +# -r: Multi-process mode dry run option +# -a: Only process customers with the specified agentnum + +sub batch_submit { + my %opt = @_; + local $DEBUG = ($opt{l} || 1) if $opt{v}; + # if anything goes wrong, don't try to roll back previously submitted batches + local $FS::UID::AutoCommit = 1; + + my $dbh = dbh; + + warn "$me batch_submit\n" if $DEBUG; + my $conf = FS::Conf->new; + + # need to respect -a somehow, but for now none of this is per-agent + if ( $opt{a} ) { + warn "Payment batch processing skipped in per-agent mode.\n" if $DEBUG; + return; + } + my %gateways; + foreach my $payby ('CARD', 'CHEK') { + my $gatewaynum = $conf->config("batch-gateway-$payby"); + next if !$gatewaynum; + my $gateway = FS::payment_gateway->by_key($gatewaynum) + or die "payment_gateway '$gatewaynum' not found\n"; + + if ( $gateway->batch_processor->can('default_transport') ) { + + foreach my $pay_batch ( + qsearch('pay_batch', { status => 'O', payby => $payby }) + ) { + + warn "Exporting batch ".$pay_batch->batchnum."\n" if $DEBUG; + eval { $pay_batch->export_to_gateway( $gateway, debug => $DEBUG ); }; + + if ( $@ ) { + # warn the error and continue. rolling back the transaction once + # we've started sending batches is bad. + warn "error submitting batch ".$pay_batch->batchnum." to gateway '". + $gateway->label."\n$@\n"; + } + } + + } else { #can't(default_transport) + warn "Payment gateway '".$gateway->label. + "' doesn't support automatic transport; skipped.\n"; + } + } #$payby + + 1; +} + +sub batch_receive { + my %opt = @_; + local $DEBUG = ($opt{l} || 1) if $opt{v}; + local $FS::UID::AutoCommit = 0; + + my $dbh = dbh; + my $error; + + warn "$me batch_receive\n" if $DEBUG; + my $conf = FS::Conf->new; + + # need to respect -a somehow, but for now none of this is per-agent + if ( $opt{a} ) { + warn "Payment batch processing skipped in per-agent mode.\n" if $DEBUG; + return; + } + my %gateways; + foreach my $payby ('CARD', 'CHEK') { + my $gatewaynum = $conf->config("batch-gateway-$payby"); + next if !$gatewaynum; + # If the same gateway is selected for both paybys, only import it once + $gateways{$gatewaynum} = FS::payment_gateway->by_key($gatewaynum); + if ( !$gateways{$gatewaynum} ) { + $dbh->rollback; + die "batch-gateway-$payby gateway $gatewaynum not found\n"; + } + } + + foreach my $gateway (values %gateways) { + if ( $gateway->batch_processor->can('default_transport') ) { + warn "Importing results from '".$gateway->label."'\n" if $DEBUG; + $error = eval { + FS::pay_batch->import_from_gateway( gateway =>$gateway, debug => $DEBUG ) + } || $@; + if ( $error ) { + # this we can roll back + $dbh->rollback; + die "error receiving from gateway '".$gateway->label."':\n$error\n"; + } + } + # else we already warned about it above + } #$gateway + + # resolve batches if we can + foreach my $pay_batch (qsearch('pay_batch', { status => 'I' })) { + warn "Trying to resolve batch ".$pay_batch->batchnum."\n" if $DEBUG; + $error = $pay_batch->try_to_resolve; + if ( $error ) { + $dbh->rollback; + die "unable to resolve batch ".$pay_batch->batchnum.":\n$error\n"; + } + } + + $dbh->commit; +} +1; diff --git a/FS/FS/Cron/upload.pm b/FS/FS/Cron/upload.pm index dceead6b3..51e0d6868 100644 --- a/FS/FS/Cron/upload.pm +++ b/FS/FS/Cron/upload.pm @@ -9,6 +9,8 @@ use FS::Record qw( qsearch qsearchs ); use FS::Conf; use FS::queue; use FS::agent; +use FS::Misc qw( send_email ); #for bridgestone +use FS::ftp_target; use LWP::UserAgent; use HTTP::Request; use HTTP::Request::Common; @@ -39,42 +41,78 @@ sub upload { warn "$me upload called\n" if $DEBUG; - my $conf = new FS::Conf; - my @agent = grep { $conf->config( 'billco-username', $_->agentnum, 1 ) } - grep { $conf->config( 'billco-password', $_->agentnum, 1 ) } - qsearch( 'agent', {} ); + my @tasks; my $date = time2str('%Y%m%d%H%M%S', $^T); # more? - @agent = grep { $_ == $opt{'a'} } @agent if $opt{'a'}; + my $conf = new FS::Conf; + + my @agents = $opt{'a'} ? FS::agent->by_key($opt{'a'}) : qsearch('agent', {}); + + my %task = ( + 'date' => $date, + 'l' => $opt{'l'}, + 'm' => $opt{'m'}, + 'v' => $opt{'v'}, + ); + + my @agentnums = ('', map {$_->agentnum} @agents); + + foreach my $target (qsearch('ftp_target', {})) { + # We don't know here if it's spooled on a per-agent basis or not. + # (It could even be both, via different events.) So queue up an + # upload for each agent, plus one with null agentnum, and we'll + # upload as many files as we find. + foreach my $a (@agentnums) { + push @tasks, { + %task, + 'agentnum' => $a, + 'targetnum' => $target->targetnum, + 'handling' => $target->handling, + }; + } + } - foreach my $agent ( @agent ) { + # deprecated billco method + foreach (@agents) { + my $agentnum = $_->agentnum; + + if ( $conf->config( 'billco-username', $agentnum, 1 ) ) { + my $username = $conf->config('billco-username', $agentnum, 1); + my $password = $conf->config('billco-password', $agentnum, 1); + my $clicode = $conf->config('billco-clicode', $agentnum, 1); + my $url = $conf->config('billco-url', $agentnum); + push @tasks, { + %task, + 'agentnum' => $agentnum, + 'username' => $username, + 'password' => $password, + 'url' => $url, + 'clicode' => $clicode, + 'handling' => 'billco', + }; + } + } # foreach @agents - my $agentnum = $agent->agentnum; + foreach (@tasks) { + + my $agentnum = $_->{agentnum}; if ( $opt{'m'} ) { if ( $opt{'r'} ) { warn "DRY RUN: would add agent $agentnum for queued upload\n"; } else { - my $queue = new FS::queue { - 'job' => 'FS::Cron::upload::billco_upload', + 'job' => 'FS::Cron::upload::spool_upload', }; - my $error = $queue->insert( - 'agentnum' => $agentnum, - 'date' => $date, - 'l' => $opt{'l'} || '', - 'm' => $opt{'m'} || '', - 'v' => $opt{'v'} || '', - ); - + my $error = $queue->insert( %$_ ); } } else { - eval "&billco_upload( 'agentnum' => $agentnum, 'date' => $date );"; - warn "billco_upload failed: $@\n" + eval { spool_upload(%$_) }; + warn "spool_upload failed: $@\n" if $@; } @@ -83,26 +121,14 @@ sub upload { } -sub billco_upload { +sub spool_upload { my %opt = @_; - warn "$me billco_upload called\n" if $DEBUG; + warn "$me spool_upload called\n" if $DEBUG; my $conf = new FS::Conf; my $dir = '%%%FREESIDE_EXPORT%%%/export.'. $FS::UID::datasrc. '/cust_bill'; - my $agentnum = $opt{agentnum} or die "no agentnum provided\n"; - my $url = $conf->config( 'billco-url', $agentnum ) - or die "no url for agent $agentnum\n"; - $url =~ s/^\s+//; $url =~ s/\s+$//; - my $username = $conf->config( 'billco-username', $agentnum, 1 ) - or die "no username for agent $agentnum\n"; - my $password = $conf->config( 'billco-password', $agentnum, 1 ) - or die "no password for agent $agentnum\n"; - my $clicode = $conf->config( 'billco-clicode', $agentnum, 1 ); - #or die "no clicode for agent $agentnum\n"; - - die "no date provided\n" unless $opt{date}; - my $zipfile = "$dir/agentnum$agentnum-$opt{date}.zip"; + my $date = $opt{date} or die "no date provided\n"; local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; @@ -115,86 +141,228 @@ sub billco_upload { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - my $agent = qsearchs( 'agent', { agentnum => $agentnum } ) - or die "no such agent: $agentnum"; - $agent->select_for_update; #mutex - - unless ( -f "$dir/agentnum$agentnum-header.csv" || - -f "$dir/agentnum$agentnum-detail.csv" ) - { - warn "$me neither $dir/agentnum$agentnum-header.csv nor ". - "$dir/agentnum$agentnum-detail.csv found\n" if $DEBUG; - $dbh->commit or die $dbh->errstr if $oldAutoCommit; - return; + my $agentnum = $opt{agentnum}; + my $agent; + if ( $agentnum ) { + $agent = qsearchs( 'agent', { agentnum => $agentnum } ) + or die "no such agent: $agentnum"; + $agent->select_for_update; #mutex } - # a better way? - if ($opt{m}) { - my $sql = "SELECT count(*) FROM queue LEFT JOIN cust_main USING(custnum) ". - "WHERE queue.job='FS::cust_main::queued_bill' AND cust_main.agentnum = ?"; - my $sth = $dbh->prepare($sql) or die $dbh->errstr; - while (1) { - $sth->execute( $agentnum ) - or die "Unexpected error executing statement $sql: ". $sth->errstr; - last if $sth->fetchow_arrayref->[0]; - sleep 300; + if ( $opt{'handling'} eq 'billco' ) { + + my $file = "agentnum$agentnum"; + my $zipfile = "$dir/$file-$date.zip"; + + unless ( -f "$dir/$file-header.csv" || + -f "$dir/$file-detail.csv" ) + { + warn "$me neither $dir/$file-header.csv nor ". + "$dir/$file-detail.csv found\n" if $DEBUG > 1; + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + return; } - } - foreach ( qw ( header detail ) ) { - rename "$dir/agentnum$agentnum-$_.csv", - "$dir/agentnum$agentnum-$opt{date}-$_.csv"; - } + my $url = $opt{url} or die "no url for agent $agentnum\n"; + $url =~ s/^\s+//; $url =~ s/\s+$//; + + my $username = $opt{username} or die "no username for agent $agentnum\n"; + my $password = $opt{password} or die "no password for agent $agentnum\n"; + + # a better way? + if ($opt{m}) { + my $sql = "SELECT count(*) FROM queue LEFT JOIN cust_main USING(custnum) ". + "WHERE queue.job='FS::cust_main::queued_bill' AND cust_main.agentnum = ?"; + my $sth = $dbh->prepare($sql) or die $dbh->errstr; + while (1) { + $sth->execute( $agentnum ) + or die "Unexpected error executing statement $sql: ". $sth->errstr; + last if $sth->fetchrow_arrayref->[0]; + sleep 300; + } + } - my $command = "cd $dir; zip $zipfile ". - "agentnum$agentnum-$opt{date}-header.csv ". - "agentnum$agentnum-$opt{date}-detail.csv"; + foreach ( qw ( header detail ) ) { + rename "$dir/$file-$_.csv", + "$dir/$file-$date-$_.csv"; + } - system($command) and die "$command failed\n"; + my $command = "cd $dir; zip $zipfile ". + "$file-$date-header.csv ". + "$file-$date-detail.csv"; - unlink "agentnum$agentnum-$opt{date}-header.csv", - "agentnum$agentnum-$opt{date}-detail.csv"; + system($command) and die "$command failed\n"; - if ( $url =~ /^http/i ) { + unlink "$file-$date-header.csv", + "$file-$date-detail.csv"; - my $ua = new LWP::UserAgent; - my $res = $ua->request( POST( $url, - 'Content_Type' => 'form-data', - 'Content' => [ 'username' => $username, - 'pass' => $password, - 'custid' => $username, - 'clicode' => $clicode, - 'file1' => [ $zipfile ], - ], - ) - ); + if ( $url =~ /^http/i ) { - die "upload failed: ". $res->status_line. "\n" - unless $res->is_success; + my $ua = new LWP::UserAgent; + my $res = $ua->request( POST( $url, + 'Content_Type' => 'form-data', + 'Content' => [ 'username' => $username, + 'pass' => $password, + 'custid' => $username, + 'clicode' => $opt{clicode}, + 'file1' => [ $zipfile ], + ], + ) + ); - } elsif ( $url =~ /^ftp:\/\/([\w\.]+)(\/.*)$/i ) { + die "upload failed: ". $res->status_line. "\n" + unless $res->is_success; - my($hostname, $path) = ($1, $2); + } elsif ( $url =~ /^ftp:\/\/([\w\.]+)(\/.*)$/i ) { - my $ftp = new Net::FTP($hostname) #, Passive=>1 ) - or die "can't connect to $hostname: $@\n"; - $ftp->login($username, $password) - or die "can't login to $hostname: ". $ftp->message."\n"; - unless ( $ftp->cwd($path) ) { - my $msg = "can't cd $path on $hostname: ". $ftp->message. "\n"; - ( $path eq '/' ) ? warn $msg : die $msg; - } - $ftp->binary - or die "can't set binary mode on $hostname\n"; + my($hostname, $path) = ($1, $2); + + my $ftp = new Net::FTP($hostname, Passive=>1) + or die "can't connect to $hostname: $@\n"; + $ftp->login($username, $password) + or die "can't login to $hostname: ". $ftp->message."\n"; + unless ( $ftp->cwd($path) ) { + my $msg = "can't cd $path on $hostname: ". $ftp->message. "\n"; + ( $path eq '/' ) ? warn $msg : die $msg; + } + $ftp->binary + or die "can't set binary mode on $hostname\n"; - $ftp->put($zipfile) - or die "can't put $zipfile: ". $ftp->message. "\n"; + $ftp->put($zipfile) + or die "can't put $zipfile: ". $ftp->message. "\n"; - $ftp->quit; + $ftp->quit; + + } else { + die "unknown scheme in URL $url\n"; + } - } else { - die "unknown scheme in URL $url\n"; } + else { #not billco + + my $targetnum = $opt{targetnum}; + my $ftp_target = FS::ftp_target->by_key($targetnum) + or die "FTP target $targetnum not found\n"; + + $dir .= "/target$targetnum"; + chdir($dir); + + my $file = $agentnum ? "agentnum$agentnum" : 'spool'; #.csv + + unless ( -f "$dir/$file.csv" ) { + warn "$me $dir/$file.csv not found\n" if $DEBUG > 1; + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + return; + } + + rename "$dir/$file.csv", "$dir/$file-$date.csv"; + + if ( $opt{'handling'} eq 'bridgestone' ) { + + my $prefix = $conf->config('bridgestone-prefix', $agentnum); + unless ( $prefix ) { + warn "$me agent $agentnum has no bridgestone-prefix, skipped\n"; + $dbh->commit or die $dbh->errstr if $oldAutoCommit; + return; + } + + my $seq = $conf->config('bridgestone-batch_counter', $agentnum) || 1; + + # extract zip code + join(' ',$conf->config('company_address', $agentnum)) =~ + /(\d{5}(\-\d{4})?)\s*$/; + my $ourzip = $1 || ''; #could be an explicit option if really needed + $ourzip =~ s/\D//; + my $newfile = sprintf('%s_%s_%0.6d.dat', + $prefix, + time2str('%Y%m%d', time), + $seq); + warn "copying spool to $newfile\n" if $DEBUG; + + my ($in, $out); + open $in, '<', "$dir/$file-$date.csv" + or die "unable to read $file-$date.csv\n"; + open $out, '>', "$dir/$newfile" or die "unable to write $newfile\n"; + #header--not sure how much of this generalizes at all + my $head = sprintf( + "%-6s%-4s%-27s%-6s%0.6d%-5s%-9s%-9s%-7s%0.8d%-7s%0.6d\n", + ' COMP:', 'VISP', '', ',SEQ#:', $seq, ',ZIP:', $ourzip, ',VERS:1.1', + ',RUNDT:', time2str('%m%d%Y', $^T), + ',RUNTM:', time2str('%H%M%S', $^T), + ); + warn "HEADER: $head" if $DEBUG; + print $out $head; + + my $rows = 0; + while( <$in> ) { + print $out $_; + $rows++; + } + + #trailer + my $trail = sprintf( + "%-6s%-4s%-27s%-6s%0.6d%-7s%0.9d%-9s%0.9d\n", + ' COMP:', 'VISP', '', ',SEQ:', $seq, + ',LINES:', $rows+2, ',LETTERS:', $rows, + ); + warn "TRAILER: $trail" if $DEBUG; + print $out $trail; + + close $in; + close $out; + + my $zipfile = sprintf('%s_%0.6d.zip', $prefix, $seq); + my $command = "cd $dir; zip $zipfile $newfile"; + warn "compressing to $zipfile\n$command\n" if $DEBUG; + system($command) and die "$command failed\n"; + + my $connection = $ftp_target->connect; # dies on error + $connection->put($zipfile); + + my $template = join("\n",$conf->config('bridgestone-confirm_template')); + if ( $template ) { + my $tmpl_obj = Text::Template->new( + TYPE => 'STRING', SOURCE => $template + ); + my $content = $tmpl_obj->fill_in( HASH => + { + zipfile => $zipfile, + prefix => $prefix, + seq => $seq, + rows => $rows, + } + ); + my ($head, $body) = split("\n\n", $content, 2); + $head =~ /^subject:\s*(.*)$/im; + my $subject = $1; + + $head =~ /^to:\s*(.*)$/im; + my $to = $1; + + send_email( + to => $to, + from => $conf->config('invoice_from', $agentnum), + subject => $subject, + body => $body, + ); + } else { #!$template + warn "$me agent $agentnum has no bridgestone-confirm_template, no email sent\n"; + } + + $seq++; + warn "setting batch counter to $seq\n" if $DEBUG; + $conf->set('bridgestone-batch_counter', $seq, $agentnum); + + } else { # not bridgestone + + # this is the usual case + + my $connection = $ftp_target->connect; # dies on error + $connection->put("$file-$date.csv"); + + } + + } #opt{handling} $dbh->commit or die $dbh->errstr if $oldAutoCommit; ''; diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm index a45be3fb6..ad3aa5943 100644 --- a/FS/FS/Mason.pm +++ b/FS/FS/Mason.pm @@ -69,7 +69,7 @@ if ( -e $addl_handler_use_file ) { Lingua::EN::Inflect::classical names=>0; #Categorys use Tie::IxHash; use URI; - use URI::Escape; + use URI::Escape 3.31; use HTML::Entities; use HTML::TreeBuilder; use HTML::TableExtract qw(tree); @@ -91,6 +91,10 @@ if ( -e $addl_handler_use_file ) { use Text::CSV_XS; use Spreadsheet::WriteExcel; use Spreadsheet::WriteExcel::Utility; + use OLE::Storage_Lite; + use Excel::Writer::XLSX; + #use Excel::Writer::XLSX::Utility; #redundant with above + use Business::CreditCard 0.30; #for mask-aware cardtype() use NetAddr::IP; use Net::Ping; @@ -122,6 +126,7 @@ if ( -e $addl_handler_use_file ) { use FS::UID qw( getotaker dbh datasrc driver_name ); use FS::Record qw( qsearch qsearchs fields dbdef str2time_sql str2time_sql_closing + midnight_sql ); use FS::Conf; use FS::CGI qw(header menubar table itable ntable idiot @@ -303,7 +308,24 @@ if ( -e $addl_handler_use_file ) { use FS::discount_plan; use FS::tower; use FS::tower_sector; + use FS::sales; + use FS::access_groupsales; use FS::contact_class; + use FS::part_svc_class; + use FS::ftp_target; + use FS::quotation; + use FS::quotation_pkg; + use FS::quotation_pkg_discount; + use FS::cust_bill_void; + use FS::cust_bill_pkg_void; + use FS::cust_bill_pkg_detail_void; + use FS::cust_bill_pkg_display_void; + use FS::cust_bill_pkg_tax_location_void; + use FS::cust_bill_pkg_tax_rate_location_void; + use FS::cust_tax_exempt_pkg_void; + use FS::cust_bill_pkg_discount_void; + use FS::agent_pkg_class; + use FS::svc_export_machine; use FS::GeocodeCache; # Sammath Naur @@ -348,7 +370,7 @@ if ( -e $addl_handler_use_file ) { use RT::Interface::Web::Request; - #nother undeclared web UI dep (for ticket links graph) + #another undeclared web UI dep (for ticket links graph) use IPC::Run::SafeHandles; #slow, unreliable, segfaults and is optional @@ -507,28 +529,7 @@ sub mason_interps { RT::LoadConfig(); } - # A hook supporting strange legacy ways people (well, SG) have added stuff on - - my @addl_comp_root = (); - my $addl_comp_root_file = '%%%FREESIDE_CONF%%%/addl_comp_root.pl'; - if ( -e $addl_comp_root_file ) { - warn "reading $addl_comp_root_file\n"; - my $text = slurp( $addl_comp_root_file ); - my @addl = eval $text; - if ( @addl && ! $@ ) { - @addl_comp_root = @addl; - } elsif ($@) { - warn "error parsing $addl_comp_root_file: $@\n"; - } - } - - my $fs_comp_root = - scalar(@addl_comp_root) - ? [ - [ 'freeside'=>'%%%FREESIDE_DOCUMENT_ROOT%%%' ], - @addl_comp_root, - ] - : '%%%FREESIDE_DOCUMENT_ROOT%%%'; + my $fs_comp_root = '%%%FREESIDE_DOCUMENT_ROOT%%%'; my %interp = ( request_class => $request_class, @@ -575,11 +576,13 @@ sub mason_interps { [ 'freeside' => '%%%FREESIDE_DOCUMENT_ROOT%%%' ], ], escape_flags => { 'h' => \&RT::Interface::Web::EscapeUTF8, + 'u' => \&RT::Interface::Web::EscapeURI, + 'j' => \&RT::Interface::Web::EscapeJS, 'js_string' => $js_string_sub, }, compiler => HTML::Mason::Compiler::ToObject->new( default_escape_flags => 'h', - allow_globals => [qw(%session)], + allow_globals => [qw(%session $DECODED_ARGS)], ), ); diff --git a/FS/FS/Mason/Request.pm b/FS/FS/Mason/Request.pm index d8fd77a66..36c46dc41 100644 --- a/FS/FS/Mason/Request.pm +++ b/FS/FS/Mason/Request.pm @@ -4,6 +4,7 @@ use strict; use warnings; use vars qw( $FSURL $QUERY_STRING ); use base 'HTML::Mason::Request'; +use FS::Trace; $FSURL = 'http://Set/FS_Mason_Request_FSURL/in_standalone_mode/'; $QUERY_STRING = ''; @@ -11,21 +12,27 @@ $QUERY_STRING = ''; sub new { my $class = shift; + FS::Trace->log('creating new FS::Mason::Request object'); + my $superclass = $HTML::Mason::ApacheHandler::VERSION ? 'HTML::Mason::Request::ApacheHandler' : $HTML::Mason::CGIHandler::VERSION ? 'HTML::Mason::Request::CGI' : 'HTML::Mason::Request'; + FS::Trace->log(' altering superclass'); $class->alter_superclass( $superclass ); + FS::Trace->log(' setting valid params'); #huh... shouldn't alter_superclass take care of this for us? __PACKAGE__->valid_params( %{ $superclass->valid_params() } ); + FS::Trace->log(' freeside_setup'); my %opt = @_; my $mode = $superclass =~ /Apache/i ? 'apache' : 'standalone'; $class->freeside_setup($opt{'comp'}, $mode); + FS::Trace->log(' SUPER::new'); $class->SUPER::new(@_); } @@ -33,11 +40,34 @@ sub new { #override alter_superclass ala RT::Interface::Web::Request ?? # for Mason 1.39 vs. Perl 5.10.0 +my $protect_fds; + sub freeside_setup { my( $class, $filename, $mode ) = @_; + FS::Trace->log(' protecting fds'); + + #from rt/bin/webmux.pl(.in) + if ( !$protect_fds && $ENV{'MOD_PERL'} && exists $ENV{'MOD_PERL_API_VERSION'} + && $ENV{'MOD_PERL_API_VERSION'} >= 2 + ) { + # under mod_perl2, STDIN and STDOUT get closed and re-opened, + # however they are not on FD 0 and 1. In this case, the next + # socket that gets opened will occupy one of these FDs, and make + # all system() and open "|-" calls dangerous; for example, the + # DBI handle can get this FD, which later system() calls will + # close by putting garbage into the socket. + $protect_fds = []; + push @{$protect_fds}, IO::Handle->new_from_fd(0, "r") + if fileno(STDIN) != 0; + push @{$protect_fds}, IO::Handle->new_from_fd(1, "w") + if fileno(STDOUT) != 1; + } + if ( $filename =~ qr(/REST/\d+\.\d+/NoAuth/) ) { + FS::Trace->log(' handling RT REST/NoAuth file'); + package HTML::Mason::Commands; #? use FS::UID qw( adminsuidsetup ); @@ -46,10 +76,13 @@ sub freeside_setup { ##old installs w/fs_selfs or selfserv?? #&adminsuidsetup('fs_selfservice'); + FS::Trace->log(' adminsuidsetup fs_queue'); &adminsuidsetup('fs_queue'); } else { + FS::Trace->log(' handling regular file'); + package HTML::Mason::Commands; use vars qw( $cgi $p $fsurl ); # $lh ); #not using /mt use Encode; @@ -58,6 +91,7 @@ sub freeside_setup { if ( $mode eq 'apache' ) { $cgi = new CGI; + FS::Trace->log(' cgisuidsetup'); &cgisuidsetup($cgi); #&cgisuidsetup($r); $fsurl = rooturl(); @@ -72,6 +106,7 @@ sub freeside_setup { die "unknown mode $mode"; } + FS::Trace->log(' UTF-8-decoding form data'); # foreach my $param ( $cgi->param ) { my @values = $cgi->param($param); @@ -83,6 +118,8 @@ sub freeside_setup { } + FS::Trace->log(' done'); + } sub callback { diff --git a/FS/FS/Misc/Geo.pm b/FS/FS/Misc/Geo.pm index 733c298f9..b727fa7e9 100644 --- a/FS/FS/Misc/Geo.pm +++ b/FS/FS/Misc/Geo.pm @@ -7,7 +7,7 @@ use LWP::UserAgent; use HTTP::Request; use HTTP::Request::Common qw( GET POST ); use HTML::TokeParser; -use URI::Escape; +use URI::Escape 3.31; use Data::Dumper; FS::UID->install_callback( sub { diff --git a/FS/FS/Misc/Invoicing.pm b/FS/FS/Misc/Invoicing.pm new file mode 100644 index 000000000..2fc52a99b --- /dev/null +++ b/FS/FS/Misc/Invoicing.pm @@ -0,0 +1,26 @@ +package FS::Misc::Invoicing; +use base qw( Exporter ); + +use vars qw( @EXPORT_OK ); +@EXPORT_OK = qw( spool_formats ); + +=head1 NAME + +FS::Misc::Invoicing - Invoice subroutines + +=head1 SYNOPSIS + +use FS::Misc::Invoicing qw( spool_formats ); + +=item spool_formats + +Returns a list of the invoice spool formats. + +=cut + +sub spool_formats { + qw(default oneline billco bridgestone) +} + +1; + diff --git a/FS/FS/PagedSearch.pm b/FS/FS/PagedSearch.pm new file mode 100644 index 000000000..09d05c4e6 --- /dev/null +++ b/FS/FS/PagedSearch.pm @@ -0,0 +1,189 @@ +package FS::PagedSearch; + +use strict; +use vars qw($DEBUG $default_limit @EXPORT_OK); +use base qw( Exporter ); +use FS::Record qw(qsearch dbdef); +use Data::Dumper; + +$DEBUG = 0; +$default_limit = 100; + +@EXPORT_OK = 'psearch'; + +=head1 NAME + +FS::PagedSearch - Iterator for querying large data sets + +=head1 SYNOPSIS + +use FS::PagedSearch qw(psearch); + +my $search = psearch('table', { field => 'value' ... }); +$search->limit(100); #optional +while ( my $row = $search->fetch ) { +... +} + +=head1 SUBROUTINES + +=over 4 + +=item psearch ARGUMENTS + +A wrapper around L. Accepts all the same arguments +as qsearch, except for the arrayref union query mode, and returns an +FS::PagedSearch object to access the rows of the query one at a time. +If the query doesn't contain an ORDER BY clause already, it will be ordered +by the table's primary key. + +=cut + +sub psearch { + # deep-copy qsearch args + my $q; + if ( ref($_[0]) eq 'ARRAY' ) { + die "union query not supported with psearch"; #yet + } + elsif ( ref($_[0]) eq 'HASH' ) { + %$q = %{ $_[0] }; + } + else { + $q = { + 'table' => shift, + 'hashref' => shift, + 'select' => shift, + 'extra_sql' => shift, + 'cache_obj' => shift, + 'addl_from' => shift, + }; + } + warn Dumper($q) if $DEBUG > 1; + + # clean up query + my $dbdef = dbdef->table($q->{table}); + # qsearch just appends order_by to extra_sql, so do that ourselves + $q->{extra_sql} ||= ''; + $q->{extra_sql} .= ' '.$q->{order_by} if $q->{order_by}; + $q->{order_by} = ''; + # and impose an ordering if needed + if ( not $q->{extra_sql} =~ /order by/i ) { + $q->{extra_sql} .= ' ORDER BY '.$dbdef->primary_key; + } + # and then we'll use order_by for LIMIT/OFFSET + + my $self = { + query => $q, + buffer => [], + offset => 0, + limit => $default_limit, + increment => 1, + }; + bless $self, 'FS::PagedSearch'; + + $self; +} + +=back + +=head1 METHODS + +=over 4 + +=item fetch + +Fetch the next row from the search results and remove it from the buffer. +Returns undef if there are no more rows. + +=cut + +sub fetch { + my $self = shift; + my $b = $self->{buffer}; + $self->refill if @$b == 0; + $self->{offset} += $self->{increment} if @$b; + return shift @$b; +} + +=item adjust ROWS + +Add ROWS to the offset counter. This won't cause rows to be skipped in the +current buffer but will affect the starting point of the next refill. + +=cut + +sub adjust { + my $self = shift; + my $r = shift; + $self->{offset} += $r; +} + +=item limit [ VALUE ] + +Set/get the number of rows to retrieve per page. The default is 100. + +=cut + +sub limit { + my $self = shift; + my $new_limit = shift; + if ( defined($new_limit) ) { + $self->{limit} = $new_limit; + } + $self->{limit}; +} + +=item increment [ VALUE ] + +Set/get the number of rows to increment the offset for each row that's +retrieved. Defaults to 1. If the rows are being modified in a way that +removes them from the result set of the query, it's probably wise to set +this to zero. Setting it to anything else is probably nonsense. + +=cut + +sub increment { + my $self = shift; + my $new_inc = shift; + if ( defined($new_inc) ) { + $self->{increment} = $new_inc; + } + $self->{increment}; +} + + +=item refill + +Run the query, skipping a number of rows set by the row offset, and replace +the contents of the buffer with the result. If there are no more rows, +this will just empty the buffer. Called automatically as needed; don't call +this from outside. + +=cut + +sub refill { + my $self = shift; + my $b = $self->{buffer}; + warn "refilling (limit ".$self->{limit}.", offset ".$self->{offset}.")\n" + if $DEBUG; + warn "discarding ".scalar(@$b)." rows\n" if $DEBUG and @$b; + if ( $self->{limit} > 0 ) { + $self->{query}->{order_by} = 'LIMIT ' . $self->{limit} . + ' OFFSET ' . $self->{offset}; + } + @$b = qsearch( $self->{query} ); + my $rows = scalar @$b; + warn "$rows returned\n" if $DEBUG; + + $rows; +} + +=back + +=head1 SEE ALSO + +L + +=cut + +1; diff --git a/FS/FS/Quotable_Mixin.pm b/FS/FS/Quotable_Mixin.pm new file mode 100644 index 000000000..dfd3ddd83 --- /dev/null +++ b/FS/FS/Quotable_Mixin.pm @@ -0,0 +1,13 @@ +package FS::Quotable_Mixin; + +use strict; +use FS::Record qw( qsearch ); #qsearchs ); +use FS::quotation; + +sub quotation { + my $self = shift; + my $pk = $self->primary_key; + qsearch('quotation', { $pk => $self->$pk() } ); +} + +1; diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index dfc2abfc4..ca68c3596 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -39,6 +39,7 @@ use Tie::IxHash; @EXPORT_OK = qw( dbh fields hfields qsearch qsearchs dbdef jsearch str2time_sql str2time_sql_closing regexp_sql not_regexp_sql concat_sql + midnight_sql ); $DEBUG = 0; @@ -2420,10 +2421,9 @@ sub ut_coordn { } - =item ut_domain COLUMN -Check/untaint host and domain names. +Check/untaint host and domain names. May not be null. =cut @@ -2431,11 +2431,27 @@ sub ut_domain { my( $self, $field ) = @_; #$self->getfield($field) =~/^(\w+\.)*\w+$/ $self->getfield($field) =~/^(([\w\-]+\.)*\w+)$/ - or return "Illegal (domain) $field: ". $self->getfield($field); + or return "Illegal (hostname) $field: ". $self->getfield($field); $self->setfield($field,$1); ''; } +=item ut_domainn COLUMN + +Check/untaint host and domain names. May be null. + +=cut + +sub ut_domainn { + my( $self, $field ) = @_; + if ( $self->getfield($field) =~ /^()$/ ) { + $self->setfield($field,''); + ''; + } else { + $self->ut_domain($field); + } +} + =item ut_name COLUMN Check/untaint proper names; allows alphanumerics, spaces and the following @@ -2562,6 +2578,22 @@ sub ut_enumn { : ''; } +=item ut_flag COLUMN + +Check/untaint a column if it contains either an empty string or 'Y'. This +is the standard form for boolean flags in Freeside. + +=cut + +sub ut_flag { + my( $self, $field ) = @_; + my $value = uc($self->getfield($field)); + if ( $value eq '' or $value eq 'Y' ) { + $self->setfield($field, $value); + return ''; + } + return "Illegal (flag) field $field: $value"; +} =item ut_foreign_key COLUMN FOREIGN_TABLE FOREIGN_COLUMN @@ -3030,7 +3062,7 @@ sub not_regexp_sql { =item concat_sql [ DRIVER_NAME ] ITEMS_ARRAYREF -Returns the items concatendated based on database type, using "CONCAT()" for +Returns the items concatenated based on database type, using "CONCAT()" for mysql and " || " for Pg and other databases. You can pass an optional driver name such as "Pg", "mysql" or @@ -3051,6 +3083,24 @@ sub concat_sql { } +=item midnight_sql DATE + +Returns an SQL expression to convert DATE (a unix timestamp) to midnight +on that day in the system timezone, using the default driver name. + +=cut + +sub midnight_sql { + my $driver = driver_name; + my $expr = shift; + if ( $driver =~ /^mysql/i ) { + "UNIX_TIMESTAMP(DATE(FROM_UNIXTIME($expr)))"; + } + else { + "EXTRACT( EPOCH FROM DATE(TO_TIMESTAMP($expr)) )"; + } +} + =back =head1 BUGS diff --git a/FS/FS/Report/FCC_477.pm b/FS/FS/Report/FCC_477.pm index 4c94fff2e..49bb8a852 100644 --- a/FS/FS/Report/FCC_477.pm +++ b/FS/FS/Report/FCC_477.pm @@ -45,8 +45,8 @@ Documentation. ); @technology = ( - 'Asymetric xDSL', - 'Symetric xDSL', + 'Asymmetric xDSL', + 'Symmetric xDSL', 'Other Wireline', 'Cable Modem', 'Optical Carrier', diff --git a/FS/FS/Report/Table.pm b/FS/FS/Report/Table.pm index b0e911f84..73eed6e0c 100644 --- a/FS/FS/Report/Table.pm +++ b/FS/FS/Report/Table.pm @@ -72,8 +72,8 @@ sub invoiced { #invoiced SELECT SUM(charged) FROM cust_bill LEFT JOIN cust_main USING ( custnum ) - WHERE ". $self->in_time_period_and_agent($speriod, $eperiod, $agentnum) - . (%opt ? $self->for_custnum(%opt) : '') + WHERE ". $self->in_time_period_and_agent($speriod, $eperiod, $agentnum). + $self->for_opts(%opt) ); } @@ -85,8 +85,8 @@ sub invoiced { #invoiced sub netsales { #net sales my( $self, $speriod, $eperiod, $agentnum, %opt ) = @_; - $self->invoiced($speriod,$eperiod,$agentnum,%opt) - - $self->netcredits($speriod,$eperiod,$agentnum,%opt); + $self->invoiced( $speriod, $eperiod, $agentnum, %opt) + - $self->netcredits($speriod, $eperiod, $agentnum, %opt); } =item cashflow: payments - refunds @@ -105,10 +105,10 @@ sub cashflow { =cut sub netcashflow { - my( $self, $speriod, $eperiod, $agentnum ) = @_; + my( $self, $speriod, $eperiod, $agentnum, %opt ) = @_; - $self->receipts($speriod, $eperiod, $agentnum) - - $self->netrefunds( $speriod, $eperiod, $agentnum); + $self->receipts( $speriod, $eperiod, $agentnum, %opt) + - $self->netrefunds( $speriod, $eperiod, $agentnum, %opt); } =item payments: The sum of payments received in the period. @@ -121,8 +121,8 @@ sub payments { SELECT SUM(paid) FROM cust_pay LEFT JOIN cust_main USING ( custnum ) - WHERE ". $self->in_time_period_and_agent($speriod, $eperiod, $agentnum) - . (%opt ? $self->for_custnum(%opt) : '') + WHERE ". $self->in_time_period_and_agent($speriod, $eperiod, $agentnum). + $self->for_opts(%opt) ); } @@ -131,12 +131,13 @@ sub payments { =cut sub credits { - my( $self, $speriod, $eperiod, $agentnum ) = @_; + my( $self, $speriod, $eperiod, $agentnum, %opt ) = @_; $self->scalar_sql(" SELECT SUM(amount) FROM cust_credit LEFT JOIN cust_main USING ( custnum ) - WHERE ". $self->in_time_period_and_agent($speriod, $eperiod, $agentnum) + WHERE ". $self->in_time_period_and_agent($speriod, $eperiod, $agentnum). + $self->for_opts(%opt) ); } @@ -150,8 +151,8 @@ sub refunds { SELECT SUM(refund) FROM cust_refund LEFT JOIN cust_main USING ( custnum ) - WHERE ". $self->in_time_period_and_agent($speriod, $eperiod, $agentnum) - . (%opt ? $self->for_custnum(%opt) : '') + WHERE ". $self->in_time_period_and_agent($speriod, $eperiod, $agentnum). + $self->for_opts(%opt) ); } @@ -170,8 +171,8 @@ sub netcredits { $eperiod, $agentnum, 'cust_bill._date' - ) - . (%opt ? $self->for_custnum(%opt) : '') + ). + $self->for_opts(%opt) ); } @@ -180,7 +181,7 @@ sub netcredits { =cut sub receipts { #net payments - my( $self, $speriod, $eperiod, $agentnum ) = @_; + my( $self, $speriod, $eperiod, $agentnum, %opt ) = @_; $self->scalar_sql(" SELECT SUM(cust_bill_pay.amount) FROM cust_bill_pay @@ -190,7 +191,8 @@ sub receipts { #net payments $eperiod, $agentnum, 'cust_bill._date' - ) + ). + $self->for_opts(%opt) ); } @@ -199,7 +201,7 @@ sub receipts { #net payments =cut sub netrefunds { - my( $self, $speriod, $eperiod, $agentnum ) = @_; + my( $self, $speriod, $eperiod, $agentnum, %opt ) = @_; $self->scalar_sql(" SELECT SUM(cust_credit_refund.amount) FROM cust_credit_refund @@ -209,7 +211,8 @@ sub netrefunds { $eperiod, $agentnum, 'cust_credit._date' - ) + ). + $self->for_opts(%opt) ); } @@ -416,6 +419,8 @@ sub cust_bill_pkg_setup { $self->in_time_period_and_agent($speriod, $eperiod, $agentnum), ); + push @where, 'cust_main.refnum = '. $opt{'refnum'} if $opt{'refnum'}; + my $total_sql = "SELECT COALESCE(SUM(cust_bill_pkg.setup),0) FROM cust_bill_pkg $cust_bill_pkg_join @@ -436,6 +441,8 @@ sub cust_bill_pkg_recur { $self->with_classnum($opt{'classnum'}, $opt{'use_override'}), ); + push @where, 'cust_main.refnum = '. $opt{'refnum'} if $opt{'refnum'}; + # subtract all usage from the line item regardless of date my $item_usage; if ( $opt{'project'} ) { @@ -489,6 +496,8 @@ sub cust_bill_pkg_detail { my @where = ( "cust_bill_pkg.pkgnum != 0" ); + push @where, 'cust_main.refnum = '. $opt{'refnum'} if $opt{'refnum'}; + $agentnum ||= $opt{'agentnum'}; push @where, @@ -619,10 +628,16 @@ sub in_time_period_and_agent { $sql; } -sub for_custnum { +sub for_opts { my ( $self, %opt ) = @_; - return '' unless $opt{'custnum'}; - $opt{'custnum'} =~ /^\d+$/ ? " and custnum = $opt{custnum} " : ''; + my $sql = ''; + if ( $opt{'custnum'} =~ /^(\d+)$/ ) { + $sql .= " and custnum = $1 "; + } + if ( $opt{'refnum'} =~ /^(\d+)$/ ) { + $sql .= " and refnum = $1 "; + } + $sql; } sub with_classnum { diff --git a/FS/FS/Report/Table/Monthly.pm b/FS/FS/Report/Table/Monthly.pm index 87c13a8ca..86ab19b74 100644 --- a/FS/FS/Report/Table/Monthly.pm +++ b/FS/FS/Report/Table/Monthly.pm @@ -24,6 +24,7 @@ FS::Report::Table::Monthly - Tables of report data, indexed monthly 'end_year' => 2020, #opt 'agentnum' => 54 + 'refnum' => 54 'params' => [ [ 'paramsfor', 'item_one' ], [ 'item', 'two' ] ], # ... 'remove_empty' => 1, #collapse empty rows, default 0 'item_labels' => [ ], #useful with remove_empty @@ -59,6 +60,7 @@ sub data { } my $agentnum = $self->{'agentnum'}; + my $refnum = $self->{'refnum'}; if ( $projecting ) { @@ -110,11 +112,13 @@ sub data { my $item = $items[$i]; my @param = $self->{'params'} ? @{ $self->{'params'}[$i] }: (); push @param, 'project', $projecting; + push @param, 'refnum' => $refnum if $refnum; my $value = $self->$item($speriod, $eperiod, $agentnum, @param); push @{$data{data}->[$col]}, $value; $item = $items[$i+1]; @param = $self->{'params'} ? @{ $self->{'params'}[++$i] }: (); push @param, 'project', $projecting; + push @param, 'refnum' => $refnum if $refnum; $value = $self->$item($speriod, $eperiod, $agentnum, @param); push @{$data{data}->[$col++]}, $value; } @@ -122,6 +126,7 @@ sub data { my $item = $items[$i]; my @param = $self->{'params'} ? @{ $self->{'params'}[$col] }: (); push @param, 'project', $projecting; + push @param, 'refnum' => $refnum if $refnum; my $value = $self->$item($speriod, $eperiod, $agentnum, @param); push @{$data{data}->[$col++]}, $value; } diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index e69b0bc2c..2c9af0ae2 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -445,7 +445,7 @@ sub tables_hashref { my @taxrate_type = ( 'decimal', '', '14,8' ); # requires pg 8 for my @taxrate_typen = ( 'decimal', 'NULL', '14,8' ); # fs-upgrade to work - my $username_len = 32; #usernamemax config file + my $username_len = 64; #usernamemax config file # name type nullability length default local @@ -473,6 +473,18 @@ sub tables_hashref { 'index' => [ ['typenum'], ['disabled'], ['agent_custnum'] ], }, + 'agent_pkg_class' => { + 'columns' => [ + 'agentpkgclassnum', 'serial', '', '', '', '', + 'agentnum', 'int', '', '', '', '', + 'classnum', 'int', 'NULL', '', '', '', + 'commission_percent', 'decimal', '', '7,4', '', '', + ], + 'primary_key' => 'agentpkgclassnum', + 'unique' => [ [ 'agentnum', 'classnum' ], ], + 'index' => [], + }, + 'agent_type' => { 'columns' => [ 'typenum', 'serial', '', '', '', '', @@ -494,6 +506,18 @@ sub tables_hashref { 'index' => [ ['typenum'] ], }, + 'sales' => { + 'columns' => [ + 'salesnum', 'serial', '', '', '', '', + 'salesperson', 'varchar', '', $char_d, '', '', + 'agentnum', 'int', 'NULL', '', '', '', + 'disabled', 'char', 'NULL', 1, '', '', + ], + 'primary_key' => 'salesnum', + 'unique' => [], + 'index' => [ ['salesnum'], ['disabled'] ], + }, + 'cust_attachment' => { 'columns' => [ 'attachnum', 'serial', '', '', '', '', @@ -539,6 +563,35 @@ sub tables_hashref { 'index' => [ ['custnum'], ['_date'], ['statementnum'], ['agent_invid'] ], }, + 'cust_bill_void' => { + 'columns' => [ + #regular fields + 'invnum', 'int', '', '', '', '', + 'custnum', 'int', '', '', '', '', + '_date', @date_type, '', '', + 'charged', @money_type, '', '', + 'invoice_terms', 'varchar', 'NULL', $char_d, '', '', + + #customer balance info at invoice generation time + 'previous_balance', @money_typen, '', '', #eventually not nullable + 'billing_balance', @money_typen, '', '', #eventually not nullable + + #specific use cases + 'closed', 'char', 'NULL', 1, '', '', #not yet used much + 'statementnum', 'int', 'NULL', '', '', '', #invoice aggregate statements + 'agent_invid', 'int', 'NULL', '', '', '', #(varchar?) importing legacy + 'promised_date', @date_type, '', '', + + #void fields + 'void_date', @date_type, '', '', + 'reason', 'varchar', 'NULL', $char_d, '', '', + 'void_usernum', 'int', 'NULL', '', '', '', + ], + 'primary_key' => 'invnum', + 'unique' => [ [ 'custnum', 'agent_invid' ] ], #agentnum? huh + 'index' => [ ['custnum'], ['_date'], ['statementnum'], ['agent_invid'], [ 'void_usernum' ] ], + }, + #for importing invoices from a legacy system for display purposes only # no effect upon balance 'legacy_cust_bill' => { @@ -775,6 +828,101 @@ sub tables_hashref { 'index' => [ [ 'billpkgnum' ], [ 'taxnum' ], [ 'taxratelocationnum' ] ], }, + 'cust_bill_pkg_void' => { + 'columns' => [ + 'billpkgnum', 'int', '', '', '', '', + 'invnum', 'int', '', '', '', '', + 'pkgnum', 'int', '', '', '', '', + 'pkgpart_override', 'int', 'NULL', '', '', '', + 'setup', @money_type, '', '', + 'recur', @money_type, '', '', + 'sdate', @date_type, '', '', + 'edate', @date_type, '', '', + 'itemdesc', 'varchar', 'NULL', $char_d, '', '', + 'itemcomment', 'varchar', 'NULL', $char_d, '', '', + 'section', 'varchar', 'NULL', $char_d, '', '', + 'freq', 'varchar', 'NULL', $char_d, '', '', + 'quantity', 'int', 'NULL', '', '', '', + 'unitsetup', @money_typen, '', '', + 'unitrecur', @money_typen, '', '', + 'hidden', 'char', 'NULL', 1, '', '', + #void fields + 'void_date', @date_type, '', '', + 'reason', 'varchar', 'NULL', $char_d, '', '', + 'void_usernum', 'int', 'NULL', '', '', '', + ], + 'primary_key' => 'billpkgnum', + 'unique' => [], + 'index' => [ ['invnum'], [ 'pkgnum' ], [ 'itemdesc' ], [ 'void_usernum' ], ], + }, + + 'cust_bill_pkg_detail_void' => { + 'columns' => [ + 'detailnum', 'int', '', '', '', '', + 'billpkgnum', 'int', 'NULL', '', '', '', # should not be nullable + 'pkgnum', 'int', 'NULL', '', '', '', # deprecated + 'invnum', 'int', 'NULL', '', '', '', # deprecated + 'amount', 'decimal', 'NULL', '10,4', '', '', + 'format', 'char', 'NULL', 1, '', '', + 'classnum', 'int', 'NULL', '', '', '', + 'duration', 'int', 'NULL', '', 0, '', + 'phonenum', 'varchar', 'NULL', 15, '', '', + 'accountcode', 'varchar', 'NULL', 20, '', '', + 'startdate', @date_type, '', '', + 'regionname', 'varchar', 'NULL', $char_d, '', '', + 'detail', 'varchar', '', 255, '', '', + ], + 'primary_key' => 'detailnum', + 'unique' => [], + 'index' => [ [ 'billpkgnum' ], [ 'classnum' ], [ 'pkgnum', 'invnum' ] ], + }, + + 'cust_bill_pkg_display_void' => { + 'columns' => [ + 'billpkgdisplaynum', 'int', '', '', '', '', + 'billpkgnum', 'int', '', '', '', '', + 'section', 'varchar', 'NULL', $char_d, '', '', + #'unitsetup', @money_typen, '', '', #override the linked real one? + #'unitrecur', @money_typen, '', '', #this too? + 'post_total', 'char', 'NULL', 1, '', '', + 'type', 'char', 'NULL', 1, '', '', + 'summary', 'char', 'NULL', 1, '', '', + ], + 'primary_key' => 'billpkgdisplaynum', + 'unique' => [], + 'index' => [ ['billpkgnum'], ], + }, + + 'cust_bill_pkg_tax_location_void' => { + 'columns' => [ + 'billpkgtaxlocationnum', 'int', '', '', '', '', + 'billpkgnum', 'int', '', '', '', '', + 'taxnum', 'int', '', '', '', '', + 'taxtype', 'varchar', '', $char_d, '', '', + 'pkgnum', 'int', '', '', '', '', + 'locationnum', 'int', '', '', '', '', #redundant? + 'amount', @money_type, '', '', + ], + 'primary_key' => 'billpkgtaxlocationnum', + 'unique' => [], + 'index' => [ [ 'billpkgnum' ], [ 'taxnum' ], [ 'pkgnum' ], [ 'locationnum' ] ], + }, + + 'cust_bill_pkg_tax_rate_location_void' => { + 'columns' => [ + 'billpkgtaxratelocationnum', 'int', '', '', '', '', + 'billpkgnum', 'int', '', '', '', '', + 'taxnum', 'int', '', '', '', '', + 'taxtype', 'varchar', '', $char_d, '', '', + 'locationtaxid', 'varchar', 'NULL', $char_d, '', '', + 'taxratelocationnum', 'int', '', '', '', '', + 'amount', @money_type, '', '', + ], + 'primary_key' => 'billpkgtaxratelocationnum', + 'unique' => [], + 'index' => [ [ 'billpkgnum' ], [ 'taxnum' ], [ 'taxratelocationnum' ] ], + }, + 'cust_credit' => { 'columns' => [ 'crednum', 'serial', '', '', '', '', @@ -789,6 +937,7 @@ sub tables_hashref { 'closed', 'char', 'NULL', 1, '', '', 'pkgnum', 'int', 'NULL', '', '', '', #desired pkgnum for pkg-balances 'eventnum', 'int', 'NULL', '', '', '', #triggering event for commission + #'commission_agentnum', 'int', 'NULL', '', '', '', # ], 'primary_key' => 'crednum', 'unique' => [], @@ -844,17 +993,20 @@ sub tables_hashref { 'ss', 'varchar', 'NULL', 11, '', '', 'stateid', 'varchar', 'NULL', $char_d, '', '', 'stateid_state', 'varchar', 'NULL', $char_d, '', '', + 'national_id', 'varchar', 'NULL', $char_d, '', '', 'birthdate' ,@date_type, '', '', + 'spouse_birthdate' ,@date_type, '', '', + 'anniversary_date' ,@date_type, '', '', 'signupdate',@date_type, '', '', 'dundate', @date_type, '', '', 'company', 'varchar', 'NULL', $char_d, '', '', - 'address1', 'varchar', '', $char_d, '', '', + 'address1', 'varchar', 'NULL', $char_d, '', '', 'address2', 'varchar', 'NULL', $char_d, '', '', - 'city', 'varchar', '', $char_d, '', '', + 'city', 'varchar', 'NULL', $char_d, '', '', 'county', 'varchar', 'NULL', $char_d, '', '', 'state', 'varchar', 'NULL', $char_d, '', '', 'zip', 'varchar', 'NULL', 10, '', '', - 'country', 'char', '', 2, '', '', + 'country', 'char', 'NULL', 2, '', '', 'latitude', 'decimal', 'NULL', '10,7', '', '', 'longitude','decimal', 'NULL', '10,7', '', '', 'coord_auto', 'char', 'NULL', 1, '', '', @@ -885,7 +1037,7 @@ sub tables_hashref { 'payby', 'char', '', 4, '', '', 'payinfo', 'varchar', 'NULL', 512, '', '', 'paycvv', 'varchar', 'NULL', 512, '', '', - 'paymask', 'varchar', 'NULL', $char_d, '', '', + 'paymask', 'varchar', 'NULL', $char_d, '', '', #'paydate', @date_type, '', '', 'paydate', 'varchar', 'NULL', 10, '', '', 'paystart_month', 'int', 'NULL', '', '', '', @@ -914,9 +1066,13 @@ sub tables_hashref { 'email_csv_cdr', 'char', 'NULL', 1, '', '', 'accountcode_cdr', 'char', 'NULL', 1, '', '', 'billday', 'int', 'NULL', '', '', '', + 'prorate_day', 'int', 'NULL', '', '', '', 'edit_subject', 'char', 'NULL', 1, '', '', 'locale', 'varchar', 'NULL', 16, '', '', 'calling_list_exempt', 'char', 'NULL', 1, '', '', + 'invoice_noemail', 'char', 'NULL', 1, '', '', + 'bill_locationnum', 'int', 'NULL', '', '', '', + 'ship_locationnum', 'int', 'NULL', '', '', '', ], 'primary_key' => 'custnum', 'unique' => [ [ 'agentnum', 'agent_custid' ] ], @@ -927,16 +1083,6 @@ sub tables_hashref { [ 'referral_custnum' ], [ 'payby' ], [ 'paydate' ], [ 'archived' ], - #billing - [ 'last' ], [ 'company' ], - [ 'county' ], [ 'state' ], [ 'country' ], - [ 'zip' ], - [ 'daytime' ], [ 'night' ], [ 'fax' ], [ 'mobile' ], - #shipping - [ 'ship_last' ], [ 'ship_company' ], - [ 'ship_county' ], [ 'ship_state' ], [ 'ship_country' ], - [ 'ship_zip' ], - [ 'ship_daytime' ], [ 'ship_night' ], [ 'ship_fax' ], [ 'ship_mobile' ] ], }, @@ -989,7 +1135,7 @@ sub tables_hashref { # 'middle', 'varchar', 'NULL', $char_d, '', '', 'first', 'varchar', '', $char_d, '', '', 'title', 'varchar', 'NULL', $char_d, '', '', #eg Head Bottle Washer - 'comment', 'varchar', 'NULL', $char_d, '', '', + 'comment', 'varchar', 'NULL', 255, '', '', 'disabled', 'char', 'NULL', 1, '', '', ], 'primary_key' => 'contactnum', @@ -1050,8 +1196,50 @@ sub tables_hashref { 'index' => [ [ 'company' ], [ 'agentnum' ], [ 'disabled' ] ], }, - #eventually use for billing & ship from cust_main too - #for now, just cust_pkg locations + 'quotation' => { + 'columns' => [ + #regular fields + 'quotationnum', 'serial', '', '', '', '', + 'prospectnum', 'int', 'NULL', '', '', '', + 'custnum', 'int', 'NULL', '', '', '', + '_date', @date_type, '', '', + 'disabled', 'char', 'NULL', 1, '', '', + 'usernum', 'int', 'NULL', '', '', '', + #'total', @money_type, '', '', + #'quotation_term', 'varchar', 'NULL', $char_d, '', '', + ], + 'primary_key' => 'quotationnum', + 'unique' => [], + 'index' => [ [ 'prospectnum' ], ['custnum'], ], + }, + + 'quotation_pkg' => { + 'columns' => [ + 'quotationpkgnum', 'serial', '', '', '', '', + 'pkgpart', 'int', '', '', '', '', + 'locationnum', 'int', 'NULL', '', '', '', + 'start_date', @date_type, '', '', + 'contract_end', @date_type, '', '', + 'quantity', 'int', 'NULL', '', '', '', + 'waive_setup', 'char', 'NULL', 1, '', '', + ], + 'primary_key' => 'quotationpkgnum', + 'unique' => [], + 'index' => [ ['pkgpart'], ], + }, + + 'quotation_pkg_discount' => { + 'columns' => [ + 'quotationpkgdiscountnum', 'serial', '', '', '', '', + 'quotationpkgnum', 'int', '', '', '', '', + 'discountnum', 'int', '', '', '', '', + #'end_date', @date_type, '', '', + ], + 'primary_key' => 'quotationpkgdiscountnum', + 'unique' => [], + 'index' => [ [ 'quotationpkgnum' ], ], #[ 'discountnum' ] ], + }, + 'cust_location' => { #'location' now that its prospects too, but... 'columns' => [ 'locationnum', 'serial', '', '', '', '', @@ -1070,6 +1258,8 @@ sub tables_hashref { 'country', 'char', '', 2, '', '', 'geocode', 'varchar', 'NULL', 20, '', '', 'district', 'varchar', 'NULL', 20, '', '', + 'censustract', 'varchar', 'NULL', 20, '', '', + 'censusyear', 'char', 'NULL', 4, '', '', 'location_type', 'varchar', 'NULL', 20, '', '', 'location_number', 'varchar', 'NULL', 20, '', '', 'location_kind', 'char', 'NULL', 1, '', '', @@ -1079,6 +1269,7 @@ sub tables_hashref { 'unique' => [], 'index' => [ [ 'prospectnum' ], [ 'custnum' ], [ 'county' ], [ 'state' ], [ 'country' ], [ 'zip' ], + [ 'city' ], [ 'district' ] ], }, @@ -1133,10 +1324,11 @@ sub tables_hashref { 'cust_class' => { 'columns' => [ - 'classnum', 'serial', '', '', '', '', - 'classname', 'varchar', '', $char_d, '', '', - 'categorynum', 'int', 'NULL', '', '', '', - 'disabled', 'char', 'NULL', 1, '', '', + 'classnum', 'serial', '', '', '', '', + 'classname', 'varchar', '', $char_d, '', '', + 'categorynum', 'int', 'NULL', '', '', '', + 'tax', 'char', 'NULL', 1, '', '', + 'disabled', 'char', 'NULL', 1, '', '', ], 'primary_key' => 'classnum', 'unique' => [], @@ -1169,9 +1361,10 @@ sub tables_hashref { 'cust_main_exemption' => { 'columns' => [ - 'exemptionnum', 'serial', '', '', '', '', - 'custnum', 'int', '', '', '', '', - 'taxname', 'varchar', '', $char_d, '', '', + 'exemptionnum', 'serial', '', '', '', '', + 'custnum', 'int', '', '', '', '', + 'taxname', 'varchar', '', $char_d, '', '', + 'exempt_number', 'varchar', 'NULL', $char_d, '', '', #start/end dates? for reporting? ], 'primary_key' => 'exemptionnum', @@ -1357,6 +1550,7 @@ sub tables_hashref { 'depositor', 'varchar', 'NULL', $char_d, '', '', 'account', 'varchar', 'NULL', 20, '', '', 'teller', 'varchar', 'NULL', 20, '', '', + 'batchnum', 'int', 'NULL', '', '', '', #pay_batch foreign key ], 'primary_key' => 'paynum', #i guess not now, with cust_pay_pending, if we actually make it here, we _do_ want to record it# 'unique' => [ [ 'payunique' ] ], @@ -1367,20 +1561,29 @@ sub tables_hashref { 'columns' => [ 'paynum', 'int', '', '', '', '', 'custnum', 'int', '', '', '', '', - 'paid', @money_type, '', '', '_date', @date_type, '', '', + 'paid', @money_type, '', '', + 'otaker', 'varchar', 'NULL', 32, '', '', + 'usernum', 'int', 'NULL', '', '', '', 'payby', 'char', '', 4, '', '', # CARD/BILL/COMP, should be # index into payby table # eventually 'payinfo', 'varchar', 'NULL', 512, '', '', #see cust_main above 'paymask', 'varchar', 'NULL', $char_d, '', '', + #'paydate' ? 'paybatch', 'varchar', 'NULL', $char_d, '', '', #for auditing purposes. 'closed', 'char', 'NULL', 1, '', '', 'pkgnum', 'int', 'NULL', '', '', '', #desired pkgnum for pkg-balances + # cash/check deposit info fields + 'bank', 'varchar', 'NULL', $char_d, '', '', + 'depositor', 'varchar', 'NULL', $char_d, '', '', + 'account', 'varchar', 'NULL', 20, '', '', + 'teller', 'varchar', 'NULL', 20, '', '', + 'batchnum', 'int', 'NULL', '', '', '', #pay_batch foreign key + + #void fields 'void_date', @date_type, '', '', 'reason', 'varchar', 'NULL', $char_d, '', '', - 'otaker', 'varchar', 'NULL', 32, '', '', - 'usernum', 'int', 'NULL', '', '', '', 'void_usernum', 'int', 'NULL', '', '', '', ], 'primary_key' => 'paynum', @@ -1436,10 +1639,11 @@ sub tables_hashref { 'columns' => [ 'batchnum', 'serial', '', '', '', '', 'agentnum', 'int', 'NULL', '', '', '', - 'payby', 'char', '', 4, '', '', # CARD/CHEK + 'payby', 'char', '', 4, '', '', # CARD/CHEK 'status', 'char', 'NULL', 1, '', '', 'download', @date_type, '', '', 'upload', @date_type, '', '', + 'title', 'varchar', 'NULL',255, '', '', ], 'primary_key' => 'batchnum', 'unique' => [], @@ -1502,6 +1706,8 @@ sub tables_hashref { 'adjourn', @date_type, '', '', 'resume', @date_type, '', '', 'cancel', @date_type, '', '', + 'uncancel', @date_type, '', '', + 'uncancel_pkgnum', 'int', 'NULL', '', '', '', 'expire', @date_type, '', '', 'contract_end', @date_type, '', '', 'dundate', @date_type, '', '', @@ -1596,6 +1802,19 @@ sub tables_hashref { 'index' => [ [ 'billpkgnum' ], [ 'pkgdiscountnum' ] ], }, + 'cust_bill_pkg_discount_void' => { + 'columns' => [ + 'billpkgdiscountnum', 'int', '', '', '', '', + 'billpkgnum', 'int', '', '', '', '', + 'pkgdiscountnum', 'int', '', '', '', '', + 'amount', @money_type, '', '', + 'months', 'decimal', 'NULL', '7,4', '', '', + ], + 'primary_key' => 'billpkgdiscountnum', + 'unique' => [], + 'index' => [ [ 'billpkgnum' ], [ 'pkgdiscountnum' ] ], + }, + 'discount' => { 'columns' => [ 'discountnum', 'serial', '', '', '', '', @@ -1651,14 +1870,15 @@ sub tables_hashref { 'cust_svc' => { 'columns' => [ - 'svcnum', 'serial', '', '', '', '', - 'pkgnum', 'int', 'NULL', '', '', '', - 'svcpart', 'int', '', '', '', '', - 'overlimit', @date_type, '', '', + 'svcnum', 'serial', '', '', '', '', + 'pkgnum', 'int', 'NULL', '', '', '', + 'svcpart', 'int', '', '', '', '', + 'agent_svcid', 'int', 'NULL', '', '', '', + 'overlimit', @date_type, '', '', ], 'primary_key' => 'svcnum', 'unique' => [], - 'index' => [ ['svcnum'], ['pkgnum'], ['svcpart'] ], + 'index' => [ ['svcnum'], ['pkgnum'], ['svcpart'], [ 'agent_svcid' ] ], }, 'cust_svc_option' => { @@ -1673,6 +1893,30 @@ sub tables_hashref { 'index' => [ [ 'svcnum' ], [ 'optionname' ] ], }, + 'svc_export_machine' => { + 'columns' => [ + 'svcexportmachinenum', 'serial', '', '', '', '', + 'svcnum', 'int', '', '', '', '', + 'exportnum', 'int', '', '', '', '', + 'machinenum', 'int', '', '', '', '', + ], + 'primary_key' => 'svcexportmachinenum', + 'unique' => [ ['svcnum', 'exportnum'] ], + 'index' => [], + }, + + 'part_export_machine' => { + 'columns' => [ + 'machinenum', 'serial', '', '', '', '', + 'exportnum', 'int', '', '', '', '', + 'machine', 'varchar', 'NULL', $char_d, '', '', + 'disabled', 'char', 'NULL', 1, '', '', + ], + 'primary_key' => 'machinenum', + 'unique' => [ [ 'exportnum', 'machine' ] ], + 'index' => [ [ 'exportnum' ] ], + }, + 'part_pkg' => { 'columns' => [ 'pkgpart', 'serial', '', '', '', '', @@ -1695,6 +1939,7 @@ sub tables_hashref { 'credit_weight', 'real', 'NULL', '', '', '', 'agentnum', 'int', 'NULL', '', '', '', 'fcc_ds0s', 'int', 'NULL', '', '', '', + 'fcc_voip_class','char', 'NULL', 1, '', '', 'no_auto', 'char', 'NULL', 1, '', '', 'recur_show_zero', 'char', 'NULL', 1, '', '', 'setup_show_zero', 'char', 'NULL', 1, '', '', @@ -1835,6 +2080,7 @@ sub tables_hashref { 'disabled', 'char', 'NULL', 1, '', '', 'preserve', 'char', 'NULL', 1, '', '', 'selfservice_access', 'varchar', 'NULL', $char_d, '', '', + 'classnum', 'int', 'NULL', '', '', '', ], 'primary_key' => 'svcpart', 'unique' => [], @@ -1843,18 +2089,29 @@ sub tables_hashref { 'part_svc_column' => { 'columns' => [ - 'columnnum', 'serial', '', '', '', '', - 'svcpart', 'int', '', '', '', '', - 'columnname', 'varchar', '', 64, '', '', + 'columnnum', 'serial', '', '', '', '', + 'svcpart', 'int', '', '', '', '', + 'columnname', 'varchar', '', 64, '', '', 'columnlabel', 'varchar', 'NULL', $char_d, '', '', - 'columnvalue', 'varchar', 'NULL', $char_d, '', '', - 'columnflag', 'char', 'NULL', 1, '', '', + 'columnvalue', 'varchar', 'NULL', 512, '', '', + 'columnflag', 'char', 'NULL', 1, '', '', ], 'primary_key' => 'columnnum', 'unique' => [ [ 'svcpart', 'columnname' ] ], 'index' => [ [ 'svcpart' ] ], }, + 'part_svc_class' => { + 'columns' => [ + 'classnum', 'serial', '', '', '', '', + 'classname', 'varchar', '', $char_d, '', '', + 'disabled', 'char', 'NULL', 1, '', '', + ], + 'primary_key' => 'classnum', + 'unique' => [], + 'index' => [ ['disabled'] ], + }, + #(this should be renamed to part_pop) 'svc_acct_pop' => { 'columns' => [ @@ -2393,11 +2650,11 @@ sub tables_hashref { 'part_export' => { 'columns' => [ - 'exportnum', 'serial', '', '', '', '', + 'exportnum', 'serial', '', '', '', '', 'exportname', 'varchar', 'NULL', $char_d, '', '', - 'machine', 'varchar', '', $char_d, '', '', - 'exporttype', 'varchar', '', $char_d, '', '', - 'nodomain', 'char', 'NULL', 1, '', '', + 'machine', 'varchar', 'NULL', $char_d, '', '', + 'exporttype', 'varchar', '', $char_d, '', '', + 'nodomain', 'char', 'NULL', 1, '', '', ], 'primary_key' => 'exportnum', 'unique' => [], @@ -2434,6 +2691,8 @@ sub tables_hashref { 'groupname', 'varchar', '', $char_d, '', '', 'description', 'varchar', 'NULL', $char_d, '', '', 'priority', 'int', '', '', '1', '', + 'speed_up', 'int', 'NULL', '', '', '', + 'speed_down', 'int', 'NULL', '', '', '', ], 'primary_key' => 'groupnum', 'unique' => [ ['groupname'] ], @@ -2442,16 +2701,16 @@ sub tables_hashref { 'radius_attr' => { 'columns' => [ - 'attrnum', 'serial', '', '', '', '', - 'groupnum', 'int', '', '', '', '', + 'attrnum', 'serial', '', '', '', '', + 'groupnum', 'int', '', '', '', '', 'attrname', 'varchar', '', $char_d, '', '', - 'value', 'varchar', '', $char_d, '', '', - 'attrtype', 'char', '', 1, '', '', - 'op', 'char', '', 2, '', '', + 'value', 'varchar', '', 255, '', '', + 'attrtype', 'char', '', 1, '', '', + 'op', 'char', '', 2, '', '', ], 'primary_key' => 'attrnum', - 'unique' => [ ['groupnum','attrname'] ], #? - 'index' => [], + 'unique' => [], + 'index' => [ ['groupnum'], ], }, 'msgcat' => { @@ -2486,10 +2745,42 @@ sub tables_hashref { #'custnum', 'int', '', '', '', '' 'billpkgnum', 'int', '', '', '', '', 'taxnum', 'int', '', '', '', '', - 'year', 'int', '', '', '', '', - 'month', 'int', '', '', '', '', + 'year', 'int', 'NULL', '', '', '', + 'month', 'int', 'NULL', '', '', '', 'creditbillpkgnum', 'int', 'NULL', '', '', '', 'amount', @money_type, '', '', + # exemption type flags + 'exempt_cust', 'char', 'NULL', 1, '', '', + 'exempt_setup', 'char', 'NULL', 1, '', '', + 'exempt_recur', 'char', 'NULL', 1, '', '', + 'exempt_cust_taxname', 'char', 'NULL', 1, '', '', + 'exempt_monthly', 'char', 'NULL', 1, '', '', + ], + 'primary_key' => 'exemptpkgnum', + 'unique' => [], + 'index' => [ [ 'taxnum', 'year', 'month' ], + [ 'billpkgnum' ], + [ 'taxnum' ], + [ 'creditbillpkgnum' ], + ], + }, + + 'cust_tax_exempt_pkg_void' => { + 'columns' => [ + 'exemptpkgnum', 'int', '', '', '', '', + #'custnum', 'int', '', '', '', '' + 'billpkgnum', 'int', '', '', '', '', + 'taxnum', 'int', '', '', '', '', + 'year', 'int', 'NULL', '', '', '', + 'month', 'int', 'NULL', '', '', '', + 'creditbillpkgnum', 'int', 'NULL', '', '', '', + 'amount', @money_type, '', '', + # exemption type flags + 'exempt_cust', 'char', 'NULL', 1, '', '', + 'exempt_setup', 'char', 'NULL', 1, '', '', + 'exempt_recur', 'char', 'NULL', 1, '', '', + 'exempt_cust_taxname', 'char', 'NULL', 1, '', '', + 'exempt_monthly', 'char', 'NULL', 1, '', '', ], 'primary_key' => 'exemptpkgnum', 'unique' => [], @@ -2558,7 +2849,7 @@ sub tables_hashref { 'plan_id', 'varchar', 'NULL', $char_d, '', '', ], 'primary_key' => 'svcnum', - 'unique' => [ [ 'mac_addr' ] ], + 'unique' => [ [ 'ip_addr' ], [ 'mac_addr' ] ], 'index' => [], }, @@ -2996,7 +3287,6 @@ sub tables_hashref { ### 'upstream_currency', 'char', 'NULL', 3, '', '', - 'upstream_price', 'decimal', 'NULL', '10,4', '', '', 'upstream_rateplanid', 'int', 'NULL', '', '', '', #? # how it was rated internally... @@ -3021,6 +3311,10 @@ sub tables_hashref { 'charged_party', 'varchar', 'NULL', $char_d, '', '', + 'upstream_price', 'decimal', 'NULL', '10,4', '', '', + 'upstream_src_regionname', 'varchar', 'NULL', $char_d, '', '', + 'upstream_dst_regionname', 'varchar', 'NULL', $char_d, '', '', + # how it was rated internally... 'rated_pretty_dst', 'varchar', 'NULL', $char_d, '', '', 'rated_regionname', 'varchar', 'NULL', $char_d, '', '', @@ -3156,11 +3450,12 @@ sub tables_hashref { 'inventory_item' => { 'columns' => [ - 'itemnum', 'serial', '', '', '', '', - 'classnum', 'int', '', '', '', '', - 'agentnum', 'int', 'NULL', '', '', '', - 'item', 'varchar', '', $char_d, '', '', - 'svcnum', 'int', 'NULL', '', '', '', + 'itemnum', 'serial', '', '', '', '', + 'classnum', 'int', '', '', '', '', + 'agentnum', 'int', 'NULL', '', '', '', + 'item', 'varchar', '', $char_d, '', '', + 'svcnum', 'int', 'NULL', '', '', '', + 'svc_field', 'varchar', 'NULL', $char_d, '', '', ], 'primary_key' => 'itemnum', 'unique' => [ [ 'classnum', 'item' ] ], @@ -3237,6 +3532,17 @@ sub tables_hashref { 'index' => [ [ 'groupnum' ] ], }, + 'access_groupsales' => { + 'columns' => [ + 'groupsalesnum', 'serial', '', '', '', '', + 'groupnum', 'int', '', '', '', '', + 'salesnum', 'int', '', '', '', '', + ], + 'primary_key' => 'groupsalesnum', + 'unique' => [ [ 'groupnum', 'salesnum' ] ], + 'index' => [ [ 'groupnum' ] ], + }, + 'access_right' => { 'columns' => [ 'rightnum', 'serial', '', '', '', '', @@ -3420,6 +3726,8 @@ sub tables_hashref { 'reason_type', 'int', '', '', '', '', 'reason', 'text', '', '', '', '', 'disabled', 'char', 'NULL', 1, '', '', + 'unsuspend_pkgpart', 'int', 'NULL', '', '', '', + 'unsuspend_hold','char', 'NULL', 1, '', '', ], 'primary_key' => 'reasonnum', 'unique' => [], @@ -3642,6 +3950,23 @@ sub tables_hashref { 'index' => [ [ 'upgrade' ] ], }, + 'ftp_target' => { + 'columns' => [ + 'targetnum', 'serial', '', '', '', '', + 'agentnum', 'int', 'NULL', '', '', '', + 'hostname', 'varchar', '', $char_d, '', '', + 'port', 'int', '', '', '', '', + 'username', 'varchar', '', $char_d, '', '', + 'password', 'varchar', '', $char_d, '', '', + 'path', 'varchar', '', $char_d, '', '', + 'secure', 'char', 'NULL', 1, '', '', + 'handling', 'varchar', 'NULL', $char_d, '', '', + ], + 'primary_key' => 'targetnum', + 'unique' => [ [ 'targetnum' ] ], + 'index' => [], + }, + %{ tables_hashref_torrus() }, # tables of ours for doing torrus virtual port combining diff --git a/FS/FS/Setup.pm b/FS/FS/Setup.pm index e2c5a5a2c..e27b66fc5 100644 --- a/FS/FS/Setup.pm +++ b/FS/FS/Setup.pm @@ -209,6 +209,14 @@ sub populate_initial_data { sub initial_data { my %opt = @_; + my $cust_location = FS::cust_location->new({ + 'address1' => '1234 System Lane', + 'city' => 'Systemtown', + 'state' => 'CA', + 'zip' => '54321', + 'country' => 'US', + }); + #tie my %hash, 'Tie::DxHash', tie my %hash, 'Tie::IxHash', @@ -351,14 +359,11 @@ sub initial_data { 'refnum' => 1, #XXX 'first' => 'System', 'last' => 'Accounts', - 'address1' => '1234 System Lane', - 'city' => 'Systemtown', - 'state' => 'CA', - 'zip' => '54321', - 'country' => 'US', 'payby' => 'COMP', 'payinfo' => 'system', #or something 'paydate' => '1/2037', + 'bill_location' => $cust_location, + 'ship_location' => $cust_location, }, ], diff --git a/FS/FS/TemplateItem_Mixin.pm b/FS/FS/TemplateItem_Mixin.pm new file mode 100644 index 000000000..6d7ea26bc --- /dev/null +++ b/FS/FS/TemplateItem_Mixin.pm @@ -0,0 +1,317 @@ +package FS::TemplateItem_Mixin; + +use strict; +use vars qw( $DEBUG $me ); # but NOT $conf +use Carp; +use FS::UID; +use FS::Record qw( qsearch qsearchs dbh ); +use FS::part_pkg; +use FS::cust_pkg; + +$DEBUG = 0; +$me = '[FS::TemplateItem_Mixin]'; + +=item cust_pkg + +Returns the package (see L) for this invoice line item. + +=cut + +sub cust_pkg { + my $self = shift; + carp "$me $self -> cust_pkg" if $DEBUG; + qsearchs( 'cust_pkg', { 'pkgnum' => $self->pkgnum } ); +} + +=item part_pkg + +Returns the package definition for this invoice line item. + +=cut + +sub part_pkg { + my $self = shift; + if ( $self->pkgpart_override ) { + qsearchs('part_pkg', { 'pkgpart' => $self->pkgpart_override } ); + } else { + my $part_pkg; + my $cust_pkg = $self->cust_pkg; + $part_pkg = $cust_pkg->part_pkg if $cust_pkg; + $part_pkg; + } + +} + +=item desc + +Returns a description for this line item. For typical line items, this is the +I field of the corresponding B object (see L). +For one-shot line items and named taxes, it is the I field of this +line item, and for generic taxes, simply returns "Tax". + +=cut + +sub desc { + my $self = shift; + + if ( $self->pkgnum > 0 ) { + $self->itemdesc || $self->part_pkg->pkg; + } else { + my $desc = $self->itemdesc || 'Tax'; + $desc .= ' '. $self->itemcomment if $self->itemcomment =~ /\S/; + $desc; + } +} + +=item details [ OPTION => VALUE ... ] + +Returns an array of detail information for the invoice line item. + +Currently available options are: I, I and +I. + +If I is set to html or latex then the array members are improved +for tabular appearance in those environments if possible. + +If I is set then the array members are processed by this +function before being returned. + +I overrides the normal HTML or LaTeX function for returning +formatted CDRs. It can be set to a subroutine which returns an empty list +to skip usage detail: + + 'format_function' => sub { () }, + +=cut + +sub details { + my ( $self, %opt ) = @_; + my $escape_function = $opt{escape_function} || sub { shift }; + + my $csv = new Text::CSV_XS; + + if ( $opt{format_function} ) { + + #this still expects to be passed a cust_bill_pkg_detail object as the + #second argument, which is expensive + carp "deprecated format_function passed to cust_bill_pkg->details"; + my $format_sub = $opt{format_function} if $opt{format_function}; + + map { ( $_->format eq 'C' + ? &{$format_sub}( $_->detail, $_ ) + : &{$escape_function}( $_->detail ) + ) + } + qsearch ({ 'table' => $self->detail_table, + 'hashref' => { 'billpkgnum' => $self->billpkgnum }, + 'order_by' => 'ORDER BY detailnum', + }); + + } elsif ( $opt{'no_usage'} ) { + + my $sql = "SELECT detail FROM ". $self->detail_table. + " WHERE billpkgnum = ". $self->billpkgnum. + " AND ( format IS NULL OR format != 'C' ) ". + " ORDER BY detailnum"; + my $sth = dbh->prepare($sql) or die dbh->errstr; + $sth->execute or die $sth->errstr; + + map &{$escape_function}( $_->[0] ), @{ $sth->fetchall_arrayref }; + + } else { + + my $format_sub; + my $format = $opt{format} || ''; + if ( $format eq 'html' ) { + + $format_sub = sub { my $detail = shift; + $csv->parse($detail) or return "can't parse $detail"; + join('', map { &$escape_function($_) } + $csv->fields + ); + }; + + } elsif ( $format eq 'latex' ) { + + $format_sub = sub { + my $detail = shift; + $csv->parse($detail) or return "can't parse $detail"; + #join(' & ', map { '\small{'. &$escape_function($_). '}' } + # $csv->fields ); + my $result = ''; + my $column = 1; + foreach ($csv->fields) { + $result .= ' & ' if $column > 1; + if ($column > 6) { # KLUDGE ALERT! + $result .= '\multicolumn{1}{l}{\scriptsize{'. + &$escape_function($_). '}}'; + }else{ + $result .= '\scriptsize{'. &$escape_function($_). '}'; + } + $column++; + } + $result; + }; + + } else { + + $format_sub = sub { my $detail = shift; + $csv->parse($detail) or return "can't parse $detail"; + join(' - ', map { &$escape_function($_) } + $csv->fields + ); + }; + + } + + my $sql = "SELECT format, detail FROM ". $self->detail_table. + " WHERE billpkgnum = ". $self->billpkgnum. + " ORDER BY detailnum"; + my $sth = dbh->prepare($sql) or die dbh->errstr; + $sth->execute or die $sth->errstr; + + #avoid the fetchall_arrayref and loop for less memory usage? + + map { (defined($_->[0]) && $_->[0] eq 'C') + ? &{$format_sub}( $_->[1] ) + : &{$escape_function}( $_->[1] ); + } + @{ $sth->fetchall_arrayref }; + + } + +} + +=item details_header [ OPTION => VALUE ... ] + +Returns a list representing an invoice line item detail header, if any. +This relies on the behavior of voip_cdr in that it expects the header +to be the first CSV formatted detail (as is expected by invoice generation +routines). Returns the empty list otherwise. + +=cut + +sub details_header { + my $self = shift; + + my $csv = new Text::CSV_XS; + + my @detail = + qsearch ({ 'table' => $self->detail_table, + 'hashref' => { 'billpkgnum' => $self->billpkgnum, + 'format' => 'C', + }, + 'order_by' => 'ORDER BY detailnum LIMIT 1', + }); + return() unless scalar(@detail); + $csv->parse($detail[0]->detail) or return (); + $csv->fields; +} + +=item quantity + +=cut + +sub quantity { + my( $self, $value ) = @_; + if ( defined($value) ) { + $self->setfield('quantity', $value); + } + $self->getfield('quantity') || 1; +} + +=item unitsetup + +=cut + +sub unitsetup { + my( $self, $value ) = @_; + if ( defined($value) ) { + $self->setfield('unitsetup', $value); + } + $self->getfield('unitsetup') eq '' + ? $self->getfield('setup') + : $self->getfield('unitsetup'); +} + +=item unitrecur + +=cut + +sub unitrecur { + my( $self, $value ) = @_; + if ( defined($value) ) { + $self->setfield('unitrecur', $value); + } + $self->getfield('unitrecur') eq '' + ? $self->getfield('recur') + : $self->getfield('unitrecur'); +} + +=item cust_bill_pkg_display [ type => TYPE ] + +Returns an array of display information for the invoice line item optionally +limited to 'TYPE'. + +=cut + +sub cust_bill_pkg_display { + my ( $self, %opt ) = @_; + + my $class = 'FS::'. $self->display_table; + + my $default = $class->new( { billpkgnum =>$self->billpkgnum } ); + + my $type = $opt{type} if exists $opt{type}; + my @result; + + if ( $self->get('display') ) { + @result = grep { defined($type) ? ($type eq $_->type) : 1 } + @{ $self->get('display') }; + } else { + my $hashref = { 'billpkgnum' => $self->billpkgnum }; + $hashref->{type} = $type if defined($type); + + @result = qsearch ({ 'table' => $self->display_table, + 'hashref' => { 'billpkgnum' => $self->billpkgnum }, + 'order_by' => 'ORDER BY billpkgdisplaynum', + }); + } + + push @result, $default unless ( scalar(@result) || $type ); + + @result; + +} + +=item cust_bill_pkg_detail [ CLASSNUM ] + +Returns the list of associated cust_bill_pkg_detail objects +The optional CLASSNUM argument will limit the details to the specified usage +class. + +=cut + +sub cust_bill_pkg_detail { + my $self = shift; + my $classnum = shift || ''; + + my %hash = ( 'billpkgnum' => $self->billpkgnum ); + $hash{classnum} = $classnum if $classnum; + + qsearch( $self->detail_table, \%hash ), + +} + +=item cust_bill_pkg_discount + +Returns the list of associated cust_bill_pkg_discount objects. + +=cut + +sub cust_bill_pkg_discount { + my $self = shift; + qsearch( $self->discount_table, { 'billpkgnum' => $self->billpkgnum } ); +} + +1; diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm new file mode 100644 index 000000000..d35fd55f2 --- /dev/null +++ b/FS/FS/Template_Mixin.pm @@ -0,0 +1,2560 @@ +package FS::Template_Mixin; + +use strict; +use vars qw( $DEBUG $me + $money_char $date_format $rdate_format $date_format_long ); + # but NOT $conf +use vars qw( $invoice_lines @buf ); #yuck +use List::Util qw(sum); +use Date::Format; +use Date::Language; +use Text::Template 1.20; +use File::Temp 0.14; +use HTML::Entities; +use Locale::Country; +use Cwd; +use FS::UID; +use FS::Record qw( qsearch qsearchs ); +use FS::Misc qw( generate_ps generate_pdf ); +use FS::pkg_category; +use FS::pkg_class; +use FS::L10N; + +$DEBUG = 0; +$me = '[FS::Template_Mixin]'; +FS::UID->install_callback( sub { + my $conf = new FS::Conf; #global + $money_char = $conf->config('money_char') || '$'; + $date_format = $conf->config('date_format') || '%x'; #/YY + $rdate_format = $conf->config('date_format') || '%m/%d/%Y'; #/YYYY + $date_format_long = $conf->config('date_format_long') || '%b %o, %Y'; +} ); + +=item print_text HASHREF | [ TIME [ , TEMPLATE [ , OPTION => VALUE ... ] ] ] + +Returns an text invoice, as a list of lines. + +Options can be passed as a hashref (recommended) or as a list of time, template +and then any key/value pairs for any other options. + +I