use strict;
use vars qw($DEBUG $AUTOLOAD);
-use XMLRPC::Lite; # for XMLRPC::Data
+use Encode;
+use FS::XMLRPC_Lite; #XMLRPC::Lite, for XMLRPC::Data
use FS::ClientAPI;
$DEBUG = 0;
'menu_bottom_image' => 'base64',
);
our %typefix = (
- 'invoice_pdf' => { 'invoice_pdf' => 'base64', },
- 'legacy_invoice_pdf' => { 'invoice_pdf' => 'base64', },
- 'skin_info' => \%typefix_skin_info,
- 'login_info' => \%typefix_skin_info,
- 'invoice_logo' => { 'logo' => 'base64', },
- 'login_banner_image' => { 'image' => 'base64', },
+ 'invoice_pdf' => { 'invoice_pdf' => 'base64', },
+ 'legacy_invoice_pdf' => { 'invoice_pdf' => 'base64', },
+ 'skin_info' => \%typefix_skin_info,
+ 'payment_only_skin_info' => \%typefix_skin_info,
+ 'login_info' => \%typefix_skin_info,
+ 'logout' => \%typefix_skin_info,
+ 'access_info' => \%typefix_skin_info,
+ 'reset_passwd' => \%typefix_skin_info,
+ 'check_reset_passwd' => \%typefix_skin_info,
+ 'process_reset_passwd' => \%typefix_skin_info,
+ 'invoice_logo' => { 'logo' => 'base64', },
+ 'login_banner_image' => { 'image' => 'base64', },
+ 'quotation_print' => { 'document' => 'base64' },
);
sub AUTOLOAD {
shift; #discard package name;
+
#$call = "FS::SelfService::$call";
#no strict 'refs';
#&{$call}(@_);
#FS::ClientAPI->dispatch($autoload->{$call}, @_);
- my $return = FS::ClientAPI->dispatch($autoload->{$call}, { @_ } );
+ my %hash = @_;
+ #XXX doesn't deep-fix multi-level data structs, but at least doesn't mangle
+ # them anymore
+ $hash{$_} = decode(utf8=>$hash{$_})
+ foreach grep !ref($hash{$_}), keys %hash;
+
+ my $return = FS::ClientAPI->dispatch($autoload->{$call}, \%hash );
if ( exists($typefix{$call}) ) {
my $typefix = $typefix{$call};
$return;
- }else{
+ } else {
die "No such procedure: $call";
}
}
'login' => 'MyAccount/login',
'logout' => 'MyAccount/logout',
'switch_acct' => 'MyAccount/switch_acct',
+ 'switch_cust' => 'MyAccount/switch_cust',
'customer_info' => 'MyAccount/customer_info',
'customer_info_short' => 'MyAccount/customer_info_short',
+ 'customer_recurring' => 'MyAccount/customer_recurring',
+
+ 'contact_passwd' => 'MyAccount/contact/contact_passwd',
+ 'list_contacts' => 'MyAccount/contact/list_contacts',
+ 'edit_contact' => 'MyAccount/contact/edit_contact',
+ 'delete_contact' => 'MyAccount/contact/delete_contact',
+ 'new_contact' => 'MyAccount/contact/new_contact',
+
'billing_history' => 'MyAccount/billing_history',
'edit_info' => 'MyAccount/edit_info', #add to ss cgi!
'invoice' => 'MyAccount/invoice',
'legacy_invoice_pdf' => 'MyAccount/legacy_invoice_pdf',
'invoice_logo' => 'MyAccount/invoice_logo',
'list_invoices' => 'MyAccount/list_invoices', #?
+ 'list_payments' => 'MyAccount/list_payments',
+ 'payment_receipt' => 'MyAccount/payment_receipt',
+ 'list_payby' => 'MyAccount/list_payby',
+ 'insert_payby' => 'MyAccount/insert_payby',
+ 'update_payby' => 'MyAccount/update_payby',
+ 'delete_payby' => 'MyAccount/delete_payby',
'cancel' => 'MyAccount/cancel', #add to ss cgi!
'payment_info' => 'MyAccount/payment_info',
'payment_info_renew_info' => 'MyAccount/payment_info_renew_info',
'process_payment_change_pkg' => 'MyAccount/process_payment_change_pkg',
'process_payment_order_renew' => 'MyAccount/process_payment_order_renew',
'process_prepay' => 'MyAccount/process_prepay',
+ 'start_thirdparty' => 'MyAccount/start_thirdparty',
+ 'finish_thirdparty' => 'MyAccount/finish_thirdparty',
'realtime_collect' => 'MyAccount/realtime_collect',
'list_pkgs' => 'MyAccount/list_pkgs', #add to ss (added?)
+ 'pkg_info' => 'MyAccount/pkg_info',
'list_svcs' => 'MyAccount/list_svcs', #add to ss (added?)
'list_svc_usage' => 'MyAccount/list_svc_usage',
'svc_status_html' => 'MyAccount/svc_status_html',
'part_svc_info' => 'MyAccount/part_svc_info',
'provision_acct' => 'MyAccount/provision_acct',
'provision_phone' => 'MyAccount/provision_phone',
+ 'provision_pbx' => 'MyAccount/provision_pbx',
'provision_external' => 'MyAccount/provision_external',
'unprovision_svc' => 'MyAccount/unprovision_svc',
'myaccount_passwd' => 'MyAccount/myaccount_passwd',
'reset_passwd' => 'MyAccount/reset_passwd',
'check_reset_passwd' => 'MyAccount/check_reset_passwd',
'process_reset_passwd' => 'MyAccount/process_reset_passwd',
+ 'validate_passwd' => 'MyAccount/validate_passwd',
+ 'list_tickets' => 'MyAccount/list_tickets',
'create_ticket' => 'MyAccount/create_ticket',
'get_ticket' => 'MyAccount/get_ticket',
'adjust_ticket_priority' => 'MyAccount/adjust_ticket_priority',
'access_info' => 'MyAccount/access_info',
'domain_select_hash' => 'Signup/domain_select_hash', # expose?
'new_customer' => 'Signup/new_customer',
+ 'new_customer_minimal' => 'Signup/new_customer_minimal',
'capture_payment' => 'Signup/capture_payment',
'clear_signup_cache' => 'Signup/clear_cache',
+ 'new_prospect' => 'Signup/new_prospect',
'new_agent' => 'Agent/new_agent',
'agent_login' => 'Agent/agent_login',
'agent_logout' => 'Agent/agent_logout',
'suspend_username' => 'Agent/suspend_username',
'unsuspend_username' => 'Agent/unsuspend_username',
'mason_comp' => 'MasonComponent/mason_comp',
+ 'payment_only_mason_comp' => 'MasonComponent/payment_only_mason_comp',
'call_time' => 'PrepaidPhone/call_time',
'call_time_nanpa' => 'PrepaidPhone/call_time_nanpa',
'phonenum_balance' => 'PrepaidPhone/phonenum_balance',
+
+ 'list_quotations' => 'MyAccount/quotation/list_quotations',
+ 'quotation_new' => 'MyAccount/quotation/quotation_new',
+ 'quotation_delete' => 'MyAccount/quotation/quotation_delete',
+ 'quotation_info' => 'MyAccount/quotation/quotation_info',
+ 'quotation_print' => 'MyAccount/quotation/quotation_print',
+ 'quotation_add_pkg' => 'MyAccount/quotation/quotation_add_pkg',
+ 'quotation_remove_pkg' => 'MyAccount/quotation/quotation_remove_pkg',
+ 'quotation_order' => 'MyAccount/quotation/quotation_order',
+ 'ip_login' => 'PaymentOnly/ip_login',
+ 'ip_logout' => 'PaymentOnly/ip_logout',
+ 'get_mac_address' => 'PaymentOnly/get_mac_address',
+ 'payment_only_skin_info' => 'PaymentOnly/payment_only_skin_info',
+ 'payment_only_payment_info' => 'PaymentOnly/payment_only_payment_info',
+ 'payment_only_process_payment' => 'PaymentOnly/payment_only_process_payment',
+
+ 'freesideinc_service' => 'Freeside/freesideinc_service',
};
}
-
-#XXX submit patch to SOAP::Lite
-
-use XMLRPC::Transport::HTTP;
-
-package XMLRPC::Transport::HTTP::Server;
-
-@XMLRPC::Transport::HTTP::Server::ISA = qw(SOAP::Transport::HTTP::Server);
-
-sub initialize; *initialize = \&XMLRPC::Server::initialize;
-sub make_fault; *make_fault = \&XMLRPC::Transport::HTTP::CGI::make_fault;
-sub make_response; *make_response = \&XMLRPC::Transport::HTTP::CGI::make_response;
-
1;